summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md2
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md2
-rw-r--r--.github/ISSUE_TEMPLATE/other_issues.md2
-rw-r--r--.github/stale.yml10
-rwxr-xr-xbin/qmk5
-rw-r--r--bootloader.mk7
-rw-r--r--build_json.mk2
-rw-r--r--common_features.mk101
-rw-r--r--docs/_langs.md1
-rw-r--r--docs/_summary.md9
-rw-r--r--docs/adc_driver.md50
-rw-r--r--docs/arm_debugging.md22
-rw-r--r--docs/breaking_changes.md12
-rw-r--r--docs/coding_conventions_c.md2
-rw-r--r--docs/coding_conventions_python.md18
-rw-r--r--docs/config_options.md26
-rw-r--r--docs/contributing.md14
-rw-r--r--docs/custom_matrix.md108
-rw-r--r--docs/custom_quantum_functions.md134
-rw-r--r--docs/de/_summary.md2
-rw-r--r--docs/es/README.md4
-rw-r--r--docs/es/_summary.md208
-rw-r--r--docs/faq_build.md50
-rw-r--r--docs/faq_debug.md68
-rw-r--r--docs/faq_keymap.md63
-rw-r--r--docs/feature_advanced_keycodes.md40
-rw-r--r--docs/feature_backlight.md52
-rw-r--r--docs/feature_bootmagic.md62
-rw-r--r--docs/feature_haptic_feedback.md2
-rw-r--r--docs/feature_leader_key.md8
-rw-r--r--docs/feature_macros.md19
-rw-r--r--docs/feature_rgb_matrix.md31
-rw-r--r--docs/feature_rgblight.md12
-rw-r--r--docs/feature_userspace.md10
-rw-r--r--docs/flashing_bootloadhid.md2
-rw-r--r--docs/fr-fr/README.md4
-rw-r--r--docs/fr-fr/_summary.md162
-rw-r--r--docs/fr-fr/faq_build.md28
-rw-r--r--docs/fr-fr/faq_debug.md71
-rw-r--r--docs/fr-fr/faq_keymap.md67
-rw-r--r--docs/fr-fr/getting_started_github.md22
-rw-r--r--docs/fr-fr/getting_started_introduction.md2
-rw-r--r--docs/getting_started_build_tools.md13
-rw-r--r--docs/getting_started_github.md22
-rw-r--r--docs/getting_started_introduction.md2
-rw-r--r--docs/getting_started_make_guide.md4
-rw-r--r--docs/he-il/README.md4
-rw-r--r--docs/he-il/_summary.md211
-rw-r--r--docs/he-il/getting_started_github.md24
-rw-r--r--docs/he-il/getting_started_introduction.md4
-rw-r--r--docs/he-il/quantum_keycodes.md10
-rw-r--r--docs/index.html30
-rw-r--r--docs/ja/README.md37
-rw-r--r--docs/ja/_summary.md124
-rw-r--r--docs/ja/arm_debugging.md92
-rw-r--r--docs/ja/cli.md227
-rw-r--r--docs/ja/cli_configuration.md126
-rw-r--r--docs/ja/config_options.md393
-rw-r--r--docs/ja/contributing.md173
-rw-r--r--docs/ja/driver_installation_zadig.md53
-rw-r--r--docs/ja/faq.md11
-rw-r--r--docs/ja/faq_build.md160
-rw-r--r--docs/ja/faq_debug.md161
-rw-r--r--docs/ja/faq_general.md20
-rw-r--r--docs/ja/faq_keymap.md149
-rw-r--r--docs/ja/getting_started_getting_help.md20
-rw-r--r--docs/ja/getting_started_github.md70
-rw-r--r--docs/ja/getting_started_introduction.md65
-rw-r--r--docs/ja/newbs.md20
-rw-r--r--docs/ja/newbs_best_practices.md263
-rw-r--r--docs/ja/newbs_building_firmware.md14
-rw-r--r--docs/ja/newbs_building_firmware_configurator.md4
-rw-r--r--docs/ja/newbs_flashing.md12
-rw-r--r--docs/ja/newbs_getting_started.md16
-rw-r--r--docs/ja/newbs_git_best_practices.md24
-rw-r--r--docs/ja/newbs_git_resolving_merge_conflicts.md94
-rw-r--r--docs/ja/newbs_git_resynchronize_a_branch.md88
-rw-r--r--docs/ja/newbs_git_using_your_master_branch.md101
-rw-r--r--docs/ja/newbs_learn_more_resources.md6
-rw-r--r--docs/ja/newbs_testing_debugging.md8
-rw-r--r--docs/keycodes.md122
-rw-r--r--docs/newbs.md2
-rw-r--r--docs/newbs_best_practices.md163
-rw-r--r--docs/newbs_building_firmware.md2
-rw-r--r--docs/newbs_git_best_practices.md16
-rw-r--r--docs/newbs_git_resolving_merge_conflicts.md79
-rw-r--r--docs/newbs_git_resynchronize_a_branch.md71
-rw-r--r--docs/newbs_git_using_your_master_branch.md74
-rw-r--r--docs/proton_c_conversion.md2
-rw-r--r--docs/pt-br/README.md31
-rw-r--r--docs/pt-br/_summary.md121
-rw-r--r--docs/quantum_keycodes.md10
-rw-r--r--docs/ru-ru/_summary.md123
-rw-r--r--docs/ru-ru/becoming_a_qmk_collaborator.md9
-rw-r--r--docs/ru-ru/getting_started_github.md22
-rw-r--r--docs/ru-ru/getting_started_introduction.md58
-rw-r--r--docs/translating.md50
-rw-r--r--docs/ws2812_driver.md29
-rw-r--r--docs/zh-cn/README.md4
-rw-r--r--docs/zh-cn/custom_quantum_functions.md324
-rw-r--r--docs/zh-cn/faq_build.md28
-rw-r--r--docs/zh-cn/faq_debug.md68
-rw-r--r--docs/zh-cn/faq_keymap.md63
-rw-r--r--docs/zh-cn/getting_started_github.md22
-rw-r--r--docs/zh-cn/getting_started_introduction.md2
-rw-r--r--doxygen-todo1
-rw-r--r--drivers/arm/i2c_master.c5
-rw-r--r--drivers/arm/i2c_master.h23
-rw-r--r--drivers/arm/ws2812.c2
-rw-r--r--drivers/arm/ws2812_spi.c91
-rw-r--r--drivers/avr/analog.c110
-rw-r--r--drivers/avr/analog.h37
-rw-r--r--drivers/gpio/pca9555.c17
-rw-r--r--drivers/gpio/pca9555.h2
-rw-r--r--drivers/haptic/DRV2605L.c11
-rw-r--r--drivers/issi/is31fl3218.h1
-rw-r--r--drivers/issi/is31fl3731-simple.c15
-rw-r--r--drivers/issi/is31fl3731-simple.h8
-rw-r--r--drivers/issi/is31fl3731.c18
-rw-r--r--drivers/issi/is31fl3731.h5
-rw-r--r--drivers/issi/is31fl3733.c65
-rw-r--r--drivers/issi/is31fl3733.h9
-rw-r--r--drivers/issi/is31fl3736.c21
-rw-r--r--drivers/issi/is31fl3737.c23
-rw-r--r--drivers/issi/is31fl3737.h5
-rw-r--r--drivers/oled/oled_driver.h2
-rw-r--r--keyboards/30wer/config.h3
-rw-r--r--keyboards/40percentclub/nori/keymaps/default/keymap.c2
-rw-r--r--keyboards/7skb/7skb.c1
-rw-r--r--keyboards/7skb/7skb.h7
-rw-r--r--keyboards/7skb/config.h (renamed from keyboards/handwired/co60/rev7/led_custom.h)7
-rw-r--r--keyboards/7skb/info.json76
-rw-r--r--keyboards/7skb/keymaps/default/config.h (renamed from keyboards/handwired/co60/rev6/led_custom.h)10
-rw-r--r--keyboards/7skb/keymaps/default/keymap.c115
-rw-r--r--keyboards/7skb/keymaps/salicylic/config.h23
-rw-r--r--keyboards/7skb/keymaps/salicylic/keymap.c181
-rw-r--r--keyboards/7skb/keymaps/salicylic/rules.mk1
-rw-r--r--keyboards/7skb/readme.md17
-rw-r--r--keyboards/7skb/rev1/config.h82
-rw-r--r--keyboards/7skb/rev1/rev1.c1
-rw-r--r--keyboards/7skb/rev1/rev1.h42
-rw-r--r--keyboards/7skb/rev1/rules.mk (renamed from keyboards/pico/rev1/rules.mk)0
-rw-r--r--keyboards/7skb/rules.mk (renamed from keyboards/handwired/minorca/keymaps/default/rules.mk)30
-rw-r--r--keyboards/aeboards/aegis/config.h20
-rw-r--r--keyboards/aeboards/aegis/keymaps/via/rules.mk69
-rw-r--r--keyboards/aeboards/aegis/rules.mk4
-rw-r--r--keyboards/aeboards/ext65/config.h21
-rw-r--r--keyboards/aeboards/ext65/keymaps/default/keymap.c12
-rw-r--r--keyboards/aeboards/ext65/keymaps/via/keymap.c8
-rw-r--r--keyboards/aeboards/ext65/keymaps/via/rules.mk69
-rw-r--r--keyboards/aeboards/ext65/rules.mk5
-rw-r--r--keyboards/ai03/lunar/config.h22
-rw-r--r--keyboards/ai03/lunar/keymaps/via/rules.mk86
-rw-r--r--keyboards/ai03/orbit/keymaps/default/keymap.c2
-rw-r--r--keyboards/ai03/orbit/split_util.c2
-rw-r--r--keyboards/ai03/orbit/transport.c2
-rw-r--r--keyboards/allison/allison.c17
-rw-r--r--keyboards/allison/allison.h44
-rw-r--r--keyboards/allison/config.h252
-rw-r--r--keyboards/allison/info.json12
-rw-r--r--keyboards/allison/keymaps/default/keymap.c50
-rw-r--r--keyboards/allison/keymaps/default/readme.md7
-rw-r--r--keyboards/allison/keymaps/via/keymap.c50
-rw-r--r--keyboards/allison/keymaps/via/readme.md1
-rw-r--r--keyboards/allison/keymaps/via/rules.mk1
-rw-r--r--keyboards/allison/readme.md15
-rw-r--r--keyboards/allison/rules.mk32
-rw-r--r--keyboards/allison_numpad/allison_numpad.c17
-rw-r--r--keyboards/allison_numpad/allison_numpad.h61
-rw-r--r--keyboards/allison_numpad/config.h252
-rw-r--r--keyboards/allison_numpad/info.json15
-rw-r--r--keyboards/allison_numpad/keymaps/default/keymap.c50
-rw-r--r--keyboards/allison_numpad/keymaps/default/readme.md5
-rw-r--r--keyboards/allison_numpad/keymaps/via/keymap.c50
-rw-r--r--keyboards/allison_numpad/keymaps/via/readme.md1
-rw-r--r--keyboards/allison_numpad/keymaps/via/rules.mk1
-rw-r--r--keyboards/allison_numpad/readme.md15
-rw-r--r--keyboards/allison_numpad/rules.mk34
-rw-r--r--keyboards/angel64/alpha/alpha.c (renamed from keyboards/angel64/angel64.c)2
-rw-r--r--keyboards/angel64/alpha/alpha.h (renamed from keyboards/angel64/angel64.h)0
-rw-r--r--keyboards/angel64/alpha/config.h (renamed from keyboards/angel64/config.h)2
-rw-r--r--keyboards/angel64/alpha/info.json (renamed from keyboards/angel64/info.json)2
-rw-r--r--keyboards/angel64/alpha/keymaps/default/config.h (renamed from keyboards/angel64/keymaps/default/config.h)0
-rw-r--r--keyboards/angel64/alpha/keymaps/default/keymap.c60
-rw-r--r--keyboards/angel64/alpha/keymaps/default/readme.md (renamed from keyboards/angel64/keymaps/default/readme.md)0
-rw-r--r--keyboards/angel64/alpha/matrix.c (renamed from keyboards/angel64/matrix.c)0
-rw-r--r--keyboards/angel64/alpha/readme.md15
-rw-r--r--keyboards/angel64/alpha/rules.mk (renamed from keyboards/preonic/keymaps/juno/rules.mk)0
-rw-r--r--keyboards/angel64/keymaps/default/keymap.c58
-rw-r--r--keyboards/angel64/readme.md8
-rw-r--r--keyboards/angel64/rev1/config.h242
-rw-r--r--keyboards/angel64/rev1/info.json12
-rw-r--r--keyboards/angel64/rev1/keymaps/default/config.h (renamed from keyboards/handwired/aranck/keymaps/default/config.h)5
-rw-r--r--keyboards/angel64/rev1/keymaps/default/keymap.c34
-rw-r--r--keyboards/angel64/rev1/keymaps/default/readme.md1
-rw-r--r--keyboards/angel64/rev1/keymaps/kakunpc/config.h19
-rw-r--r--keyboards/angel64/rev1/keymaps/kakunpc/keymap.c195
-rw-r--r--keyboards/angel64/rev1/keymaps/kakunpc/readme.md1
-rw-r--r--keyboards/angel64/rev1/matrix.c287
-rw-r--r--keyboards/angel64/rev1/readme.md15
-rw-r--r--keyboards/angel64/rev1/rev1.c51
-rw-r--r--keyboards/angel64/rev1/rev1.h48
-rw-r--r--keyboards/angel64/rev1/rules.mk (renamed from keyboards/pico/rev1/rev1.c)0
-rw-r--r--keyboards/angel64/rules.mk3
-rw-r--r--keyboards/ares/readme.md41
-rw-r--r--keyboards/at_at/660m/rules.mk38
-rw-r--r--keyboards/atreus62/keymaps/d4mation/keymap.c196
-rw-r--r--keyboards/atreus62/keymaps/d4mation/readme.md40
-rw-r--r--keyboards/atreus62/keymaps/d4mation/rules.mk2
-rw-r--r--keyboards/atreus62/keymaps/hvp/config.h5
-rw-r--r--keyboards/atreus62/keymaps/hvp/keymap.c67
-rw-r--r--keyboards/atreus62/keymaps/hvp/readme.md10
-rw-r--r--keyboards/atreus62/keymaps/hvp/rules.mk1
-rw-r--r--keyboards/bfake/bfake.c3
-rw-r--r--keyboards/bfake/config.h2
-rw-r--r--keyboards/bfake/matrix.c106
-rw-r--r--keyboards/bfake/readme.md43
-rw-r--r--keyboards/bfake/rules.mk4
-rw-r--r--keyboards/bm60rgb/bm60rgb.c73
-rw-r--r--keyboards/bm60rgb/bm60rgb.h36
-rw-r--r--keyboards/bm60rgb/config.h59
-rw-r--r--keyboards/bm60rgb/info.json79
-rw-r--r--keyboards/bm60rgb/keymaps/default/keymap.c34
-rw-r--r--keyboards/bm60rgb/keymaps/default/readme.md1
-rw-r--r--keyboards/bm60rgb/readme.md13
-rw-r--r--keyboards/bm60rgb/rules.mk38
-rw-r--r--keyboards/boston_meetup/2019/keymaps/default/keymap.c3
-rw-r--r--keyboards/bpiphany/pegasushoof/2015/2015.h16
-rw-r--r--keyboards/bpiphany/pegasushoof/info.json92
-rw-r--r--keyboards/c39/keymaps/drashna/config.h2
-rw-r--r--keyboards/c39/keymaps/drashna/rules.mk2
-rw-r--r--keyboards/candybar/candybar.h28
-rw-r--r--keyboards/candybar/info.json222
-rw-r--r--keyboards/candybar/keymaps/lefty/keymap.c38
-rw-r--r--keyboards/candybar/rules.mk36
-rw-r--r--keyboards/cannonkeys/an_c/config.h23
-rw-r--r--keyboards/cannonkeys/an_c/keymaps/via/rules.mk6
-rw-r--r--keyboards/cannonkeys/an_c/rules.mk39
-rw-r--r--keyboards/cannonkeys/chimera65/config.h20
-rw-r--r--keyboards/cannonkeys/chimera65/keymaps/via/rules.mk6
-rw-r--r--keyboards/cannonkeys/chimera65/rules.mk39
-rw-r--r--keyboards/cannonkeys/instant60/config.h23
-rw-r--r--keyboards/cannonkeys/instant60/keymaps/via/rules.mk6
-rw-r--r--keyboards/cannonkeys/instant60/keymaps/via_standard/rules.mk6
-rw-r--r--keyboards/cannonkeys/instant60/rules.mk43
-rw-r--r--keyboards/cannonkeys/iron165/config.h22
-rw-r--r--keyboards/cannonkeys/iron165/rules.mk37
-rw-r--r--keyboards/cannonkeys/ortho48/rules.mk44
-rw-r--r--keyboards/cannonkeys/ortho60/rules.mk44
-rw-r--r--keyboards/cannonkeys/ortho75/rules.mk45
-rw-r--r--keyboards/cannonkeys/practice60/rules.mk44
-rw-r--r--keyboards/cannonkeys/practice65/rules.mk44
-rw-r--r--keyboards/cannonkeys/satisfaction75/config.h43
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h3
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c37
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md3
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk3
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c2
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c2
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c16
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/via/rules.mk6
-rw-r--r--keyboards/cannonkeys/satisfaction75/prototype/prototype.h17
-rw-r--r--keyboards/cannonkeys/satisfaction75/rules.mk37
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction75.c288
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction75.h10
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c6
-rw-r--r--keyboards/cannonkeys/savage65/config.h22
-rw-r--r--keyboards/cannonkeys/savage65/rules.mk37
-rw-r--r--keyboards/cannonkeys/stm32f072/keyboard.c267
-rw-r--r--keyboards/cannonkeys/stm32f072/keyboard.h4
-rw-r--r--keyboards/cannonkeys/tmov2/config.h22
-rw-r--r--keyboards/cannonkeys/tmov2/rules.mk45
-rw-r--r--keyboards/cheshire/curiosity/chconf.h524
-rw-r--r--keyboards/cheshire/curiosity/config.h50
-rw-r--r--keyboards/cheshire/curiosity/curiosity.c17
-rw-r--r--keyboards/cheshire/curiosity/curiosity.h42
-rw-r--r--keyboards/cheshire/curiosity/halconf.h353
-rw-r--r--keyboards/cheshire/curiosity/info.json82
-rw-r--r--keyboards/cheshire/curiosity/keymaps/crd/keymap.c51
-rw-r--r--keyboards/cheshire/curiosity/keymaps/default/keymap.c53
-rw-r--r--keyboards/cheshire/curiosity/keymaps/default/readme.md7
-rw-r--r--keyboards/cheshire/curiosity/keymaps/madhatter/keymap.c79
-rw-r--r--keyboards/cheshire/curiosity/keymaps/madhatter/readme.md7
-rw-r--r--keyboards/cheshire/curiosity/keymaps/madhatter/rules.mk1
-rw-r--r--keyboards/cheshire/curiosity/mcuconf.h171
-rw-r--r--keyboards/cheshire/curiosity/readme.md20
-rw-r--r--keyboards/cheshire/curiosity/rules.mk17
-rw-r--r--keyboards/ckeys/readme.md1
-rw-r--r--keyboards/ckeys/washington/config.h253
-rw-r--r--keyboards/ckeys/washington/info.json12
-rw-r--r--keyboards/ckeys/washington/keymaps/default/keymap.c82
-rw-r--r--keyboards/ckeys/washington/keymaps/default/readme.md1
-rw-r--r--keyboards/ckeys/washington/readme.md23
-rw-r--r--keyboards/ckeys/washington/rules.mk34
-rw-r--r--keyboards/ckeys/washington/washington.c17
-rw-r--r--keyboards/ckeys/washington/washington.h38
-rw-r--r--keyboards/clueboard/60/config.h2
-rw-r--r--keyboards/comet46/keymaps/default/keymap.c2
-rw-r--r--keyboards/contra/keymaps/alper/config.h (renamed from keyboards/preonic/keymaps/juno/config.h)5
-rw-r--r--keyboards/contra/keymaps/alper/keymap.c191
-rw-r--r--keyboards/contra/keymaps/alper/readme.md22
-rw-r--r--keyboards/contra/readme.md2
-rw-r--r--keyboards/converter/siemens_tastatur/rules.mk40
-rw-r--r--keyboards/converter/usb_usb/keymaps/ble/keymap.c18
-rw-r--r--keyboards/converter/usb_usb/keymaps/default/keymap.c18
-rw-r--r--keyboards/coseyfannitutti/discipad/discipad.c8
-rw-r--r--keyboards/coseyfannitutti/discipad/rules.mk5
-rw-r--r--keyboards/coseyfannitutti/discipline/discipline.c8
-rw-r--r--keyboards/coseyfannitutti/discipline/readme.md10
-rw-r--r--keyboards/coseyfannitutti/discipline/rules.mk4
-rw-r--r--keyboards/coseyfannitutti/mysterium/config.h242
-rw-r--r--keyboards/coseyfannitutti/mysterium/info.json15
-rw-r--r--keyboards/coseyfannitutti/mysterium/keymaps/default/keymap.c34
-rw-r--r--keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c34
-rw-r--r--keyboards/coseyfannitutti/mysterium/mysterium.c16
-rw-r--r--keyboards/coseyfannitutti/mysterium/mysterium.h55
-rw-r--r--keyboards/coseyfannitutti/mysterium/readme.md15
-rw-r--r--keyboards/coseyfannitutti/mysterium/rules.mk39
-rw-r--r--keyboards/coseyfannitutti/mysterium/usbconfig.h384
-rw-r--r--keyboards/crkbd/keymaps/bcat/config.h6
-rw-r--r--keyboards/crkbd/keymaps/bcat/keymap.c51
-rw-r--r--keyboards/crkbd/keymaps/bcat/readme.md30
-rw-r--r--keyboards/crkbd/keymaps/bcat/rules.mk3
-rw-r--r--keyboards/crkbd/keymaps/curry/config.h15
-rw-r--r--keyboards/crkbd/keymaps/curry/keymap.c68
-rw-r--r--keyboards/crkbd/keymaps/curry/rules.mk16
-rw-r--r--keyboards/crkbd/keymaps/dsanchezseco/config.h1
-rw-r--r--keyboards/crkbd/keymaps/hvp/keymap.c42
-rw-r--r--keyboards/crkbd/keymaps/hvp/readme.md11
-rw-r--r--keyboards/crkbd/keymaps/hvp/rules.mk2
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/README.md63
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/config.h100
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/glcdfont.c243
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/keymap.c248
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/kidbrazil.json1
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/logo_reader.c11
-rw-r--r--keyboards/crkbd/keymaps/kidbrazil/rules.mk17
-rw-r--r--keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h18
-rw-r--r--keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c41
-rw-r--r--keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk7
-rw-r--r--keyboards/crkbd/rev1/split_util.c11
-rw-r--r--keyboards/db/db63/README.md21
-rw-r--r--keyboards/db/db63/config.h42
-rw-r--r--keyboards/db/db63/db63.c17
-rw-r--r--keyboards/db/db63/db63.h49
-rw-r--r--keyboards/db/db63/info.json18
-rw-r--r--keyboards/db/db63/keymaps/default/keymap.c60
-rw-r--r--keyboards/db/db63/rules.mk24
-rw-r--r--keyboards/db/db63/usbconfig.h383
-rw-r--r--keyboards/divergetm2/keymaps/default/keymap.c2
-rw-r--r--keyboards/donutcables/budget96/readme.md42
-rw-r--r--keyboards/doppelganger/config.h229
-rw-r--r--keyboards/doppelganger/doppelganger.c39
-rw-r--r--keyboards/doppelganger/doppelganger.h46
-rw-r--r--keyboards/doppelganger/info.json12
-rw-r--r--keyboards/doppelganger/keymaps/default/keymap.c33
-rw-r--r--keyboards/doppelganger/keymaps/default/readme.md1
-rw-r--r--keyboards/doppelganger/readme.md15
-rw-r--r--keyboards/doppelganger/rules.mk34
-rw-r--r--keyboards/dozen0/config.h16
-rw-r--r--keyboards/dozen0/keymaps/default/keymap.c100
-rw-r--r--keyboards/dozen0/keymaps/default/readme.md45
-rw-r--r--keyboards/dozen0/keymaps/f12/keymap.c4
-rw-r--r--keyboards/dozen0/rules.mk20
-rw-r--r--keyboards/dp60/config.h39
-rw-r--r--keyboards/dp60/dp60.c26
-rw-r--r--keyboards/dp60/keymaps/allleds/keymap.c17
-rw-r--r--keyboards/dp60/keymaps/allleds/rules.mk38
-rw-r--r--keyboards/dp60/keymaps/default/keymap.c10
-rw-r--r--keyboards/dp60/keymaps/via/readme.md1
-rw-r--r--keyboards/dp60/keymaps/via/rules.mk48
-rw-r--r--keyboards/dp60/rules.mk19
-rw-r--r--keyboards/duck/orion/v3/config.h10
-rw-r--r--keyboards/duck/orion/v3/keymaps/default/keymap.c22
-rw-r--r--keyboards/duck/orion/v3/matrix.c30
-rw-r--r--keyboards/duck/orion/v3/readme.md14
-rw-r--r--keyboards/duck/orion/v3/v3.c58
-rw-r--r--keyboards/duck/readme.md1
-rw-r--r--keyboards/dz60/keymaps/_bonfire/README.md16
-rw-r--r--keyboards/dz60/keymaps/_bonfire/dz60-v6-1-0.json1160
-rw-r--r--keyboards/dz60/keymaps/_bonfire/keymap-parts/defs.c29
-rw-r--r--keyboards/dz60/keymaps/_bonfire/keymap-parts/functions.c34
-rw-r--r--keyboards/dz60/keymaps/_bonfire/keymap-parts/layers.c115
-rw-r--r--keyboards/dz60/keymaps/_bonfire/keymap.c12
-rw-r--r--keyboards/dz60/keymaps/_bonfire/not-in-use/super-alt-tab.c37
-rw-r--r--keyboards/dz60/keymaps/_bonfire/rules.mk3
-rw-r--r--keyboards/dz60/keymaps/_bonfire/scratchpad.txt7
-rw-r--r--keyboards/dz60/keymaps/split_space_arrows/keymap.c67
-rw-r--r--keyboards/dz60/keymaps/split_space_arrows/rules.mk7
-rw-r--r--keyboards/dz60/keymaps/twschum_b_4_10/config.h24
-rw-r--r--keyboards/dz60/keymaps/twschum_b_4_10/keymap.c123
-rw-r--r--keyboards/dz60/keymaps/twschum_b_4_10/layout.json4877
-rw-r--r--keyboards/dz60/keymaps/twschum_b_4_10/rules.mk15
-rw-r--r--keyboards/dz60/rules.mk6
-rw-r--r--keyboards/dztech/dz60rgb/config.h36
-rw-r--r--keyboards/dztech/dz60rgb/dz60rgb.c194
-rw-r--r--keyboards/dztech/dz60rgb/dz60rgb.h9
-rw-r--r--keyboards/dztech/dz60rgb/info.json71
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/default/keymap.c84
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h70
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/kgreulich/keymap.c25
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/kgreulich/rules.mk1
-rw-r--r--keyboards/dztech/dz60rgb/readme.md14
-rw-r--r--keyboards/dztech/dz60rgb/rules.mk14
-rw-r--r--keyboards/dztech/dz60rgb/v1/config.h56
-rw-r--r--keyboards/dztech/dz60rgb/v1/rules.mk24
-rw-r--r--keyboards/dztech/dz60rgb/v2/config.h66
-rw-r--r--keyboards/dztech/dz60rgb/v2/rules.mk34
-rw-r--r--keyboards/dztech/dz60rgb_ansi/config.h36
-rw-r--r--keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c190
-rw-r--r--keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h9
-rw-r--r--keyboards/dztech/dz60rgb_ansi/info.json81
-rw-r--r--keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c57
-rw-r--r--keyboards/dztech/dz60rgb_ansi/readme.md16
-rw-r--r--keyboards/dztech/dz60rgb_ansi/rules.mk16
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v1/config.h56
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v1/rules.mk24
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v2/config.h66
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v2/rules.mk34
-rw-r--r--keyboards/dztech/dz60rgb_wkl/config.h36
-rw-r--r--keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c191
-rw-r--r--keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h29
-rw-r--r--keyboards/dztech/dz60rgb_wkl/info.json83
-rw-r--r--keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c58
-rw-r--r--keyboards/dztech/dz60rgb_wkl/readme.md14
-rw-r--r--keyboards/dztech/dz60rgb_wkl/rules.mk14
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v1/config.h56
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v1/rules.mk26
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v2/config.h66
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v2/rules.mk36
-rw-r--r--keyboards/dztech/dz65rgb/config.h45
-rw-r--r--keyboards/dztech/dz65rgb/dz65rgb.c200
-rw-r--r--keyboards/dztech/dz65rgb/dz65rgb.h9
-rw-r--r--keyboards/dztech/dz65rgb/info.json91
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/adi/keymap.c19
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/adi/readme.md13
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/default/keymap.c44
-rw-r--r--keyboards/dztech/dz65rgb/readme.md13
-rw-r--r--keyboards/dztech/dz65rgb/rules.mk14
-rw-r--r--keyboards/dztech/dz65rgb/v1/config.h68
-rw-r--r--keyboards/dztech/dz65rgb/v1/rules.mk25
-rw-r--r--keyboards/dztech/dz65rgb/v2/config.h68
-rw-r--r--keyboards/dztech/dz65rgb/v2/rules.mk35
-rw-r--r--keyboards/efreet/config.h4
-rw-r--r--keyboards/efreet/keymaps/via/keymap.c43
-rw-r--r--keyboards/efreet/keymaps/via/rules.mk1
-rw-r--r--keyboards/efreet/rules.mk14
-rw-r--r--keyboards/ep/96/info.json533
-rw-r--r--keyboards/ep/comsn/tf_longeboye/info.json2
-rw-r--r--keyboards/ergodash/rev1/config.h4
-rw-r--r--keyboards/ergodone/rules.mk7
-rw-r--r--keyboards/ergodox_ez/keymaps/default/keymap.c2
-rw-r--r--keyboards/ergodox_ez/keymaps/rgb_layer/config.h1
-rw-r--r--keyboards/ergodox_ez/led_i2c.c8
-rw-r--r--keyboards/ergodox_ez/matrix.c3
-rw-r--r--keyboards/ergodox_stm32/keymaps/default/keymap.c4
-rw-r--r--keyboards/ergoslab/config.h28
-rw-r--r--keyboards/ergoslab/ergoslab.c1
-rw-r--r--keyboards/ergoslab/ergoslab.h7
-rw-r--r--keyboards/ergoslab/info.json66
-rw-r--r--keyboards/ergoslab/keymaps/default/config.h29
-rw-r--r--keyboards/ergoslab/keymaps/default/keymap.c73
-rw-r--r--keyboards/ergoslab/readme.md33
-rw-r--r--keyboards/ergoslab/rev1/config.h71
-rw-r--r--keyboards/ergoslab/rev1/rev1.c18
-rw-r--r--keyboards/ergoslab/rev1/rev1.h24
-rw-r--r--keyboards/ergoslab/rules.mk35
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/config.h2
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/rules.mk6
-rw-r--r--keyboards/eve/meteor/readme.md40
-rw-r--r--keyboards/exclusive/e65/keymaps/madhatter/keymap.c26
-rw-r--r--keyboards/exclusive/e6_rgb/config.h30
-rw-r--r--keyboards/exclusive/e6_rgb/e6_rgb.c43
-rw-r--r--keyboards/exclusive/e6_rgb/e6_rgb.h61
-rw-r--r--keyboards/exclusive/e6_rgb/info.json1309
-rw-r--r--keyboards/exclusive/e6_rgb/keymaps/allleds/keymap.c16
-rw-r--r--keyboards/exclusive/e6_rgb/keymaps/allleds/readme.md13
-rw-r--r--keyboards/exclusive/e6_rgb/keymaps/allleds/rules.mk1
-rw-r--r--keyboards/exclusive/e6_rgb/keymaps/via/keymap.c28
-rw-r--r--keyboards/exclusive/e6_rgb/keymaps/via/rules.mk1
-rw-r--r--keyboards/exclusive/e6_rgb/rules.mk21
-rw-r--r--keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c12
-rw-r--r--keyboards/exclusive/e6v2/le_bmc/readme.md41
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/keymaps/default/keymap.c12
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/readme.md41
-rw-r--r--keyboards/exclusive/e7v1se/config.h252
-rw-r--r--keyboards/exclusive/e7v1se/e7v1se.c50
-rw-r--r--keyboards/exclusive/e7v1se/e7v1se.h43
-rw-r--r--keyboards/exclusive/e7v1se/info.json95
-rw-r--r--keyboards/exclusive/e7v1se/keymaps/default/keymap.c35
-rw-r--r--keyboards/exclusive/e7v1se/keymaps/default/readme.md17
-rw-r--r--keyboards/exclusive/e7v1se/keymaps/mac/keymap.c35
-rw-r--r--keyboards/exclusive/e7v1se/keymaps/mac/readme.md17
-rw-r--r--keyboards/exclusive/e7v1se/readme.md15
-rw-r--r--keyboards/exclusive/e7v1se/rules.mk32
-rw-r--r--keyboards/exent/readme.md8
-rw-r--r--keyboards/facew/readme.md40
-rw-r--r--keyboards/fluorite/config.h244
-rw-r--r--keyboards/fluorite/fluorite.c16
-rw-r--r--keyboards/fluorite/fluorite.h55
-rw-r--r--keyboards/fluorite/info.json160
-rw-r--r--keyboards/fluorite/keymaps/default/config.h21
-rw-r--r--keyboards/fluorite/keymaps/default/keymap.c206
-rw-r--r--keyboards/fluorite/keymaps/default/readme.md1
-rw-r--r--keyboards/fluorite/readme.md17
-rw-r--r--keyboards/fluorite/rules.mk35
-rw-r--r--keyboards/fortitude60/keymaps/default/keymap.c2
-rw-r--r--keyboards/fortitude60/rev1/config.h2
-rw-r--r--keyboards/foxlab/leaf60/hotswap/keymaps/crd/keymap.c33
-rw-r--r--keyboards/ft/mars80/keymaps/default/keymap.c12
-rw-r--r--keyboards/ft/mars80/readme.md35
-rw-r--r--keyboards/gami_studio/lex60/config.h53
-rw-r--r--keyboards/gami_studio/lex60/keymaps/default/keymap.c42
-rw-r--r--keyboards/gami_studio/lex60/lex60.c1
-rw-r--r--keyboards/gami_studio/lex60/lex60.h21
-rw-r--r--keyboards/gami_studio/lex60/readme.md12
-rw-r--r--keyboards/gami_studio/lex60/rules.mk32
-rw-r--r--keyboards/gh60/revc/info.json4
-rw-r--r--keyboards/gh60/satan/keymaps/smt/keymap.c40
-rw-r--r--keyboards/gingham/readme.md7
-rw-r--r--keyboards/gingham/rules.mk4
-rw-r--r--keyboards/gray_studio/cod67/rules.mk5
-rw-r--r--keyboards/gray_studio/hb85/readme.md37
-rw-r--r--keyboards/gray_studio/space65/keymaps/default/keymap.c28
-rw-r--r--keyboards/gray_studio/space65/keymaps/iso/keymap.c59
-rw-r--r--keyboards/gray_studio/space65/keymaps/iso/readme.md3
-rw-r--r--keyboards/gray_studio/space65/rules.mk2
-rw-r--r--keyboards/gray_studio/space65/space65.h33
-rw-r--r--keyboards/gray_studio/think65/hotswap/keymaps/default/keymap.c20
-rw-r--r--keyboards/gray_studio/think65/solder/info.json74
-rw-r--r--keyboards/gray_studio/think65/solder/keymaps/default/keymap.c20
-rw-r--r--keyboards/gray_studio/think65/solder/keymaps/rys/keymap.c271
-rw-r--r--keyboards/gray_studio/think65/solder/keymaps/rys/readme.md11
-rw-r--r--keyboards/gray_studio/think65/solder/solder.h16
-rw-r--r--keyboards/hadron/ver3/keymaps/default/keymap.c3
-rw-r--r--keyboards/handwired/2x5keypad/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/aek64/config.h34
-rw-r--r--keyboards/handwired/aek64/keymaps/4sstylz/keycodes.h85
-rw-r--r--keyboards/handwired/aek64/keymaps/4sstylz/keymap.c33
-rw-r--r--keyboards/handwired/aek64/rules.mk1
-rw-r--r--keyboards/handwired/aranck/aranck.h2
-rw-r--r--keyboards/handwired/aranck/config.h2
-rw-r--r--keyboards/handwired/aranck/info.json2
-rw-r--r--keyboards/handwired/aranck/keymaps/default/keymap.c38
-rw-r--r--keyboards/handwired/aranck/keymaps/turkishish/config.h4
-rw-r--r--keyboards/handwired/aranck/keymaps/turkishish/keymap.c37
-rw-r--r--keyboards/handwired/aranck/keymaps/turkishish/readme.md6
-rw-r--r--keyboards/handwired/aranck/readme.md12
-rw-r--r--keyboards/handwired/aranck/rules.mk14
-rw-r--r--keyboards/handwired/bluepill/keymaps/default/keymap.c8
-rw-r--r--keyboards/handwired/bluepill/keymaps/iso/keymap.c4
-rw-r--r--keyboards/handwired/cans12er/README.md18
-rw-r--r--keyboards/handwired/cans12er/cans12er.c1
-rw-r--r--keyboards/handwired/cans12er/cans12er.h13
-rw-r--r--keyboards/handwired/cans12er/config.h38
-rw-r--r--keyboards/handwired/cans12er/keymaps/default/keymap.c20
-rw-r--r--keyboards/handwired/cans12er/rules.mk32
-rw-r--r--keyboards/handwired/ck4x4/keymaps/default/keymap.c5
-rw-r--r--keyboards/handwired/ck4x4/rules.mk36
-rw-r--r--keyboards/handwired/co60/rev6/config.h3
-rw-r--r--keyboards/handwired/co60/rev6/led.c240
-rw-r--r--keyboards/handwired/co60/rev6/rev6.c22
-rw-r--r--keyboards/handwired/co60/rev6/rev6.h18
-rw-r--r--keyboards/handwired/co60/rev6/rules.mk3
-rw-r--r--keyboards/handwired/co60/rev7/config.h7
-rw-r--r--keyboards/handwired/co60/rev7/halconf.h2
-rw-r--r--keyboards/handwired/co60/rev7/led.c242
-rw-r--r--keyboards/handwired/co60/rev7/mcuconf.h2
-rw-r--r--keyboards/handwired/co60/rev7/rev7.c22
-rw-r--r--keyboards/handwired/co60/rev7/rev7.h18
-rw-r--r--keyboards/handwired/co60/rev7/rules.mk6
-rw-r--r--keyboards/handwired/colorlice/colorlice.c67
-rw-r--r--keyboards/handwired/colorlice/colorlice.h42
-rw-r--r--keyboards/handwired/colorlice/config.h58
-rw-r--r--keyboards/handwired/colorlice/info.json79
-rw-r--r--keyboards/handwired/colorlice/keymaps/default/keymap.c33
-rw-r--r--keyboards/handwired/colorlice/readme.md13
-rw-r--r--keyboards/handwired/colorlice/rules.mk35
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h43
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c106
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk1
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/config.h (renamed from keyboards/handwired/steamvan/rev1/led_custom.h)13
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/keymap.c58
-rw-r--r--keyboards/handwired/dactyl_promicro/dactyl_promicro.h49
-rw-r--r--keyboards/handwired/dactyl_promicro/info.json83
-rw-r--r--keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c75
-rw-r--r--keyboards/handwired/floorboard/config.h252
-rw-r--r--keyboards/handwired/floorboard/floorboard.c17
-rw-r--r--keyboards/handwired/floorboard/floorboard.h41
-rw-r--r--keyboards/handwired/floorboard/info.json64
-rw-r--r--keyboards/handwired/floorboard/keymaps/default/keymap.c23
-rw-r--r--keyboards/handwired/floorboard/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/floorboard/readme.md15
-rw-r--r--keyboards/handwired/floorboard/rules.mk23
-rw-r--r--keyboards/handwired/heisenberg/config.h262
-rw-r--r--keyboards/handwired/heisenberg/heisenberg.c16
-rw-r--r--keyboards/handwired/heisenberg/heisenberg.h39
-rw-r--r--keyboards/handwired/heisenberg/info.json62
-rw-r--r--keyboards/handwired/heisenberg/keymaps/default/keymap.c168
-rw-r--r--keyboards/handwired/heisenberg/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/heisenberg/keymaps/turkishish/config.h24
-rw-r--r--keyboards/handwired/heisenberg/keymaps/turkishish/keymap.c232
-rw-r--r--keyboards/handwired/heisenberg/keymaps/turkishish/readme.md5
-rw-r--r--keyboards/handwired/heisenberg/readme.md14
-rw-r--r--keyboards/handwired/heisenberg/rules.mk35
-rw-r--r--keyboards/handwired/hexon38/config.h3
-rw-r--r--keyboards/handwired/hnah40/readme.md6
-rw-r--r--keyboards/handwired/hnah40/rules.mk6
-rw-r--r--keyboards/handwired/jot50/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/jotanck/jotanck.c10
-rw-r--r--keyboards/handwired/jotanck/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/k_numpad17/config.h53
-rw-r--r--keyboards/handwired/k_numpad17/k_numpad17.c1
-rw-r--r--keyboards/handwired/k_numpad17/k_numpad17.h35
-rw-r--r--keyboards/handwired/k_numpad17/keymaps/default/keymap.c24
-rw-r--r--keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c61
-rw-r--r--keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk1
-rw-r--r--keyboards/handwired/k_numpad17/readme.md25
-rw-r--r--keyboards/handwired/k_numpad17/rules.mk31
-rw-r--r--keyboards/handwired/magicforce61/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/minorca/config.h16
-rw-r--r--keyboards/handwired/minorca/info.json104
-rw-r--r--keyboards/handwired/minorca/keymaps/default/config.h10
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/config.h13
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/readme.md24
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/rules.mk22
-rw-r--r--keyboards/handwired/minorca/minorca.c5
-rw-r--r--keyboards/handwired/minorca/minorca.h21
-rw-r--r--keyboards/handwired/minorca/readme.md8
-rw-r--r--keyboards/handwired/minorca/rules.mk27
-rw-r--r--keyboards/handwired/onekey/bluepill/rules.mk41
-rw-r--r--keyboards/handwired/onekey/stm32f0_disco/rules.mk36
-rw-r--r--keyboards/handwired/p65rgb/config.h64
-rw-r--r--keyboards/handwired/p65rgb/info.json82
-rw-r--r--keyboards/handwired/p65rgb/keymaps/default/keymap.c33
-rw-r--r--keyboards/handwired/p65rgb/p65rgb.c49
-rw-r--r--keyboards/handwired/p65rgb/p65rgb.h42
-rw-r--r--keyboards/handwired/p65rgb/readme.md15
-rw-r--r--keyboards/handwired/p65rgb/rules.mk33
-rw-r--r--keyboards/handwired/prime_exl/config.h20
-rw-r--r--keyboards/handwired/prime_exl/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/prime_exl/keymaps/via/rules.mk87
-rw-r--r--keyboards/handwired/promethium/config.h13
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/pteron/config.h3
-rw-r--r--keyboards/handwired/pteron/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c8
-rw-r--r--keyboards/handwired/steamvan/rev1/config.h6
-rw-r--r--keyboards/handwired/steamvan/rev1/halconf.h2
-rw-r--r--keyboards/handwired/steamvan/rev1/led.c242
-rw-r--r--keyboards/handwired/steamvan/rev1/mcuconf.h2
-rw-r--r--keyboards/handwired/steamvan/rev1/rev1.c19
-rw-r--r--keyboards/handwired/steamvan/rev1/rev1.h10
-rw-r--r--keyboards/handwired/steamvan/rev1/rules.mk6
-rw-r--r--keyboards/handwired/videowriter/README.md61
-rw-r--r--keyboards/handwired/videowriter/config.h140
-rw-r--r--keyboards/handwired/videowriter/info.json20
-rw-r--r--keyboards/handwired/videowriter/keymaps/default/keymap.c107
-rw-r--r--keyboards/handwired/videowriter/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/videowriter/keymaps/oleg/config.h20
-rw-r--r--keyboards/handwired/videowriter/keymaps/oleg/keymap.c108
-rw-r--r--keyboards/handwired/videowriter/keymaps/oleg/rules.mk4
-rw-r--r--keyboards/handwired/videowriter/rules.mk32
-rw-r--r--keyboards/handwired/videowriter/videowriter.c17
-rw-r--r--keyboards/handwired/videowriter/videowriter.h59
-rw-r--r--keyboards/handwired/wulkan/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/xealous/keymaps/default/keymap.c2
-rw-r--r--keyboards/hecomi/keymaps/default/keymap.c4
-rw-r--r--keyboards/heliar/wm1_hotswap/config.h49
-rw-r--r--keyboards/heliar/wm1_hotswap/info.json81
-rw-r--r--keyboards/heliar/wm1_hotswap/keymaps/default/keymap.c23
-rw-r--r--keyboards/heliar/wm1_hotswap/keymaps/default/readme.md7
-rw-r--r--keyboards/heliar/wm1_hotswap/readme.md19
-rw-r--r--keyboards/heliar/wm1_hotswap/rules.mk31
-rw-r--r--keyboards/heliar/wm1_hotswap/wm1_hotswap.c39
-rw-r--r--keyboards/heliar/wm1_hotswap/wm1_hotswap.h42
-rw-r--r--keyboards/helix/pico/keymaps/default/keymap.c4
-rw-r--r--keyboards/helix/pico/rules.mk5
-rw-r--r--keyboards/helix/rev2/keymaps/default/keymap.c89
-rw-r--r--keyboards/helix/rev2/matrix.c5
-rw-r--r--keyboards/helix/rev2/rules.mk5
-rw-r--r--keyboards/helix/rev2/split_util.c80
-rw-r--r--keyboards/hhkb/keymaps/xyverz/keymap.c137
-rw-r--r--keyboards/hineybush/h75_singa/config.h245
-rw-r--r--keyboards/hineybush/h75_singa/h75_singa.c26
-rw-r--r--keyboards/hineybush/h75_singa/h75_singa.h61
-rw-r--r--keyboards/hineybush/h75_singa/info.json15
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/default/keymap.c45
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/default/readme.md1
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/via/keymap.c63
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/via/readme.md1
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/via/rules.mk1
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/wkl_std/keymap.c46
-rw-r--r--keyboards/hineybush/h75_singa/keymaps/wkl_std/readme.md1
-rw-r--r--keyboards/hineybush/h75_singa/readme.md (renamed from keyboards/idb_60/readme.md)18
-rw-r--r--keyboards/hineybush/h75_singa/rules.mk32
-rw-r--r--keyboards/hineybush/h87a/config.h1
-rw-r--r--keyboards/hineybush/h87a/h87a.c9
-rw-r--r--keyboards/hineybush/h87a/keymaps/default/keymap.c2
-rw-r--r--keyboards/hineybush/h87a/keymaps/via/keymap.c63
-rw-r--r--keyboards/hineybush/h87a/keymaps/via/readme.md1
-rw-r--r--keyboards/hineybush/h87a/keymaps/via/rules.mk1
-rw-r--r--keyboards/hineybush/h87a/rules.mk2
-rw-r--r--keyboards/hineybush/h88/keymaps/default/keymap.c2
-rw-r--r--keyboards/hineybush/h88/keymaps/via/keymap.c52
-rw-r--r--keyboards/hineybush/h88/keymaps/via/readme.md1
-rw-r--r--keyboards/hineybush/h88/keymaps/via/rules.mk1
-rw-r--r--keyboards/hineybush/h88/rules.mk2
-rw-r--r--keyboards/hineybush/hbcp/config.h164
-rw-r--r--keyboards/hineybush/hbcp/hbcp.c9
-rw-r--r--keyboards/hineybush/hbcp/keymaps/via/keymap.c60
-rw-r--r--keyboards/hineybush/hbcp/keymaps/via/readme.md2
-rw-r--r--keyboards/hineybush/hbcp/keymaps/via/rules.mk1
-rw-r--r--keyboards/hineybush/hbcp/rules.mk2
-rw-r--r--keyboards/hineybush/physix/config.h252
-rw-r--r--keyboards/hineybush/physix/info.json21
-rw-r--r--keyboards/hineybush/physix/keymaps/default/keymap.c50
-rw-r--r--keyboards/hineybush/physix/keymaps/default/readme.md1
-rw-r--r--keyboards/hineybush/physix/physix.c49
-rw-r--r--keyboards/hineybush/physix/physix.h87
-rw-r--r--keyboards/hineybush/physix/readme.md15
-rw-r--r--keyboards/hineybush/physix/rules.mk32
-rw-r--r--keyboards/hineybush/sm68/rules.mk2
-rw-r--r--keyboards/hotdox/rules.mk1
-rw-r--r--keyboards/hs60/v2/config.h22
-rw-r--r--keyboards/hs60/v2/keymaps/ansi_via/rules.mk68
-rw-r--r--keyboards/hs60/v2/keymaps/default_via/rules.mk68
-rw-r--r--keyboards/hs60/v2/keymaps/goatmaster/rules.mk68
-rw-r--r--keyboards/hs60/v2/keymaps/hhkb_via/rules.mk68
-rw-r--r--keyboards/hs60/v2/keymaps/iso_andys8/rules.mk68
-rw-r--r--keyboards/hs60/v2/keymaps/stanrc85/rules.mk68
-rw-r--r--keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk68
-rw-r--r--keyboards/hs60/v2/rules.mk2
-rw-r--r--keyboards/hs60/v2/v2.h2
-rw-r--r--keyboards/idb/idb_60/config.h (renamed from keyboards/idb_60/config.h)30
-rw-r--r--keyboards/idb/idb_60/idb_60.c (renamed from keyboards/idb_60/idb_60.c)0
-rw-r--r--keyboards/idb/idb_60/idb_60.h60
-rw-r--r--keyboards/idb/idb_60/info.json141
-rw-r--r--keyboards/idb/idb_60/keymaps/all_keys/keymap.c (renamed from keyboards/idb_60/keymaps/default/keymap.c)22
-rw-r--r--keyboards/idb/idb_60/keymaps/default/keymap.c46
-rw-r--r--keyboards/idb/idb_60/keymaps/pngu/keymap.c (renamed from keyboards/idb_60/keymaps/pngu/keymap.c)0
-rw-r--r--keyboards/idb/idb_60/keymaps/via/keymap.c46
-rw-r--r--keyboards/idb/idb_60/keymaps/via/rules.mk2
-rw-r--r--keyboards/idb/idb_60/readme.md26
-rw-r--r--keyboards/idb/idb_60/rules.mk28
-rw-r--r--keyboards/idb_60/idb_60.h38
-rw-r--r--keyboards/idb_60/info.json76
-rw-r--r--keyboards/idb_60/rules.mk29
-rw-r--r--keyboards/illuminati/is0/keymaps/via/keymap.c31
-rw-r--r--keyboards/illuminati/is0/keymaps/via/readme.md1
-rw-r--r--keyboards/illuminati/is0/keymaps/via/rules.mk1
-rw-r--r--keyboards/infinity60/keymaps/default/keymap.c12
-rw-r--r--keyboards/j80/config.h55
-rw-r--r--keyboards/j80/info.json397
-rw-r--r--keyboards/j80/j80.c26
-rw-r--r--keyboards/j80/j80.h115
-rw-r--r--keyboards/j80/keymaps/default/keymap.c59
-rw-r--r--keyboards/j80/keymaps/default/readme.md1
-rw-r--r--keyboards/j80/keymaps/default_iso/keymap.c59
-rw-r--r--keyboards/j80/keymaps/default_iso/readme.md1
-rw-r--r--keyboards/j80/readme.md21
-rw-r--r--keyboards/j80/rules.mk25
-rw-r--r--keyboards/j80/usbconfig.h373
-rw-r--r--keyboards/jae/j01/config.h225
-rw-r--r--keyboards/jae/j01/info.json16
-rw-r--r--keyboards/jae/j01/j01.c52
-rw-r--r--keyboards/jae/j01/j01.h61
-rw-r--r--keyboards/jae/j01/keymaps/default/keymap.c35
-rw-r--r--keyboards/jae/j01/keymaps/default/readme.md1
-rw-r--r--keyboards/jae/j01/readme.md13
-rw-r--r--keyboards/jae/j01/rules.mk32
-rw-r--r--keyboards/jc65/v32a/config.h7
-rw-r--r--keyboards/jc65/v32a/matrix.c106
-rw-r--r--keyboards/jc65/v32a/readme.md25
-rw-r--r--keyboards/jc65/v32a/rules.mk4
-rw-r--r--keyboards/jc65/v32a/v32a.c3
-rw-r--r--keyboards/jc65/v32a/v32a.h30
-rw-r--r--keyboards/jj40/README.md79
-rw-r--r--keyboards/jj40/keymaps/default/keymap.c2
-rw-r--r--keyboards/jj40/rules.mk15
-rw-r--r--keyboards/jj4x4/README.md68
-rw-r--r--keyboards/jj50/README.md84
-rw-r--r--keyboards/jj50/config.h8
-rw-r--r--keyboards/jj50/jj50.c10
-rw-r--r--keyboards/jj50/jj50.h2
-rw-r--r--keyboards/jj50/keymaps/abstractkb/config.h3
-rw-r--r--keyboards/jj50/keymaps/abstractkb/keymap.c2
-rw-r--r--keyboards/jj50/keymaps/abstractkb_gergomatch/config.h3
-rw-r--r--keyboards/jj50/keymaps/abstractkb_gergomatch/keymap.c135
-rw-r--r--keyboards/jj50/keymaps/abstractkb_gergomatch/readme.md4
-rw-r--r--keyboards/jj50/matrix.c107
-rw-r--r--keyboards/jj50/rules.mk4
-rw-r--r--keyboards/just60/config.h54
-rw-r--r--keyboards/just60/just60.h41
-rw-r--r--keyboards/just60/keymaps/default/keymap.c50
-rw-r--r--keyboards/just60/keymaps/default/readme.md19
-rw-r--r--keyboards/just60/readme.md17
-rw-r--r--keyboards/just60/rules.mk35
-rw-r--r--keyboards/k_type/keymaps/default/keymap.c12
-rw-r--r--keyboards/kbdfans/kbd67/mkii_soldered/readme.md6
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/keymap.c41
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/import-for-qmk-configurator/kemmeldev-4-layered-layout.json1
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/keymap.c8
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/layers.json1
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/readme.md54
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/keymap.c19
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/readme.md1
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/readme.md15
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v1/config.h (renamed from keyboards/kbdfans/kbd67/mkiirgb/config.h)0
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v1/readme.md13
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v1/rules.mk (renamed from keyboards/kbdfans/kbd67/mkiirgb/rules.mk)0
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v2/config.h48
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v2/readme.md13
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v2/rules.mk33
-rw-r--r--keyboards/kbdfans/kbd67/readme.md24
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/adi/keymap.c18
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/adi/readme.md8
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/info.json367
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h44
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c44
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/readme.md3
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/keymap.c27
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/readme.md3
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/keymap.c27
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/readme.md3
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/rules.mk14
-rw-r--r--keyboards/kbdfans/kbdpad/mk1/readme.md40
-rw-r--r--keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c85
-rw-r--r--keyboards/keebio/ergodicity/ergodicity.h2
-rw-r--r--keyboards/keebio/iris/iris.h2
-rw-r--r--keyboards/keebio/iris/keymaps/csc027/config.h28
-rw-r--r--keyboards/keebio/iris/keymaps/csc027/keymap.c70
-rw-r--r--keyboards/keebio/iris/keymaps/csc027/rules.mk6
-rw-r--r--keyboards/keebio/iris/keymaps/drashna/config.h14
-rw-r--r--keyboards/keebio/iris/keymaps/hbbisenieks/config.h41
-rw-r--r--keyboards/keebio/iris/keymaps/hbbisenieks/keymap.c161
-rw-r--r--keyboards/keebio/iris/keymaps/hbbisenieks/readme.md6
-rw-r--r--keyboards/keebio/iris/keymaps/hbbisenieks/rules.mk6
-rw-r--r--keyboards/keebio/iris/keymaps/jhelvy/README.md7
-rw-r--r--keyboards/keebio/iris/keymaps/jhelvy/config.h33
-rw-r--r--keyboards/keebio/iris/keymaps/jhelvy/keymap.c54
-rw-r--r--keyboards/keebio/iris/keymaps/jhelvy/rules.mk3
-rw-r--r--keyboards/keebio/iris/keymaps/osiris/rules.mk5
-rw-r--r--keyboards/keebio/iris/keymaps/sethBarberee/config.h1
-rw-r--r--keyboards/keebio/iris/keymaps/sethBarberee/rules.mk3
-rw-r--r--keyboards/keebio/iris/keymaps/via/rules.mk8
-rw-r--r--keyboards/keebio/iris/rev1/config.h22
-rw-r--r--keyboards/keebio/iris/rev1_led/config.h22
-rw-r--r--keyboards/keebio/iris/rev2/config.h22
-rw-r--r--keyboards/keebio/iris/rev3/config.h22
-rw-r--r--keyboards/keebio/iris/rev4/config.h20
-rw-r--r--keyboards/keebio/levinson/keymaps/ksamborski/config.h27
-rw-r--r--keyboards/keebio/levinson/keymaps/ksamborski/keymap.c151
-rw-r--r--keyboards/keebio/levinson/keymaps/ksamborski/rules.mk3
-rw-r--r--keyboards/keebio/levinson/keymaps/numpad/config.h34
-rw-r--r--keyboards/keebio/levinson/keymaps/numpad/keymap.c123
-rw-r--r--keyboards/keebio/levinson/keymaps/numpad/readme.md4
-rw-r--r--keyboards/keebio/levinson/keymaps/numpad/rules.mk3
-rw-r--r--keyboards/keebio/levinson/keymaps/rossman360/keymap.c135
-rw-r--r--keyboards/keebio/levinson/readme.md6
-rw-r--r--keyboards/keebio/levinson/rev1/config.h2
-rw-r--r--keyboards/keebio/levinson/rev2/config.h2
-rw-r--r--keyboards/keebio/quefrency/rev1/config.h2
-rw-r--r--keyboards/keebio/rorschach/rev1/config.h2
-rw-r--r--keyboards/keebio/tragicforce68/info.json2
-rw-r--r--keyboards/keebio/tragicforce68/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/keebio/tragicforce68/keymaps/rossman360/keymap.c71
-rw-r--r--keyboards/keebio/tragicforce68/keymaps/rossman360/readme.md3
-rw-r--r--keyboards/keebio/tragicforce68/keymaps/rossman360/rules.mk2
-rw-r--r--keyboards/keebio/tragicforce68/rules.mk2
-rw-r--r--keyboards/keebio/tragicforce68/tragicforce68.h4
-rw-r--r--keyboards/keebio/viterbi/keymaps/met/keymap.c321
-rw-r--r--keyboards/keebio/viterbi/keymaps/met/rules.mk1
-rw-r--r--keyboards/keycapsss/plaid_pad/config.h38
-rw-r--r--keyboards/keycapsss/plaid_pad/info.json31
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/default/config.h3
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c44
-rw-r--r--keyboards/keycapsss/plaid_pad/keymaps/default/readme.md11
-rw-r--r--keyboards/keycapsss/plaid_pad/plaid_pad.c1
-rw-r--r--keyboards/keycapsss/plaid_pad/plaid_pad.h18
-rw-r--r--keyboards/keycapsss/plaid_pad/readme.md25
-rw-r--r--keyboards/keycapsss/plaid_pad/rules.mk41
-rw-r--r--keyboards/keycapsss/plaid_pad/usbconfig.h383
-rw-r--r--keyboards/kinesis/alvicstep/rules.mk4
-rw-r--r--keyboards/kinesis/keymaps/xyverz/keymap.c9
-rw-r--r--keyboards/kinesis/keymaps/xyverz/readme.md4
-rw-r--r--keyboards/kinesis/rules.mk4
-rw-r--r--keyboards/kingly_keys/romac/config.h4
-rw-r--r--keyboards/kingly_keys/romac/keymaps/via/keymap.c44
-rw-r--r--keyboards/kingly_keys/romac/keymaps/via/rules.mk1
-rw-r--r--keyboards/kmac/keymaps/default/keymap.c2
-rw-r--r--keyboards/kmac/keymaps/default_tkl_ansi/keymap.c2
-rw-r--r--keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c2
-rw-r--r--keyboards/knops/mini/keymaps/mverteuil/config.h25
-rw-r--r--keyboards/knops/mini/keymaps/mverteuil/keymap.c306
-rw-r--r--keyboards/knops/mini/keymaps/mverteuil/readme.md1
-rw-r--r--keyboards/knops/mini/keymaps/mverteuil/rules.mk6
-rw-r--r--keyboards/kv/revt/config.h39
-rw-r--r--keyboards/kv/revt/keymaps/default/keymap.c64
-rw-r--r--keyboards/kv/revt/keymaps/default/readme.md1
-rw-r--r--keyboards/kv/revt/readme.md18
-rw-r--r--keyboards/kv/revt/revt.c25
-rw-r--r--keyboards/kv/revt/revt.h36
-rw-r--r--keyboards/kv/revt/rules.mk22
-rw-r--r--keyboards/kyria/info.json82
-rw-r--r--keyboards/kyria/keymaps/drashna/config.h1
-rw-r--r--keyboards/kyria/keymaps/drashna/keymap.c52
-rw-r--r--keyboards/kyria/keymaps/drashna/rules.mk2
-rw-r--r--keyboards/kyria/keymaps/tessachka/config.h29
-rw-r--r--keyboards/kyria/keymaps/tessachka/keymap.c241
-rw-r--r--keyboards/kyria/keymaps/tessachka/rules.mk3
-rw-r--r--keyboards/kyria/readme.md2
-rw-r--r--keyboards/lazydesigners/dimple/keymaps/default/keymap.c4
-rw-r--r--keyboards/leeku/finger65/config.h2
-rw-r--r--keyboards/leeku/finger65/readme.md14
-rw-r--r--keyboards/lets_split/keymaps/default/keymap.c2
-rw-r--r--keyboards/lets_split/keymaps/geripgeri/config.h37
-rw-r--r--keyboards/lets_split/keymaps/geripgeri/keymap.c368
-rw-r--r--keyboards/lets_split/keymaps/geripgeri/readme.md3
-rw-r--r--keyboards/lets_split/keymaps/geripgeri/rules.mk5
-rw-r--r--keyboards/lets_split/keymaps/hvp/config.h40
-rw-r--r--keyboards/lets_split/keymaps/hvp/keymap.c65
-rw-r--r--keyboards/lets_split/keymaps/hvp/readme.md10
-rw-r--r--keyboards/lets_split/keymaps/hvp/rules.mk2
-rw-r--r--keyboards/lets_split/sockets/config.h11
-rw-r--r--keyboards/lets_split/sockets/rules.mk2
-rw-r--r--keyboards/lets_split_eh/keymaps/default/keymap.c2
-rw-r--r--keyboards/lily58/keymaps/bcat/keymap.c14
-rw-r--r--keyboards/lily58/keymaps/bcat/readme.md34
-rw-r--r--keyboards/lily58/keymaps/curry/config.h17
-rw-r--r--keyboards/lily58/keymaps/curry/keymap.c71
-rw-r--r--keyboards/lily58/keymaps/curry/rules.mk16
-rw-r--r--keyboards/lily58/keymaps/hvp/config.h56
-rw-r--r--keyboards/lily58/keymaps/hvp/keymap.c181
-rw-r--r--keyboards/lily58/keymaps/hvp/readme.md10
-rw-r--r--keyboards/lily58/keymaps/hvp/rules.mk13
-rw-r--r--keyboards/lily58/keymaps/jhelvy/README.md7
-rw-r--r--keyboards/lily58/keymaps/jhelvy/config.h55
-rw-r--r--keyboards/lily58/keymaps/jhelvy/keymap.c112
-rw-r--r--keyboards/lily58/keymaps/jhelvy/rules.mk16
-rw-r--r--keyboards/lily58/keymaps/mikefightsbears/config.h52
-rw-r--r--keyboards/lily58/keymaps/mikefightsbears/keymap.c232
-rw-r--r--keyboards/lily58/keymaps/mikefightsbears/rules.mk18
-rw-r--r--keyboards/lily58/rules.mk5
-rw-r--r--keyboards/maartenwut/atom47/keymaps/junonum_a47/keymap.c150
-rw-r--r--keyboards/maartenwut/atom47/keymaps/junonum_a47/readme.md1
-rw-r--r--keyboards/maartenwut/eon40/config.h254
-rw-r--r--keyboards/maartenwut/eon40/eon40.c16
-rw-r--r--keyboards/maartenwut/eon40/eon40.h67
-rw-r--r--keyboards/maartenwut/eon40/info.json18
-rw-r--r--keyboards/maartenwut/eon40/keymaps/default/keymap.c46
-rw-r--r--keyboards/maartenwut/eon40/keymaps/default/readme.md1
-rw-r--r--keyboards/maartenwut/eon40/readme.md21
-rw-r--r--keyboards/maartenwut/eon40/rules.mk37
-rw-r--r--keyboards/maartenwut/minitomic/config.h252
-rw-r--r--keyboards/maartenwut/minitomic/info.json15
-rw-r--r--keyboards/maartenwut/minitomic/keymaps/default/keymap.c46
-rw-r--r--keyboards/maartenwut/minitomic/keymaps/default/readme.md1
-rw-r--r--keyboards/maartenwut/minitomic/minitomic.c50
-rw-r--r--keyboards/maartenwut/minitomic/minitomic.h53
-rw-r--r--keyboards/maartenwut/minitomic/readme.md23
-rw-r--r--keyboards/maartenwut/minitomic/rules.mk32
-rw-r--r--keyboards/maartenwut/plain60/config.h21
-rw-r--r--keyboards/maartenwut/plain60/keymaps/audio/config.h3
-rw-r--r--keyboards/maartenwut/plain60/keymaps/audio/keymap.c27
-rw-r--r--keyboards/maartenwut/plain60/keymaps/audio/rules.mk4
-rw-r--r--keyboards/maartenwut/plain60/keymaps/default/keymap.c16
-rw-r--r--keyboards/maartenwut/plain60/keymaps/kwerdenker/config.h (renamed from keyboards/maartenwut/plain60/keymaps/RGB/config.h)0
-rw-r--r--keyboards/maartenwut/plain60/keymaps/kwerdenker/keymap.c (renamed from keyboards/maartenwut/plain60/keymaps/RGB/keymap.c)0
-rw-r--r--keyboards/maartenwut/plain60/keymaps/kwerdenker/rules.mk (renamed from keyboards/maartenwut/plain60/keymaps/RGB/rules.mk)5
-rw-r--r--keyboards/maartenwut/plain60/keymaps/rgb/config.h8
-rw-r--r--keyboards/maartenwut/plain60/keymaps/rgb/keymap.c27
-rw-r--r--keyboards/maartenwut/plain60/keymaps/rgb/rules.mk3
-rw-r--r--keyboards/maartenwut/plain60/keymaps/via/rules.mk6
-rw-r--r--keyboards/maartenwut/plain60/rules.mk12
-rw-r--r--keyboards/maartenwut/wasdat/config.h2
-rw-r--r--keyboards/maartenwut/wasdat/matrix.c246
-rw-r--r--keyboards/maartenwut/wasdat/readme.md8
-rw-r--r--keyboards/maartenwut/wasdat/rules.mk18
-rw-r--r--keyboards/maartenwut/wasdat/wasdat.h2
-rwxr-xr-xkeyboards/maartenwut/wonderland/keymaps/default/keymap.c30
-rwxr-xr-xkeyboards/maartenwut/wonderland/wonderland.c28
-rw-r--r--keyboards/massdrop/alt/keymaps/default/keymap.c4
-rw-r--r--keyboards/massdrop/alt/keymaps/default_md/keymap.c4
-rw-r--r--keyboards/massdrop/alt/keymaps/mac/keymap.c4
-rw-r--r--keyboards/massdrop/alt/keymaps/mac_md/keymap.c4
-rw-r--r--keyboards/massdrop/ctrl/DOCUMENTATION.md29
-rw-r--r--keyboards/massdrop/ctrl/keymaps/default/keymap.c6
-rw-r--r--keyboards/massdrop/ctrl/keymaps/default_md/keymap.c6
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/README.md83
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/config.h116
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/config_led.c82
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/keymap.c394
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/keymap.h100
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/rules.mk16
-rw-r--r--keyboards/massdrop/ctrl/keymaps/mac/keymap.c6
-rw-r--r--keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c6
-rw-r--r--keyboards/matrix/m12og/config.h38
-rw-r--r--keyboards/matrix/m12og/info.json15
-rw-r--r--keyboards/matrix/m12og/keymaps/default/keymap.c25
-rw-r--r--keyboards/matrix/m12og/keymaps/iso/keymap.c24
-rw-r--r--keyboards/matrix/m12og/m12og.c21
-rw-r--r--keyboards/matrix/m12og/m12og.h42
-rw-r--r--keyboards/matrix/m12og/readme.md16
-rw-r--r--keyboards/matrix/m12og/rules.mk26
-rw-r--r--keyboards/matrix/noah/boards/noah_bd/board.c131
-rw-r--r--keyboards/matrix/noah/boards/noah_bd/board.h1336
-rw-r--r--keyboards/matrix/noah/boards/noah_bd/board.mk5
-rw-r--r--keyboards/matrix/noah/bootloader_defs.h7
-rw-r--r--keyboards/matrix/noah/chconf.h527
-rw-r--r--keyboards/matrix/noah/config.h54
-rw-r--r--keyboards/matrix/noah/halconf.h388
-rw-r--r--keyboards/matrix/noah/info.json1431
-rw-r--r--keyboards/matrix/noah/keymaps/default/keymap.c20
-rw-r--r--keyboards/matrix/noah/keymaps/iso/keymap.c20
-rw-r--r--keyboards/matrix/noah/keymaps/splitspace/keymap.c20
-rw-r--r--keyboards/matrix/noah/keymaps/wkl/keymap.c20
-rw-r--r--keyboards/matrix/noah/ld/noah_boot.ld85
-rw-r--r--keyboards/matrix/noah/matrix.c166
-rw-r--r--keyboards/matrix/noah/mcuconf.h268
-rw-r--r--keyboards/matrix/noah/noah.c243
-rw-r--r--keyboards/matrix/noah/noah.h63
-rw-r--r--keyboards/matrix/noah/readme.md19
-rw-r--r--keyboards/matrix/noah/rules.mk56
-rw-r--r--keyboards/matrix/noah/ws2812_f4.c272
-rw-r--r--keyboards/matrix/noah/ws2812_f4.h102
-rw-r--r--keyboards/maxr1998/phoebe/keymaps/default/keymap.c46
-rw-r--r--keyboards/maxr1998/phoebe/phoebe.h2
-rw-r--r--keyboards/mechmini/v1/README.md80
-rw-r--r--keyboards/mechmini/v1/config.h7
-rw-r--r--keyboards/mechmini/v1/matrix.c112
-rw-r--r--keyboards/mechmini/v1/rules.mk4
-rw-r--r--keyboards/mechmini/v1/v1.c10
-rw-r--r--keyboards/mechmini/v1/v1.h24
-rw-r--r--keyboards/mehkee96/config.h3
-rw-r--r--keyboards/mehkee96/keymaps/default/keymap.c10
-rw-r--r--keyboards/mehkee96/matrix.c130
-rw-r--r--keyboards/mehkee96/mehkee96.c10
-rw-r--r--keyboards/mehkee96/readme.md37
-rw-r--r--keyboards/mehkee96/rules.mk4
-rw-r--r--keyboards/model01/keymaps/default/keymap.c2
-rw-r--r--keyboards/model01/keymaps/dshields/keymap.c8
-rw-r--r--keyboards/mt40/config.h8
-rw-r--r--keyboards/mt40/matrix.c128
-rw-r--r--keyboards/mt40/mt40.h1
-rw-r--r--keyboards/mt40/readme.md21
-rw-r--r--keyboards/mt40/rules.mk4
-rw-r--r--keyboards/mxss/rules.mk1
-rw-r--r--keyboards/naked48/rev1/config.h2
-rw-r--r--keyboards/navi10/info.json12
-rw-r--r--keyboards/navi10/keymaps/default/keymap.c131
-rw-r--r--keyboards/navi10/keymaps/default/readme.md11
-rw-r--r--keyboards/navi10/keymaps/default/rules.mk1
-rw-r--r--keyboards/navi10/keymaps/emdarcher/keymap.c182
-rw-r--r--keyboards/navi10/keymaps/emdarcher/readme.md16
-rw-r--r--keyboards/navi10/keymaps/emdarcher/rules.mk1
-rw-r--r--keyboards/navi10/readme.md19
-rw-r--r--keyboards/navi10/rev0/config.h51
-rw-r--r--keyboards/navi10/rev0/rev0.c30
-rw-r--r--keyboards/navi10/rev0/rev0.h34
-rw-r--r--keyboards/navi10/rev0/rules.mk33
-rw-r--r--keyboards/navi10/rev2/config.h51
-rw-r--r--keyboards/navi10/rev2/rev2.c30
-rw-r--r--keyboards/navi10/rev2/rev2.h34
-rw-r--r--keyboards/navi10/rev2/rules.mk33
-rw-r--r--keyboards/navi10/rev3/config.h51
-rw-r--r--keyboards/navi10/rev3/rev3.c30
-rw-r--r--keyboards/navi10/rev3/rev3.h34
-rw-r--r--keyboards/navi10/rev3/rules.mk33
-rw-r--r--keyboards/navi10/rules.mk1
-rw-r--r--keyboards/ncc1701kb/config.h53
-rw-r--r--keyboards/ncc1701kb/info.json12
-rw-r--r--keyboards/ncc1701kb/keymaps/default/keymap.c51
-rw-r--r--keyboards/ncc1701kb/ncc1701kb.c1
-rw-r--r--keyboards/ncc1701kb/ncc1701kb.h14
-rw-r--r--keyboards/ncc1701kb/readme.md17
-rw-r--r--keyboards/ncc1701kb/rules.mk34
-rw-r--r--keyboards/newgame40/keymaps/default/keymap.c2
-rwxr-xr-xkeyboards/nk65/config.h27
-rwxr-xr-xkeyboards/nk65/keymaps/default_via/rules.mk67
-rwxr-xr-xkeyboards/nk65/keymaps/via/keymap.c (renamed from keyboards/nk65/keymaps/default_via/keymap.c)0
-rwxr-xr-xkeyboards/nk65/keymaps/via/readme.md (renamed from keyboards/nk65/keymaps/default_via/readme.md)0
-rwxr-xr-xkeyboards/nk65/keymaps/via/rules.mk1
-rwxr-xr-xkeyboards/nk65/nk65.c42
-rwxr-xr-xkeyboards/nk65/nk65.h2
-rwxr-xr-xkeyboards/nk65/rules.mk4
-rw-r--r--keyboards/orthodox/keymaps/default/keymap.c2
-rw-r--r--keyboards/panc60/readme.md43
-rw-r--r--keyboards/pearl/readme.md43
-rw-r--r--keyboards/peiorisboards/ixora/rules.mk37
-rw-r--r--keyboards/percent/canoe/canoe.c10
-rw-r--r--keyboards/percent/canoe/canoe.h13
-rw-r--r--keyboards/percent/canoe/config.h6
-rw-r--r--keyboards/percent/canoe/info.json2
-rw-r--r--keyboards/percent/canoe/keymaps/default/keymap.c4
-rw-r--r--keyboards/percent/canoe/keymaps/iso/keymap.c2
-rw-r--r--keyboards/percent/canoe/matrix.c112
-rw-r--r--keyboards/percent/canoe/readme.md37
-rw-r--r--keyboards/percent/canoe/rules.mk6
-rw-r--r--keyboards/percent/skog/README.md42
-rw-r--r--keyboards/percent/skog/config.h6
-rw-r--r--keyboards/percent/skog/keymaps/default/keymap.c8
-rw-r--r--keyboards/percent/skog/matrix.c112
-rw-r--r--keyboards/percent/skog/rules.mk4
-rw-r--r--keyboards/percent/skog/skog.c10
-rw-r--r--keyboards/percent/skog/skog.h1
-rw-r--r--keyboards/percent/skog_lite/readme.md43
-rw-r--r--keyboards/pico/65keys/65keys.c0
-rw-r--r--keyboards/pico/65keys/65keys.h (renamed from keyboards/pico/rev1/rev1.h)0
-rw-r--r--keyboards/pico/65keys/config.h (renamed from keyboards/pico/rev1/config.h)0
-rw-r--r--keyboards/pico/65keys/info.json (renamed from keyboards/pico/info.json)0
-rw-r--r--keyboards/pico/65keys/keymaps/default/config.h (renamed from keyboards/pico/keymaps/default/config.h)0
-rw-r--r--keyboards/pico/65keys/keymaps/default/keymap.c (renamed from keyboards/pico/keymaps/default/keymap.c)0
-rw-r--r--keyboards/pico/65keys/keymaps/default/readme.md (renamed from keyboards/pico/keymaps/default/readme.md)0
-rw-r--r--keyboards/pico/65keys/keymaps/jis/config.h (renamed from keyboards/pico/keymaps/jis/config.h)0
-rw-r--r--keyboards/pico/65keys/keymaps/jis/keymap.c (renamed from keyboards/pico/keymaps/jis/keymap.c)0
-rw-r--r--keyboards/pico/65keys/keymaps/jis/readme.md (renamed from keyboards/pico/keymaps/jis/readme.md)0
-rw-r--r--keyboards/pico/65keys/rules.mk0
-rw-r--r--keyboards/pico/70keys/70keys.c0
-rw-r--r--keyboards/pico/70keys/70keys.h24
-rw-r--r--keyboards/pico/70keys/config.h91
-rw-r--r--keyboards/pico/70keys/info.json81
-rw-r--r--keyboards/pico/70keys/keymaps/default/keymap.c46
-rw-r--r--keyboards/pico/70keys/keymaps/default/readme.md3
-rw-r--r--keyboards/pico/70keys/keymaps/jis/keymap.c47
-rw-r--r--keyboards/pico/70keys/keymaps/jis/readme.md3
-rw-r--r--keyboards/pico/70keys/rules.mk0
-rw-r--r--keyboards/pico/pico.h7
-rw-r--r--keyboards/pico/readme.md17
-rw-r--r--keyboards/pico/rules.mk2
-rw-r--r--keyboards/plaid/keymaps/default/keymap.c2
-rw-r--r--keyboards/plaid/readme.md6
-rw-r--r--keyboards/plaid/rules.mk6
-rw-r--r--keyboards/planck/keymaps/callum/keymap.c14
-rw-r--r--keyboards/planck/keymaps/callum/readme.md2
-rw-r--r--keyboards/planck/keymaps/csc027/keymap.c88
-rw-r--r--keyboards/planck/keymaps/csc027/rules.mk6
-rw-r--r--keyboards/planck/keymaps/dsanchezseco/config.h2
-rw-r--r--keyboards/planck/keymaps/dsanchezseco/keymap.c6
-rw-r--r--keyboards/planck/keymaps/dshields/keymap.c8
-rw-r--r--keyboards/planck/keymaps/hvp/config.h39
-rw-r--r--keyboards/planck/keymaps/hvp/keymap.c184
-rw-r--r--keyboards/planck/keymaps/hvp/readme.md10
-rw-r--r--keyboards/planck/keymaps/hvp/rules.mk4
-rw-r--r--keyboards/planck/keymaps/juno/keymap.c444
-rw-r--r--keyboards/planck/keymaps/juno/readme.md8
-rw-r--r--keyboards/planck/keymaps/sascha/keymap.c4
-rw-r--r--keyboards/planck/keymaps/sascha/rules.mk1
-rw-r--r--keyboards/preonic/keymaps/juno/keymap.c313
-rw-r--r--keyboards/preonic/keymaps/juno/readme.md1
-rw-r--r--keyboards/preonic/keymaps/kjwon15/keymap.c18
-rw-r--r--keyboards/preonic/keymaps/mverteuil/config.h39
-rw-r--r--keyboards/preonic/keymaps/mverteuil/keymap.c508
-rw-r--r--keyboards/preonic/keymaps/mverteuil/readme.md2
-rw-r--r--keyboards/preonic/keymaps/mverteuil/rules.mk5
-rw-r--r--keyboards/preonic/keymaps/mverteuil_2x2u/config.h39
-rw-r--r--keyboards/preonic/keymaps/mverteuil_2x2u/keymap.c413
-rw-r--r--keyboards/preonic/keymaps/mverteuil_2x2u/rules.mk6
-rw-r--r--keyboards/preonic/preonic.c11
-rw-r--r--keyboards/preonic/rev1/rev1.c11
-rw-r--r--keyboards/preonic/rev2/rev2.c11
-rw-r--r--keyboards/preonic/rev3/rev3.c16
-rw-r--r--keyboards/primekb/prime_e/config.h20
-rw-r--r--keyboards/primekb/prime_e/keymaps/default/keymap.c4
-rw-r--r--keyboards/primekb/prime_e/keymaps/via/rules.mk86
-rw-r--r--keyboards/projectkb/alice/alice.c24
-rw-r--r--keyboards/projectkb/alice/config.h26
-rw-r--r--keyboards/projectkb/alice/keymaps/madhatter/keymap.c48
-rw-r--r--keyboards/projectkb/alice/keymaps/madhatter/rules.mk1
-rw-r--r--keyboards/projectkb/alice/rules.mk36
-rw-r--r--keyboards/quantrik/kyuu/config.h4
-rw-r--r--keyboards/quantrik/kyuu/keymaps/default/keymap.c67
-rwxr-xr-xkeyboards/quantrik/kyuu/keymaps/via/keymap.c47
-rwxr-xr-xkeyboards/quantrik/kyuu/keymaps/via/readme.md1
-rwxr-xr-xkeyboards/quantrik/kyuu/keymaps/via/rules.mk1
-rw-r--r--keyboards/redox/keymaps/eightbitraptor/config.h37
-rw-r--r--keyboards/redox/keymaps/eightbitraptor/keymap.c87
-rw-r--r--keyboards/redox/keymaps/eightbitraptor/rules.mk2
-rw-r--r--keyboards/redscarf_i/config.h45
-rw-r--r--keyboards/redscarf_i/info.json114
-rw-r--r--keyboards/redscarf_i/keymaps/default/keymap.c28
-rw-r--r--keyboards/redscarf_i/keymaps/ortho_5x4/keymap.c49
-rw-r--r--keyboards/redscarf_i/keymaps/ortho_6x4/keymap.c36
-rw-r--r--keyboards/redscarf_i/readme.md15
-rw-r--r--keyboards/redscarf_i/redscarf_i.c54
-rw-r--r--keyboards/redscarf_i/redscarf_i.h85
-rw-r--r--keyboards/redscarf_i/rules.mk33
-rw-r--r--keyboards/retro_75/rules.mk36
-rwxr-xr-xkeyboards/reviung34/keymaps/default/keymap.c3
-rw-r--r--keyboards/reviung39/keymaps/default/keymap.c2
-rw-r--r--keyboards/reviung39/keymaps/toshi0383/keymap.c18
-rw-r--r--keyboards/reviung41/config.h251
-rw-r--r--keyboards/reviung41/info.json61
-rw-r--r--keyboards/reviung41/keymaps/default/keymap.c62
-rw-r--r--keyboards/reviung41/keymaps/default/readme.md1
-rw-r--r--keyboards/reviung41/readme.md15
-rw-r--r--keyboards/reviung41/reviung41.c16
-rw-r--r--keyboards/reviung41/reviung41.h42
-rw-r--r--keyboards/reviung41/rules.mk33
-rw-r--r--keyboards/rgbkb/sol/keymaps/default/keymap.c22
-rw-r--r--keyboards/rgbkb/sol/keymaps/default/readme.md8
-rw-r--r--keyboards/rgbkb/sol/rev2/config.h2
-rw-r--r--keyboards/rgbkb/sol/rev2/post_rules.mk2
-rw-r--r--keyboards/rgbkb/sol/rev2/rev2.c20
-rw-r--r--keyboards/rgbkb/sol/rev2/rules.mk1
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c10
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h38
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c148
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk3
-rw-r--r--keyboards/sck/osa/config.h4
-rw-r--r--keyboards/sck/osa/keymaps/via/keymap.c49
-rw-r--r--keyboards/sck/osa/keymaps/via/readme.md1
-rw-r--r--keyboards/sck/osa/keymaps/via/rules.mk2
-rw-r--r--keyboards/singa/readme.md44
-rw-r--r--keyboards/sirius/unigo66/keymaps/default/keymap.c14
-rw-r--r--keyboards/snagpad/config.h20
-rw-r--r--keyboards/snagpad/keymaps/via/rules.mk77
-rw-r--r--keyboards/spacetime/keymaps/default/keymap.c2
-rwxr-xr-xkeyboards/staryu/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/tada68/config.h7
-rw-r--r--keyboards/tada68/info.json259
-rwxr-xr-xkeyboards/tada68/keymaps/default/keymap.c78
-rwxr-xr-xkeyboards/tada68/keymaps/tokyovigilante/config.h25
-rw-r--r--keyboards/tada68/keymaps/tokyovigilante/keymap.c7
-rw-r--r--keyboards/tada68/keymaps/tokyovigilante/layers.json1
-rw-r--r--keyboards/tada68/keymaps/tokyovigilante/readme.md34
-rwxr-xr-xkeyboards/tada68/keymaps/tokyovigilante/rules.mk2
-rwxr-xr-xkeyboards/tada68/readme.md11
-rwxr-xr-xkeyboards/tada68/rules.mk38
-rwxr-xr-xkeyboards/tada68/tada68.h20
-rw-r--r--keyboards/tanuki/keymaps/default/keymap.c4
-rw-r--r--keyboards/tgr/alice/readme.md41
-rw-r--r--keyboards/tgr/jane/readme.md42
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/halvves/config.h19
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/halvves/keymap.c237
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/halvves/readme.md3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/halvves/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/hvp/config.h5
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/hvp/keymap.c54
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/hvp/readme.md10
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/hvp/rules.mk2
-rw-r--r--keyboards/tr60w/config.h47
-rw-r--r--keyboards/tr60w/keymaps/default/keymap.c20
-rw-r--r--keyboards/tr60w/keymaps/joule-flow/keymap.c21
-rw-r--r--keyboards/tr60w/readme.md19
-rw-r--r--keyboards/tr60w/rules.mk32
-rw-r--r--keyboards/tr60w/tr60w.c11
-rw-r--r--keyboards/tr60w/tr60w.h18
-rw-r--r--keyboards/treadstone48/common/oled_helper.c25
-rw-r--r--keyboards/treadstone48/common/oled_helper.h28
-rw-r--r--keyboards/treadstone48/config.h43
-rw-r--r--keyboards/treadstone48/i2c.c162
-rw-r--r--keyboards/treadstone48/i2c.h46
-rw-r--r--keyboards/treadstone48/keymaps/default/config.h55
-rw-r--r--keyboards/treadstone48/keymaps/default/keymap.c115
-rw-r--r--keyboards/treadstone48/keymaps/default/rules.mk48
-rw-r--r--keyboards/treadstone48/keymaps/like_jis/config.h55
-rw-r--r--keyboards/treadstone48/keymaps/like_jis/keymap.c116
-rw-r--r--keyboards/treadstone48/keymaps/like_jis/rules.mk66
-rw-r--r--keyboards/treadstone48/keymaps/like_jis_rs/config.h53
-rw-r--r--keyboards/treadstone48/keymaps/like_jis_rs/keymap.c116
-rw-r--r--keyboards/treadstone48/keymaps/like_jis_rs/readme_jp.md4
-rw-r--r--keyboards/treadstone48/keymaps/like_jis_rs/rules.mk67
-rw-r--r--keyboards/treadstone48/rev1/config.h276
-rw-r--r--keyboards/treadstone48/rev1/matrix.c357
-rw-r--r--keyboards/treadstone48/rev1/rev1.c30
-rw-r--r--keyboards/treadstone48/rev1/rev1.h43
-rw-r--r--keyboards/treadstone48/rev1/rules.mk3
-rw-r--r--keyboards/treadstone48/rev1/serial_config.h8
-rw-r--r--keyboards/treadstone48/rev1/serial_config_simpleapi.h8
-rw-r--r--keyboards/treadstone48/rev1/split_scomm.c92
-rw-r--r--keyboards/treadstone48/rev1/split_scomm.h21
-rw-r--r--keyboards/treadstone48/rev1/split_util.c70
-rw-r--r--keyboards/treadstone48/rev1/split_util.h16
-rw-r--r--keyboards/treadstone48/rules.mk40
-rw-r--r--keyboards/treadstone48/serial.c589
-rw-r--r--keyboards/treadstone48/serial.h86
-rw-r--r--keyboards/treadstone48/ssd1306.c342
-rw-r--r--keyboards/treadstone48/ssd1306.h90
-rw-r--r--keyboards/treadstone48/treadstone48.c1
-rw-r--r--keyboards/treadstone48/treadstone48.h15
-rw-r--r--keyboards/uk78/config.h4
-rw-r--r--keyboards/unikorn/readme.md58
-rw-r--r--keyboards/ut472/keymaps/hvp/config.h20
-rw-r--r--keyboards/ut472/keymaps/hvp/keymap.c59
-rw-r--r--keyboards/ut472/keymaps/hvp/readme.md10
-rw-r--r--keyboards/ut472/keymaps/hvp/rules.mk1
-rw-r--r--keyboards/uzu42/info.json55
-rw-r--r--keyboards/vinta/rules.mk38
-rw-r--r--keyboards/vision_division/keymaps/default/keymap.c1
-rw-r--r--keyboards/vitamins_included/keymaps/juno/keymap.c293
-rw-r--r--keyboards/vitamins_included/keymaps/juno/rules.mk16
-rw-r--r--keyboards/westfoxtrot/aanzee/config.h23
-rw-r--r--keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk70
-rw-r--r--keyboards/whitefox/keymaps/default/keymap.c2
-rw-r--r--keyboards/wilba_tech/rama_works_koyu/config.h26
-rw-r--r--keyboards/wilba_tech/rama_works_koyu/keymaps/via/keymap.c36
-rw-r--r--keyboards/wilba_tech/rama_works_koyu/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_koyu/rama_works_koyu.h2
-rw-r--r--keyboards/wilba_tech/rama_works_koyu/rules.mk4
-rw-r--r--keyboards/wilba_tech/rama_works_m10_b/config.h27
-rw-r--r--keyboards/wilba_tech/rama_works_m10_b/keymaps/knops/config.h1
-rw-r--r--keyboards/wilba_tech/rama_works_m10_b/keymaps/via/keymap.c13
-rw-r--r--keyboards/wilba_tech/rama_works_m10_b/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_m10_b/rules.mk8
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/config.h26
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/keymaps/via/keymap.c40
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/rama_works_m60_a.h2
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/rules.mk4
-rw-r--r--keyboards/wilba_tech/rama_works_m6_a/config.h26
-rw-r--r--keyboards/wilba_tech/rama_works_m6_a/keymaps/via/keymap.c16
-rw-r--r--keyboards/wilba_tech/rama_works_m6_a/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_m6_a/rules.mk9
-rw-r--r--keyboards/wilba_tech/rama_works_m6_b/config.h26
-rw-r--r--keyboards/wilba_tech/rama_works_m6_b/keymaps/via/keymap.c16
-rw-r--r--keyboards/wilba_tech/rama_works_m6_b/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_m6_b/rules.mk4
-rw-r--r--keyboards/wilba_tech/rama_works_u80_a/config.h27
-rw-r--r--keyboards/wilba_tech/rama_works_u80_a/keymaps/via/keymap.c37
-rw-r--r--keyboards/wilba_tech/rama_works_u80_a/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_u80_a/rama_works_u80_a.h2
-rw-r--r--keyboards/wilba_tech/rama_works_u80_a/rules.mk5
-rw-r--r--keyboards/wilba_tech/via_api.h49
-rw-r--r--keyboards/wilba_tech/via_keycodes.h77
-rw-r--r--keyboards/wilba_tech/wt60_a/config.h25
-rw-r--r--keyboards/wilba_tech/wt60_a/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt60_a/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt60_d/config.h20
-rw-r--r--keyboards/wilba_tech/wt60_d/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt60_d/rules.mk8
-rw-r--r--keyboards/wilba_tech/wt60_d/wt60_d.c18
-rw-r--r--keyboards/wilba_tech/wt65_a/config.h25
-rw-r--r--keyboards/wilba_tech/wt65_a/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt65_a/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt65_b/config.h25
-rw-r--r--keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt65_b/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt69_a/config.h23
-rw-r--r--keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt69_a/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt75_a/config.h25
-rw-r--r--keyboards/wilba_tech/wt75_a/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt75_a/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt75_b/config.h25
-rw-r--r--keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt75_b/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt75_c/config.h29
-rw-r--r--keyboards/wilba_tech/wt75_c/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt75_c/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt80_a/config.h24
-rw-r--r--keyboards/wilba_tech/wt80_a/keymaps/via/rules.mk3
-rw-r--r--keyboards/wilba_tech/wt80_a/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt8_a/config.h23
-rw-r--r--keyboards/wilba_tech/wt8_a/keymaps/via/rules.mk69
-rw-r--r--keyboards/wilba_tech/wt8_a/rules.mk2
-rw-r--r--keyboards/wilba_tech/wt_main.c434
-rw-r--r--keyboards/wilba_tech/wt_mono_backlight.c9
-rw-r--r--keyboards/wilba_tech/wt_rgb_backlight.c244
-rw-r--r--keyboards/wilba_tech/wt_rgb_backlight.h1
-rw-r--r--keyboards/wilba_tech/zeal60/config.h24
-rw-r--r--keyboards/wilba_tech/zeal60/keymaps/via/keymap.c38
-rw-r--r--keyboards/wilba_tech/zeal60/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/zeal60/rules.mk4
-rw-r--r--keyboards/wilba_tech/zeal60/zeal60.h2
-rw-r--r--keyboards/wilba_tech/zeal65/config.h24
-rw-r--r--keyboards/wilba_tech/zeal65/info.json2
-rw-r--r--keyboards/wilba_tech/zeal65/keymaps/split_bs/keymap.c8
-rw-r--r--keyboards/wilba_tech/zeal65/keymaps/via/keymap.c38
-rw-r--r--keyboards/wilba_tech/zeal65/keymaps/via/rules.mk1
-rw-r--r--keyboards/wilba_tech/zeal65/rules.mk4
-rw-r--r--keyboards/wilba_tech/zeal65/zeal65.h4
-rw-r--r--keyboards/winkeyless/bface/README.md41
-rw-r--r--keyboards/winkeyless/bface/config.h2
-rw-r--r--keyboards/winkeyless/bmini/bmini.c3
-rw-r--r--keyboards/winkeyless/bmini/config.h3
-rw-r--r--keyboards/winkeyless/bmini/matrix.c106
-rw-r--r--keyboards/winkeyless/bmini/readme.md38
-rw-r--r--keyboards/winkeyless/bmini/rules.mk4
-rw-r--r--keyboards/winkeyless/bminiex/config.h3
-rw-r--r--keyboards/winkeyless/bminiex/matrix.c122
-rw-r--r--keyboards/winkeyless/bminiex/readme.md10
-rw-r--r--keyboards/winkeyless/bminiex/rules.mk4
-rw-r--r--keyboards/xbows/knight/config.h2
-rw-r--r--keyboards/xbows/knight/info.json121
-rw-r--r--keyboards/xbows/knight/knight.c6
-rw-r--r--keyboards/xbows/woody/keymaps/default/keymap.c10
-rw-r--r--keyboards/xd68/config.h112
-rw-r--r--keyboards/xd68/info.json156
-rw-r--r--keyboards/xd68/keymaps/default/keymap.c48
-rw-r--r--keyboards/xd68/keymaps/default/readme.md5
-rw-r--r--keyboards/xd68/keymaps/default_iso/keymap.c48
-rw-r--r--keyboards/xd68/keymaps/default_iso/readme.md5
-rw-r--r--keyboards/xd68/readme.md53
-rw-r--r--keyboards/xd68/rules.mk35
-rwxr-xr-xkeyboards/xd68/xd68.c22
-rwxr-xr-xkeyboards/xd68/xd68.h69
-rw-r--r--keyboards/xd84/custom_matrix_helper.c127
-rw-r--r--keyboards/xd84/matrix.c84
-rw-r--r--keyboards/xd84/rules.mk4
-rw-r--r--keyboards/xd96/custom_matrix_helper.c127
-rw-r--r--keyboards/xd96/matrix.c4
-rw-r--r--keyboards/xd96/rules.mk4
-rw-r--r--keyboards/xelus/dawn60/config.h142
-rw-r--r--keyboards/xelus/dawn60/dawn60.c18
-rw-r--r--keyboards/xelus/dawn60/dawn60.h36
-rw-r--r--keyboards/xelus/dawn60/keymaps/default/config.h17
-rw-r--r--keyboards/xelus/dawn60/keymaps/default/keymap.c46
-rw-r--r--keyboards/xelus/dawn60/keymaps/via/config.h17
-rw-r--r--keyboards/xelus/dawn60/keymaps/via/keymap.c46
-rw-r--r--keyboards/xelus/dawn60/keymaps/via/rules.mk1
-rw-r--r--keyboards/xelus/dawn60/readme.md13
-rw-r--r--keyboards/xelus/dawn60/rules.mk49
-rw-r--r--keyboards/xiaomi/mk02/README.md104
-rw-r--r--keyboards/xiaomi/mk02/chconf.h524
-rw-r--r--keyboards/xiaomi/mk02/config.h60
-rw-r--r--keyboards/xiaomi/mk02/halconf.h354
-rw-r--r--keyboards/xiaomi/mk02/keymaps/default/keymap.c27
-rw-r--r--keyboards/xiaomi/mk02/ld/STM32F072_0x2000_bootloader.ld85
-rw-r--r--keyboards/xiaomi/mk02/mcuconf.h176
-rw-r--r--keyboards/xiaomi/mk02/mk02.c8
-rw-r--r--keyboards/xiaomi/mk02/mk02.h20
-rw-r--r--keyboards/xiaomi/mk02/rules.mk17
-rw-r--r--keyboards/ymd75/README.md84
-rw-r--r--keyboards/ymd75/config.h4
-rw-r--r--keyboards/ymd75/matrix.c108
-rw-r--r--keyboards/ymd75/rules.mk4
-rw-r--r--keyboards/ymd75/ymd75.c10
-rw-r--r--keyboards/ymd75/ymd75.h2
-rw-r--r--keyboards/ymd96/config.h3
-rw-r--r--keyboards/ymd96/matrix.c112
-rw-r--r--keyboards/ymd96/readme.md66
-rw-r--r--keyboards/ymd96/rules.mk4
-rw-r--r--keyboards/ymd96/ymd96.c10
-rw-r--r--keyboards/ymd96/ymd96.h2
-rw-r--r--keyboards/ymdk/bface/README.md46
-rw-r--r--keyboards/ymdk/bface/config.h2
-rw-r--r--keyboards/ymdk/bface/rules.mk15
-rw-r--r--keyboards/ymdk/ymd09/README.md15
-rw-r--r--keyboards/ymdk/ymd09/config.h66
-rw-r--r--keyboards/ymdk/ymd09/info.json23
-rw-r--r--keyboards/ymdk/ymd09/keymaps/default/keymap.c13
-rw-r--r--keyboards/ymdk/ymd09/rules.mk32
-rw-r--r--keyboards/ymdk/ymd09/ymd09.c1
-rw-r--r--keyboards/ymdk/ymd09/ymd09.h13
-rw-r--r--keyboards/ymdk/ymd67/config.h46
-rw-r--r--keyboards/ymdk/ymd67/info.json81
-rw-r--r--keyboards/ymdk/ymd67/keymaps/default/keymap.c17
-rw-r--r--keyboards/ymdk/ymd67/keymaps/default/readme.md5
-rw-r--r--keyboards/ymdk/ymd67/readme.md15
-rw-r--r--keyboards/ymdk/ymd67/rules.mk26
-rw-r--r--keyboards/ymdk/ymd67/ymd67.c1
-rw-r--r--keyboards/ymdk/ymd67/ymd67.h17
-rw-r--r--keyboards/ymdk_np21/README.md16
-rw-r--r--keyboards/ymdk_np21/config.h6
-rw-r--r--keyboards/ymdk_np21/matrix.c129
-rw-r--r--keyboards/ymdk_np21/rules.mk4
-rw-r--r--keyboards/ymdk_np21/ymdk_np21.h2
-rw-r--r--keyboards/yurei/config.h252
-rw-r--r--keyboards/yurei/info.json101
-rw-r--r--keyboards/yurei/keymaps/default/keymap.c27
-rw-r--r--keyboards/yurei/keymaps/default/readme.md1
-rw-r--r--keyboards/yurei/readme.md13
-rw-r--r--keyboards/yurei/rules.mk34
-rw-r--r--keyboards/yurei/yurei.c25
-rw-r--r--keyboards/yurei/yurei.h44
-rw-r--r--keyboards/zinc/keymaps/toshi0383/keymap.c16
-rw-r--r--keyboards/zinc/rev1/config.h1
-rw-r--r--keyboards/zinc/reva/config.h1
-rw-r--r--layouts/community/60_ansi_split_bs_rshift/bcat/keymap.c8
-rw-r--r--layouts/community/60_ansi_split_bs_rshift/bcat/readme.md4
-rw-r--r--layouts/community/60_ansi_split_bs_rshift/yanfali/keymap.c2
-rw-r--r--layouts/community/60_tsangan_hhkb/bcat/keymap.c8
-rw-r--r--layouts/community/60_tsangan_hhkb/bcat/readme.md4
-rw-r--r--layouts/community/65_ansi/mechmerlin/keymap.c49
-rw-r--r--layouts/community/65_ansi/mechmerlin/readme.md10
-rw-r--r--layouts/community/65_ansi/mechmerlin/rules.mk0
-rwxr-xr-xlayouts/community/65_ansi/yanfali/keymap.c40
-rw-r--r--layouts/community/ergodox/drashna/config.h15
-rw-r--r--layouts/community/ergodox/drashna/keymap.c41
-rw-r--r--layouts/community/ergodox/drashna/rules.mk17
-rw-r--r--layouts/community/ergodox/drashna_glow/config.h9
-rw-r--r--layouts/community/ergodox/drashna_glow/rules.mk13
-rw-r--r--layouts/community/ergodox/manna-harbour_miryoku/keymap.c3
-rw-r--r--layouts/community/ortho_4x12/drashna/keymap.c13
-rw-r--r--layouts/community/ortho_4x12/drashna/rules.mk20
-rw-r--r--layouts/community/ortho_4x12/jotix/keymap.c4
-rw-r--r--layouts/community/ortho_4x12/juno/config.h (renamed from keyboards/planck/keymaps/juno/config.h)0
-rw-r--r--layouts/community/ortho_4x12/juno/keymap.c446
-rw-r--r--layouts/community/ortho_4x12/juno/readme.md16
-rw-r--r--layouts/community/ortho_4x12/juno/rules.mk (renamed from keyboards/planck/keymaps/juno/rules.mk)8
-rw-r--r--layouts/community/ortho_4x12/junonum/config.h40
-rw-r--r--layouts/community/ortho_4x12/junonum/keymap.c342
-rw-r--r--layouts/community/ortho_4x12/junonum/readme.md11
-rw-r--r--layouts/community/ortho_4x12/junonum/rules.mk16
-rw-r--r--layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c3
-rw-r--r--layouts/community/ortho_5x12/drashna/rules.mk1
-rw-r--r--layouts/default/60_abnt2/default_60_abnt2/keymap.c31
-rw-r--r--layouts/default/60_ansi/default_60_ansi/keymap.c27
-rw-r--r--layouts/default/60_ansi/readme.md2
-rw-r--r--layouts/default/60_ansi_split_bs_rshift/default_60_ansi_split_bs_rshift/keymap.c37
-rw-r--r--layouts/default/60_ansi_split_bs_rshift/readme.md2
-rw-r--r--layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c27
-rw-r--r--layouts/default/60_hhkb/default_60_hhkb/keymap.c100
-rw-r--r--layouts/default/60_hhkb/readme.md2
-rw-r--r--layouts/default/60_iso/default_60_iso/keymap.c25
-rw-r--r--layouts/default/60_iso/readme.md2
-rw-r--r--layouts/default/60_iso_split_bs_rshift/default_60_iso_split_bs_rshift/keymap.c24
-rw-r--r--layouts/default/60_iso_split_bs_rshift/info.json81
-rw-r--r--layouts/default/60_iso_split_bs_rshift/layout.json5
-rw-r--r--layouts/default/60_iso_split_bs_rshift/readme.md3
-rw-r--r--layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c21
-rw-r--r--layouts/default/60_tsangan_hhkb/default_60_tsangan_hhkb/keymap.c35
-rw-r--r--layouts/default/60_tsangan_hhkb/readme.md2
-rw-r--r--layouts/default/65_ansi/default_65_ansi/keymap.c29
-rw-r--r--layouts/default/65_ansi/readme.md2
-rw-r--r--layouts/default/65_ansi_blocker/default_65_ansi_blocker/keymap.c29
-rw-r--r--layouts/default/65_ansi_blocker/readme.md6
-rw-r--r--layouts/default/65_iso/default_65_iso/keymap.c28
-rw-r--r--layouts/default/65_iso_blocker/default_65_iso_blocker/keymap.c24
-rw-r--r--layouts/default/65_iso_blocker/info.json85
-rw-r--r--layouts/default/65_iso_blocker/layout.json5
-rw-r--r--layouts/default/65_iso_blocker/readme.md5
-rw-r--r--layouts/default/66_ansi/default_66_ansi/keymap.c23
-rw-r--r--layouts/default/66_iso/default_66_iso/keymap.c23
-rw-r--r--layouts/default/68_ansi/default_68_ansi/keymap.c29
-rw-r--r--layouts/default/68_ansi/info.json2
-rw-r--r--layouts/default/68_ansi/readme.md2
-rw-r--r--layouts/default/68_iso/default_68_iso/keymap.c24
-rw-r--r--layouts/default/68_iso/info.json86
-rw-r--r--layouts/default/68_iso/layout.json5
-rw-r--r--layouts/default/68_iso/readme.md5
-rw-r--r--layouts/default/75_ansi/default_75_ansi/keymap.c33
-rw-r--r--layouts/default/75_ansi/readme.md2
-rw-r--r--layouts/default/75_iso/default_75_iso/keymap.c30
-rw-r--r--layouts/default/75_iso/readme.md2
-rw-r--r--layouts/default/ergodox/default_ergodox/keymap.c53
-rw-r--r--layouts/default/ergodox/readme.md2
-rw-r--r--layouts/default/fullsize_ansi/default_fullsize_ansi/keymap.c33
-rw-r--r--layouts/default/fullsize_ansi/readme.md2
-rw-r--r--layouts/default/fullsize_iso/default_fullsize_iso/keymap.c33
-rw-r--r--layouts/default/fullsize_iso/readme.md2
-rw-r--r--layouts/default/numpad_4x4/default_numpad_4x4/keymap.c24
-rw-r--r--layouts/default/numpad_4x4/readme.md2
-rw-r--r--layouts/default/numpad_5x4/default_numpad_5x4/keymap.c54
-rw-r--r--layouts/default/numpad_5x4/readme.md2
-rw-r--r--layouts/default/numpad_5x6/default_numpad_5x6/keymap.c53
-rw-r--r--layouts/default/numpad_6x4/default_numpad_6x4/keymap.c62
-rw-r--r--layouts/default/numpad_6x4/readme.md2
-rw-r--r--layouts/default/ortho_3x10/default_ortho_3x10/keymap.c19
-rw-r--r--layouts/default/ortho_4x10/default_ortho_4x10/keymap.c21
-rw-r--r--layouts/default/ortho_4x12/default_ortho_4x12/keymap.c23
-rw-r--r--layouts/default/ortho_4x12/readme.md2
-rw-r--r--layouts/default/ortho_4x4/default_ortho_4x4/keymap.c23
-rw-r--r--layouts/default/ortho_4x4/readme.md2
-rw-r--r--layouts/default/ortho_5x12/default_ortho_5x12/keymap.c25
-rw-r--r--layouts/default/ortho_5x12/readme.md2
-rw-r--r--layouts/default/ortho_5x14/default_ortho_5x14/keymap.c23
-rw-r--r--layouts/default/ortho_5x15/default_ortho_5x15/keymap.c25
-rw-r--r--layouts/default/ortho_5x15/readme.md2
-rw-r--r--layouts/default/ortho_5x4/default_ortho_5x4/keymap.c68
-rw-r--r--layouts/default/ortho_5x4/readme.md2
-rw-r--r--layouts/default/ortho_6x4/default_ortho_6x4/keymap.c71
-rw-r--r--layouts/default/ortho_6x4/readme.md2
-rw-r--r--layouts/default/planck_mit/default_planck_mit/keymap.c25
-rw-r--r--layouts/default/planck_mit/readme.md2
-rw-r--r--layouts/default/tkl_ansi/default_tkl_ansi/keymap.c32
-rw-r--r--layouts/default/tkl_ansi/readme.md2
-rw-r--r--layouts/default/tkl_iso/default_tkl_iso/keymap.c33
-rw-r--r--layouts/default/tkl_iso/readme.md2
-rw-r--r--lib/python/milc.py14
-rwxr-xr-xlib/python/qmk/cli/compile.py2
-rw-r--r--lib/python/qmk/cli/docs.py10
-rwxr-xr-xlib/python/qmk/cli/doctor.py67
-rw-r--r--lib/python/qmk/cli/flash.py5
-rw-r--r--lib/python/qmk/commands.py11
-rw-r--r--lib/python/qmk/tests/test_qmk_errors.py2
-rw-r--r--quantum/backlight/backlight.c21
-rw-r--r--quantum/backlight/backlight.h23
-rw-r--r--quantum/backlight/backlight_arm.c29
-rw-r--r--quantum/backlight/backlight_avr.c35
-rw-r--r--quantum/backlight/backlight_soft.c37
-rw-r--r--quantum/color.c14
-rw-r--r--quantum/color.h4
-rw-r--r--quantum/dynamic_keymap.c55
-rw-r--r--quantum/encoder.c26
-rw-r--r--quantum/keymap_common.c14
-rw-r--r--quantum/matrix.c88
-rw-r--r--quantum/matrix_common.c107
-rw-r--r--quantum/mcu_selection.mk123
-rw-r--r--quantum/process_keycode/process_magic.c178
-rw-r--r--quantum/process_keycode/process_magic.h20
-rw-r--r--quantum/process_keycode/process_rgb.c141
-rw-r--r--quantum/process_keycode/process_rgb.h20
-rw-r--r--quantum/process_keycode/process_steno.c4
-rw-r--r--quantum/process_keycode/process_steno.h4
-rw-r--r--quantum/process_keycode/process_terminal.c2
-rw-r--r--quantum/quantum.c470
-rw-r--r--quantum/quantum.h65
-rw-r--r--quantum/quantum_keycodes.h35
-rw-r--r--quantum/rgb_matrix.c28
-rw-r--r--quantum/rgb_matrix.h40
-rw-r--r--quantum/rgb_matrix_animations/gradient_left_right_anim.h22
-rw-r--r--quantum/rgb_matrix_animations/rgb_matrix_effects.inc1
-rw-r--r--quantum/rgb_matrix_drivers.c2
-rw-r--r--quantum/rgblight.c9
-rw-r--r--quantum/send_string_keycodes.h575
-rw-r--r--quantum/split_common/matrix.c124
-rw-r--r--quantum/split_common/matrix.h3
-rw-r--r--quantum/split_common/post_config.h2
-rw-r--r--quantum/split_common/split_util.c6
-rw-r--r--quantum/split_common/transport.c2
-rw-r--r--quantum/stm32/proton_c.mk4
-rw-r--r--quantum/template/base/keymaps/default/keymap.c2
-rw-r--r--quantum/via.c400
-rw-r--r--quantum/via.h151
-rw-r--r--readme.md4
-rw-r--r--requirements.txt1
-rw-r--r--show_options.mk8
-rw-r--r--tmk_core/avr.mk4
-rw-r--r--tmk_core/common.mk12
-rw-r--r--tmk_core/common/action.c14
-rw-r--r--tmk_core/common/action_tapping.c15
-rw-r--r--tmk_core/common/chibios/chibios_config.h24
-rw-r--r--tmk_core/common/command.c3
-rw-r--r--tmk_core/common/eeconfig.h2
-rw-r--r--tmk_core/common/keyboard.c26
-rw-r--r--tmk_core/common/keycode.h1
-rw-r--r--tmk_core/common/matrix.h7
-rw-r--r--tmk_core/common/mbed/bootloader.c3
-rw-r--r--tmk_core/common/mbed/suspend.c5
-rw-r--r--tmk_core/common/mbed/timer.c23
-rw-r--r--tmk_core/common/mbed/xprintf.cpp50
-rw-r--r--tmk_core/common/mbed/xprintf.h16
-rw-r--r--tmk_core/common/print.h33
-rw-r--r--tmk_core/common/wait.h2
-rw-r--r--tmk_core/ldscript_keymap_avr35.x268
-rw-r--r--tmk_core/ldscript_keymap_avr5.x268
-rw-r--r--tmk_core/protocol.mk27
-rw-r--r--tmk_core/protocol/chibios/main.c3
-rw-r--r--tmk_core/protocol/chibios/usb_main.c147
-rw-r--r--tmk_core/protocol/iwrap/main.c2
-rw-r--r--tmk_core/protocol/lufa/lufa.c11
-rw-r--r--tmk_core/protocol/mbed/HIDKeyboard.cpp260
-rw-r--r--tmk_core/protocol/mbed/HIDKeyboard.h32
-rw-r--r--tmk_core/protocol/mbed/mbed_driver.cpp21
-rw-r--r--tmk_core/protocol/mbed/mbed_driver.h3
-rw-r--r--tmk_core/protocol/ps2_io_mbed.c51
-rw-r--r--tmk_core/protocol/serial_soft.c3
-rw-r--r--tmk_core/protocol/vusb/main.c4
-rw-r--r--tmk_core/protocol/vusb/vusb.c13
-rw-r--r--tmk_core/rules.mk2
-rw-r--r--users/bcat/config.h20
-rw-r--r--users/csc027/csc027.c53
-rw-r--r--users/csc027/csc027.h29
-rw-r--r--users/csc027/custom_audio.c17
-rw-r--r--users/csc027/custom_audio.h8
-rw-r--r--users/csc027/custom_rgb.c25
-rw-r--r--users/csc027/custom_rgb.h9
-rw-r--r--users/csc027/defines.h270
-rw-r--r--users/csc027/rules.mk11
-rw-r--r--users/csc027/usb_led.c32
-rw-r--r--users/csc027/usb_led.h3
-rw-r--r--users/curry/.gitignore1
-rw-r--r--users/curry/LICENSE (renamed from keyboards/keebio/iris/keymaps/via/config.h)8
-rw-r--r--users/curry/README.md30
-rw-r--r--users/curry/config.h111
-rw-r--r--users/curry/curry.c130
-rw-r--r--users/curry/curry.h59
-rw-r--r--users/curry/glcdfont.c232
-rw-r--r--users/curry/leader.c24
-rw-r--r--users/curry/leader.h3
-rw-r--r--users/curry/oled.c163
-rw-r--r--users/curry/process_records.c76
-rw-r--r--users/curry/process_records.h86
-rw-r--r--users/curry/rgb_lighting_user.c325
-rw-r--r--users/curry/rgb_lighting_user.h19
-rw-r--r--users/curry/rgb_matrix_user.c144
-rw-r--r--users/curry/rgb_matrix_user.h7
-rw-r--r--users/curry/rgblight_breathe_table.h118
-rw-r--r--users/curry/rules.mk71
-rw-r--r--users/curry/tap_dances.c4
-rw-r--r--users/curry/tap_dances.h1
-rw-r--r--users/curry/wrappers.h88
-rw-r--r--users/d4mation/config.h1
-rw-r--r--users/d4mation/d4mation.c37
-rw-r--r--users/d4mation/d4mation.h17
-rw-r--r--users/d4mation/macros.c160
-rw-r--r--users/d4mation/macros.h23
-rw-r--r--users/d4mation/rules.mk15
-rw-r--r--users/d4mation/tap-dance.c6
-rw-r--r--users/d4mation/tap-dance.h7
-rw-r--r--users/d4mation/tap-hold.c28
-rw-r--r--users/d4mation/tap-hold.h5
-rw-r--r--users/d4mation/zalgo.c21
-rw-r--r--users/d4mation/zalgo.h5
-rw-r--r--users/drashna/drashna.c6
-rw-r--r--users/drashna/process_records.c8
-rw-r--r--users/drashna/rgb_stuff.c173
-rw-r--r--users/drashna/rules.mk6
-rw-r--r--users/hvp/hvp.h6
-rw-r--r--users/hvp/tap_dances.c66
-rw-r--r--users/hvp/tap_dances.h4
-rw-r--r--users/manna-harbour_miryoku/config.h3
-rw-r--r--users/manna-harbour_miryoku/manna-harbour_miryoku.c12
-rw-r--r--users/manna-harbour_miryoku/miryoku.org120
-rw-r--r--users/manna-harbour_miryoku/rules.mk4
-rw-r--r--users/mverteuil/.gitignore1
-rw-r--r--users/mverteuil/mverteuil.c (renamed from layouts/community/ergodox/drashna_glow/keymap.c)2
-rw-r--r--users/mverteuil/mverteuil.h21
-rw-r--r--users/mverteuil/rules.mk1
-rw-r--r--users/rossman360/readme.md14
-rw-r--r--users/rossman360/rossman360.c80
-rw-r--r--users/rossman360/rossman360.h28
-rw-r--r--users/rossman360/rules.mk5
-rw-r--r--users/stanrc85/stanrc85.c21
-rw-r--r--users/twschum/config.h0
-rw-r--r--users/twschum/readme.md14
-rw-r--r--users/twschum/rules.mk5
-rw-r--r--users/twschum/twschum.c257
-rw-r--r--users/twschum/twschum.h131
-rw-r--r--users/twschum/xtonhasvim.c593
-rw-r--r--users/twschum/xtonhasvim.h62
-rwxr-xr-xutil/activate_msys2.sh1
-rwxr-xr-xutil/activate_wsl.sh1
-rwxr-xr-xutil/atmega32a_program.py110
-rwxr-xr-xutil/docker_build.sh4
-rwxr-xr-xutil/linux_install.sh18
-rwxr-xr-xutil/macos_install.sh5
-rwxr-xr-xutil/msys2_install.sh66
-rwxr-xr-xutil/new_keyboard.sh21
-rwxr-xr-xutil/travis_compiled_push.sh2
-rwxr-xr-xutil/win_shared_install.sh4
1734 files changed, 64980 insertions, 20313 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 2e64ef16dd..57b415f7b3 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -2,7 +2,7 @@
name: Bug report
about: Create a report to help us improve QMK Firmware.
title: "[Bug] "
-labels: bug, help wanted, discussion
+labels: bug, help wanted
assignees: ''
---
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index f7eaa825b8..1876834247 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -2,7 +2,7 @@
name: Feature request
about: Suggest a new feature or changes to existing features.
title: "[Feature Request] "
-labels: enhancement, help wanted, discussion
+labels: enhancement, help wanted
assignees: ''
---
diff --git a/.github/ISSUE_TEMPLATE/other_issues.md b/.github/ISSUE_TEMPLATE/other_issues.md
index a0060a8ca6..befeeb165a 100644
--- a/.github/ISSUE_TEMPLATE/other_issues.md
+++ b/.github/ISSUE_TEMPLATE/other_issues.md
@@ -2,7 +2,7 @@
name: Other issues
about: Anything else that doesn't fall into the above categories.
title: ''
-labels: help wanted, question, discussion
+labels: help wanted, question
assignees: ''
---
diff --git a/.github/stale.yml b/.github/stale.yml
index b2c40591b7..eb49888191 100644
--- a/.github/stale.yml
+++ b/.github/stale.yml
@@ -17,6 +17,9 @@ pulls:
This pull request has been automatically marked as stale because it has not had
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
Please feel free to give a status update now, or re-open when it's ready.
+
+ For maintainers: Please label with `awaiting review`, `breaking_change`, `in progress`, or `on hold` to prevent
+ the issue from being re-flagged.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
Thank you for your contribution!
@@ -33,14 +36,17 @@ pulls:
# Issue specific configuration
issues:
- staleLabel: solved
+ staleLabel: stale
limitPerRun: 10
daysUntilStale: 90
daysUntilClose: 30
markComment: >
- This issue has been automatically marked as resolved because it has not had activity in the
+ This issue has been automatically marked as stale because it has not had activity in the
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
occurs.
+
+ For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
+ the issue from being re-flagged.
closeComment: >
This issue has been automatically closed because it has not had activity in the last 30 days.
If this issue is still valid, re-open the issue and let us know.
diff --git a/bin/qmk b/bin/qmk
index 4d5b3d884f..60555d3d70 100755
--- a/bin/qmk
+++ b/bin/qmk
@@ -25,6 +25,11 @@ with open(os.path.join(qmk_dir, 'requirements.txt'), 'r') as fd:
line = line.split('#')[0]
module = line.split('=')[0] if '=' in line else line
+
+ if module in ['pep8-naming']:
+ # Not every module is importable by its own name.
+ continue
+
if not find_spec(module):
print('Could not find module %s!' % module)
print('Please run `pip3 install -r requirements.txt` to install the python dependencies.')
diff --git a/bootloader.mk b/bootloader.mk
index d615533947..e516e9ff9f 100644
--- a/bootloader.mk
+++ b/bootloader.mk
@@ -82,6 +82,13 @@ ifeq ($(strip $(BOOTLOADER)), USBasp)
OPT_DEFS += -DBOOTLOADER_USBASP
BOOTLOADER_SIZE = 4096
endif
+ifeq ($(strip $(BOOTLOADER)), lufa-ms)
+ # DO NOT USE THIS BOOTLOADER IN NEW PROJECTS!
+ # It is extremely prone to bricking, and is only included to support existing boards.
+ OPT_DEFS += -DBOOTLOADER_MS
+ BOOTLOADER_SIZE = 6144
+ FIRMWARE_FORMAT = bin
+endif
ifdef BOOTLOADER_SIZE
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
diff --git a/build_json.mk b/build_json.mk
index 3e7dc95c0c..e04786144c 100644
--- a/build_json.mk
+++ b/build_json.mk
@@ -22,5 +22,5 @@ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
endif
# Generate the keymap.c
-$(KEYBOARD_OUTPUT)/src/keymap.c:
+$(KEYBOARD_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
bin/qmk json-keymap --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
diff --git a/common_features.mk b/common_features.mk
index e50207b0b4..6c3646db94 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -61,7 +61,7 @@ endif
ifeq ($(strip $(STENO_ENABLE)), yes)
OPT_DEFS += -DSTENO_ENABLE
- VIRTSER_ENABLE := yes
+ VIRTSER_ENABLE ?= yes
SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
endif
@@ -82,19 +82,19 @@ endif
ifeq ($(strip $(UCIS_ENABLE)), yes)
OPT_DEFS += -DUCIS_ENABLE
- UNICODE_COMMON = yes
+ UNICODE_COMMON := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c
endif
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
OPT_DEFS += -DUNICODEMAP_ENABLE
- UNICODE_COMMON = yes
+ UNICODE_COMMON := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c
endif
ifeq ($(strip $(UNICODE_ENABLE)), yes)
OPT_DEFS += -DUNICODE_ENABLE
- UNICODE_COMMON = yes
+ UNICODE_COMMON := yes
SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
endif
@@ -107,12 +107,13 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
OPT_DEFS += -DRGBLIGHT_ENABLE
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgblight.c
- CIE1931_CURVE = yes
- LED_BREATHING_TABLE = yes
+ CIE1931_CURVE := yes
+ LED_BREATHING_TABLE := yes
+ RGB_KEYCODES_ENABLE := yes
ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
else
- WS2812_DRIVER_REQUIRED = yes
+ WS2812_DRIVER_REQUIRED := yes
endif
endif
@@ -146,11 +147,12 @@ endif
SRC += $(QUANTUM_DIR)/color.c
SRC += $(QUANTUM_DIR)/rgb_matrix.c
SRC += $(QUANTUM_DIR)/rgb_matrix_drivers.c
- CIE1931_CURVE = yes
+ CIE1931_CURVE := yes
+ RGB_KEYCODES_ENABLE := yes
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
- RGB_MATRIX_ENABLE = IS31FL3731
+ RGB_MATRIX_ENABLE := IS31FL3731
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
@@ -176,7 +178,7 @@ endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812)
OPT_DEFS += -DWS2812
- WS2812_DRIVER_REQUIRED = yes
+ WS2812_DRIVER_REQUIRED := yes
endif
ifeq ($(strip $(RGB_MATRIX_CUSTOM_KB)), yes)
@@ -187,6 +189,10 @@ ifeq ($(strip $(RGB_MATRIX_CUSTOM_USER)), yes)
OPT_DEFS += -DRGB_MATRIX_CUSTOM_USER
endif
+ifeq ($(strip $(RGB_KEYCODES_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_rgb.c
+endif
+
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
OPT_DEFS += -DTAP_DANCE_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
@@ -226,37 +232,36 @@ endif
endif
ifeq ($(strip $(LCD_ENABLE)), yes)
- CIE1931_CURVE = yes
+ CIE1931_CURVE := yes
endif
# backward compat
ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
- BACKLIGHT_ENABLE = custom
+ BACKLIGHT_DRIVER := custom
endif
-VALID_BACKLIGHT_TYPES := yes software custom
+VALID_BACKLIGHT_TYPES := pwm software custom
BACKLIGHT_ENABLE ?= no
-ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
- ifeq ($(filter $(BACKLIGHT_ENABLE),$(VALID_BACKLIGHT_TYPES)),)
- $(error BACKLIGHT_ENABLE="$(BACKLIGHT_ENABLE)" is not a valid backlight type)
+BACKLIGHT_DRIVER ?= pwm
+ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
+ ifeq ($(filter $(BACKLIGHT_DRIVER),$(VALID_BACKLIGHT_TYPES)),)
+ $(error BACKLIGHT_DRIVER="$(BACKLIGHT_DRIVER)" is not a valid backlight type)
endif
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
- CIE1931_CURVE = yes
+ CIE1931_CURVE := yes
endif
COMMON_VPATH += $(QUANTUM_DIR)/backlight
SRC += $(QUANTUM_DIR)/backlight/backlight.c
OPT_DEFS += -DBACKLIGHT_ENABLE
- ifeq ($(strip $(BACKLIGHT_ENABLE)), software)
+ ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
+ OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
+ else ifeq ($(strip $(BACKLIGHT_DRIVER)), software)
SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c
else
- ifeq ($(strip $(BACKLIGHT_ENABLE)), custom)
- OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
- endif
-
ifeq ($(PLATFORM),AVR)
SRC += $(QUANTUM_DIR)/backlight/backlight_avr.c
else
@@ -273,6 +278,8 @@ ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
$(error WS2812_DRIVER="$(WS2812_DRIVER)" is not a valid WS2812 driver)
endif
+ OPT_DEFS += -DWS2812_DRIVER_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
ifeq ($(strip $(WS2812_DRIVER)), bitbang)
SRC += ws2812.c
else
@@ -287,12 +294,12 @@ endif
ifeq ($(strip $(CIE1931_CURVE)), yes)
OPT_DEFS += -DUSE_CIE1931_CURVE
- LED_TABLES = yes
+ LED_TABLES := yes
endif
ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
OPT_DEFS += -DUSE_LED_BREATHING_TABLE
- LED_TABLES = yes
+ LED_TABLES := yes
endif
ifeq ($(strip $(LED_TABLES)), yes)
@@ -342,6 +349,14 @@ ifeq ($(strip $(VELOCIKEY_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/velocikey.c
endif
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ DYNAMIC_KEYMAP_ENABLE := yes
+ RAW_ENABLE := yes
+ BOOTMAGIC_ENABLE := lite
+ SRC += $(QUANTUM_DIR)/via.c
+ OPT_DEFS += -DVIA_ENABLE
+endif
+
ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
OPT_DEFS += -DDYNAMIC_KEYMAP_ENABLE
SRC += $(QUANTUM_DIR)/dynamic_keymap.c
@@ -359,12 +374,28 @@ QUANTUM_SRC:= \
$(QUANTUM_DIR)/keymap_common.c \
$(QUANTUM_DIR)/keycode_config.c
-# Include the standard or split matrix code if needed
+
+
+VALID_CUSTOM_MATRIX_TYPES:= yes lite no
+
+CUSTOM_MATRIX ?= no
+
ifneq ($(strip $(CUSTOM_MATRIX)), yes)
- ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
- QUANTUM_SRC += $(QUANTUM_DIR)/split_common/matrix.c
- else
- QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
+ ifeq ($(filter $(CUSTOM_MATRIX),$(VALID_CUSTOM_MATRIX_TYPES)),)
+ $(error CUSTOM_MATRIX="$(CUSTOM_MATRIX)" is not a valid custom matrix type)
+ endif
+
+ # Include common stuff for all non custom matrix users
+ QUANTUM_SRC += $(QUANTUM_DIR)/matrix_common.c
+
+ # if 'lite' then skip the actual matrix implementation
+ ifneq ($(strip $(CUSTOM_MATRIX)), lite)
+ # Include the standard or split matrix code if needed
+ ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
+ QUANTUM_SRC += $(QUANTUM_DIR)/split_common/matrix.c
+ else
+ QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
+ endif
endif
endif
@@ -407,12 +438,18 @@ ifeq ($(strip $(SPACE_CADET_ENABLE)), yes)
OPT_DEFS += -DSPACE_CADET_ENABLE
endif
-ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
- SRC += $(QUANTUM_DIR)/dip_switch.c
- OPT_DEFS += -DDIP_SWITCH_ENABLE
+MAGIC_ENABLE ?= yes
+ifeq ($(strip $(MAGIC_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/process_keycode/process_magic.c
+ OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
endif
ifeq ($(strip $(DYNAMIC_MACRO_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_dynamic_macro.c
OPT_DEFS += -DDYNAMIC_MACRO_ENABLE
endif
+
+ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
+ SRC += $(QUANTUM_DIR)/dip_switch.c
+ OPT_DEFS += -DDIP_SWITCH_ENABLE
+endif
diff --git a/docs/_langs.md b/docs/_langs.md
index 7fb4a29d33..f7b375fb94 100644
--- a/docs/_langs.md
+++ b/docs/_langs.md
@@ -4,5 +4,6 @@
- [:es: Español](/es/)
- [:fr: Français](/fr-fr/)
- [:he: עברית](/he-il/)
+ - [:brazil: Português](/pt-br/)
- [:ru: РуÑÑкий](/ru-ru/)
- [:jp: 日本語](/ja/)
diff --git a/docs/_summary.md b/docs/_summary.md
index 808a8de4a0..de81481382 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -3,7 +3,10 @@
* [Building Your First Firmware](newbs_building_firmware.md)
* [Flashing Firmware](newbs_flashing.md)
* [Testing and Debugging](newbs_testing_debugging.md)
- * [Git Best Practices](newbs_best_practices.md)
+ * [Best Git Practices](newbs_git_best_practices.md)
+ * [Using Your Fork's Master](newbs_git_using_your_master_branch.md)
+ * [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
+ * [Resynchronizing a Branch](newbs_git_resynchronize_a_branch.md)
* [Learning Resources](newbs_learn_more_resources.md)
* [QMK Basics](README.md)
@@ -98,9 +101,11 @@
* [Hand Wiring Guide](hand_wire.md)
* [ISP Flashing Guide](isp_flashing_guide.md)
* [ARM Debugging Guide](arm_debugging.md)
+ * [ADC Driver](adc_driver.md)
* [I2C Driver](i2c_driver.md)
* [WS2812 Driver](ws2812_driver.md)
* [GPIO Controls](internals_gpio_control.md)
+ * [Custom Matrix](custom_matrix.md)
* [Proton C Conversion](proton_c_conversion.md)
* For a Deeper Understanding
@@ -111,7 +116,7 @@
* [Using Eclipse with QMK](other_eclipse.md)
* [Using VSCode with QMK](other_vscode.md)
* [Support](support.md)
- * [How to add translations](translating.md)
+ * [Translating the QMK Docs](translating.md)
* QMK Internals (In Progress)
* [Defines](internals_defines.md)
diff --git a/docs/adc_driver.md b/docs/adc_driver.md
new file mode 100644
index 0000000000..26e148addd
--- /dev/null
+++ b/docs/adc_driver.md
@@ -0,0 +1,50 @@
+# ADC Driver
+
+QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](feature_encoders.md).
+
+This driver is currently AVR-only. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V).
+
+## Usage
+
+To use this driver, add the following to your `rules.mk`:
+
+```make
+SRC += analog.c
+```
+
+Then place this include at the top of your code:
+
+```c
+#include "analog.h"
+```
+
+## Channels
+
+|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328P|
+|-------|-------------|-------------|---------|----------|
+|0 |`F0` |`F0` |`A0` |`C0` |
+|1 |`F1` |`F1` |`A1` |`C1` |
+|2 |`F2` | |`A2` |`C2` |
+|3 |`F3` | |`A3` |`C3` |
+|4 |`F4` |`F4` |`A4` |`C4` |
+|5 |`F5` |`F5` |`A5` |`C5` |
+|6 |`F6` |`F6` |`A6` |* |
+|7 |`F7` |`F7` |`A7` |* |
+|8 | |`D4` | | |
+|9 | |`D6` | | |
+|10 | |`D7` | | |
+|11 | |`B4` | | |
+|12 | |`B5` | | |
+|13 | |`B6` | | |
+
+<sup>\* The ATmega328P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup>
+
+## Functions
+
+|Function |Description |
+|----------------------------|-------------------------------------------------------------------------------------------------------------------|
+|`analogReference(mode)` |Sets the analog voltage reference source. Must be one of `ADC_REF_EXTERNAL`, `ADC_REF_POWER` or `ADC_REF_INTERNAL`.|
+|`analogRead(pin)` |Reads the value from the specified Arduino pin, eg. `4` for ADC6 on the ATmega32U4. |
+|`analogReadPin(pin)` |Reads the value from the specified QMK pin, eg. `F6` for ADC6 on the ATmega32U4. |
+|`pinToMux(pin)` |Translates a given QMK pin to a mux value. If an unsupported pin is given, returns the mux value for "0V (GND)". |
+|`adc_read(mux)` |Reads the value from the ADC according to the specified mux. See your MCU's datasheet for more information. |
diff --git a/docs/arm_debugging.md b/docs/arm_debugging.md
index 448b7a8fcc..04887d88b7 100644
--- a/docs/arm_debugging.md
+++ b/docs/arm_debugging.md
@@ -1,4 +1,4 @@
-# ARM Debugging usign Eclipse
+# ARM Debugging using Eclipse
This page describes how to setup debugging for ARM MCUs using an SWD adapter and open-source/free tools. In this guide we will install GNU MCU Eclipse IDE for C/C++ Developers and OpenOCD together with all the necessary dependencies.
@@ -18,7 +18,7 @@ XPM installation instructions can be found [here](https://www.npmjs.com/package/
### The ARM Toolchain
-Using XPM it is very easy to install the ARM toolchain. Enter the command `xpm install --global @gnu-mcu-eclipse/arm-none-eabi-gcc`.
+Using XPM it is very easy to install the ARM toolchain. Enter the command `xpm install --global @xpack-dev-tools/arm-none-eabi-gcc`.
### Windows build tools
@@ -33,7 +33,7 @@ If you have an ST-Link the drivers can be found [here](https://www.st.com/en/dev
### OpenOCD
-This dependency allows SWD access from GDB and it is essential for debugging. Run `xpm install --global @gnu-mcu-eclipse/openocd`.
+This dependency allows SWD access from GDB and it is essential for debugging. Run `xpm install --global @xpack-dev-tools/openocd`.
### Java
@@ -45,17 +45,17 @@ Now its finally time to install the IDE. Use the Release page [here](https://git
## Configuring Eclipse
-Open up the Eclipse IDE we just downloaded. To import our QMK directory select File -> Import -> C/C++ -> Existing code as Makefile Project. Select next and use Browse to select your QMK folder. In the tool-chain list select ARM Cross GCC and select Finish.
+Open up the Eclipse IDE we just downloaded. To import our QMK directory select File -> Import -> C/C++ -> Existing Code as Makefile Project. Select Next and use Browse to select your QMK folder. In the tool-chain list select ARM Cross GCC and select Finish.
-Now you can see the QMK folder on the left hand side. Right click it and select Properties. On the left hand side, expand MCU and select ARM Toolchain Paths. Press xPack and OK. Repeat for OpenOCD Path and if you are on windows for Build Tool Path. Select Apply and Close.
+Now you can see the QMK folder on the left hand side. Right click it and select Properties. On the left hand side, expand MCU and select ARM Toolchains Paths. Press xPack and OK. Repeat for OpenOCD Path and if you are on Windows for Build Tools Path. Select Apply and Close.
-Now its time to install the necessary MCU packages. Go to Packs perspective by selecting Window -> Open Perspective -> Others -> Packs. Now select the yellow refresh symbol next to the Packs tab. This will take a long time as it is requesting the MCU definitions from various places. If some of the links fail you can probably select Ignore.
+Now its time to install the necessary MCU packages. Go to Packs perspective by selecting Window -> Perspective -> Open Perspective -> Other... -> Packs. Now select the yellow refresh symbol next to the Packs tab. This will take a long time as it is requesting the MCU definitions from various places. If some of the links fail you can probably select Ignore.
-When this finishes you must find the MCU which we will be building/debugging for. In this example I will be using the STM32F3 series MCUs. On the left, select STMicroelectonics -> STM32F3 Series. On the middle window we can see the pack. Right click and select Install. Once that is done we can go back to the default perspective, Window -> Open Perspective -> Others -> C/C++.
+When this finishes you must find the MCU which we will be building/debugging for. In this example I will be using the STM32F3 series MCUs. On the left, select STMicroelectronics -> STM32F3 Series. On the middle window we can see the pack. Right click and select Install. Once that is done we can go back to the default perspective, Window -> Perspective -> Open Perspective -> Other... -> C/C++.
-We need to let eclipse know the device we intent to build QMK on. Right click on the QMK folder -> Properties -> C/C++ Build -> Settings. Select the Devices tab and under devices select the appropriate variant of your MCU. For my example it is STM32F303CC
+We need to let eclipse know the device we intent to build QMK on. Right click on the QMK folder -> Properties -> C/C++ Build -> Settings. Select the Devices tab and under Devices select the appropriate variant of your MCU. For my example it is STM32F303CC
-While we are here let's setup the build command as well. Select C/C++ Build and then the Behavior tab. On the build command, replace `all` with your necessary make command. For example for a rev6 Planck with the default keymap this would be `planck/rev6:default`. Select Apply and Close.
+While we are here let's setup the build command as well. Select C/C++ Build and then the Behavior tab. On the Build command, replace `all` with your necessary make command. For example for a rev6 Planck with the default keymap this would be `planck/rev6:default`. Select Apply and Close.
## Building
@@ -71,7 +71,7 @@ NOTE: Make sure the SWCLK and SWDIO pins are not used in the matrix of your keyb
### Configuring the Debugger
-Right click on your QMK folder, select Debug As -> Debug Configuration. Here double click on GDB OpenOCD Debugging. Select the debugger tab and enter the configuration necessary for your MCU. This might take some fiddling and googleing to find out. The default script for the STM32F3 is called stm32f3discovery.cfg. To let OpenOCD know, in the Config options enter `-f board/stm32f3discovery.cfg`.
+Right click on your QMK folder, select Debug As -> Debug Configurations... . Here double click on GDB OpenOCD Debugging. Select the Debugger tab and enter the configuration necessary for your MCU. This might take some fiddling and Googling to find out. The default script for the STM32F3 is called `stm32f3discovery.cfg`. To let OpenOCD know, in the Config options enter `-f board/stm32f3discovery.cfg`.
NOTE: In my case this configuration script requires editing to disable the reset assertion. The locations of the scripts can be found in the actual executable field usually under the path `openocd/version/.content/scripts/board`. Here I edited `reset_config srst_only` to `reset_config none`.
@@ -81,7 +81,7 @@ Select Apply and Close.
Reset your keyboard.
-Press the bug icon and if all goes well you should soon find yourself in the debug perspective. Here the program counter will pause at the beginning of the main function and way for you to press Play. Most of the features of all debuggers work on ARM MCUs but for exact details google is your friend!
+Press the bug icon and if all goes well you should soon find yourself in the Debug perspective. Here the program counter will pause at the beginning of the main function and wait for you to press Play. Most of the features of all debuggers work on Arm MCUs but for exact details Google is your friend!
Happy debugging!
diff --git a/docs/breaking_changes.md b/docs/breaking_changes.md
index b5bcb7a1c7..56d14438d7 100644
--- a/docs/breaking_changes.md
+++ b/docs/breaking_changes.md
@@ -10,16 +10,16 @@ The breaking change period is when we will merge PR's that change QMK in dangero
## When is the next Breaking Change?
-The next Breaking Change is scheduled for Nov 29.
+The next Breaking Change is scheduled for February 29, 2020.
### Important Dates
* [x] 2019 Sep 21 - `future` is created. It will be rebased weekly.
-* [ ] 2019 Nov 01 - `future` closed to new PR's.
-* [ ] 2019 Nov 01 - Call for testers.
-* [ ] 2019 Nov 27 - `master` is locked, no PR's merged.
-* [ ] 2019 Nov 29 - Merge `future` to `master`.
-* [ ] 2019 Nov 30 - `master` is unlocked. PR's can be merged again.
+* [ ] 2020 Feb 1 - `future` closed to new PR's.
+* [ ] 2020 Feb 1 - Call for testers.
+* [ ] 2020 Feb 26 - `master` is locked, no PR's merged.
+* [ ] 2020 Feb 28 - Merge `future` to `master`.
+* [ ] 2020 Feb 29 - `master` is unlocked. PR's can be merged again.
## What changes will be included?
diff --git a/docs/coding_conventions_c.md b/docs/coding_conventions_c.md
index 08994bfbb7..16e28b2884 100644
--- a/docs/coding_conventions_c.md
+++ b/docs/coding_conventions_c.md
@@ -14,7 +14,7 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
* Think of them as a story describing the feature
* Use them liberally to explain why particular decisions were made.
* Do not write obvious comments
- * If you not sure if a comment is obvious, go ahead and include it.
+ * If you're not sure if a comment is obvious, go ahead and include it.
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
index 694aa38cfc..1aefc044e8 100644
--- a/docs/coding_conventions_python.md
+++ b/docs/coding_conventions_python.md
@@ -8,7 +8,7 @@ Most of our style follows PEP8 with some local modifications to make things less
* Think of them as a story describing the feature
* Use them liberally to explain why particular decisions were made.
* Do not write obvious comments
- * If you not sure if a comment is obvious, go ahead and include it.
+ * If you're not sure if a comment is obvious, go ahead and include it.
* We require useful docstrings for all functions.
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas.
@@ -309,6 +309,18 @@ FIXME(username): Revisit this code when the frob feature is done.
...where username is your GitHub username.
-# Unit Tests
+# Testing
-These are good. We should have some one day.
+We use a combination of Integration and Unit testing to ensure that the our code is as bug-free as possible. All the tests can be found in `lib/python/qmk/tests/`. You can run all the tests with `qmk pytest`.
+
+At the time of this writing our tests are not very comprehensive. Looking at the current tests and writing new test cases for untested situations is a great way to both familiarize yourself with the codebase and contribute to QMK.
+
+## Integration Tests
+
+Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.5/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
+
+## Unit Tests
+
+The other `test_*.py` files in `lib/python/qmk/tests/` contain unit tests. You can write tests for individual functions inside `lib/python/qmk/` here. Generally these files are named after the module, with dots replaced by underscores.
+
+At the time of this writing we do not do any mocking for our tests. If you would like to help us change this please [open an issue](https://github.com/qmk/qmk_firmware/issues/new?assignees=&labels=cli%2C+python&template=other_issues.md&title=) or [join #cli on Discord](https://discord.gg/heQPAgy) and start a conversation there.
diff --git a/docs/config_options.md b/docs/config_options.md
index 0cf3fb78a6..6df0823356 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -143,10 +143,14 @@ If you define these options you will enable the associated feature, which may in
* `#define IGNORE_MOD_TAP_INTERRUPT`
* makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the `TAPPING_TERM` for both keys.
* See [Mod tap interrupt](feature_advanced_keycodes.md#ignore-mod-tap-interrupt) for details
+* `#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
+ * enables handling for per key `IGNORE_MOD_TAP_INTERRUPT` settings
* `#define TAPPING_FORCE_HOLD`
* makes it possible to use a dual role key as modifier shortly after having been tapped
* See [Hold after tap](feature_advanced_keycodes.md#tapping-force-hold)
* Breaks any Tap Toggle functionality (`TT` or the One Shot Tap Toggle)
+* `#define TAPPING_FORCE_HOLD_PER_KEY`
+ * enables handling for per key `TAPPING_FORCE_HOLD` settings
* `#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.
@@ -287,8 +291,27 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building.
* `SRC`
* Used to add files to the compilation/linking list.
+* `LIB_SRC`
+ * Used to add files as a library to the compilation/linking list.
+ The files specified by `LIB_SRC` is linked after the files specified by `SRC`.
+ For example, if you specify:
+ ```
+ SRC += a.c
+ LIB_SRC += lib_b.c
+ SRC += c.c
+ LIB_SRC += lib_d.c
+ ```
+ The link order is as follows.
+ ```
+ ... a.o c.o ... lib_b.a lib_d.a ...
+ ```
* `LAYOUTS`
* A list of [layouts](feature_layouts.md) this keyboard supports.
+* `LINK_TIME_OPTIMIZATION_ENABLE`
+ * Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled.
+ It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
+* `LTO_ENABLE`
+ * It has the same meaning as LINK_TIME_OPTIMIZATION_ENABLE. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
## AVR MCU Options
* `MCU = atmega32u4`
@@ -347,9 +370,6 @@ Use these to enable or disable building certain features. The more you have enab
* Forces the keyboard to wait for a USB connection to be established before it starts up
* `NO_USB_STARTUP_CHECK`
* Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
-* `LINK_TIME_OPTIMIZATION_ENABLE`
- * Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
- * Alternatively, you can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
## USB Endpoint Limitations
diff --git a/docs/contributing.md b/docs/contributing.md
index 04dc0da20f..c4d5057a07 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -85,7 +85,7 @@ Limited experimentation on the devices I have available shows that 7 is high eno
Documentation is one of the easiest ways to get started contributing to QMK. Finding places where the documentation is wrong or incomplete and fixing those is easy! We also very badly need someone to edit our documentation, so if you have editing skills but aren't sure where or how to jump in please [reach out for help](#where-can-i-go-for-help)!
-You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click "Suggest An Edit" at the top of each page on http://docs.qmk.fm/.
+You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click the "Edit this page" link at the bottom of each page on https://docs.qmk.fm/.
When providing code examples in your documentation, try to observe naming conventions used elsewhere in the docs. For example, standardizing enums as `my_layers` or `my_keycodes` for consistency:
@@ -101,6 +101,18 @@ enum my_keycodes {
};
```
+### Previewing the Documentation
+
+Before opening a pull request, you can preview your changes if you have set up the development environment by running this command from the `qmk_firmware/` folder:
+
+ ./bin/qmk docs
+
+or if you only have Python 3 installed:
+
+ python3 -m http.server 8936
+
+and navigating to `http://localhost:8936/`.
+
## Keymaps
Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.
diff --git a/docs/custom_matrix.md b/docs/custom_matrix.md
new file mode 100644
index 0000000000..cfa900a33d
--- /dev/null
+++ b/docs/custom_matrix.md
@@ -0,0 +1,108 @@
+# Custom Matrix
+
+QMK provides a mechanism to supplement or replace the default matrix scanning routine with your own code.
+
+The reasons to use this feature include:
+
+* Extra hardware between the keyboard's switches and MCU pins
+ * I/O multiplexer
+ * Line decoder
+* Irregular switch matrix
+ * Simultaneous use of `COL2ROW` and `ROW2COL`
+
+## Prerequisites
+
+Implementing custom matrix usually involves compilation of an additional source file. It is recommended that for consistency, this file is called `matrix.c`.
+
+Add a new file to your keyboard directory:
+```text
+keyboards/<keyboard>/matrix.c
+```
+
+And to configure compilation for the new file, add this to your `rules.mk`:
+```make
+SRC += matrix.c
+```
+
+## 'lite'
+
+Provides a default implementation for various scanning functions, reducing the boilerplate code when implementing custom matrix.
+To configure it, add this to your `rules.mk`:
+
+```make
+CUSTOM_MATRIX = lite
+```
+
+And implement the following functions in a `matrix.c` file in your keyboard folder:
+
+```c
+void matrix_init_custom(void) {
+ // TODO: initialize hardware here
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool matrix_has_changed = false;
+
+ // TODO: add matrix scanning routine here
+
+ return matrix_has_changed;
+}
+```
+
+
+## Full Replacement
+
+When more control over the scanning routine is required, you can choose to implement the full scanning routine.
+To configure it, add this to your rules.mk:
+
+```make
+CUSTOM_MATRIX = yes
+```
+
+And implement the following functions in a `matrix.c` file in your keyboard folder:
+
+```c
+matrix_row_t matrix_get_row(uint8_t row) {
+ // TODO: return the requested row data
+}
+
+void matrix_print(void) {
+ // TODO: use print() to dump the current matrix state to console
+}
+
+void matrix_init(void) {
+ // TODO: initialize hardware and global matrix state here
+
+ // Unless hardware debouncing - Init the configured debounce routine
+ debounce_init(MATRIX_ROWS);
+
+ // This *must* be called for correct keyboard behavior
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ bool matrix_has_changed = false;
+
+ // TODO: add matrix scanning routine here
+
+ // Unless hardware debouncing - use the configured debounce routine
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ // This *must* be called for correct keyboard behavior
+ matrix_scan_quantum();
+
+ return matrix_has_changed;
+}
+```
+
+And also provide defaults for the following callbacks:
+
+```c
+__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) {}
+```
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md
index 2d505b0751..9c8f89ae18 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -114,7 +114,15 @@ Two more deprecated functions exist that provide the LED state as a `uint8_t`:
This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter.
-You must return either `true` or `false` from this function, depending on whether you want to override the keyboard-level implementation.
+By convention, return `true` from `led_update_user()` to get the `led_update_kb()` hook to run its code, and
+return `false` when you would prefer not to run the code in `led_update_kb()`.
+
+Some examples include:
+
+ - overriding the LEDs to use them for something else like layer indication
+ - return `false` because you do not want the `_kb()` function to run, as it would override your layer behavior.
+ - play a sound when an LED turns on or off.
+ - return `true` because you want the `_kb` function to run, and this is in addition to the default LED behavior.
?> Because the `led_set_*` functions return `void` instead of `bool`, they do not allow for overriding the keyboard LED control, and thus it's recommended to use `led_update_*` instead.
@@ -122,66 +130,41 @@ You must return either `true` or `false` from this function, depending on whethe
```c
bool led_update_kb(led_t led_state) {
- if(led_update_user(led_state)) {
- if (led_state.num_lock) {
- writePinLow(B0);
- } else {
- writePinHigh(B0);
- }
- if (led_state.caps_lock) {
- writePinLow(B1);
- } else {
- writePinHigh(B1);
- }
- if (led_state.scroll_lock) {
- writePinLow(B2);
- } else {
- writePinHigh(B2);
- }
- if (led_state.compose) {
- writePinLow(B3);
- } else {
- writePinHigh(B3);
- }
- if (led_state.kana) {
- writePinLow(B4);
- } else {
- writePinHigh(B4);
- }
- return true;
+ bool res = led_update_user(led_state);
+ if(res) {
+ // writePin sets the pin high for 1 and low for 0.
+ // In this example the pins are inverted, setting
+ // it low/0 turns it on, and high/1 turns the LED off.
+ // This behavior depends on whether the LED is between the pin
+ // and VCC or the pin and GND.
+ writePin(B0, !led_state.num_lock);
+ writePin(B1, !led_state.caps_lock);
+ writePin(B2, !led_state.scroll_lock);
+ writePin(B3, !led_state.compose);
+ writePin(B4, !led_state.kana);
}
+ return res;
}
```
### Example `led_update_user()` Implementation
+This incomplete example would play a sound if Caps Lock is turned on or off. It returns `true`, because you also want the LEDs to maintain their state.
+
```c
+#ifdef AUDIO_ENABLE
+ float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
+ float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
+#endif
+
bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- writePinLow(B0);
- } else {
- writePinHigh(B0);
- }
- if (led_state.caps_lock) {
- writePinLow(B1);
- } else {
- writePinHigh(B1);
- }
- if (led_state.scroll_lock) {
- writePinLow(B2);
- } else {
- writePinHigh(B2);
- }
- if (led_state.compose) {
- writePinLow(B3);
- } else {
- writePinHigh(B3);
- }
- if (led_state.kana) {
- writePinLow(B4);
- } else {
- writePinHigh(B4);
+ #ifdef AUDIO_ENABLE
+ static uint8_t caps_state = 0;
+ if (caps_state != led_state.caps_lock) {
+ led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
+ caps_state = led_state.caps_lock;
}
+ #endif
return true;
}
```
@@ -411,7 +394,7 @@ void keyboard_post_init_user(void) {
// Set default layer, if enabled
if (user_config.rgb_layer_change) {
rgblight_enable_noeeprom();
- rgblight_sethsv_noeeprom_cyan();
+ rgblight_sethsv_noeeprom_cyan();
rgblight_mode_noeeprom(1);
}
}
@@ -459,18 +442,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true; // Let QMK send the enter press/release events
case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
- if (record->event.pressed) {
+ if (record->event.pressed) {
user_config.rgb_layer_change ^= 1; // Toggles the status
eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
- if (user_config.rgb_layer_change) { // if layer state indication is enabled,
+ if (user_config.rgb_layer_change) { // if layer state indication is enabled,
layer_state_set(layer_state); // then immediately update the layer color
}
}
return false; break;
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
- if (user_config.rgb_layer_change) { // only if this is enabled
- user_config.rgb_layer_change = false; // disable it, and
+ if (user_config.rgb_layer_change) { // only if this is enabled
+ user_config.rgb_layer_change = false; // disable it, and
eeconfig_update_user(user_config.raw); // write the setings to EEPROM
}
}
@@ -483,7 +466,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
```c
-void eeconfig_init_user(void) { // EEPROM is getting reset!
+void eeconfig_init_user(void) { // EEPROM is getting reset!
user_config.raw = 0;
user_config.rgb_layer_change = true; // We want this enabled by default
eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
@@ -506,14 +489,24 @@ The `val` is the value of the data that you want to write to EEPROM. And the `e
# Custom Tapping Term
-By default, the tapping term is defined globally, and is not configurable by key. For most users, this is perfectly fine. But in come cases, dual function keys would be greatly improved by different timeouts than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable `TAPPING_TERM`.
+By default, the tapping term and related options (such as `IGNORE_MOD_TAP_INTERRUPT`) are defined globally, and are not configurable by key. For most users, this is perfectly fine. But in some cases, dual function keys would be greatly improved by different timeout behaviors than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable timeout behaviors.
+
+There are two configurable options to control per-key timeout behaviors:
-To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
+- `TAPPING_TERM_PER_KEY`
+- `IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
+
+You need to add `#define` lines to your `config.h` for each feature you want.
+
+```
+#define TAPPING_TERM_PER_KEY
+#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+```
## Example `get_tapping_term` Implementation
-To change the `TAPPING TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file:
+To change the `TAPPING_TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file:
```c
uint16_t get_tapping_term(uint16_t keycode) {
@@ -528,6 +521,21 @@ uint16_t get_tapping_term(uint16_t keycode) {
}
```
-### `get_tapping_term` Function Documentation
+## Example `get_ignore_mod_tap_interrupt` Implementation
+
+To change the `IGNORE_MOD_TAP_INTERRUPT` value based on the keycode, you'd want to add something like the following to your `keymap.c` file:
+
+```c
+bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
+## `get_tapping_term` / `get_ignore_mod_tap_interrupt` Function Documentation
-Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only a user level function is useful here, so no need to mark it as such.
+Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only user level functions are useful here, so no need to mark them as such.
diff --git a/docs/de/_summary.md b/docs/de/_summary.md
index 37768355f2..f3ce806baa 100644
--- a/docs/de/_summary.md
+++ b/docs/de/_summary.md
@@ -111,7 +111,7 @@
* [Support](de/support.md)
* [Ãœbersetzungen](de/translating.md)
-* QMK Internals (de/In Progress)
+* QMK Internals (In Progress)
* [Defines](de/internals_defines.md)
* [Input Callback Reg](de/internals_input_callback_reg.md)
* [Midi Device](de/internals_midi_device.md)
diff --git a/docs/es/README.md b/docs/es/README.md
index 73e7a7097d..d39b278008 100644
--- a/docs/es/README.md
+++ b/docs/es/README.md
@@ -19,7 +19,7 @@ De cualquier manera, también puedes descargarlo directamente en formatos ([zip]
## Cómo compilar
-Antes de poder compilar, necesitarás [instalar un entorno](getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación:
+Antes de poder compilar, necesitarás [instalar un entorno](es/getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación:
make planck/rev4:default
@@ -29,4 +29,4 @@ Este ejemplo compilaría la revisión `rev4` del teclado `planck` con el keymap
## Cómo personalizar
-QMK tiene montones de [características](features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](keymap.md), y cambiando los [keycodes](keycodes.md).
+QMK tiene montones de [características](es/features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](es/keymap.md), y cambiando los [keycodes](es/keycodes.md).
diff --git a/docs/es/_summary.md b/docs/es/_summary.md
index 684d7ab6cd..03bf05ba8b 100644
--- a/docs/es/_summary.md
+++ b/docs/es/_summary.md
@@ -1,121 +1,121 @@
-* [Guía completa para novatos](newbs.md)
- * [Empezando](newbs_getting_started.md)
- * [Construyendo tu primer firmare](newbs_building_firmware.md)
- * [Flasheando el firmware](newbs_flashing.md)
- * [Testeando y depurando ](newbs_testing_debugging.md)
- * [Mejores práticas](newbs_best_practices.md)
- * [Recursos de aprendizaje](newbs_learn_more_resources.md)
+* [Guía completa para novatos](es/newbs.md)
+ * [Empezando](es/newbs_getting_started.md)
+ * [Construyendo tu primer firmare](es/newbs_building_firmware.md)
+ * [Flasheando el firmware](es/newbs_flashing.md)
+ * [Testeando y depurando ](es/newbs_testing_debugging.md)
+ * [Mejores práticas](es/newbs_best_practices.md)
+ * [Recursos de aprendizaje](es/newbs_learn_more_resources.md)
-* [QMK Basics](README.md)
- * [Introducción a QMK](getting_started_introduction.md)
- * [QMK CLI](cli.md)
- * [Configuración de QMK CLI](cli_configuration.md)
- * [Contribuyendo a QMK](contributing.md)
- * [Cómo usar Github](getting_started_github.md)
- * [Obtener ayuda](getting_started_getting_help.md)
+* [QMK Basics](es/README.md)
+ * [Introducción a QMK](es/getting_started_introduction.md)
+ * [QMK CLI](es/cli.md)
+ * [Configuración de QMK CLI](es/cli_configuration.md)
+ * [Contribuyendo a QMK](es/contributing.md)
+ * [Cómo usar Github](es/getting_started_github.md)
+ * [Obtener ayuda](es/getting_started_getting_help.md)
-* [Cambios incompatibles](breaking_changes.md)
- * [30 Ago 2019](ChangeLog/20190830.md)
+* [Cambios incompatibles](es/breaking_changes.md)
+ * [30 Ago 2019](es/ChangeLog/20190830.md)
-* [Preguntas frecuentes](faq.md)
- * [General](faq_general.md)
- * [Construir/Compilar QMK](faq_build.md)
- * [Depurando/Encontrando problemas en QMK](faq_debug.md)
- * [Keymap](faq_keymap.md)
- * [Instalación de drivers con Zadig](driver_installation_zadig.md)
+* [Preguntas frecuentes](es/faq.md)
+ * [General](es/faq_general.md)
+ * [Construir/Compilar QMK](es/faq_build.md)
+ * [Depurando/Encontrando problemas en QMK](es/faq_debug.md)
+ * [Keymap](es/faq_keymap.md)
+ * [Instalación de drivers con Zadig](es/driver_installation_zadig.md)
* Guías detalladas
- * [Instalar herramientas construcción](getting_started_build_tools.md)
- * [Guía Vagrant](getting_started_vagrant.md)
- * [Instrucciones de Construcción/Compilado](getting_started_make_guide.md)
- * [Flasheando Firmware](flashing.md)
- * [Personalizando funcionalidad](custom_quantum_functions.md)
- * [Visión general del Keymap](keymap.md)
+ * [Instalar herramientas construcción](es/getting_started_build_tools.md)
+ * [Guía Vagrant](es/getting_started_vagrant.md)
+ * [Instrucciones de Construcción/Compilado](es/getting_started_make_guide.md)
+ * [Flasheando Firmware](es/flashing.md)
+ * [Personalizando funcionalidad](es/custom_quantum_functions.md)
+ * [Visión general del Keymap](es/keymap.md)
-* [Hardware](hardware.md)
- * [Procesadores AVR](hardware_avr.md)
- * [Drivers](hardware_drivers.md)
+* [Hardware](es/hardware.md)
+ * [Procesadores AVR](es/hardware_avr.md)
+ * [Drivers](es/hardware_drivers.md)
* Referencia
- * [Pautas de teclados](hardware_keyboard_guidelines.md)
- * [Opciones de configuración](config_options.md)
- * [Keycodes](keycodes.md)
- * [Convenciones de código - C](coding_conventions_c.md)
- * [Convenciones de código - Python](coding_conventions_python.md)
- * [Mejores prácticas de documentación](documentation_best_practices.md)
- * [Plantillas de documentación](documentation_templates.md)
- * [Glosario](reference_glossary.md)
- * [Tests unitarios](unit_testing.md)
- * [Funciones útiles](ref_functions.md)
- * [Sporte configurador](reference_configurator_support.md)
- * [Formato info.json](reference_info_json.md)
- * [Desarrollo Python CLI](cli_development.md)
+ * [Pautas de teclados](es/hardware_keyboard_guidelines.md)
+ * [Opciones de configuración](es/config_options.md)
+ * [Keycodes](es/keycodes.md)
+ * [Convenciones de código - C](es/coding_conventions_c.md)
+ * [Convenciones de código - Python](es/coding_conventions_python.md)
+ * [Mejores prácticas de documentación](es/documentation_best_practices.md)
+ * [Plantillas de documentación](es/documentation_templates.md)
+ * [Glosario](es/reference_glossary.md)
+ * [Tests unitarios](es/unit_testing.md)
+ * [Funciones útiles](es/ref_functions.md)
+ * [Sporte configurador](es/reference_configurator_support.md)
+ * [Formato info.json](es/reference_info_json.md)
+ * [Desarrollo Python CLI](es/cli_development.md)
-* [Características](features.md)
- * [Keycodes Básicos](keycodes_basic.md)
- * [Teclas US ANSI Shifted](keycodes_us_ansi_shifted.md)
- * [Keycodes Quantum](quantum_keycodes.md)
- * [Keycodes Avanzados](feature_advanced_keycodes.md)
- * [Audio](feature_audio.md)
- * [Auto Shift](feature_auto_shift.md)
- * [Retroiluminación](feature_backlight.md)
- * [Bluetooth](feature_bluetooth.md)
- * [Bootmagic](feature_bootmagic.md)
- * [Combos](feature_combo.md)
- * [Comando](feature_command.md)
- * [API Debounce](feature_debounce_type.md)
- * [Switch DIP](feature_dip_switch.md)
- * [Macros Dinámicas](feature_dynamic_macros.md)
- * [Encoders](feature_encoders.md)
- * [Grave Escape](feature_grave_esc.md)
- * [Feedback Háptico](feature_haptic_feedback.md)
- * [Controlador LCD HD44780](feature_hd44780.md)
- * [Key Lock](feature_key_lock.md)
- * [Layouts](feature_layouts.md)
- * [Tecla Leader](feature_leader_key.md)
- * [Matriz LED](feature_led_matrix.md)
- * [Macros](feature_macros.md)
- * [Teclas del ratón](feature_mouse_keys.md)
- * [Driver OLED](feature_oled_driver.md)
- * [Teclas One Shot](feature_advanced_keycodes.md#one-shot-keys)
- * [Dispositivo de apuntado](feature_pointing_device.md)
- * [Ratón PS/2](feature_ps2_mouse.md)
- * [Iluminación RGB](feature_rgblight.md)
- * [Matriz RGB](feature_rgb_matrix.md)
- * [Cadete espacial](feature_space_cadet.md)
- * [Teclado dividido](feature_split_keyboard.md)
- * [Stenografía](feature_stenography.md)
- * [Swap Hands](feature_swap_hands.md)
- * [Tap Dance](feature_tap_dance.md)
- * [Terminal](feature_terminal.md)
- * [Impresora Térmica](feature_thermal_printer.md)
- * [Unicode](feature_unicode.md)
- * [Userspace](feature_userspace.md)
- * [Velocikey](feature_velocikey.md)
+* [Características](es/features.md)
+ * [Keycodes Básicos](es/keycodes_basic.md)
+ * [Teclas US ANSI Shifted](es/keycodes_us_ansi_shifted.md)
+ * [Keycodes Quantum](es/quantum_keycodes.md)
+ * [Keycodes Avanzados](es/feature_advanced_keycodes.md)
+ * [Audio](es/feature_audio.md)
+ * [Auto Shift](es/feature_auto_shift.md)
+ * [Retroiluminación](es/feature_backlight.md)
+ * [Bluetooth](es/feature_bluetooth.md)
+ * [Bootmagic](es/feature_bootmagic.md)
+ * [Combos](es/feature_combo.md)
+ * [Comando](es/feature_command.md)
+ * [API Debounce](es/feature_debounce_type.md)
+ * [Switch DIP](es/feature_dip_switch.md)
+ * [Macros Dinámicas](es/feature_dynamic_macros.md)
+ * [Encoders](es/feature_encoders.md)
+ * [Grave Escape](es/feature_grave_esc.md)
+ * [Feedback Háptico](es/feature_haptic_feedback.md)
+ * [Controlador LCD HD44780](es/feature_hd44780.md)
+ * [Key Lock](es/feature_key_lock.md)
+ * [Layouts](es/feature_layouts.md)
+ * [Tecla Leader](es/feature_leader_key.md)
+ * [Matriz LED](es/feature_led_matrix.md)
+ * [Macros](es/feature_macros.md)
+ * [Teclas del ratón](es/feature_mouse_keys.md)
+ * [Driver OLED](es/feature_oled_driver.md)
+ * [Teclas One Shot](es/feature_advanced_keycodes.md#one-shot-keys)
+ * [Dispositivo de apuntado](es/feature_pointing_device.md)
+ * [Ratón PS/2](es/feature_ps2_mouse.md)
+ * [Iluminación RGB](es/feature_rgblight.md)
+ * [Matriz RGB](es/feature_rgb_matrix.md)
+ * [Cadete espacial](es/feature_space_cadet.md)
+ * [Teclado dividido](es/feature_split_keyboard.md)
+ * [Stenografía](es/feature_stenography.md)
+ * [Swap Hands](es/feature_swap_hands.md)
+ * [Tap Dance](es/feature_tap_dance.md)
+ * [Terminal](es/feature_terminal.md)
+ * [Impresora Térmica](es/feature_thermal_printer.md)
+ * [Unicode](es/feature_unicode.md)
+ * [Userspace](es/feature_userspace.md)
+ * [Velocikey](es/feature_velocikey.md)
* Para Makers y Modders
- * [Guía de cableado a mano](hand_wire.md)
- * [Guía de flasheado de ISP](isp_flashing_guide.md)
- * [Guía de depuración de ARM](arm_debugging.md)
- * [Driver I2C](i2c_driver.md)
- * [Controles GPIO](internals_gpio_control.md)
- * [Conversión Proton C](proton_c_conversion.md)
+ * [Guía de cableado a mano](es/hand_wire.md)
+ * [Guía de flasheado de ISP](es/isp_flashing_guide.md)
+ * [Guía de depuración de ARM](es/arm_debugging.md)
+ * [Driver I2C](es/i2c_driver.md)
+ * [Controles GPIO](es/internals_gpio_control.md)
+ * [Conversión Proton C](es/proton_c_conversion.md)
* Para entender en profundidad
- * [Cómo funcionan los teclados](how_keyboards_work.md)
- * [Entendiendo QMK](understanding_qmk.md)
+ * [Cómo funcionan los teclados](es/how_keyboards_work.md)
+ * [Entendiendo QMK](es/understanding_qmk.md)
* Otros temas
- * [Usando Eclipse con QMK](other_eclipse.md)
- * [Usando VSCode con QMK](other_vscode.md)
- * [Soporte](support.md)
- * [Cómo añadir traducciones](translating.md)
+ * [Usando Eclipse con QMK](es/other_eclipse.md)
+ * [Usando VSCode con QMK](es/other_vscode.md)
+ * [Soporte](es/support.md)
+ * [Cómo añadir traducciones](es/translating.md)
* QMK Internals (En progreso)
- * [Defines](internals_defines.md)
- * [Input Callback Reg](internals_input_callback_reg.md)
- * [Dispositivo Midi](internals_midi_device.md)
- * [Proceso de configuración de un dispositivo Midi](internals_midi_device_setup_process.md)
- * [Utilidad Midi](internals_midi_util.md)
- * [Funciones Send](internals_send_functions.md)
- * [Herramientas Sysex](internals_sysex_tools.md)
+ * [Defines](es/internals_defines.md)
+ * [Input Callback Reg](es/internals_input_callback_reg.md)
+ * [Dispositivo Midi](es/internals_midi_device.md)
+ * [Proceso de configuración de un dispositivo Midi](es/internals_midi_device_setup_process.md)
+ * [Utilidad Midi](es/internals_midi_util.md)
+ * [Funciones Send](es/internals_send_functions.md)
+ * [Herramientas Sysex](es/internals_sysex_tools.md)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index f11cb76aa2..70a16afea4 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -47,7 +47,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
```
-**/etc/udev/rules.d/55-catalina.rules:**
+**/etc/udev/rules.d/55-caterina.rules:**
```
# ModemManager should ignore the following devices
ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
@@ -69,6 +69,12 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="066
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
```
+**/etc/udev/rules.d/57-bootloadhid.rules:**
+```
+# bootloadHID
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
+```
+
### Serial device is not detected in bootloader mode on Linux
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
@@ -81,10 +87,6 @@ Re-running the QMK installation script (`./util/qmk_install.sh` from the `qmk_fi
If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
-## WINAVR is Obsolete
-It is no longer recommended and may cause some problem.
-See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
-
## USB VID and PID
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
@@ -97,29 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
-## Cortex: `cstddef: No such file or directory`
-GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
-https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
-
-https://github.com/tmk/tmk_keyboard/issues/212
-https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
-https://developer.mbed.org/forum/mbed/topic/5205/
-
-## `clock_prescale_set` and `clock_div_1` Not Available
-Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2.
-
-```
-Compiling C: ../../tmk_core/protocol/lufa/lufa.c
-avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
-../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
-../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
-../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
-../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
-../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
-make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
-```
-
-
## BOOTLOADER_SIZE for AVR
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
@@ -140,24 +119,29 @@ The solution is to remove and reinstall all affected modules.
```
brew rm avr-gcc
+brew rm avr-gcc@8
brew rm dfu-programmer
brew rm dfu-util
brew rm gcc-arm-none-eabi
+brew rm arm-gcc-bin@8
brew rm avrdude
-brew install avr-gcc
+brew install avr-gcc@8
brew install dfu-programmer
brew install dfu-util
-brew install gcc-arm-none-eabi
+brew install arm-gcc-bin@8
brew install avrdude
+brew link --force avr-gcc@8
+brew link --force arm-gcc-bin@8
+
```
-### avr-gcc 8.1 and LUFA
+### `avr-gcc` and LUFA
-If you updated your avr-gcc to above 7 you may see errors involving LUFA. For example:
+If you updated your `avr-gcc` and you see errors involving LUFA, for example:
`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
-For now, you need to rollback avr-gcc to 7 in brew.
+For now, you need to rollback `avr-gcc` to 8 in Homebrew.
```
brew uninstall --force avr-gcc
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 1e0cdc82bf..6c66defbd4 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -112,56 +112,6 @@ In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't s
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
-
-## Bootloader Jump Doesn't Work
-Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
-```
-# Size of Bootloaders in bytes:
-# Atmel DFU loader(ATmega32U4) 4096
-# Atmel DFU loader(AT90USB128) 8192
-# LUFA bootloader(ATmega32U4) 4096
-# Arduino Caterina(ATmega32U4) 4096
-# USBaspLoader(ATmega***) 2048
-# Teensy halfKay(ATmega32U4) 512
-# Teensy++ halfKay(AT90USB128) 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-```
-AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet.
-Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**.
-
-AVR Boot section is located at end of Flash memory like the followings.
-```
-byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
-0x0000 +---------------+ 0x00000 +---------------+
- | | | |
- | | | |
- | Application | | Application |
- | | | |
- = = = =
- | | 32KB-4KB | | 128KB-8KB
-0x6000 +---------------+ 0x1E000 +---------------+
- | Bootloader | 4KB | Bootloader | 8KB
-0x7FFF +---------------+ 0x1FFFF +---------------+
-
-
-byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
-0x0000 +---------------+ 0x00000 +---------------+
- | | | |
- | | | |
- | Application | | Application |
- | | | |
- = = = =
- | | 32KB-512B | | 128KB-2KB
-0x7E00 +---------------+ 0x1FC00 +---------------+
- | Bootloader | 512B | Bootloader | 2KB
-0x7FFF +---------------+ 0x1FFFF +---------------+
-```
-
-And see this discussion for further reference.
-https://github.com/tmk/tmk_keyboard/issues/179
-
-If you are using a TeensyUSB, there is a [known bug](https://github.com/qmk/qmk_firmware/issues/164) in which the hardware reset button prevents the RESET key from working. Unplugging the keyboard and plugging it back in should resolve the problem.
-
## Special Extra Key Doesn't Work (System, Audio Control Keys)
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
@@ -194,24 +144,6 @@ If you would like to keep JTAG enabled, just add the following to your `config.h
#define NO_JTAG_DISABLE
```
-## Adding LED Indicators of Lock Keys
-You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post.
-
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
-
-## Program Arduino Micro/Leonardo
-Push reset button and then run command like this within 8 seconds.
-
-```
-avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
-```
-
-Device name will vary depending on your system.
-
-http://arduino.cc/en/Main/ArduinoBoardMicro
-https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
-
-
## USB 3 Compatibility
I heard some people have a problem with USB 3 port, try USB 2 port.
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index 84d8548d46..2d00e8bef9 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -67,24 +67,8 @@ After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in y
Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
## Input Special Characters Other Than ASCII like Cédille 'Ç'
-NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
-See this post for example **MACRO** code.
-
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
-
-On **Windows** you can use `AltGr` key or **Alt code**.
-* http://en.wikipedia.org/wiki/AltGr_key
-* http://en.wikipedia.org/wiki/Alt_code
-
-On **Mac** OS defines `Option` key combinations.
-* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
-
-On **Xorg** you can use `compose` key, instead.
-* http://en.wikipedia.org/wiki/Compose_key
-
-And see this for **Unicode** input.
-* http://en.wikipedia.org/wiki/Unicode_input
+See the [Unicode](feature_unicode.md) feature.
## `Fn` Key on macOS
@@ -130,51 +114,6 @@ https://github.com/tekezo/Karabiner/issues/403
See the [Grave Escape](feature_grave_esc.md) feature.
-## Arrow on Right Modifier Keys with Dual-Role
-This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
-```
-
-#include "keymap_common.h"
-
-
-/* Arrow keys on right modifier keys with TMK dual role feature
- *
- * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
- * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- [0] = LAYOUT( \
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
- FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
- [1] = LAYOUT( \
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
- [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
- [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
- [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
- [4] = ACTION_LAYER_MOMENTARY(1),
- [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
- [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
- [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
- [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
-};
-
-```
-
-Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
-
-
## Eject on Mac OSX
`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index e73258d511..ebb24dc990 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -155,7 +155,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
-For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
+For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it.
@@ -291,6 +291,25 @@ Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` ena
?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
+For more granular control of this feature, you can add the following to your `config.h`:
+
+```c
+#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+```
+
+You can then add the following function to your keymap:
+
+```c
+bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
## Tapping Force Hold
To enable `tapping force hold`, add the following to your `config.h`:
@@ -315,6 +334,25 @@ With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allo
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
+For more granular control of this feature, you can add the following to your `config.h`:
+
+```c
+#define TAPPING_FORCE_HOLD_PER_KEY
+```
+
+You can then add the following function to your keymap:
+
+```c
+bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LT(1, KC_BSPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
## Retro Tapping
To enable `retro tapping`, add the following to your `config.h`:
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index 71f375594c..22abaa60a8 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -6,16 +6,14 @@ QMK is able to control the brightness of these LEDs by switching them on and off
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
-## Driver configuration
+## Feature Configuration
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
```makefile
-BACKLIGHT_ENABLE = software # Valid driver values are 'yes,software,no'
+BACKLIGHT_ENABLE = yes
```
-See below for help on individual drivers.
-
## Keycodes
Once enabled the following keycodes below can be used to change the backlight level.
@@ -51,6 +49,16 @@ Once enabled the following keycodes below can be used to change the backlight le
|`breathing_enable()` |Turns on backlight breathing |
|`breathing_disable()` |Turns off backlight breathing |
+## Driver Configuration
+
+To select which driver to use, configure your `rules.mk` with the following:
+
+```makefile
+BACKLIGHT_DRIVER = software # Valid driver values are 'pwm,software,no'
+```
+
+See below for help on individual drivers.
+
## Common Driver Configuration
To change the behavior of the backlighting, `#define` these in your `config.h`:
@@ -72,9 +80,9 @@ This functionality is configured at the keyboard level with the `BACKLIGHT_ON_ST
## AVR driver
-On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. To enable it, add this to your rules.mk:
+On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. The driver is configured by default, however the equivalent setting within rules.mk would be:
```makefile
-BACKLIGHT_ENABLE = yes
+BACKLIGHT_DRIVER = pwm
```
### Caveats
@@ -150,9 +158,9 @@ The breathing effect is the same as in the hardware PWM implementation.
## ARM Driver
-While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. To enable it, add this to your rules.mk:
+While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. The driver is configured by default, however the equivalent setting within rules.mk would be:
```makefile
-BACKLIGHT_ENABLE = yes
+BACKLIGHT_DRIVER = pwm
```
### Caveats
@@ -176,7 +184,7 @@ To change the behavior of the backlighting, `#define` these in your `config.h`:
Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk:
```makefile
-BACKLIGHT_ENABLE = software
+BACKLIGHT_DRIVER = software
```
### Software PWM Configuration
@@ -200,3 +208,29 @@ To activate multiple backlight pins, you need to add something like this to your
#undef BACKLIGHT_PIN
#define BACKLIGHT_PINS { F5, B2 }
```
+
+## Custom Driver
+
+To enable, add this to your rules.mk:
+
+```makefile
+BACKLIGHT_DRIVER = custom
+```
+
+When implementing the custom driver API, the provided keyboard hooks are as follows:
+
+```c
+void backlight_init_ports(void) {
+ // Optional - Run on startup
+ // - usually you want to configure pins here
+}
+void backlight_set(uint8_t level) {
+ // Optional - Run on level change
+ // - usually you want to respond to the new value
+}
+
+void backlight_task(void) {
+ // Optional - Run periodically
+ // - long running actions here can cause performance issues
+}
+```
diff --git a/docs/feature_bootmagic.md b/docs/feature_bootmagic.md
index ed00d51295..a19b5e548d 100644
--- a/docs/feature_bootmagic.md
+++ b/docs/feature_bootmagic.md
@@ -56,37 +56,37 @@ Hold down the Bootmagic key (Space by default) and the desired hotkey while plug
## Keycodes
-|Keycode |Aliases |Description |
-|----------------------------------|---------|------------------------------------------|
-|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Left Control |
-|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control |
-|`MAGIC_HOST_NKRO` | |Force N-Key Rollover (NKRO) on |
-|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
-|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
-|`MAGIC_NO_GUI` | |Disable the GUI keys (useful when gaming) |
-|`MAGIC_UNNO_GUI` | |Enable the GUI keys |
-|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)|
-|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI |
-|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap |
-|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)|
-|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI |
-|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap |
-|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
-|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
-|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Left Control and Caps Lock |
-|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Left Control and Caps Lock |
-|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>&#96;</code> and Escape |
-|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>&#96;</code> and Escape |
-|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI |
-|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI |
-|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI |
-|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI |
-|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and Left GUI |
-|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and Left GUI |
-|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and Right GUI |
-|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and Right GUI |
-|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness |
-|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness |
+|Key |Aliases |Description |
+|----------------------------------|---------|--------------------------------------------------------------------------|
+|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
+|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
+|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
+|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
+|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
+|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
+|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
+|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
+|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
+|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
+|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
+|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
+|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
+|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
+|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
+|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
+|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
+|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
+|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
+|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
+|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>&#96;</code> and Escape |
+|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>&#96;</code> and Escape |
+|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
+|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
+|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
+|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
+|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
+|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
+|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
## Configuration
diff --git a/docs/feature_haptic_feedback.md b/docs/feature_haptic_feedback.md
index 2273633227..ff7337a51a 100644
--- a/docs/feature_haptic_feedback.md
+++ b/docs/feature_haptic_feedback.md
@@ -2,7 +2,7 @@
## Haptic feedback rules.mk options
-The following options are currently available for haptic feedback in `rule.mk`:
+The following options are currently available for haptic feedback in `rules.mk`:
`HAPTIC_ENABLE += DRV2605L`
diff --git a/docs/feature_leader_key.md b/docs/feature_leader_key.md
index 82cf789017..22370bf230 100644
--- a/docs/feature_leader_key.md
+++ b/docs/feature_leader_key.md
@@ -22,10 +22,10 @@ void matrix_scan_user(void) {
SEND_STRING("QMK is awesome.");
}
SEQ_TWO_KEYS(KC_D, KC_D) {
- SEND_STRING(SS_LCTRL("a")SS_LCTRL("c"));
+ SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
}
SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
- SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER));
+ SEND_STRING("https://start.duckduckgo.com\n");
}
SEQ_TWO_KEYS(KC_A, KC_S) {
register_code(KC_LGUI);
@@ -115,11 +115,11 @@ void matrix_scan_user(void) {
SEQ_ONE_KEY(KC_E) {
// Anything you can do in a macro.
- SEND_STRING(SS_LCTRL(SS_LSFT("t")));
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
did_leader_succeed = true;
} else
SEQ_TWO_KEYS(KC_E, KC_D) {
- SEND_STRING(SS_LGUI("r")"cmd"SS_TAP(KC_ENTER)SS_LCTRL("c"));
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
did_leader_succeed = true;
}
leader_end();
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index d81c3c6559..c13ae82061 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -67,14 +67,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case QMKURL:
if (record->event.pressed) {
// when keycode QMKURL is pressed
- SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ SEND_STRING("https://qmk.fm/\n");
} else {
// when keycode QMKURL is released
}
break;
case MY_OTHER_MACRO:
if (record->event.pressed) {
- SEND_STRING(SS_LCTRL("ac")); // selects all and copies
+ SEND_STRING(SS_LCTL("ac")); // selects all and copies
}
break;
}
@@ -109,18 +109,21 @@ Which would send "VE" followed by a `KC_HOME` tap, and "LO" (spelling "LOVE" if
There's also a couple of mod shortcuts you can use:
-* `SS_LCTRL(string)`
-* `SS_LGUI(string)`
-* `SS_LALT(string)`
+* `SS_LCTL(string)`
* `SS_LSFT(string)`
-* `SS_RALT(string)`
+* `SS_LALT(string)`
+* `SS_LGUI(string)`, `SS_LCMD(string)` or `SS_LWIN(string)`
+* `SS_RCTL(string)`
+* `SS_RSFT(string)`
+* `SS_RALT(string)` or `SS_ALGR(string)`
+* `SS_RGUI(string)`, `SS_RCMD(string)` or `SS_RWIN(string)`
These press the respective modifier, send the supplied string and then release the modifier.
They can be used like this:
- SEND_STRING(SS_LCTRL("a"));
+ SEND_STRING(SS_LCTL("a"));
-Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
+Which would send Left Control+`a` (Left Control down, `a`, Left Control up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
### Alternative Keymaps
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 3e69361fbd..23082ef2a9 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -173,16 +173,20 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{
All RGB keycodes are currently shared with the RGBLIGHT system:
-* `RGB_TOG` - toggle
-* `RGB_MOD` - cycle through modes
-* `RGB_HUI` - increase hue
-* `RGB_HUD` - decrease hue
-* `RGB_SAI` - increase saturation
-* `RGB_SAD` - decrease saturation
-* `RGB_VAI` - increase value
-* `RGB_VAD` - decrease value
-* `RGB_SPI` - increase speed effect (no EEPROM support)
-* `RGB_SPD` - decrease speed effect (no EEPROM support)
+|Key |Aliases |Description |
+|-------------------|----------|--------------------------------------------------------------------------------------|
+|`RGB_TOG` | |Toggle RGB lighting on or off |
+|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
+|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
+|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
+|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
+|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
+|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
+|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
+|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
+|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
+|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
+
* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
## RGB Matrix Effects
@@ -195,6 +199,7 @@ enum rgb_matrix_effects {
RGB_MATRIX_SOLID_COLOR = 1, // Static single hue, no speed support
RGB_MATRIX_ALPHAS_MODS, // Static dual hue, speed is hue for secondary hue
RGB_MATRIX_GRADIENT_UP_DOWN, // Static gradient top to bottom, speed controls how much gradient changes
+ RGB_MATRIX_GRADIENT_LEFT_RIGHT, // Static gradient left to right, speed controls how much gradient changes
RGB_MATRIX_BREATHING, // Single hue brightness cycling animation
RGB_MATRIX_BAND_SAT, // Single hue band fading saturation scrolling left to right
RGB_MATRIX_BAND_VAL, // Single hue band fading brightness scrolling left to right
@@ -282,7 +287,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
## Custom RGB Matrix Effects
-By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rule.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
+By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rules.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this:
@@ -375,6 +380,10 @@ These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blo
#define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set
+#define RGB_MATRIX_STARTUP_HUE 0 // Sets the default hue value, if none has been set
+#define RGB_MATRIX_STARTUP_SAT 255 // Sets the default saturation value, if none has been set
+#define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
+#define RGB_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
```
## EEPROM storage
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 2e9610163b..69a6aaaed6 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -48,12 +48,12 @@ Changing the **Value** sets the overall brightness.<br>
|`RGB_TOG` | |Toggle RGB lighting on or off |
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
-|`RGB_HUI` | |Increase hue |
-|`RGB_HUD` | |Decrease hue |
-|`RGB_SAI` | |Increase saturation |
-|`RGB_SAD` | |Decrease saturation |
-|`RGB_VAI` | |Increase value (brightness) |
-|`RGB_VAD` | |Decrease value (brightness) |
+|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
+|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
+|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
+|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
+|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
+|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md
index e162d423ce..a2657c1f60 100644
--- a/docs/feature_userspace.md
+++ b/docs/feature_userspace.md
@@ -208,15 +208,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
clear_mods(); clear_oneshot_mods();
SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
#ifndef FLASH_BOOTLOADER
- if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT )
+ if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
#endif
- { //
+ {
SEND_STRING(":flash");
}
- if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) {
- SEND_STRING(" -j8 --output-sync");
+ if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
+ SEND_STRING(" -j8 --output-sync");
}
- SEND_STRING(SS_TAP(X_ENTER));
+ tap_code(KC_ENT);
set_mods(temp_mod);
}
break;
diff --git a/docs/flashing_bootloadhid.md b/docs/flashing_bootloadhid.md
index c51d8ce4b8..731d927727 100644
--- a/docs/flashing_bootloadhid.md
+++ b/docs/flashing_bootloadhid.md
@@ -13,7 +13,7 @@ General flashing sequence:
## bootloadHID Flashing Target
-Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed.
+?> Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed.
To flash via the command line, use the target `:bootloadHID` by executing the following command:
diff --git a/docs/fr-fr/README.md b/docs/fr-fr/README.md
index d3591554b0..4527ec4b42 100644
--- a/docs/fr-fr/README.md
+++ b/docs/fr-fr/README.md
@@ -19,7 +19,7 @@ Sinon, vous pouvez aussi le télécharger directement en ([zip](https://github.c
## Comment le compiler
-Avant d'être prêt à compiler vous allez devoir [installer un environnement](getting_started_build_tools.md) pour les développements AVR et/ou ARM. Une fois ceci fait, vous pourrez utiliser la commande `make` pour compiler le clavier et la disposition avec une commande de ce type :
+Avant d'être prêt à compiler vous allez devoir [installer un environnement](fr-fr/getting_started_build_tools.md) pour les développements AVR et/ou ARM. Une fois ceci fait, vous pourrez utiliser la commande `make` pour compiler le clavier et la disposition avec une commande de ce type :
make planck/rev4:default
@@ -29,4 +29,4 @@ Cette commande compilera la révision `rev4` du clavier `planck` avec la disposi
## Comment le personnaliser
-QMK a beaucoup de [fonctionnalités](features.md) à explorer, et [une documentation](http://docs.qmk.fm) très abondante que vous pourrez parcourir. La plupart des fonctionnalités vous permettrons de modifier vos [dispositions](keymap.md) (keymaps) et de changer [les codes de caractères](keycodes.md) (keycodes).
+QMK a beaucoup de [fonctionnalités](fr-fr/features.md) à explorer, et [une documentation](http://docs.qmk.fm) très abondante que vous pourrez parcourir. La plupart des fonctionnalités vous permettrons de modifier vos [dispositions](fr-fr/keymap.md) (keymaps) et de changer [les codes de caractères](fr-fr/keycodes.md) (keycodes).
diff --git a/docs/fr-fr/_summary.md b/docs/fr-fr/_summary.md
index eef4861763..38e3abe7c7 100644
--- a/docs/fr-fr/_summary.md
+++ b/docs/fr-fr/_summary.md
@@ -29,97 +29,97 @@
**En Anglais**
* Guides détaillés
- * [Installation des outils de compilation](getting_started_build_tools.md)
- * [Guide Vagrant](getting_started_vagrant.md)
- * [Commandes de compilations](getting_started_make_guide.md)
+ * [Installation des outils de compilation](fr-fr/getting_started_build_tools.md)
+ * [Guide Vagrant](fr-fr/getting_started_vagrant.md)
+ * [Commandes de compilations](fr-fr/getting_started_make_guide.md)
* [Flasher les firmwares](fr-fr/flashing.md)
- * [Personnaliser les fonctionnalités](custom_quantum_functions.md)
- * [Aperçu des fonctionnalités des dispositions](keymap.md)
+ * [Personnaliser les fonctionnalités](fr-fr/custom_quantum_functions.md)
+ * [Aperçu des fonctionnalités des dispositions](fr-fr/keymap.md)
-* [Hardware](hardware.md)
- * [Processeurs AVR](hardware_avr.md)
- * [Pilotes / Drivers](hardware_drivers.md)
+* [Hardware](fr-fr/hardware.md)
+ * [Processeurs AVR](fr-fr/hardware_avr.md)
+ * [Pilotes / Drivers](fr-fr/hardware_drivers.md)
* Réferences
- * [Lignes de conduite des claviers](hardware_keyboard_guidelines.md)
- * [Options de configurations](config_options.md)
- * [Keycodes / Codes des caractères](keycodes.md)
- * [Conventions de codage - C](coding_conventions_c.md)
- * [Conventions de codage - Python](coding_conventions_python.md)
- * [Meilleurs pratiques sur la documentation](documentation_best_practices.md)
- * [Modèles de documentation](documentation_templates.md)
- * [Glossaire](reference_glossary.md)
- * [Tests unitaires](unit_testing.md)
- * [Fonctions utiles](ref_functions.md)
- * [Support de configuration](reference_configurator_support.md)
- * [Format du fichier info.json](reference_info_json.md)
- * [Développer la CLI en Python](cli_development.md)
+ * [Lignes de conduite des claviers](fr-fr/hardware_keyboard_guidelines.md)
+ * [Options de configurations](fr-fr/config_options.md)
+ * [Keycodes / Codes des caractères](fr-fr/keycodes.md)
+ * [Conventions de codage - C](fr-fr/coding_conventions_c.md)
+ * [Conventions de codage - Python](fr-fr/coding_conventions_python.md)
+ * [Meilleurs pratiques sur la documentation](fr-fr/documentation_best_practices.md)
+ * [Modèles de documentation](fr-fr/documentation_templates.md)
+ * [Glossaire](fr-fr/reference_glossary.md)
+ * [Tests unitaires](fr-fr/unit_testing.md)
+ * [Fonctions utiles](fr-fr/ref_functions.md)
+ * [Support de configuration](fr-fr/reference_configurator_support.md)
+ * [Format du fichier info.json](fr-fr/reference_info_json.md)
+ * [Développer la CLI en Python](fr-fr/cli_development.md)
-* [Fonctionnalités](features.md)
- * [Keycodes basiques](keycodes_basic.md)
- * [Touches utilisées avec Shift (US ANSI)](keycodes_us_ansi_shifted.md)
- * [Keycodes quantiques](quantum_keycodes.md)
- * [Keycodes avancés](feature_advanced_keycodes.md)
- * [Fonctionnalités audio](feature_audio.md)
- * [Majuscule automatique](feature_auto_shift.md)
- * [Rétroéclairage](feature_backlight.md)
- * [Bluetooth](feature_bluetooth.md)
- * [Bootmagic](feature_bootmagic.md)
- * [Combos](feature_combo.md)
- * [Commande](feature_command.md)
- * [API anti-rebond](feature_debounce_type.md)
- * [DIP Switch](feature_dip_switch.md)
- * [Macros dynamiques](feature_dynamic_macros.md)
- * [Interrupteurs rotatifs](feature_encoders.md)
- * [Grave Escape](feature_grave_esc.md)
- * [Retour haptique](feature_haptic_feedback.md)
- * [Contrôleur LCD HD44780](feature_hd44780.md)
- * [Touche à verrou / Lock-key](feature_key_lock.md)
- * [Dispositions / layouts](feature_layouts.md)
- * [Touche leader](feature_leader_key.md)
- * [Matrice LED](feature_led_matrix.md)
- * [Macros](feature_macros.md)
- * [Boutons de souris](feature_mouse_keys.md)
- * [Pilotes / Drivers OLED](feature_oled_driver.md)
- * [Touche one-shot](feature_advanced_keycodes.md#one-shot-keys)
- * [Périphériques de pointage](feature_pointing_device.md)
- * [Souris PS/2](feature_ps2_mouse.md)
- * [Éclairage RGB](feature_rgblight.md)
- * [Matrice RGB](feature_rgb_matrix.md)
- * [Space Cadet](feature_space_cadet.md)
- * [Claviers scindés / splittés](feature_split_keyboard.md)
- * [Stenographie](feature_stenography.md)
- * [Inversion des mains](feature_swap_hands.md)
- * [Tap Dance](feature_tap_dance.md)
- * [Terminale](feature_terminal.md)
- * [Imprimante thermique](feature_thermal_printer.md)
- * [Caractères unicodes](feature_unicode.md)
- * [Dossier utilisateur](feature_userspace.md)
- * [Velocikey](feature_velocikey.md)
+* [Fonctionnalités](fr-fr/features.md)
+ * [Keycodes basiques](fr-fr/keycodes_basic.md)
+ * [Touches utilisées avec Shift (US ANSI)](fr-fr/keycodes_us_ansi_shifted.md)
+ * [Keycodes quantiques](fr-fr/quantum_keycodes.md)
+ * [Keycodes avancés](fr-fr/feature_advanced_keycodes.md)
+ * [Fonctionnalités audio](fr-fr/feature_audio.md)
+ * [Majuscule automatique](fr-fr/feature_auto_shift.md)
+ * [Rétroéclairage](fr-fr/feature_backlight.md)
+ * [Bluetooth](fr-fr/feature_bluetooth.md)
+ * [Bootmagic](fr-fr/feature_bootmagic.md)
+ * [Combos](fr-fr/feature_combo.md)
+ * [Commande](fr-fr/feature_command.md)
+ * [API anti-rebond](fr-fr/feature_debounce_type.md)
+ * [DIP Switch](fr-fr/feature_dip_switch.md)
+ * [Macros dynamiques](fr-fr/feature_dynamic_macros.md)
+ * [Interrupteurs rotatifs](fr-fr/feature_encoders.md)
+ * [Grave Escape](fr-fr/feature_grave_esc.md)
+ * [Retour haptique](fr-fr/feature_haptic_feedback.md)
+ * [Contrôleur LCD HD44780](fr-fr/feature_hd44780.md)
+ * [Touche à verrou / Lock-key](fr-fr/feature_key_lock.md)
+ * [Dispositions / layouts](fr-fr/feature_layouts.md)
+ * [Touche leader](fr-fr/feature_leader_key.md)
+ * [Matrice LED](fr-fr/feature_led_matrix.md)
+ * [Macros](fr-fr/feature_macros.md)
+ * [Boutons de souris](fr-fr/feature_mouse_keys.md)
+ * [Pilotes / Drivers OLED](fr-fr/feature_oled_driver.md)
+ * [Touche one-shot](fr-fr/feature_advanced_keycodes.md#one-shot-keys)
+ * [Périphériques de pointage](fr-fr/feature_pointing_device.md)
+ * [Souris PS/2](fr-fr/feature_ps2_mouse.md)
+ * [Éclairage RGB](fr-fr/feature_rgblight.md)
+ * [Matrice RGB](fr-fr/feature_rgb_matrix.md)
+ * [Space Cadet](fr-fr/feature_space_cadet.md)
+ * [Claviers scindés / splittés](fr-fr/feature_split_keyboard.md)
+ * [Stenographie](fr-fr/feature_stenography.md)
+ * [Inversion des mains](fr-fr/feature_swap_hands.md)
+ * [Tap Dance](fr-fr/feature_tap_dance.md)
+ * [Terminale](fr-fr/feature_terminal.md)
+ * [Imprimante thermique](fr-fr/feature_thermal_printer.md)
+ * [Caractères unicodes](fr-fr/feature_unicode.md)
+ * [Dossier utilisateur](fr-fr/feature_userspace.md)
+ * [Velocikey](fr-fr/feature_velocikey.md)
* Pour les makers et les bricoleurs
- * [Guide des claviers soudés à la main](hand_wire.md)
- * [Guide de flash de l’ISP](isp_flashing_guide.md)
- * [Guide du débogage ARM](arm_debugging.md)
- * [Drivers i2c](i2c_driver.md)
- * [Contrôles des GPIO](internals_gpio_control.md)
- * [Conversion en Proton C](proton_c_conversion.md)
+ * [Guide des claviers soudés à la main](fr-fr/hand_wire.md)
+ * [Guide de flash de l’ISP](fr-fr/isp_flashing_guide.md)
+ * [Guide du débogage ARM](fr-fr/arm_debugging.md)
+ * [Drivers i2c](fr-fr/i2c_driver.md)
+ * [Contrôles des GPIO](fr-fr/internals_gpio_control.md)
+ * [Conversion en Proton C](fr-fr/proton_c_conversion.md)
* Pour aller plus loin
- * [Comment fonctionnent les claviers](how_keyboards_work.md)
- * [Comprendre QMK](understanding_qmk.md)
+ * [Comment fonctionnent les claviers](fr-fr/how_keyboards_work.md)
+ * [Comprendre QMK](fr-fr/understanding_qmk.md)
* Autres sujets
- * [Utiliser Eclipse avec QMK](other_eclipse.md)
- * [Utiliser VSCode avec QMK](other_vscode.md)
- * [Support](support.md)
- * [Comment ajouter des traductions](translating.md)
+ * [Utiliser Eclipse avec QMK](fr-fr/other_eclipse.md)
+ * [Utiliser VSCode avec QMK](fr-fr/other_vscode.md)
+ * [Support](fr-fr/support.md)
+ * [Comment ajouter des traductions](fr-fr/translating.md)
* À l’intérieur de QMK (En cours de documentation)
- * [Définitions](internals_defines.md)
- * [Input Callback Reg](internals_input_callback_reg.md)
- * [Appareils Midi](internals_midi_device.md)
- * [Installation d’un appareil Midi](internals_midi_device_setup_process.md)
- * [Utilitaires Midi](internals_midi_util.md)
- * [Fonctions Midi](internals_send_functions.md)
- * [Outils Sysex](internals_sysex_tools.md)
+ * [Définitions](fr-fr/internals_defines.md)
+ * [Input Callback Reg](fr-fr/internals_input_callback_reg.md)
+ * [Appareils Midi](fr-fr/internals_midi_device.md)
+ * [Installation d’un appareil Midi](fr-fr/internals_midi_device_setup_process.md)
+ * [Utilitaires Midi](fr-fr/internals_midi_util.md)
+ * [Fonctions Midi](fr-fr/internals_send_functions.md)
+ * [Outils Sysex](fr-fr/internals_sysex_tools.md)
diff --git a/docs/fr-fr/faq_build.md b/docs/fr-fr/faq_build.md
index 774bf6880f..84d88afcd8 100644
--- a/docs/fr-fr/faq_build.md
+++ b/docs/fr-fr/faq_build.md
@@ -86,10 +86,6 @@ Relancer le script d'installation de QMK (`./util/qmk_install.sh` situé dans rÃ
Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations.
-## WINAVR est obsolète
-
-Il n'est plus recommandé et peut causer des problèmes. Voir [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
-
## USB VID et PID
Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits.
@@ -103,30 +99,6 @@ Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nécessai
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
-## Cortex: `cstddef: No such file or directory`
-
-Ce problème existait avec le GCC 4.8 d'Ubuntu 14.04, la solution a nécessité de mettre à jour vers 4.9 avec ce PPA.
-https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
-
-https://github.com/tmk/tmk_keyboard/issues/212
-https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
-https://developer.mbed.org/forum/mbed/topic/5205/
-
-## `clock_prescale_set` and `clock_div_1` Not Available
-
-Votre chaîne d'outils (Toolchain) est trop vieille pour supporter le MCU. Par exemple, WinAVR 20100110 ne supporte pas ATMega32u2.
-
-```
-Compiling C: ../../tmk_core/protocol/lufa/lufa.c
-avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
-../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
-../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
-../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
-../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
-../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
-make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
-```
-
## BOOTLOADER_SIZE pour AVR
Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
diff --git a/docs/fr-fr/faq_debug.md b/docs/fr-fr/faq_debug.md
index 7a85fd1f24..754c79921c 100644
--- a/docs/fr-fr/faq_debug.md
+++ b/docs/fr-fr/faq_debug.md
@@ -104,58 +104,6 @@ En C, `1` implique un type [int] qui est [16 bits] pour les AVR, ce qui implique
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
-## Bootloader Jump ne fonctionne pas
-
-Configurez correctement la taille du bootloader dans le **Makefile**. Une mauvaise taille de section du bootloader empêchera probablement le démarrage avec **Magic command** et **Boot Magic**.
-
-```
-# Size of Bootloaders in bytes:
-# Atmel DFU loader(ATmega32U4) 4096
-# Atmel DFU loader(AT90USB128) 8192
-# LUFA bootloader(ATmega32U4) 4096
-# Arduino Caterina(ATmega32U4) 4096
-# USBaspLoader(ATmega***) 2048
-# Teensy halfKay(ATmega32U4) 512
-# Teensy++ halfKay(AT90USB128) 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-```
-
-La taille de la section de démarrage de AVR est définie par l'option **BOOTSZ** fuse. Vérifiez la fiche technique du MCU. Veuilez noter que les tailles et adresses sont définies en **Word** (2 octets) dans la fiche technique alors que TMK utilise des **Byte**.
-
-La section de boot AVR se trouve à la fin de la mémoire flash, comme suit.
-
-```
-byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
-0x0000 +---------------+ 0x00000 +---------------+
- | | | |
- | | | |
- | Application | | Application |
- | | | |
- = = = =
- | | 32KB-4KB | | 128KB-8KB
-0x6000 +---------------+ 0x1E000 +---------------+
- | Bootloader | 4KB | Bootloader | 8KB
-0x7FFF +---------------+ 0x1FFFF +---------------+
-
-
-byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
-0x0000 +---------------+ 0x00000 +---------------+
- | | | |
- | | | |
- | Application | | Application |
- | | | |
- = = = =
- | | 32KB-512B | | 128KB-2KB
-0x7E00 +---------------+ 0x1FC00 +---------------+
- | Bootloader | 512B | Bootloader | 2KB
-0x7FFF +---------------+ 0x1FFFF +---------------+
-```
-
-Référez-vous à cette discussion pour plus de référence.
-https://github.com/tmk/tmk_keyboard/issues/179
-
-Si vous utilisez un TeensyUSB, il y a un [bug connu](https://github.com/qmk/qmk_firmware/issues/164) qui fait que le bouton reset matériel empêche la touche RESET de fonctionner. Débrancher et rebrancher le clavier devrait résoudre le problème.
-
## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son)
Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK.
@@ -189,25 +137,6 @@ Si vous voulez garder JTAG activé, ajoutez la ligne suivante à votre fichier `
#define NO_JTAG_DISABLE
```
-## Adding LED Indicators of Lock Keys
-
-Si vous souhaitez votre propre indicateur LED pour CapsLock, ScrollLock et NumLock alors lisez ce post.
-
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
-
-## Programmer Arduino Micro/Leonardo
-
-Appuyez sur le bouton reset puis lancez la commande suivante dans les 8 secondes.
-
-```
-avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
-```
-
-Le nom du périphérique peut varier en fonction de votre système.
-
-http://arduino.cc/en/Main/ArduinoBoardMicro
-https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
-
## Compatibilité USB 3
Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2.
diff --git a/docs/fr-fr/faq_keymap.md b/docs/fr-fr/faq_keymap.md
index 8244d4225f..2cbbe93082 100644
--- a/docs/fr-fr/faq_keymap.md
+++ b/docs/fr-fr/faq_keymap.md
@@ -72,24 +72,7 @@ Des vieux claviers mécaniques ont parfois des touches à verrouillage, mais les
## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç'
-IL N'EXISTE AUCUNE METHODE UNIVERSELLE POUR LES AJOUTER QUI FONCTIONNE SUR TOUS LES SYSTEMES. Vous devez définir une **MACRO** d'une manière spécifique à votre OS ou layout.
-
-Voir ce post pour un exemple de code **MACRO**.
-
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
-
-Sous **Windows** vous pouvez utiliser la touche `AltGr` ou **Alt code**.
-* http://en.wikipedia.org/wiki/AltGr_key
-* http://en.wikipedia.org/wiki/Alt_code
-
-Sous **Mac OS** définissez une combinaison de touche `Option`.
-* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
-
-Sous **Xorg** vous pouvez utiliser une touche `compose` à la place.
-* http://en.wikipedia.org/wiki/Compose_key
-
-Et voir ceci pour une entrée **Unicode**.
-* http://en.wikipedia.org/wiki/Unicode_input
+Voir la fonctionnalité [Unicode](feature_unicode.md).
## Touche `Fn` sur macOS
@@ -144,54 +127,6 @@ Cette fonctionnalité permet d'utiliser une touche à la fois comme touche Écha
Voir la fonctionnalité [Grave Escape](feature_grave_esc.md).
-## Avoir les touches modificatrices qui ont double usage en flèches directionnelles.
-
-Ceci transforme les touches "modificateur droit" en touches fléchées lorsque les touches sont seulement "tapées" tout en restant des modificateurs lorsqu'elles sont maintenues.
-
-Dans TMK la fonction double rôle s'appelle **TAP**.
-
-```C
-
-#include "keymap_common.h"
-
-
-/* Arrow keys on right modifier keys with TMK dual role feature
- *
- * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
- * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- [0] = LAYOUT( \
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
- FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
- [1] = LAYOUT( \
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
- [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
- [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
- [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
- [4] = ACTION_LAYER_MOMENTARY(1),
- [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
- [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
- [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
- [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
-};
-
-```
-
-Touches double rôle : https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
-
## Eject sur Mac OSX
Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250
diff --git a/docs/fr-fr/getting_started_github.md b/docs/fr-fr/getting_started_github.md
index 22c6ee749b..48755625a7 100644
--- a/docs/fr-fr/getting_started_github.md
+++ b/docs/fr-fr/getting_started_github.md
@@ -16,17 +16,23 @@ Faites attention à sélectionner "HTTPS", et sélectionnez le lien et copiez-le
![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
-Ensuite, entrez `git clone` dans la ligne de commande, et collez votre lien:
+Ensuite, entrez `git clone --recurse-submodules ` dans la ligne de commande, et collez votre lien:
```
-user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
+user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
-remote: Counting objects: 46625, done.
-remote: Compressing objects: 100% (2/2), done.
-remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
-Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
-Resolving deltas: 100% (29362/29362), done.
-Checking out files: 100% (2799/2799), done.
+remote: Enumerating objects: 9, done.
+remote: Counting objects: 100% (9/9), done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
+Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
+Resolving deltas: 100% (119972/119972), done.
+...
+Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
+Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
+Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
+Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
+Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
```
Vous avez maintenant votre fork QMK sur votre machine locale, vous pouvez ajouter votre keymap, la compiler et la flasher sur votre board. Une fois heureux avec vos changements, vous pouvez les ajouter, commit, et pousser vers votre fork comme suit:
diff --git a/docs/fr-fr/getting_started_introduction.md b/docs/fr-fr/getting_started_introduction.md
index a7f0ff96af..b2711a1671 100644
--- a/docs/fr-fr/getting_started_introduction.md
+++ b/docs/fr-fr/getting_started_introduction.md
@@ -4,7 +4,7 @@ Le but de cette page est d'expliquer les informations de base qui vous serons nÃ
## Structure de base de QMK
-QMK est un fork du projet [tmk_keyboard](https://github.com/tmk/tmk_keyboard) créé par [Jun Wako](https://github.com/tmk). Le code originel de TMK, avec quelques modifications, se trouve dans le dossier `tmk`. Les additions que QMK amène au projet se trouvent dans le dossier `quantum`. Les projets de clavier se trouvent dans les dossiers `handwired` et `keyboard`.
+QMK est un fork du projet [tmk_keyboard](https://github.com/tmk/tmk_keyboard) créé par [Jun Wako](https://github.com/tmk). Le code originel de TMK, avec quelques modifications, se trouve dans le dossier `tmk_core`. Les additions que QMK amène au projet se trouvent dans le dossier `quantum`. Les projets de clavier se trouvent dans les dossiers `handwired` et `keyboard`.
### Structure du Userspace
diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md
index 2721a9a031..fea20e59b4 100644
--- a/docs/getting_started_build_tools.md
+++ b/docs/getting_started_build_tools.md
@@ -43,7 +43,7 @@ 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 dfu-programmer dfu-util
@@ -57,16 +57,17 @@ By default, this will download compilers for both AVR and ARM. If you don't need
nix-shell --arg arm false
## macOS
-If you're using [homebrew,](http://brew.sh/) you can use the following commands:
+If you're using [Homebrew](http://brew.sh/), you can use the following commands:
brew tap osx-cross/avr
- brew tap PX4/homebrew-px4
+ brew tap osx-cross/arm
brew update
brew install avr-gcc@8
brew link --force avr-gcc@8
brew install dfu-programmer
brew install dfu-util
- brew install gcc-arm-none-eabi
+ brew install arm-gcc-bin@8
+ brew link --force arm-gcc-bin@8
brew install avrdude
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@8` can take over 20 minutes and exhibit high CPU usage.
@@ -119,12 +120,12 @@ If this is a bit complex for you, Docker might be the turnkey solution you need.
util/docker_build.sh keyboard:keymap
# For example: util/docker_build.sh ergodox_ez:steno
```
-This will compile the desired keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, the `default` keymap is used. Note that the parameter format is the same as when building with `make`.
+This will compile the desired keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, all keymaps are used. Note that the parameter format is the same as when building with `make`.
You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use:
```bash
util/docker_build.sh
-# Reads parameters as input (leave blank for defaults)
+# Reads parameters as input (leave blank for all keyboards/keymaps)
```
There is also support for building _and_ flashing the keyboard straight from Docker by specifying the `target` as well:
diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md
index aeb8738b77..07f523f578 100644
--- a/docs/getting_started_github.md
+++ b/docs/getting_started_github.md
@@ -16,17 +16,23 @@ And be sure to select "HTTPS", and select the link and copy it:
![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
-From here, enter `git clone ` into the command line, and then paste your link:
+From here, enter `git clone --recurse-submodules ` into the command line, and then paste your link:
```
-user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
+user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
-remote: Counting objects: 46625, done.
-remote: Compressing objects: 100% (2/2), done.
-remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
-Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
-Resolving deltas: 100% (29362/29362), done.
-Checking out files: 100% (2799/2799), done.
+remote: Enumerating objects: 9, done.
+remote: Counting objects: 100% (9/9), done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
+Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
+Resolving deltas: 100% (119972/119972), done.
+...
+Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
+Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
+Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
+Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
+Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
```
You now have your QMK fork on your local machine, and you can add your keymap, compile it and flash it to your board. Once you're happy with your changes, you can add, commit, and push them to your fork like this:
diff --git a/docs/getting_started_introduction.md b/docs/getting_started_introduction.md
index e183d77eeb..6dc51b82b7 100644
--- a/docs/getting_started_introduction.md
+++ b/docs/getting_started_introduction.md
@@ -4,7 +4,7 @@ This page attempts to explain the basic information you need to know to work wit
## Basic QMK Structure
-QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
+QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
### Userspace Structure
diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md
index d2596b2e2b..df82a001f0 100644
--- a/docs/getting_started_make_guide.md
+++ b/docs/getting_started_make_guide.md
@@ -59,7 +59,7 @@ To disable debug messages (*dprint*) and reduce the .hex file size, include `#de
To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file.
-To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file.
+To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file (do not also include `#define NO_PRINT` in this case).
To see the text, open `hid_listen` and enjoy looking at your printed messages.
@@ -135,7 +135,7 @@ As there is no standard split communication driver for ARM-based split keyboards
`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().
+Lets you replace the default matrix scanning routine with your own code. For further details, see the [Custom Matrix page](custom_matrix.md).
`DEBOUNCE_TYPE`
diff --git a/docs/he-il/README.md b/docs/he-il/README.md
index db0ad43c3c..8e0c470b44 100644
--- a/docs/he-il/README.md
+++ b/docs/he-il/README.md
@@ -20,7 +20,7 @@ QMK (*Quantum Mechanical Keyboard*) ×”×™× ×§×”×™×œ×ª קוד פתוח (open sour
## ×יך לקמפל
-לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](getting_started_build_tools.md) עבור פיתוח AVR ו/×ו ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי ×¢× ×”×ª×—×‘×™×¨ הב×:
+לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](he-il/getting_started_build_tools.md) עבור פיתוח AVR ו/×ו ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי ×¢× ×”×ª×—×‘×™×¨ הב×:
make planck/rev4:default
@@ -30,5 +30,5 @@ QMK (*Quantum Mechanical Keyboard*) ×”×™× ×§×”×™×œ×ª קוד פתוח (open sour
## ×יך להת××™×
-לQMK יש המון [יכולות](features.md) ש×פשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה ×פשר לנבור. רוב ×”×¤×™×¦×³×¨×™× ×‘××™× ×œ×™×“×™ ביטוי על ידי שינוי [מיפוי המקלדת](keymap.md) ושינוי [קודי המקשי×](keycodes.md).
+לQMK יש המון [יכולות](he-il/features.md) ש×פשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה ×פשר לנבור. רוב ×”×¤×™×¦×³×¨×™× ×‘××™× ×œ×™×“×™ ביטוי על ידי שינוי [מיפוי המקלדת](he-il/keymap.md) ושינוי [קודי המקשי×](he-il/keycodes.md).
</div>
diff --git a/docs/he-il/_summary.md b/docs/he-il/_summary.md
index acc0546d09..804db534a3 100644
--- a/docs/he-il/_summary.md
+++ b/docs/he-il/_summary.md
@@ -1,6 +1,7 @@
<div dir="rtl" markdown="1">
+
**בשפה העברית**
-* [המדריך ×”×ž×œ× ×œ×ž×ª×—×™×œ×™×](newbs.md)
+* [המדריך ×”×ž×œ× ×œ×ž×ª×—×™×œ×™×](he-il/newbs.md)
* [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
* [בסיס QMK](he-il/README.md)
* [×ž×‘×•× ×œQMK](he-il/getting_started_introduction.md)
@@ -13,126 +14,126 @@
* [×יך לתעד נכון](he-il/documentation_best_practices.md)
**בשפה ×”×נגלית**
-* [המדריך ×”×ž×œ× ×œ×ž×ª×—×™×œ×™×](newbs.md)
- * [התחלה](newbs_getting_started.md)
- * [בנייה של הקושחה הר×שונה שלך](newbs_building_firmware.md)
- * [צריבה של הקושחה](newbs_flashing.md)
- * [בדיקות ודיב××’×™× ×’](newbs_testing_debugging.md)
- * [עבודה נכונה ב GIT](newbs_best_practices.md)
- * [מקורות ללמידה](newbs_learn_more_resources.md)
+* [המדריך ×”×ž×œ× ×œ×ž×ª×—×™×œ×™×](he-il/newbs.md)
+ * [התחלה](he-il/newbs_getting_started.md)
+ * [בנייה של הקושחה הר×שונה שלך](he-il/newbs_building_firmware.md)
+ * [צריבה של הקושחה](he-il/newbs_flashing.md)
+ * [בדיקות ודיב××’×™× ×’](he-il/newbs_testing_debugging.md)
+ * [עבודה נכונה ב GIT](he-il/newbs_best_practices.md)
+ * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
-* [בסיס QMK](README.md)
- * [×ž×‘×•× ×œQMK](getting_started_introduction.md)
- * [QMK CLI](cli.md)
- * [QMK CLI Config](cli_configuration.md)
- * [תרומה ל QMK](contributing.md)
- * [×יך להשתמש בGithub](getting_started_github.md)
- * [קבלת עזרה](getting_started_getting_help.md)
+* [בסיס QMK](he-il/README.md)
+ * [×ž×‘×•× ×œQMK](he-il/getting_started_introduction.md)
+ * [QMK CLI](he-il/cli.md)
+ * [QMK CLI Config](he-il/cli_configuration.md)
+ * [תרומה ל QMK](he-il/contributing.md)
+ * [×יך להשתמש בGithub](he-il/getting_started_github.md)
+ * [קבלת עזרה](he-il/getting_started_getting_help.md)
-* [×©×™× ×•×™×™× ×ž×©×ž×¢×•×ª×™×™×](breaking_changes.md)
- * [2019 Aug 30](ChangeLog/20190830.md)
+* [×©×™× ×•×™×™× ×ž×©×ž×¢×•×ª×™×™×](he-il/breaking_changes.md)
+ * [2019 Aug 30](he-il/ChangeLog/20190830.md)
-* [ש×לות נפוצות](faq.md)
- * [ש×לות נפוצות כלליות](faq_general.md)
- * [בנייה/קומפילציה של QMK](faq_build.md)
- * [דיב××’×™× ×’ ופתרון תקלות של QMK](faq_debug.md)
- * [מיפוי מקשי×](faq_keymap.md)
- * [התקנת ×“×¨×™×™×‘×¨×™× ×¢× Zadig](driver_installation_zadig.md)
+* [ש×לות נפוצות](he-il/faq.md)
+ * [ש×לות נפוצות כלליות](he-il/faq_general.md)
+ * [בנייה/קומפילציה של QMK](he-il/faq_build.md)
+ * [דיב××’×™× ×’ ופתרון תקלות של QMK](he-il/faq_debug.md)
+ * [מיפוי מקשי×](he-il/faq_keymap.md)
+ * [התקנת ×“×¨×™×™×‘×¨×™× ×¢× Zadig](he-il/driver_installation_zadig.md)
* ×ž×“×¨×™×›×™× ×ž×¤×•×¨×˜×™×
- * [התקנת כלי Build](getting_started_build_tools.md)
- * [מדריך Vagrant](getting_started_vagrant.md)
- * [הור×ות בנייה/קומפילציה](getting_started_make_guide.md)
- * [צריבת קושחה](flashing.md)
- * [הת×מה ×ישית של הפונקציונ×ליות](custom_quantum_functions.md)
- * [מיפוי מקשי×](keymap.md)
+ * [התקנת כלי Build](he-il/getting_started_build_tools.md)
+ * [מדריך Vagrant](he-il/getting_started_vagrant.md)
+ * [הור×ות בנייה/קומפילציה](he-il/getting_started_make_guide.md)
+ * [צריבת קושחה](he-il/flashing.md)
+ * [הת×מה ×ישית של הפונקציונ×ליות](he-il/custom_quantum_functions.md)
+ * [מיפוי מקשי×](he-il/keymap.md)
-* [חומרה](hardware.md)
- * [מעבדי AVR](hardware_avr.md)
- * [דרייברי×](hardware_drivers.md)
+* [חומרה](he-il/hardware.md)
+ * [מעבדי AVR](he-il/hardware_avr.md)
+ * [דרייברי×](he-il/hardware_drivers.md)
* התייחסויות
- * [מדריך למקלדות](hardware_keyboard_guidelines.md)
- * [×פשרויות הגדרות](config_options.md)
- * [קודי מקשי×](keycodes.md)
- * [קונבנציות קוד - C](coding_conventions_c.md)
- * [קונבנציות קוד - Python](coding_conventions_python.md)
- * [×יך לתעד נכון](documentation_best_practices.md)
- * [×˜×ž×¤×œ×˜×™× ×œ×“×•×§×•×ž× ×˜×¦×™×”](documentation_templates.md)
- * [מילון](reference_glossary.md)
- * [בדיקות יחידה](unit_testing.md)
- * [פונקציות שימושיות](ref_functions.md)
- * [תמיכה בConfigurator](reference_configurator_support.md)
- * [פורמט info.json](reference_info_json.md)
- * [פיתוח בPython CLI](cli_development.md)
+ * [מדריך למקלדות](he-il/hardware_keyboard_guidelines.md)
+ * [×פשרויות הגדרות](he-il/config_options.md)
+ * [קודי מקשי×](he-il/keycodes.md)
+ * [קונבנציות קוד - C](he-il/coding_conventions_c.md)
+ * [קונבנציות קוד - Python](he-il/coding_conventions_python.md)
+ * [×יך לתעד נכון](he-il/documentation_best_practices.md)
+ * [×˜×ž×¤×œ×˜×™× ×œ×“×•×§×•×ž× ×˜×¦×™×”](he-il/documentation_templates.md)
+ * [מילון](he-il/reference_glossary.md)
+ * [בדיקות יחידה](he-il/unit_testing.md)
+ * [פונקציות שימושיות](he-il/ref_functions.md)
+ * [תמיכה בConfigurator](he-il/reference_configurator_support.md)
+ * [פורמט info.json](he-il/reference_info_json.md)
+ * [פיתוח בPython CLI](he-il/cli_development.md)
-* [תכונות](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.md)
- * [Command](feature_command.md)
- * [Debounce API](feature_debounce_type.md)
- * [DIP Switch](feature_dip_switch.md)
- * [Dynamic Macros](feature_dynamic_macros.md)
- * [Encoders](feature_encoders.md)
- * [Grave Escape](feature_grave_esc.md)
- * [Haptic Feedback](feature_haptic_feedback.md)
- * [HD44780 LCD Controller](feature_hd44780.md)
- * [Key Lock](feature_key_lock.md)
- * [Layouts](feature_layouts.md)
- * [Leader Key](feature_leader_key.md)
- * [LED Matrix](feature_led_matrix.md)
- * [Macros](feature_macros.md)
- * [Mouse Keys](feature_mouse_keys.md)
- * [OLED Driver](feature_oled_driver.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](feature_space_cadet.md)
- * [Split Keyboard](feature_split_keyboard.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)
- * [Velocikey](feature_velocikey.md)
+* [תכונות](he-il/features.md)
+ * [Basic Keycodes](he-il/keycodes_basic.md)
+ * [US ANSI Shifted Keys](he-il/keycodes_us_ansi_shifted.md)
+ * [Quantum Keycodes](he-il/quantum_keycodes.md)
+ * [Advanced Keycodes](he-il/feature_advanced_keycodes.md)
+ * [Audio](he-il/feature_audio.md)
+ * [Auto Shift](he-il/feature_auto_shift.md)
+ * [Backlight](he-il/feature_backlight.md)
+ * [Bluetooth](he-il/feature_bluetooth.md)
+ * [Bootmagic](he-il/feature_bootmagic.md)
+ * [Combos](he-il/feature_combo.md)
+ * [Command](he-il/feature_command.md)
+ * [Debounce API](he-il/feature_debounce_type.md)
+ * [DIP Switch](he-il/feature_dip_switch.md)
+ * [Dynamic Macros](he-il/feature_dynamic_macros.md)
+ * [Encoders](he-il/feature_encoders.md)
+ * [Grave Escape](he-il/feature_grave_esc.md)
+ * [Haptic Feedback](he-il/feature_haptic_feedback.md)
+ * [HD44780 LCD Controller](he-il/feature_hd44780.md)
+ * [Key Lock](he-il/feature_key_lock.md)
+ * [Layouts](he-il/feature_layouts.md)
+ * [Leader Key](he-il/feature_leader_key.md)
+ * [LED Matrix](he-il/feature_led_matrix.md)
+ * [Macros](he-il/feature_macros.md)
+ * [Mouse Keys](he-il/feature_mouse_keys.md)
+ * [OLED Driver](he-il/feature_oled_driver.md)
+ * [One Shot Keys](he-il/feature_advanced_keycodes.md#one-shot-keys)
+ * [Pointing Device](he-il/feature_pointing_device.md)
+ * [PS/2 Mouse](he-il/feature_ps2_mouse.md)
+ * [RGB Lighting](he-il/feature_rgblight.md)
+ * [RGB Matrix](he-il/feature_rgb_matrix.md)
+ * [Space Cadet](he-il/feature_space_cadet.md)
+ * [Split Keyboard](he-il/feature_split_keyboard.md)
+ * [Stenography](he-il/feature_stenography.md)
+ * [Swap Hands](he-il/feature_swap_hands.md)
+ * [Tap Dance](he-il/feature_tap_dance.md)
+ * [Terminal](he-il/feature_terminal.md)
+ * [Thermal Printer](he-il/feature_thermal_printer.md)
+ * [Unicode](he-il/feature_unicode.md)
+ * [Userspace](he-il/feature_userspace.md)
+ * [Velocikey](he-il/feature_velocikey.md)
* ×œ×ž×™×™×§×¨×™× ×•×ž×•×“×¨×™×
- * [מדריך לכתיבה ידנית](hand_wire.md)
- * [מדריך לצריבת ISP](isp_flashing_guide.md)
- * [מדריך לדיב××’×™× ×’ ARM](arm_debugging.md)
- * [מנהל התקן I2C](i2c_driver.md)
- * [בקרת GPIO](internals_gpio_control.md)
- * [המרת Proton C](proton_c_conversion.md)
+ * [מדריך לכתיבה ידנית](he-il/hand_wire.md)
+ * [מדריך לצריבת ISP](he-il/isp_flashing_guide.md)
+ * [מדריך לדיב××’×™× ×’ ARM](he-il/arm_debugging.md)
+ * [מנהל התקן I2C](he-il/i2c_driver.md)
+ * [בקרת GPIO](he-il/internals_gpio_control.md)
+ * [המרת Proton C](he-il/proton_c_conversion.md)
* להבנה עמוקה יותר
- * [×יך עובדות מקלדות](how_keyboards_work.md)
- * [להבין ×ת QMK](understanding_qmk.md)
+ * [×יך עובדות מקלדות](he-il/how_keyboards_work.md)
+ * [להבין ×ת QMK](he-il/understanding_qmk.md)
* נוש××™× × ×•×¡×¤×™×
- * [שימוש ב - Eclipse ×¢× QMK](other_eclipse.md)
- * [שימוש ב - VSCode ×¢× QMK](other_vscode.md)
- * [תמיכה](support.md)
- * [כיצד להוסיף תרגו×](translating.md)
+ * [שימוש ב - Eclipse ×¢× QMK](he-il/other_eclipse.md)
+ * [שימוש ב - VSCode ×¢× QMK](he-il/other_vscode.md)
+ * [תמיכה](he-il/support.md)
+ * [כיצד להוסיף תרגו×](he-il/translating.md)
* QMK ×ž×‘×¤× ×™× (בתהליך)
- * [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)
+ * [Defines](he-il/internals_defines.md)
+ * [Input Callback Reg](he-il/internals_input_callback_reg.md)
+ * [Midi Device](he-il/internals_midi_device.md)
+ * [Midi Device Setup Process](he-il/internals_midi_device_setup_process.md)
+ * [Midi Util](he-il/internals_midi_util.md)
+ * [Send Functions](he-il/internals_send_functions.md)
+ * [Sysex Tools](he-il/internals_sysex_tools.md)
</div>
diff --git a/docs/he-il/getting_started_github.md b/docs/he-il/getting_started_github.md
index 55602c8142..e5d0f7c782 100644
--- a/docs/he-il/getting_started_github.md
+++ b/docs/he-il/getting_started_github.md
@@ -17,19 +17,25 @@ Github עלול להיות קצת טריקי למי ×©×œ× ×ž×›×™×¨ ×ת העב×
![קישור HTTPS](http://i.imgur.com/eGO0ohO.jpg)
-מכ×ן והל××”, הקיש `git clone ` בשורת הפקודה והדביקו ×ת הלינק שלכ×:
+מכ×ן והל××”, הקיש `git clone --recurse-submodules ` בשורת הפקודה והדביקו ×ת הלינק שלכ×:
<div dir="ltr" markdown="1">
```
-user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
+user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
-remote: Counting objects: 46625, done.
-remote: Compressing objects: 100% (2/2), done.
-remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
-Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
-Resolving deltas: 100% (29362/29362), done.
-Checking out files: 100% (2799/2799), done.
+remote: Enumerating objects: 9, done.
+remote: Counting objects: 100% (9/9), done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
+Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
+Resolving deltas: 100% (119972/119972), done.
+...
+Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
+Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
+Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
+Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
+Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
```
</div>
@@ -66,4 +72,4 @@ To https://github.com/whoeveryouare/qmk_firmware.git
![צרו Pull Request](http://i.imgur.com/Ojydlaj.jpg)
×חרי שהגשת×, ×נו ×¢×œ×•×œ×™× ×œ×¤× ×•×ª ××œ×™×›× ×œ×’×‘×™ ×”×©×™× ×•×™×™× ×©×”×¦×¢×ª×, נבקש שתבצעו ×©×™× ×•×™×™× ×•×‘×¡×•×¤×• של דבר נקבל ×ת השינויי×! תודה ×©×ª×¨×ž×ª× ×œ×¤×¨×•×™×™×§×˜ QMK :)
-</div> \ No newline at end of file
+</div>
diff --git a/docs/he-il/getting_started_introduction.md b/docs/he-il/getting_started_introduction.md
index 4b7f56b2a7..fca86bdaaf 100644
--- a/docs/he-il/getting_started_introduction.md
+++ b/docs/he-il/getting_started_introduction.md
@@ -5,7 +5,7 @@
## מבנה QMK בסיסי
-QMK ×”×•× ×¤×•×¨×§ של הפרוייקט [tmk_keyboard](https://github.com/tmk/tmk_keyboard) של [Jun Wako](https://github.com/tmk). קוד ×”TMK המקורי, ×¢× ×”×ª×מות, יכול ×œ×”×ž×¦× ×‘×ª×™×§×™×™×ª `tmk`. התוספות של QMK לפרוייקט יכולות ×œ×”×ž×¦× ×‘×ª×™×§×™×™×ª `quantum`. פרוייקטי מקלדות יכולות ×œ×”×ž×¦× ×‘×ª×™×§×™×•×ª `handwired` ו- `keyboard`.
+QMK ×”×•× ×¤×•×¨×§ של הפרוייקט [tmk_keyboard](https://github.com/tmk/tmk_keyboard) של [Jun Wako](https://github.com/tmk). קוד ×”TMK המקורי, ×¢× ×”×ª×מות, יכול ×œ×”×ž×¦× ×‘×ª×™×§×™×™×ª `tmk_core`. התוספות של QMK לפרוייקט יכולות ×œ×”×ž×¦× ×‘×ª×™×§×™×™×ª `quantum`. פרוייקטי מקלדות יכולות ×œ×”×ž×¦× ×‘×ª×™×§×™×•×ª `handwired` ו- `keyboard`.
### מבנה ×חסון המשתמש
@@ -69,4 +69,4 @@ In every keymap folder, the following files may be found. Only `keymap.c` is req
```
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/docs/he-il/quantum_keycodes.md b/docs/he-il/quantum_keycodes.md
index 3ca545e977..5374fd47ad 100644
--- a/docs/he-il/quantum_keycodes.md
+++ b/docs/he-il/quantum_keycodes.md
@@ -17,18 +17,8 @@
|`DEBUG` | |Toggle debug mode |
|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
-|`KC_LSPO` | |Left Shift when held, `(` when tapped |
-|`KC_RSPC` | |Right Shift when held, `)` when tapped |
-|`KC_LCPO` | |Left Control when held, `(` when tapped |
-|`KC_RCPC` | |Right Control when held, `)` when tapped |
-|`KC_LAPO` | |Left Alt when held, `(` when tapped |
-|`KC_RAPC` | |Right Alt when held, `)` when tapped |
-|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
-|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
-|`M(n)` | |Call macro `n` |
-|`MACROTAP(n)` | |Macro-tap `n` idk FIXME |
```
</div>
diff --git a/docs/index.html b/docs/index.html
index d2ba99897c..9b33cd263a 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -21,7 +21,7 @@
<div id="app"></div>
<script>
window.$docsify = {
- alias : {
+ alias: {
'/en/(.*)': '/$1',
'/en-us/(.*)': '/$1',
'/en-gb/(.*)': '/$1',
@@ -29,12 +29,32 @@
},
basePath: '/',
name: 'QMK Firmware',
- nameLink: '/',
+ nameLink: {
+ '/de/': '/#/de/',
+ '/es/': '/#/es/',
+ '/fr-fr/': '/#/fr-fr/',
+ '/he-il/': '/#/he-il/',
+ '/ja/': '/#/ja/',
+ '/pt-br/': '/#/pt-br/',
+ '/ru-ru/': '/#/ru-ru/',
+ '/zh-cn/': '/#/zh-cn/',
+ '/': '/#/'
+ },
repo: 'qmk/qmk_firmware',
loadSidebar: '_summary.md',
loadNavbar: '_langs.md',
mergeNavbar: true,
auto2top: true,
+ fallbackLanguages: [
+ 'de',
+ 'es',
+ 'fr-fr',
+ 'he-il',
+ 'ja',
+ 'pt-br',
+ 'ru-ru',
+ 'zh-cn'
+ ],
formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
search: {
paths: 'auto',
@@ -42,12 +62,14 @@
'/es/': 'Buscar',
'/zh-cn/': 'æœç´¢',
'/ja/': '検索',
+ '/pt-br/': 'Busca',
'/': 'Search'
},
noData: {
'/es/': '¡Ningún resultado!',
'/zh-cn/': '没有结果!',
'/ja/': '見ã¤ã‹ã‚Šã¾ã›ã‚“!',
+ '/pt-br/': 'Nenhum resultado!',
'/': 'No results!'
},
depth: 6
@@ -60,9 +82,9 @@
.replace('raw.githubusercontent.com', 'github.com')
.replace(/\/master/, '/blob/master')
} else {
- url = 'https://github.com/qmk/qmk_firmware/blob/master/docs/' + vm.route.file
+ url = 'https://github.com/qmk/qmk_firmware/edit/master/docs/' + vm.route.file
}
- var editHtml = '[:memo: Edit Document](' + url + ')\n'
+ var editHtml = ':pencil2: [Edit this page](' + url + ')\n'
return html
+ '\n\n----\n\n'
+ editHtml
diff --git a/docs/ja/README.md b/docs/ja/README.md
new file mode 100644
index 0000000000..8959a9dd95
--- /dev/null
+++ b/docs/ja/README.md
@@ -0,0 +1,37 @@
+# Quantum Mechanical Keyboard Firmware
+
+<!---
+ original document: eae21eed7:docs/README.md
+ git diff eae21eed7 HEAD -- docs/README.md | cat
+-->
+
+[![ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
+[![ビルド状態](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
+[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
+[![ドキュメントã®çŠ¶æ…‹](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
+[![GitHub 貢献者](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
+[![GitHub フォーク](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
+
+## QMK ファームウェアã¨ã¯ä½•ã‹ï¼Ÿ
+
+QMK (*Quantum Mechanical Keyboard*)㯠QMK ファームウェアã€QMK ツールボックスã€qmk.fm ãŠã‚ˆã³ãれらã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ä¿å®ˆã™ã‚‹ã‚ªãƒ¼ãƒ—ンソースコミュニティã§ã™ã€‚QMK ファームウェアã¯[tmk\_keyboard](http://github.com/tmk/tmk_keyboard) ã‚’å…ƒã«ã—ãŸã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã§ã€Atmel AVR コントローラã€ã‚ˆã‚Šå…·ä½“çš„ã«ã¯ [OLKB 製å“](http://olkb.com)ã€[ErgoDox EZ](http://www.ergodox-ez.com) キーボードãŠã‚ˆã³ [Clueboard 製å“](http://clueboard.co/) ã®ãŸã‚ã®å¹¾ã¤ã‹ã®ä¾¿åˆ©ãªæ©Ÿèƒ½ã‚’æŒã¡ã¾ã™ã€‚ã¾ãŸã€ChibiOS を使ã£ã¦ ARM ãƒãƒƒãƒ—ã«ç§»æ¤ã•ã‚Œã¦ã„ã¾ã™ã€‚ã“れを使ã£ã¦ã‚ãªãŸã®ä½œã£ãŸæ‰‹é…ç·šã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚ã‚‹ã„ã¯ã‚«ã‚¹ã‚¿ãƒ ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ PCB ã§ä½œã£ãŸã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’å‹•ã‹ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+## 入手方法
+
+QMK ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã€æ©Ÿèƒ½ã«è²¢çŒ®ã‚’ã™ã‚‹äºˆå®šãŒã‚ã‚‹å ´åˆã€æœ€ã‚‚ç°¡å˜ãªã®ã¯ã€[Github を介ã—ã¦ãƒªãƒã‚¸ãƒˆãƒªã‚’フォークã—](https://github.com/qmk/qmk_firmware#fork-destination-box)ã€ãƒªãƒã‚¸ãƒˆãƒªã‚’ã‚ãªãŸã®é–‹ç™ºç’°å¢ƒã«ã‚¯ãƒ­ãƒ¼ãƒ³ã—ã¦å¤‰æ›´ã‚’加ãˆã€ãれらをプッシュã—ã€[プルリクエスト](https://github.com/qmk/qmk_firmware/pulls)ã‚’é–‹ãã“ã¨ã§ã™ã€‚
+
+ãれ以外ã®å ´åˆã¯ã€`git clone https://github.com/qmk/qmk_firmware` を介ã—ã¦ç›´æŽ¥ã‚¯ãƒ­ãƒ¼ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚zip ã¾ãŸã¯ tar ファイルをダウンロードã—ãªã„ã§ãã ã•ã„。コンパイルã™ã‚‹ãŸã‚ã®ã‚µãƒ–モジュールをダウンロードã™ã‚‹ãŸã‚ã« git リãƒã‚¸ãƒˆãƒªãŒå¿…è¦ã§ã™ã€‚
+
+## コンパイル方法
+
+コンパイルをã™ã‚‹å‰ã«ã€AVR ã¾ãŸã¯ ARM 開発ã®ãŸã‚ã®[環境をインストール](ja/getting_started_build_tools.md)ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ãã‚ŒãŒå®Œäº†ã—ãŸã‚‰ã€`make` コマンドを使用ã—ã¦ã€ä»¥ä¸‹ã®è¡¨è¨˜ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨ã‚­ãƒ¼ãƒžãƒƒãƒ—をビルドã—ã¾ã™ã€‚
+
+ make planck/rev4:default
+
+ã“ã‚Œã¯ã€`planck` ã® `rev4` リビジョンを `default` キーマップã§ãƒ“ルドã—ã¾ã™ã€‚å…¨ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ãƒªãƒ“ジョン(サブプロジェクトã¾ãŸã¯ãƒ•ã‚©ãƒ«ãƒ€ã¨ã‚‚呼ã°ã‚Œã¾ã™)ãŒã‚ã‚‹ã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ãã®å ´åˆã¯çœç•¥ã•ã‚Œã¾ã™:
+
+ make preonic:default
+
+## カスタマイズ方法
+
+QMK ã«ã¯ã€æŽ¢æ±‚ã™ã¹ã多ãã®[機能](ja/features.md)ã¨ã€æ·±å €ã‚Šã™ã‚‹ãŸã‚ã®[リファレンス ドキュメント](http://docs.qmk.fm)ãŒãŸãã•ã‚“ã‚ã‚Šã¾ã™ã€‚ã»ã¨ã‚“ã©ã®æ©Ÿèƒ½ã¯[キーマップ](ja/keymap.md)を変更ã—ã€[キーコード](ja/keycodes.md)を変更ã™ã‚‹ã“ã¨ã§æ´»ç”¨ã•ã‚Œã¾ã™ã€‚
diff --git a/docs/ja/_summary.md b/docs/ja/_summary.md
new file mode 100644
index 0000000000..e5e19ddc80
--- /dev/null
+++ b/docs/ja/_summary.md
@@ -0,0 +1,124 @@
+* [完全ãªåˆå¿ƒè€…ã®ã‚¬ã‚¤ãƒ‰](ja/newbs.md)
+ * [ã¯ã˜ã‚ã«](ja/newbs_getting_started.md)
+ * [åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ§‹ç¯‰](ja/newbs_building_firmware.md)
+ * [ファームウェアã®ãƒ•ãƒ©ãƒƒã‚·ãƒ¥](ja/newbs_flashing.md)
+ * [テストã¨ãƒ‡ãƒãƒƒã‚°](ja/newbs_testing_debugging.md)
+ * [QMK ã«ãŠã‘ã‚‹ Git é‹ç”¨ä½œæ³•](ja/newbs_git_best_practices.md)
+ * [ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒ](ja/newbs_git_using_your_master_branch.md)
+ * [マージã®ç«¶åˆã®è§£æ±º](ja/newbs_git_resolving_merge_conflicts.md)
+ * [åŒæœŸã®ã¨ã‚Œã¦ã„ãªã„ git ブランãƒã®å†åŒæœŸ](ja/newbs_git_resynchronize_a_branch.md)
+ * [学習リソース](ja/newbs_learn_more_resources.md)
+
+* [QMKã®åŸºæœ¬](ja/README.md)
+ * [QMKã®å°Žå…¥](ja/getting_started_introduction.md)
+ * [QMK CLI](ja/cli.md)
+ * [QMK CLI 設定](ja/cli_configuration.md)
+ * [QMKã¸ã®è²¢çŒ®](ja/contributing.md)
+ * [Githubã®ä½¿ã„æ–¹](ja/getting_started_github.md)
+ * [ヘルプ](ja/getting_started_getting_help.md)
+
+* [破壊的ãªå¤‰æ›´](ja/breaking_changes.md)
+ * [2019年8月30日](ja/ChangeLog/20190830.md)
+
+* [FAQ](ja/faq.md)
+ * [一般的ãªFAQ](ja/faq_general.md)
+ * [QMKã®ãƒ“ルド/コンパイル](ja/faq_build.md)
+ * [QMKã®ãƒ‡ãƒãƒƒã‚°/トラブルシューティング](ja/faq_debug.md)
+ * [キーマップ](ja/faq_keymap.md)
+ * [Zadigを使ã£ãŸãƒ‰ãƒ©ã‚¤ãƒã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«](ja/driver_installation_zadig.md)
+
+* 詳細ãªã‚¬ã‚¤ãƒ‰
+ * [ビルドツールã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«](ja/getting_started_build_tools.md)
+ * [Vagrantã®ã‚¬ã‚¤ãƒ‰](ja/getting_started_vagrant.md)
+ * [ビルド/コンパイルã®èª¬æ˜Ž](ja/getting_started_make_guide.md)
+ * [ファームウェアã®ãƒ•ãƒ©ãƒƒã‚·ãƒ¥](ja/flashing.md)
+ * [機能ã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚º](ja/custom_quantum_functions.md)
+ * [キーマップã®æ¦‚è¦](ja/keymap.md)
+
+* [ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢](ja/hardware.md)
+ * [AVR プロセッサ](ja/hardware_avr.md)
+ * [ドライãƒ](ja/hardware_drivers.md)
+
+* リファレンス
+ * [キーボード ガイドライン](ja/hardware_keyboard_guidelines.md)
+ * [設定オプション](ja/config_options.md)
+ * [キーコード](ja/keycodes.md)
+ * [コーディングè¦ç´„ - C](ja/coding_conventions_c.md)
+ * [コーディングè¦ç´„ - Python](ja/coding_conventions_python.md)
+ * [ドキュメント ベストプラクティス](ja/documentation_best_practices.md)
+ * [ドキュメント テンプレート](ja/documentation_templates.md)
+ * [用語](ja/reference_glossary.md)
+ * [ユニットテスト](ja/unit_testing.md)
+ * [便利ãªé–¢æ•°](ja/ref_functions.md)
+ * [Configurator サãƒãƒ¼ãƒˆ](ja/reference_configurator_support.md)
+ * [info.json å½¢å¼](ja/reference_info_json.md)
+ * [Python CLI 開発](ja/cli_development.md)
+
+* [機能](ja/features.md)
+ * [基本的ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰](ja/keycodes_basic.md)
+ * [US ANSI シフトキー](ja/keycodes_us_ansi_shifted.md)
+ * [Quantum キーコード](ja/quantum_keycodes.md)
+ * [Advanced キーコード](ja/feature_advanced_keycodes.md)
+ * [オーディオ](ja/feature_audio.md)
+ * [自動シフト](ja/feature_auto_shift.md)
+ * [ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆ](ja/feature_backlight.md)
+ * [ブルートゥース](ja/feature_bluetooth.md)
+ * [ブートマジック](ja/feature_bootmagic.md)
+ * [コンボ](ja/feature_combo.md)
+ * [コマンド](ja/feature_command.md)
+ * [Debounce API](ja/feature_debounce_type.md)
+ * [DIP スイッãƒ](ja/feature_dip_switch.md)
+ * [動的マクロ](ja/feature_dynamic_macros.md)
+ * [エンコーダ](ja/feature_encoders.md)
+ * [グレイブ エスケープ](ja/feature_grave_esc.md)
+ * [触覚フィードãƒãƒƒã‚¯](ja/feature_haptic_feedback.md)
+ * [HD44780 LCD コントローラ](ja/feature_hd44780.md)
+ * [キーロック](ja/feature_key_lock.md)
+ * [レイアウト](ja/feature_layouts.md)
+ * [リーダー キー](ja/feature_leader_key.md)
+ * [LED マトリクス](ja/feature_led_matrix.md)
+ * [マクロ](ja/feature_macros.md)
+ * [マウスキー](ja/feature_mouse_keys.md)
+ * [OLED ドライãƒ](ja/feature_oled_driver.md)
+ * [One Shot Keys](ja/feature_advanced_keycodes.md#one-shot-keys)
+ * [ãƒã‚¤ãƒ³ãƒ†ã‚£ãƒ³ã‚° デãƒã‚¤ã‚¹](ja/feature_pointing_device.md)
+ * [PS/2 マウス](ja/feature_ps2_mouse.md)
+ * [RGB ライト](ja/feature_rgblight.md)
+ * [RGB マトリクス](ja/feature_rgb_matrix.md)
+ * [Space Cadet](ja/feature_space_cadet.md)
+ * [分割キーボード](ja/feature_split_keyboard.md)
+ * [Stenography](ja/feature_stenography.md)
+ * [Swap Hands](ja/feature_swap_hands.md)
+ * [タップ ダンス](ja/feature_tap_dance.md)
+ * [Terminal](ja/feature_terminal.md)
+ * [感熱å¼ãƒ—リンタ](ja/feature_thermal_printer.md)
+ * [ユニコード](ja/feature_unicode.md)
+ * [Userspace](ja/feature_userspace.md)
+ * [Velocikey](ja/feature_velocikey.md)
+
+* メーカーãŠã‚ˆã³ãƒ¢ãƒƒãƒ€ãƒ¼ã®ãŸã‚ã«
+ * [Hand Wiring Guide](ja/hand_wire.md)
+ * [ISP Flashing Guide](ja/isp_flashing_guide.md)
+ * [ARM デãƒãƒƒã‚° ガイド](ja/arm_debugging.md)
+ * [I2C ドライãƒ](ja/i2c_driver.md)
+ * [GPIO コントロール](ja/internals_gpio_control.md)
+ * [Proton C è¦ç´„](ja/proton_c_conversion.md)
+
+* より深ã知るãŸã‚ã«
+ * [キーボードãŒã©ã®ã‚ˆã†ã«å‹•ä½œã™ã‚‹ã‹](ja/how_keyboards_work.md)
+ * [QMKã®ç†è§£](ja/understanding_qmk.md)
+
+* ä»–ã®è©±é¡Œ
+ * [Eclipseã§QMKを使用](ja/other_eclipse.md)
+ * [VSCodeã§QMKを使用](ja/other_vscode.md)
+ * [サãƒãƒ¼ãƒˆ](ja/support.md)
+ * [翻訳を追加ã™ã‚‹æ–¹æ³•](ja/translating.md)
+
+* QMK ã®å†…部詳細(作æˆä¸­)
+ * [定義](ja/internals_defines.md)
+ * [Input Callback Reg](ja/internals_input_callback_reg.md)
+ * [Midi ドライãƒ](ja/internals_midi_device.md)
+ * [Midi デãƒã‚¤ã‚¹ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—手順](ja/internals_midi_device_setup_process.md)
+ * [Midi ユーティリティ](ja/internals_midi_util.md)
+ * [Send Functions](ja/internals_send_functions.md)
+ * [Sysex Tools](ja/internals_sysex_tools.md)
diff --git a/docs/ja/arm_debugging.md b/docs/ja/arm_debugging.md
new file mode 100644
index 0000000000..6267d0f8ad
--- /dev/null
+++ b/docs/ja/arm_debugging.md
@@ -0,0 +1,92 @@
+# Eclipse を使ã£ãŸ ARM デãƒãƒƒã‚°
+
+<!---
+ original document: eae21eed7:docs/arm_debugging.md
+ git diff eae21eed7 HEAD -- docs/arm_debugging.md | cat
+-->
+
+ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€SWD アダプタã¨ã‚ªãƒ¼ãƒ—ンソース/フリーツールを使ã£ã¦ ARM MCU をデãƒãƒƒã‚°ã™ã‚‹ãŸã‚ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—方法ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€GNU MCU Eclipse IDE for C/C++ Developers ãŠã‚ˆã³ OpenOCD ã‚’å¿…è¦ãªä¾å­˜é–¢ä¿‚ã¨ä¸€ç·’ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚
+
+ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ä¸Šç´šè€…å‘ã‘ã§ã‚ã‚Šã€ã‚ãªãŸã®ãƒžã‚·ãƒ³ã§ã€MAKE フローを使ã£ã¦ã€ARM 互æ›ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’コンパイルã§ãã‚‹ã“ã¨ã‚’å‰æã«ã—ã¦ã„ã¾ã™ã€‚
+
+## ソフトウェアã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«
+
+ã“ã“ã§ã®ä¸»ãªç›®çš„㯠MCU Eclipse IDE ã‚’æ­£ã—ãマシンã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã™ã€‚å¿…è¦ãªæ‰‹é †ã¯[ã“ã®](https://gnu-mcu-eclipse.github.io/install/)インストールガイドã‹ã‚‰æ´¾ç”Ÿã—ã¦ã„ã¾ã™ã€‚
+
+### xPack マãƒãƒ¼ã‚¸ãƒ£
+
+ã“ã®ãƒ„ールã¯ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ‘ッケージマãƒãƒ¼ã‚¸ãƒ£ã§ã‚ã‚Šã€å¿…è¦ãªä¾å­˜é–¢ä¿‚ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚
+
+XPM 㯠Node.js を使ã£ã¦å®Ÿè¡Œã•ã‚Œã‚‹ãŸã‚ã€[ã“ã“](https://nodejs.org/en/)ã‹ã‚‰å–å¾—ã—ã¦ãã ã•ã„。インストール後ã«ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚’é–‹ã `npm -v` ã¨å…¥åŠ›ã—ã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ãŒè¿”ã£ã¦ãã‚‹ã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯æˆåŠŸã§ã™ã€‚
+
+XPM ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹é †ã¯[ã“ã“](https://www.npmjs.com/package/xpm)ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã€OS 固有ã®ã‚‚ã®ã§ã™ã€‚ターミナル㫠`xpm --version` ã¨å…¥åŠ›ã™ã‚‹ã¨ã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒè¿”ã£ã¦ãã‚‹ã¯ãšã§ã™ã€‚
+
+### ARM ツールãƒã‚§ãƒ¼ãƒ³
+
+XPM を使ã†ã¨ã€ARM ツールãƒã‚§ãƒ¼ãƒ³ã‚’ã¨ã¦ã‚‚ç°¡å˜ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚`xpm install --global @xpack-dev-tools/arm-none-eabi-gcc` ã¨ã‚³ãƒžãƒ³ãƒ‰ã‚’入力ã—ã¾ã™ã€‚
+
+### Windows ビルドツール
+
+Windows を使ã£ã¦ã„ã‚‹å ´åˆã¯ã€ã“れをインストールã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼
+
+`xpm install --global @gnu-mcu-eclipse/windows-build-tools`
+
+### プログラマ/デãƒãƒƒã‚¬ãƒ‰ãƒ©ã‚¤ãƒ
+
+プログラマã®ãƒ‰ãƒ©ã‚¤ãƒã‚’インストールã—ã¾ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã»ã¨ã‚“ã©ã©ã“ã§ã‚‚入手ã§ãã‚‹ ST-Link v2 を使ã£ã¦ä½œæˆã•ã‚Œã¾ã—ãŸã€‚
+ST-Link ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ‰ãƒ©ã‚¤ãƒã¯[ã“ã“](https://www.st.com/en/development-tools/stsw-link009.html)ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ãƒ„ールã®è£½é€ å…ƒã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
+
+### OpenOCD
+
+ã“ã®ä¾å­˜é–¢ä¿‚ã«ã‚ˆã‚Šã€SWD 㯠GDB ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã€ãƒ‡ãƒãƒƒã‚°ã«ä¸å¯æ¬ ã§ã™ã€‚`xpm install --global @xpack-dev-tools/openocd` を実行ã—ã¾ã™ã€‚
+
+### Java
+
+Java 㯠Eclipse ã§å¿…è¦ã¨ã•ã‚Œã‚‹ãŸã‚ã€[ã“ã“](https://www.oracle.com/technetwork/java/javase/downloads/index.html)ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。
+
+### GNU MCU Eclipse IDE
+
+最後㫠IDE をインストールã™ã‚‹ç•ªã§ã™ã€‚[ã“ã“](https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/)ã®ãƒªãƒªãƒ¼ã‚¹ãƒšãƒ¼ã‚¸ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã—ã¾ã™ã€‚
+
+## Eclipse ã®è¨­å®š
+
+ダウンロードã—㟠Eclipse IDE ã‚’é–‹ãã¾ã™ã€‚QMK ディレクトリをインãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã€File -> Import -> C/C++ -> Existing Code as Makefile Project ã‚’é¸æŠžã—ã¾ã™ã€‚Next ã‚’é¸æŠžã—ã€Browse を使用ã—㦠QMK フォルダをé¸æŠžã—ã¾ã™ã€‚tool-chain リストã‹ã‚‰ ARM Cross GCC ã‚’é¸æŠžã—ã€Finish ã‚’é¸æŠžã—ã¾ã™ã€‚
+
+ã“ã‚Œã§ã€å·¦å´ã« QMK フォルダãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚å³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã€Properties ã‚’é¸æŠžã—ã¾ã™ã€‚å·¦å´ã§ MCU を展開ã—ã€ARM Toolchains Paths ã‚’é¸æŠžã—ã¾ã™ã€‚xPack を押ã—㦠OK を押ã—ã¾ã™ã€‚OpenOCD Path ã§åŒã˜ã“ã¨ã‚’ç¹°ã‚Šè¿”ã—ã€Windows ã®å ´åˆã¯ã€Build Tools Path ã§ã‚‚åŒã˜ã“ã¨ã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚Apply and Close ã‚’é¸æŠžã—ã¾ã™ã€‚
+
+ã“ã“ã§ã€å¿…è¦ãª MCU パッケージをインストールã—ã¾ã™ã€‚Window -> Perspective -> Open Perspective -> Other... -> Packs ã‚’é¸æŠžã—ã¦ã€Packs perspective ã«ç§»å‹•ã—ã¾ã™ã€‚Packs タブã®æ¨ªã«ã‚る黄色ã®ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥è¨˜å·ã‚’é¸æŠžã—ã¾ã™ã€‚ã“ã‚Œã¯æ§˜ã€…ãªå ´æ‰€ã‹ã‚‰ MCU ã®å®šç¾©ã‚’è¦æ±‚ã™ã‚‹ãŸã‚ã€æ™‚é–“ãŒæŽ›ã‹ã‚Šã¾ã™ã€‚一部ã®ãƒªãƒ³ã‚¯ãŒå¤±æ•—ã—ãŸå ´åˆã¯ã€ãŠãらã Ignore ã‚’é¸æŠžã§ãã¾ã™ã€‚
+
+ã“ã‚ŒãŒçµ‚了ã™ã‚‹ã¨ã€ãƒ“ルドやデãƒãƒƒã‚°ã™ã‚‹ MCU を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹ã¯ãšã§ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€STM32F3 シリーズ㮠MCU を使ã„ã¾ã™ã€‚å·¦å´ã§ã€STMicroelectronics -> STM32F3 Series ã‚’é¸æŠžã—ã¾ã™ã€‚中央ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã€pack ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚å³ã‚¯ãƒªãƒƒã‚¯ã—ã€Install ã‚’é¸æŠžã—ã¾ã™ã€‚ãã‚ŒãŒçµ‚了ã—ãŸã‚‰ã€Window -> Perspective -> Open Perspective -> Other... -> C/C++ ã‚’é¸æŠžã—ã¦ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ‘ースペクティブã«æˆ»ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+Eclipse ã« QMK をビルドã—よã†ã¨ã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ã‚’æ•™ãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚QMK フォルダをå³ã‚¯ãƒªãƒƒã‚¯ -> Properties -> C/C++ Build -> Settings ã‚’é¸æŠžã—ã¾ã™ã€‚Devices タブをé¸æŠžã—ã€Devices ã®ä¸‹ã‹ã‚‰ MCU ã®é©åˆ‡ãªç¨®é¡žã‚’é¸æŠžã—ã¾ã™ã€‚ç§ã®ä¾‹ã§ã¯ã€STM32F303CC ã§ã™ã€‚
+
+ã“ã®é–“ã«ã€Build コマンドもセットアップã—ã¾ã—ょã†ã€‚C/C++ Build ã‚’é¸æŠžã—ã€Behavior タブをé¸æŠžã—ã¾ã™ã€‚build コマンドã®ã¨ã“ã‚ã§ã€`all` ã‚’å¿…è¦ãª make コマンドã«ç½®ãæ›ãˆã¾ã™ã€‚例ãˆã°ã€rev6 Planck ã® default キーマップã®å ´åˆã€ã“れ㯠`planck/rev6:default` ã«ãªã‚Šã¾ã™ã€‚Apply and Close ã‚’é¸æŠžã—ã¾ã™ã€‚
+
+## ビルド
+
+å…¨ã¦æ­£ã—ãセットアップã§ãã¦ã„ã‚Œã°ã€ãƒãƒ³ãƒžãƒ¼ãƒœã‚¿ãƒ³ã‚’押ã™ã¨ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒãƒ“ルドã•ã‚Œã€.binファイルãŒå‡ºåŠ›ã•ã‚Œã‚‹ã¯ãšã§ã™ã€‚
+
+## デãƒãƒƒã‚°
+
+### デãƒãƒƒã‚¬ã®æŽ¥ç¶š
+
+ARM MCU ã¯ã€ã‚¯ãƒ­ãƒƒã‚¯ä¿¡å·(SWCLK) ã¨ãƒ‡ãƒ¼ã‚¿ä¿¡å·(SWDIO) ã§æ§‹æˆã•ã‚Œã‚‹ Single Wire Debug (SWD) プロトコルを使ã„ã¾ã™ã€‚MCUã‚’ 完全ã«æ“作ã™ã‚‹ã«ã¯ã€ã“ã®2本ã®ãƒ¯ã‚¤ãƒ¤ã¨ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚’接続ã™ã‚‹ã ã‘ã§å分ã§ã™ã€‚ã“ã“ã§ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ USB を介ã—ã¦é›»åŠ›ãŒä¾›çµ¦ã•ã‚Œã‚‹ã¨æƒ³å®šã—ã¦ã„ã¾ã™ã€‚手動ã§ãƒªã‚»ãƒƒãƒˆãƒœã‚¿ãƒ³ã‚’使ãˆã‚‹ãŸã‚ã€RESET ä¿¡å·ã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。より高度ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã®ãŸã‚ã« printf 㨠scanf をホストã«éžåŒæœŸã«ãƒ‘イプã™ã‚‹ SWO ä¿¡å·ã‚’使用ã§ãã¾ã™ãŒã€ç§ãŸã¡ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã§ã¯ç„¡è¦–ã—ã¾ã™ã€‚
+
+注æ„: SWCLK 㨠SWDIO ピンãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã§ä½¿ã‚ã‚Œã¦ã„ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。もã—使ã‚ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ä¸€æ™‚çš„ã«ä»–ã®ãƒ”ンã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+### デãƒãƒƒã‚¬ã®è¨­å®š
+
+QMK フォルダをå³ã‚¯ãƒªãƒƒã‚¯ã—ã€Debug As -> Debug Configurations... ã‚’é¸æŠžã—ã¾ã™ã€‚ã“ã“ã§ã€GDB OpenOCD Debugging をダブルクリックã—ã¾ã™ã€‚Debugger タブをé¸æŠžã—ã€MCU ã«å¿…è¦ãªè¨­å®šã‚’入力ã—ã¾ã™ã€‚ã“れを見ã¤ã‘ã‚‹ã«ã¯ã„ã˜ã£ãŸã‚Šã‚°ã‚°ã£ãŸã‚Šã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。STM32F3 用ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚¹ã‚¯ãƒªãƒ—ト㯠stm32f3discovery.cfg ã¨å‘¼ã°ã‚Œã¾ã™ã€‚OpenOCD ã«ä¼ãˆã‚‹ã«ã¯ã€Config options 㧠`-f board/stm32f3discovery.cfg` ã¨å…¥åŠ›ã—ã¾ã™ã€‚
+
+注æ„: ç§ã®å ´åˆã€ã“ã®è¨­å®šã‚¹ã‚¯ãƒªãƒ—トã¯ãƒªã‚»ãƒƒãƒˆæ“作を無効ã«ã™ã‚‹ãŸã‚ã«ç·¨é›†ãŒå¿…è¦ã§ã™ã€‚スクリプトã®å ´æ‰€ã¯ã€é€šå¸¸ã¯ãƒ‘ス `openocd/version/.content/scripts/board` ã®ä¸‹ã®å®Ÿéš›ã®å®Ÿè¡Œå¯èƒ½ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ä¸­ã§è¦‹ã¤ã‹ã‚Šã¾ã™ã€‚ã“ã“ã§ã€ç§ã¯ `reset_config srst_only` ã‚’ `reset_config none` ã«ç·¨é›†ã—ã¾ã—ãŸã€‚
+
+Apply and Close ã‚’é¸æŠžã—ã¾ã™ã€‚
+
+### デãƒãƒƒã‚¬ã®å®Ÿè¡Œ
+
+キーボードをリセットã—ã¦ãã ã•ã„。
+
+虫アイコンをクリックã—ã€ã‚‚ã—å…¨ã¦ã†ã¾ãè¡Œã‘ã° Debug パースペクティブã«ç§»å‹•ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€main 関数ã®æœ€åˆã§ãƒ—ログラムカウンタãŒåœæ­¢ã™ã‚‹ã®ã§ã€Play ボタンを押ã—ã¾ã™ã€‚å…¨ã¦ã®ãƒ‡ãƒãƒƒã‚¬ã®ã»ã¨ã‚“ã©ã®æ©Ÿèƒ½ã¯ ARM MCU ã§å‹•ä½œã—ã¾ã™ãŒã€æ­£ç¢ºãªè©³ç´°ã«ã¤ã„ã¦ã¯ google ãŒã‚ãªãŸã®ãŠå‹é”ã§ã™ï¼
+
+
+ãƒãƒƒãƒ”ーデãƒãƒƒã‚®ãƒ³ã‚°ï¼
diff --git a/docs/ja/cli.md b/docs/ja/cli.md
new file mode 100644
index 0000000000..ef3752873d
--- /dev/null
+++ b/docs/ja/cli.md
@@ -0,0 +1,227 @@
+# QMK CLI
+
+<!---
+ original document: d598f01cb:docs/cli.md
+ git diff d598f01cb HEAD -- docs/cli.md | cat
+-->
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯ QMK CLI ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã¨ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚
+
+# 概è¦
+
+QMK CLI を使用ã™ã‚‹ã¨ QMK キーボードã®æ§‹ç¯‰ã¨ä½œæ¥­ãŒç°¡å˜ã«ãªã‚Šã¾ã™ã€‚QMK ファームウェアã®å–å¾—ã¨ã‚³ãƒ³ãƒ‘イルã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ä½œæˆãªã©ã®ã‚ˆã†ãªã‚¿ã‚¹ã‚¯ã‚’簡素化ã—åˆç†åŒ–ã™ã‚‹ãŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’多ãæä¾›ã—ã¾ã™ã€‚
+
+* [グローãƒãƒ« CLI](#global-cli)
+* [ローカル CLI](#local-cli)
+* [CLI コマンド](#cli-commands)
+
+# å¿…è¦äº‹é …
+
+CLI 㯠Python 3.5 以上を必è¦ã¨ã—ã¾ã™ã€‚我々ã¯å¿…è¦äº‹é …ã®æ•°ã‚’å°‘ãªãã—よã†ã¨ã—ã¦ã„ã¾ã™ãŒã€[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt) ã«ãƒªã‚¹ãƒˆã•ã‚Œã¦ã„るパッケージもインストールã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+# グローãƒãƒ« CLI :id=global-cli
+
+QMK ã¯ã€QMK ビルド環境ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã€QMK ã®æ“作ã€ãŠã‚ˆã³ `qmk_firmware` ã®è¤‡æ•°ã®ã‚³ãƒ”ーã®æ“作を容易ã«ã§ãるインストールå¯èƒ½ãª CLI ã‚’æä¾›ã—ã¾ã™ã€‚ã“れを定期的ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŠã‚ˆã³æ›´æ–°ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+
+## Homebrew を使ã£ãŸã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« (macOSã€ã„ãã¤ã‹ã® Linux)
+
+[Homebrew](https://brew.sh) をインストールã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¿ãƒƒãƒ—ã—㦠QMK をインストールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+
+```
+brew tap qmk/qmk
+brew install qmk
+export QMK_HOME='~/qmk_firmware' # オプションã€`qmk_firmware` ã®å ´æ‰€ã‚’設定ã—ã¾ã™
+qmk setup # ã“れ㯠`qmk/qmk_firmware` をクローンã—ã€ã‚ªãƒ—ションã§ãƒ“ルド環境をセットアップã—ã¾ã™
+```
+
+## easy_install ã‚ã‚‹ã„㯠pip を使ã£ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«
+
+上ã®ãƒªã‚¹ãƒˆã«ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ ãŒãªã„å ´åˆã¯ã€QMK を手動ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚最åˆã«ã€python 3.5 (以é™)をインストールã—ã¦ã„ã¦ã€pip をインストールã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。次ã«ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦ QMK をインストールã—ã¾ã™:
+
+```
+pip3 install qmk
+export QMK_HOME='~/qmk_firmware' # オプションã€`qmk_firmware` ã®å ´æ‰€ã‚’設定ã—ã¾ã™
+qmk setup # ã“れ㯠`qmk/qmk_firmware` をクローンã—ã€ã‚ªãƒ—ションã§ãƒ“ルド環境をセットアップã—ã¾ã™
+```
+
+## ä»–ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®ãŸã‚ã®ãƒ‘ッケージ
+
+より多ãã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ç”¨ã« `qmk` パッケージを作æˆãŠã‚ˆã³ä¿å®ˆã™ã‚‹äººã‚’探ã—ã¦ã„ã¾ã™ã€‚OS 用ã®ãƒ‘ッケージを作æˆã™ã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã£ã¦ãã ã•ã„:
+
+* ã“れらã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã¨çŸ›ç›¾ã™ã‚‹å ´åˆã¯ã€OS ã®ãƒ™ã‚¹ãƒˆãƒ—ラクティスã«å¾“ã£ã¦ãã ã•ã„
+ * 逸脱ã™ã‚‹å ´åˆã¯ã€ç†ç”±ã‚’コメントã«æ–‡ç« åŒ–ã—ã¦ãã ã•ã„。
+* virtualenv を使ã£ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„
+* 環境変数 `QMK_HOME` を設定ã—ã¦ã€ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚½ãƒ¼ã‚¹ã‚’ `~/qmk_firmware` 以外ã®ã©ã“ã‹ã«ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã™ã‚‹ã‚ˆã†ã«ãƒ¦ãƒ¼ã‚¶ã«æŒ‡ç¤ºã—ã¦ãã ã•ã„。
+
+# ローカル CLI :id=local-cli
+
+グローãƒãƒ« CLI を使ã„ãŸããªã„å ´åˆã¯ã€`qmk_firmware` ã«ä»˜å±žã®ãƒ­ãƒ¼ã‚«ãƒ« CLI ãŒã‚ã‚Šã¾ã™ã€‚`qmk_firmware/bin/qmk` ã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‹ã‚‰ `qmk` コマンドを実行ã§ãã€å¸¸ã« `qmk_firmware` ã®ã‚³ãƒ”ー上ã§å‹•ä½œã—ã¾ã™ã€‚
+
+**例**:
+
+```
+$ ~/qmk_firmware/bin/qmk hello
+Ψ Hello, World!
+```
+
+## ローカル CLI ã®åˆ¶é™
+
+グローãƒãƒ« CLI ã¨æ¯”較ã—ã¦ã€ãƒ­ãƒ¼ã‚«ãƒ« CLI ã«ã¯å¹¾ã¤ã‹ã®åˆ¶é™ãŒã‚ã‚Šã¾ã™:
+
+* ローカル CLI 㯠`qmk setup` ã‚ã‚‹ã„㯠`qmk clone` をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“。
+* 複数ã®ãƒªãƒã‚¸ãƒˆãƒªãŒã‚¯ãƒ­ãƒ¼ãƒ³ã•ã‚Œã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ãƒ­ãƒ¼ã‚«ãƒ« CLI ã¯å¸¸ã« `qmk_firmware` ツリー上ã§å‹•ä½œã—ã¾ã™ã€‚
+* ローカル CLI 㯠virtualenv ã§å‹•ä½œã—ã¾ã›ã‚“。ãã®ãŸã‚ä¾å­˜é–¢ä¿‚ãŒç«¶åˆã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™
+
+# CLI コマンド :id=cli-commands
+
+## `qmk cformat`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ clang-format を使ã£ã¦ C コードを整形ã—ã¾ã™ã€‚引数無ã—ã§å®Ÿè¡Œã—ã¦å…¨ã¦ã®ã‚³ã‚¢ã‚³ãƒ¼ãƒ‰ã‚’æ•´å½¢ã™ã‚‹ã‹ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ•ã‚¡ã‚¤ãƒ«åを渡ã—ã¦ç‰¹å®šã®ãƒ•ã‚¡ã‚¤ãƒ«ã«å¯¾ã—ã¦å®Ÿè¡Œã—ã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk cformat [file1] [file2] [...] [fileN]
+```
+
+## `qmk compile`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Šã€ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‹ã‚‰ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’コンパイルã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚<https://config.qmk.fm> ã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—㟠JSON をコンパイルã™ã‚‹ã‹ã€ãƒªãƒã‚¸ãƒˆãƒªå†…ã§ã‚­ãƒ¼ãƒžãƒƒãƒ—をコンパイルã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+**Configurator Exports ã§ã®ä½¿ã„æ–¹**:
+
+```
+qmk compile <configuratorExport.json>
+```
+
+**キーマップã§ã®ä½¿ã„æ–¹**:
+
+```
+qmk compile -kb <keyboard_name> -km <keymap_name>
+```
+
+## `qmk flash`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ `qmk compile` ã«ä¼¼ã¦ã„ã¾ã™ãŒã€ãƒ–ートローダを対象ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ブートローダã¯ã‚ªãƒ—ションã§ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ `:flash` ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+é•ã†ãƒ–ートローダを指定ã™ã‚‹ã«ã¯ã€`-bl <bootloader>` を使ã£ã¦ãã ã•ã„。利用å¯èƒ½ãªãƒ–ートローダã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€<https://docs.qmk.fm/#/ja/flashing>
+を見ã¦ãã ã•ã„。
+
+**Configurator Exports ã§ã®ä½¿ã„æ–¹**:
+
+```
+qmk flash <configuratorExport.json> -bl <bootloader>
+```
+
+**キーマップã§ã®ä½¿ã„æ–¹**:
+
+```
+qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
+```
+
+**ブートローダã®ãƒªã‚¹ãƒˆ**
+
+```
+qmk flash -b
+```
+
+## `qmk config`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Š QMK ã®æŒ™å‹•ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚完全㪠`qmk config` ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¤ã„ã¦ã¯ã€[CLI 設定](ja/cli_configuration.md)を見ã¦ãã ã•ã„。
+
+**使用法**:
+
+```
+qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
+```
+
+## `qmk docs`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã¾ãŸã¯æ”¹å–„ã™ã‚‹ãŸã‚ã«ä½¿ã†ã“ã¨ãŒã§ãるローカル HTTP サーãƒã‚’èµ·å‹•ã—ã¾ã™ã€‚デフォルトã®ãƒãƒ¼ãƒˆã¯ 8936 ã§ã™ã€‚
+
+**使用法**:
+
+```
+qmk docs [-p PORT]
+```
+
+## `qmk doctor`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç’°å¢ƒã‚’調査ã—ã€æ½œåœ¨çš„ãªãƒ“ルドã‚ã‚‹ã„ã¯æ›¸ãè¾¼ã¿ã®å•é¡Œã«ã¤ã„ã¦è­¦å‘Šã—ã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk doctor
+```
+
+## `qmk json-keymap`
+
+QMK Configurator ã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ãŸã‚‚ã®ã‹ã‚‰ keymap.c を生æˆã—ã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk json-keymap [-o OUTPUT] filename
+```
+
+## `qmk kle2json`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«ã‚ˆã‚Šã€ç”Ÿã® KLE データã‹ã‚‰ QMK Configurator ã® JSON ã¸å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚絶対パスã‚ã‚‹ã„ã¯ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå†…ã®ãƒ•ã‚¡ã‚¤ãƒ«åã®ã„ãšã‚Œã‹ã‚’å—ã‘å–ã‚Šã¾ã™ã€‚デフォルトã§ã¯ã€`info.json` ãŒæ—¢ã«å­˜åœ¨ã—ã¦ã„ã‚‹å ´åˆã¯ä¸Šæ›¸ãã—ã¾ã›ã‚“。上書ãã™ã‚‹ã«ã¯ã€`-f` ã‚ã‚‹ã„㯠`--force` フラグを使ã£ã¦ãã ã•ã„。
+
+**使用法**:
+
+```
+qmk kle2json [-f] <filename>
+```
+
+**例**:
+
+```
+$ qmk kle2json kle.txt
+☒ File info.json already exists, use -f or --force to overwrite.
+```
+
+```
+$ qmk kle2json -f kle.txt -f
+Ψ Wrote out to info.json
+```
+
+## `qmk list-keyboards`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç¾åœ¨ `qmk_firmware` ã§å®šç¾©ã•ã‚Œã¦ã„ã‚‹å…¨ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’リスト化ã—ã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk list-keyboards
+```
+
+## `qmk new-keymap`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æ—¢å­˜ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã«åŸºã¥ã„ã¦æ–°ã—ã„キーマップを作æˆã—ã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
+```
+
+## `qmk pyformat`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ `qmk_firmware` 内㮠python コードを整形ã—ã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk pyformat
+```
+
+## `qmk pytest`
+
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ python ã®ãƒ†ã‚¹ãƒˆã‚¹ã‚£ãƒ¼ãƒˆã‚’実行ã—ã¾ã™ã€‚python コードã«å¤‰æ›´ã‚’加ãˆãŸå ´åˆã€ã“ã‚Œã®å®Ÿè¡ŒãŒæˆåŠŸã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+**使用法**:
+
+```
+qmk pytest
+```
diff --git a/docs/ja/cli_configuration.md b/docs/ja/cli_configuration.md
new file mode 100644
index 0000000000..7e9c3e57fa
--- /dev/null
+++ b/docs/ja/cli_configuration.md
@@ -0,0 +1,126 @@
+# QMK CLI 設定
+
+<!---
+ original document: d598f01cb:docs/cli_configuration.md
+ git diff d598f01cb HEAD -- docs/cli_configuration.md | cat
+-->
+
+ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ `qmk config` ãŒã©ã®ã‚ˆã†ã«å‹•ä½œã™ã‚‹ã‹ã‚’説明ã—ã¾ã™ã€‚
+
+# ã¯ã˜ã‚ã«
+
+QMK CLI ã®è¨­å®šã¯ã‚­ãƒ¼ãƒãƒªãƒ¥ãƒ¼ã‚·ã‚¹ãƒ†ãƒ ã§ã™ã€‚å„キーã¯ãƒ”リオドã§åŒºåˆ‡ã‚‰ã‚ŒãŸã‚µãƒ–コマンドã¨å¼•æ•°åã§æ§‹æˆã•ã‚Œã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€è¨­å®šã‚­ãƒ¼ã¨è¨­å®šã•ã‚ŒãŸå¼•æ•°ã®é–“ã§ç°¡å˜ã‹ã¤ç›´æŽ¥çš„ãªå¤‰æ›ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚
+
+## ç°¡å˜ãªä¾‹
+
+例ã¨ã—ã¦ã€`qmk compile --keyboard clueboard/66/rev4 --keymap default` コマンドを見ã¦ã¿ã¾ã—ょã†ã€‚
+
+設定ã‹ã‚‰èª­ã¿å–ã‚‹ã“ã¨ãŒã§ãã‚‹2ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³å¼•æ•°ãŒã‚ã‚Šã¾ã™:
+
+* `compile.keyboard`
+* `compile.keymap`
+
+ã“れらを設定ã—ã¦ã¿ã¾ã—ょã†:
+
+```
+$ qmk config compile.keyboard=clueboard/66/rev4 compile.keymap=default
+compile.keyboard: None -> clueboard/66/rev4
+compile.keymap: None -> default
+Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
+```
+
+ã“ã‚Œã§ã€æ¯Žå›žã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨ã‚­ãƒ¼ãƒžãƒƒãƒ—を設定ã™ã‚‹ã“ã¨ãªãã€`qmk compile` を実行ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+## ユーザデフォルトã®è¨­å®š
+
+複数ã®ã‚³ãƒžãƒ³ãƒ‰é–“ã§è¨­å®šã‚’共有ã—ãŸã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚例ãˆã°ã€ã„ãã¤ã‹ã®ã‚³ãƒžãƒ³ãƒ‰ã¯å¼•æ•° `--keyboard` ã‚’å—ã‘å–ã‚Šã¾ã™ã€‚å…¨ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã“ã®å€¤ã‚’設定ã™ã‚‹ä»£ã‚ã‚Šã«ã€ãã®å¼•æ•°ã‚’å—ã‘å–ã‚‹å…¨ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ã§ä½¿ã‚れるユーザ値を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+例:
+
+```
+$ qmk config user.keyboard=clueboard/66/rev4 user.keymap=default
+user.keyboard: None -> clueboard/66/rev4
+user.keymap: None -> default
+Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
+```
+
+# CLI ドキュメント (`qmk config`)
+
+`qmk config` コマンドã¯åŸºç¤Žã¨ãªã‚‹è¨­å®šã¨ã‚„ã‚Šå–ã‚Šã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚引数無ã—ã§å®Ÿè¡Œã™ã‚‹ã¨ã€ç¾åœ¨ã®è¨­å®šã‚’表示ã—ã¾ã™ã€‚引数ãŒæŒ‡å®šã•ã‚ŒãŸå ´åˆã€ãれらã¯è¨­å®šãƒˆãƒ¼ã‚¯ãƒ³ã¨è¦‹ãªã•ã‚Œã¾ã™ã€‚設定トークンã¯ä»¥ä¸‹ã®å½¢å¼ã®ç©ºç™½ã‚’å«ã¾ãªã„文字列ã§ã™:
+
+ <subcommand|general|default>[.<key>][=<value>]
+
+## 設定値ã®è¨­å®š
+
+設定キーã«ç­‰å· (=) を入れるã“ã¨ã§ã€è¨­å®šå€¤ã‚’設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚キーã¯å¸¸ã«å®Œå…¨ãª `<section>.<key>` å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+例:
+
+```
+$ qmk config default.keymap=default
+default.keymap: None -> default
+Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
+```
+
+## 設定値ã®èª­ã¿è¾¼ã¿
+
+設定全体ã€å˜ä¸€ã®ã‚­ãƒ¼ã€ã‚ã‚‹ã„ã¯ã‚»ã‚¯ã‚·ãƒ§ãƒ³å…¨ä½“ã®è¨­å®šå€¤ã‚’読ã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚1ã¤ä»¥ä¸Šã®å€¤ã‚’表示ã™ã‚‹ãŸã‚ã«è¤‡æ•°ã®ã‚­ãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+### 全体ã®æ§‹æˆä¾‹
+
+ qmk config
+
+### セクション全体ã®ä¾‹
+
+ qmk config compile
+
+### å˜ä¸€ã‚­ãƒ¼ã®ä¾‹
+
+ qmk config compile.keyboard
+
+### 複数キーã®ä¾‹
+
+ qmk config user compile.keyboard compile.keymap
+
+## 設定値ã®å‰Šé™¤
+
+設定値を特別ãªæ–‡å­—列 `None` ã«è¨­å®šã™ã‚‹ã“ã¨ã§ã€è¨­å®šå€¤ã‚’削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+例:
+
+```
+$ qmk config default.keymap=None
+default.keymap: default -> None
+Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
+```
+
+## 複数ã®æ“作
+
+複数ã®èª­ã¿è¾¼ã¿ãŠã‚ˆã³æ›¸ãè¾¼ã¿æ“作を1ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã«çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãれらã¯é †ç•ªã«å®Ÿè¡ŒãŠã‚ˆã³è¡¨ç¤ºã•ã‚Œã¾ã™:
+
+```
+$ qmk config compile default.keymap=default compile.keymap=None
+compile.keymap=skully
+compile.keyboard=clueboard/66_hotswap/gen1
+default.keymap: None -> default
+compile.keymap: skully -> None
+Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
+```
+
+# ユーザ設定オプション
+
+| キー | デフォルト値 | 説明 |
+|-----|---------------|-------------|
+| user.keyboard | None | キーボードã®ãƒ‘ス (例: `clueboard/66/rev4`) |
+| user.keymap | None | キーマップå (例: `default`) |
+| user.name | None | ユーザ㮠github ã®ãƒ¦ãƒ¼ã‚¶å。 |
+
+# å…¨ã¦ã®è¨­å®šã‚ªãƒ—ション
+
+| キー | デフォルト値 | 説明 |
+|-----|---------------|-------------|
+| compile.keyboard | None | キーボードã®ãƒ‘ス (例: `clueboard/66/rev4`) |
+| compile.keymap | None | キーマップå (例: `default`) |
+| hello.name | None | 実行時ã®æŒ¨æ‹¶ã®åå‰ |
+| new_keyboard.keyboard | None | キーボードã®ãƒ‘ス (例: `clueboard/66/rev4`) |
+| new_keyboard.keymap | None | キーマップå (例: `default`) |
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
new file mode 100644
index 0000000000..6cdbd2cf1f
--- /dev/null
+++ b/docs/ja/config_options.md
@@ -0,0 +1,393 @@
+# QMK ã®è¨­å®š
+
+<!---
+ original document: 0f43c2652:docs/config_options.md
+ git diff 0f43c2652 HEAD -- docs/config_options.md | cat
+-->
+
+QMK ã¯ã»ã¼ç„¡åˆ¶é™ã«è¨­å®šå¯èƒ½ã§ã™ã€‚å¯èƒ½ãªã¨ã“ã‚ã¯ã„ã‹ãªã‚‹ã¨ã“ã‚ã§ã‚‚ã€ã‚„ã‚Šã™ãŽãªç¨‹ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚³ãƒ¼ãƒ‰ã‚µã‚¤ã‚ºã‚’犠牲ã«ã—ã¦ã§ã‚‚彼らã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’カスタマイズをã™ã‚‹ã“ã¨ã‚’許ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ã“ã®ãƒ¬ãƒ™ãƒ«ã®æŸ”軟性ã«ã‚ˆã‚Šè¨­å®šãŒå›°é›£ã«ãªã‚Šã¾ã™ã€‚
+
+QMK ã«ã¯ä¸»ã«ï¼’種類ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã™- `config.h` 㨠`rules.mk`。ã“れらã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ QMK ã®æ§˜ã€…ãªãƒ¬ãƒ™ãƒ«ã«å­˜åœ¨ã—ã€åŒã˜ç¨®é¡žã®å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æœ€çµ‚çš„ãªè¨­å®šã‚’構築ã™ã‚‹ãŸã‚ã«çµ„ã¿åˆã‚ã•ã‚Œã¾ã™ã€‚最低ã®å„ªå…ˆåº¦ã‹ã‚‰æœ€é«˜ã®å„ªå…ˆåº¦ã¾ã§ã®ãƒ¬ãƒ™ãƒ«ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™:
+
+* QMK デフォルト
+* キーボード
+* フォルダ (最大5レã¹ãƒ«ã®æ·±ã•)
+* キーマップ
+
+## QMK デフォルト
+
+QMK ã§ã®å…¨ã¦ã®åˆ©ç”¨å¯èƒ½ãªè¨­å®šã«ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãŒã‚ã‚Šã¾ã™ã€‚ãã®è¨­å®šãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã€ãƒ•ã‚©ãƒ«ãƒ€ã€ã‚ã‚‹ã„ã¯ã‚­ãƒ¼ãƒžãƒƒãƒ—レã¹ãƒ«ã§è¨­å®šã•ã‚Œãªã„å ´åˆã€ã“ã‚ŒãŒä½¿ç”¨ã•ã‚Œã‚‹è¨­å®šã§ã™ã€‚
+
+## キーボード
+
+ã“ã®ãƒ¬ãƒ™ãƒ«ã«ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰å…¨ä½“ã«é©ç”¨ã•ã‚Œã‚‹è¨­å®šã‚ªãƒ—ションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚一部ã®è¨­å®šã¯ã€ãƒªãƒ“ジョンã‚ã‚‹ã„ã¯ã»ã¨ã‚“ã©ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã§å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。他ã®è¨­å®šã¯ã“ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«éŽãŽãšã€ãƒ•ã‚©ãƒ«ãƒ€ã‚ã‚‹ã„ã¯ã‚­ãƒ¼ãƒžãƒƒãƒ—ã«ã‚ˆã£ã¦ä¸Šæ›¸ãã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+
+## フォルダ
+
+一部ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ã¯ã€ç•°ãªã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æ§‹æˆã®ãŸã‚ã®ãƒ•ã‚©ãƒ«ãƒ€ã¨ã‚µãƒ–フォルダãŒã‚ã‚Šã¾ã™ã€‚ã»ã¨ã‚“ã©ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯æ·±ã•1ã®ãƒ•ã‚©ãƒ«ãƒ€ã®ã¿ã§ã™ãŒã€QMK ã¯æœ€å¤§æ·±ã•5ã®ãƒ•ã‚©ãƒ«ãƒ€ã®æ§‹é€ ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚å„フォルダã¯ã€æœ€çµ‚çš„ãªè¨­å®šã«çµ„ã¿è¾¼ã¾ã‚Œã‚‹ç‹¬è‡ªã® `config.h` 㨠`rules.mk` ファイルをæŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+## キーマップ
+
+ã“ã®ãƒ¬ãƒ™ãƒ«ã«ã¯ç‰¹å®šã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ãŸã‚ã®å…¨ã¦ã®ã‚ªãƒ—ションãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚以å‰ã®å®šç¾©ã‚’上書ãã—ãŸã„å ´åˆã¯ã€`#undef <variable>` を使ã£ã¦å®šç¾©ã‚’解除ã—ã€ã‚¨ãƒ©ãƒ¼ç„¡ã—ã§å†å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+# `config.h` ファイル
+
+ã“ã‚Œã¯æœ€åˆã« include ã•ã‚Œã‚‹ã‚‚ã®ã® 1 ã¤ã§ã‚ã‚‹ C ヘッダファイルã§ã€ãƒ—ロジェクト全体(ã‚‚ã—å«ã¾ã‚Œã‚‹å ´åˆ)ã«ã‚ãŸã£ã¦æŒç¶šã—ã¾ã™ã€‚多ãã®å¤‰æ•°ã‚’ã“ã“ã§è¨­å®šã—ã€ä»–ã®å ´æ‰€ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚`config.h` ファイルã§ã¯ã€ä»¥ä¸‹ã®ã‚‚ã®ä»¥å¤–ã®ã€ä»–ã® `config.h` ファイルやãã®ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ«ã® include ã‚’ã—ãªã„ã§ãã ã•ã„:
+
+ #include "config_common.h"
+
+
+## ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚ªãƒ—ション
+* `#define VENDOR_ID 0x1234`
+ * VID を定義ã—ã¾ã™ã€‚ã»ã¨ã‚“ã©ã® DIY プロジェクトã«ãŠã„ã¦ã€ä»»æ„ã®ã‚‚ã®ã‚’定義ã§ãã¾ã™
+* `#define PRODUCT_ID 0x5678`
+ * PID を定義ã—ã¾ã™ã€‚ã»ã¨ã‚“ã©ã® DIY プロジェクトã§ã¯ã€ä»»æ„ã®ã‚‚ã®ã‚’定義ã§ãã¾ã™
+* `#define DEVICE_VER 0`
+ * デãƒã‚¤ã‚¹ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’定義ã—ã¾ã™ (多ãã®å ´åˆãƒªãƒ“ジョンã«ä½¿ã‚ã‚Œã¾ã™)
+* `#define MANUFACTURER Me`
+ * 一般的ã«ã€èª°ã‚‚ã—ãã¯ã©ã®ãƒ–ランドãŒãƒœãƒ¼ãƒ‰ã‚’作æˆã—ãŸã‹
+* `#define PRODUCT Board`
+ * キーボードã®åå‰
+* `#define DESCRIPTION a keyboard`
+ * キーボードã®ç°¡å˜ãªèª¬æ˜Ž
+* `#define MATRIX_ROWS 5`
+ * キーボードã®ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã®è¡Œã®æ•°
+* `#define MATRIX_COLS 15`
+ * キーボードã®ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã®åˆ—ã®æ•°
+* `#define MATRIX_ROW_PINS { D0, D5, B5, B6 }`
+ * è¡Œã®ãƒ”ンã€ä¸Šã‹ã‚‰ä¸‹ã¸
+* `#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }`
+ * 列ã®ãƒ”ンã€å·¦ã‹ã‚‰å³ã¸
+* `#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 }`
+ * å‚考ã¨ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã§ä½¿ã‚ã‚Œã¦ã„ãªã„ピン
+* `#define MATRIX_HAS_GHOST`
+ * マトリックスã«ã‚´ãƒ¼ã‚¹ãƒˆãŒã‚ã‚‹ã‹(ã‚ã‚Šãã†ã«ãªã„ã‹)定義ã—ã¾ã™
+* `#define DIODE_DIRECTION COL2ROW`
+ * COL2ROW ã‚ã‚‹ã„㯠ROW2COL - マトリックスãŒã©ã®ã‚ˆã†ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹ã‹ã€‚COL2ROW ã¯ã€ã‚¹ã‚¤ãƒƒãƒã¨ãƒ­ã‚¦(è¡Œ)ラインã®é–“ã«ãƒ€ã‚¤ã‚ªãƒ¼ãƒ‰ãŒé»’ã„å°ã‚’ロウ(è¡Œ)ラインã«å‘ã‘ã¦ç½®ã„ã¦ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚
+* `#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
+ * ロウ(è¡Œ)ラインã¨ã‚«ãƒ©ãƒ (列)ラインã«ãƒžãƒƒãƒ—ã•ã‚Œã¦ã„るピンを左ã‹ã‚‰å³ã«ã€‚å„スイッãƒãŒå€‹åˆ¥ã®ãƒ”ンã¨ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã«æŽ¥ç¶šã•ã‚Œã¦ã„るマトリックスを定義ã—ã¾ã™ã€‚
+* `#define AUDIO_VOICES`
+ * (循環ã•ã›ã‚‹ãŸã‚ã«)代替音声を有効ã«ã—ã¾ã™
+* `#define C4_AUDIO`
+ * ピン C4 ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効ã«ã—ã¾ã™
+* `#define C5_AUDIO`
+ * ピン C5 ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効ã«ã—ã¾ã™
+* `#define C6_AUDIO`
+ * ピン C6 ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効ã«ã—ã¾ã™
+* `#define B5_AUDIO`
+ * ピン B5 ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効ã«ã—ã¾ã™ (C[4-6]\_AUDIO ã®1ã¤ã¨ã¨ã‚‚ã« B[5-7]\_AUDIO ã®1ã¤ãŒæœ‰åŠ¹ã«ã•ã‚Œã¦ã„ã‚‹å ´åˆã€ç–‘似ステレオãŒæœ‰åŠ¹ã«ã•ã‚Œã¾ã™)
+* `#define B6_AUDIO`
+ * ピン B6 ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効ã«ã—ã¾ã™ (C[4-6]\_AUDIO ã®1ã¤ã¨ã¨ã‚‚ã« B[5-7]\_AUDIO ã®1ã¤ãŒæœ‰åŠ¹ã«ã•ã‚Œã¦ã„ã‚‹å ´åˆã€ç–‘似ステレオãŒæœ‰åŠ¹ã«ã•ã‚Œã¾ã™)
+* `#define B7_AUDIO`
+ * ピン B7 ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’有効ã«ã—ã¾ã™ (C[4-6]\_AUDIO ã®1ã¤ã¨ã¨ã‚‚ã« B[5-7]\_AUDIO ã®1ã¤ãŒæœ‰åŠ¹ã«ã•ã‚Œã¦ã„ã‚‹å ´åˆã€ç–‘似ステレオãŒæœ‰åŠ¹ã«ã•ã‚Œã¾ã™)
+* `#define BACKLIGHT_PIN B7`
+ * ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆã®ãƒ”ン
+* `#define BACKLIGHT_LEVELS 3`
+ * ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆã®ãƒ¬ãƒ™ãƒ«æ•° (off を除ã„ã¦æœ€å¤§15)
+* `#define BACKLIGHT_BREATHING`
+ * ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆã®ãƒ–レスを有効ã«ã—ã¾ã™
+* `#define BREATHING_PERIOD 6`
+ * 1ã¤ã®ãƒãƒƒã‚¯ãƒ©ã‚¤ãƒˆã® "ブレス" ã®é•·ã•ã®ç§’æ•°
+* `#define DEBOUNCE 5`
+ * ピンã®å€¤ã‚’読ã¿å–る時ã®é…延 (5ãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ)
+* `#define LOCKING_SUPPORT_ENABLE`
+ * メカニカルロックã®ã‚µãƒãƒ¼ãƒˆã€‚キーマップ㧠KC_LCAP〠KC_LNUM ãã—㦠KC_LSCR を使ãˆã‚‹ã‚ˆã†ã«ã—ã¾ã™
+* `#define LOCKING_RESYNC_ENABLE`
+ * キーボード㮠LED ã®çŠ¶æ…‹ã‚’スイッãƒã®çŠ¶æ…‹ã¨ä¸€è‡´ã•ã›ç¶šã‘よã†ã¨ã—ã¾ã™
+* `#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)`
+ * マジックコマンドã®ä½¿ç”¨ã‚’å¯èƒ½ã«ã™ã‚‹ã‚­ãƒ¼ã®çµ„ã¿åˆã‚ã› (デãƒãƒƒã‚°ã«ä¾¿åˆ©ã§ã™)
+* `#define USB_MAX_POWER_CONSUMPTION 500`
+ * デãƒã‚¤ã‚¹ã® USB 経由ã®æœ€å¤§é›»åŠ›(mA) を設定ã—ã¾ã™ (デフォルト: 500)
+* `#define USB_POLLING_INTERVAL_MS 10`
+ * キーボードã€ãƒžã‚¦ã‚¹ ãŠã‚ˆã³ 共有 (NKRO/メディアキー) インタフェースã®ãŸã‚ã® USB ãƒãƒ¼ãƒªãƒ³ã‚°ãƒ¬ãƒ¼ãƒˆã‚’ミリ秒ã§è¨­å®šã—ã¾ã™
+* `#define F_SCL 100000L`
+ * I2C を使用ã™ã‚‹ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãŸã‚ã® I2C クロックレート速度を設定ã—ã¾ã™ã€‚デフォルト㯠`400000L` ã§ã™ãŒã€`split_common` を使ã£ã¦ã„るキーボードã¯åˆ¥ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ `100000L` ã§ã™ã€‚
+
+## 無効ã«ã§ãる機能
+
+ã“れらã®ã‚ªãƒ—ションを定義ã™ã‚‹ã¨ã€é–¢é€£ã™ã‚‹æ©Ÿèƒ½ãŒç„¡åŠ¹ã«ãªã‚Šã€ã‚³ãƒ¼ãƒ‰ã‚µã‚¤ã‚ºã‚’節約ã§ãã¾ã™ã€‚
+
+* `#define NO_DEBUG`
+ * デãƒãƒƒã‚°ã‚’無効ã«ã—ã¾ã™
+* `#define NO_PRINT`
+ * hid_listen を使ã£ãŸå‡ºåŠ›ã‚„デãƒãƒƒã‚°ã‚’無効ã«ã—ã¾ã™
+* `#define NO_ACTION_LAYER`
+ * レイヤーを無効ã«ã—ã¾ã™
+* `#define NO_ACTION_TAPPING`
+ * タップダンスã¨ä»–ã®ã‚¿ãƒƒãƒ—機能を無効ã«ã—ã¾ã™
+* `#define NO_ACTION_ONESHOT`
+ * ワンショットモディファイアを無効ã«ã—ã¾ã™
+* `#define NO_ACTION_MACRO`
+ * å¤ã„å½¢å¼ã®ãƒžã‚¯ãƒ­å‡¦ç†ã‚’無効ã«ã—ã¾ã™: MACRO() & action_get_macro
+* `#define NO_ACTION_FUNCTION`
+ * fn_actions é…列(éžæŽ¨å¥¨)ã‹ã‚‰ã® action_function() ã®å‘¼ã³å‡ºã—を無効ã«ã—ã¾ã™
+
+## 有効ã«ã§ãる機能
+
+ã“れらã®ã‚ªãƒ—ションを定義ã™ã‚‹ã¨ã€é–¢é€£ã™ã‚‹æ©Ÿèƒ½ãŒæœ‰åŠ¹ã«ãªã‚Šã€ã‚³ãƒ¼ãƒ‰ã‚µã‚¤ã‚ºãŒå¤§ãããªã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+
+* `#define FORCE_NKRO`
+ * NKRO をデフォルトã§ã‚ªãƒ³ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Š EEPROM ã®è¨­å®šã«é–¢ä¿‚ãªãã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®èµ·å‹•æ™‚ã« NKRO ãŒå¼·åˆ¶çš„ã«ã‚ªãƒ³ã«ãªã‚Šã¾ã™ã€‚NKRO ã¯å¼•ã続ãオフã«ã§ãã¾ã™ãŒã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’å†èµ·å‹•ã™ã‚‹ã¨å†ã³ã‚ªãƒ³ã«ãªã‚Šã¾ã™ã€‚
+* `#define STRICT_LAYER_RELEASE`
+ * キーリリースãŒã©ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‹ã‚‰æ¥ãŸã®ã‹ã‚’覚ãˆã‚‹ã®ã§ã¯ãªãã€ç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚¹ã‚¿ãƒƒã‚¯ã‚’使ã£ã¦å¼·åˆ¶çš„ã«è©•ä¾¡ã•ã‚Œã‚‹ã‚ˆã†ã«ã—ã¾ã™ (高度ãªã‚±ãƒ¼ã‚¹ã«ä½¿ã‚ã‚Œã¾ã™)
+
+## 設定å¯èƒ½ãªæŒ™å‹•
+
+* `#define TAPPING_TERM 200`
+ * タップãŒãƒ›ãƒ¼ãƒ«ãƒ‰ã«ãªã‚‹ã¾ã§ã®æ™‚間。500以上ã«è¨­å®šã•ã‚ŒãŸå ´åˆã€ã‚¿ãƒƒãƒ—期間中ã«ã‚¿ãƒƒãƒ—ã•ã‚ŒãŸã‚­ãƒ¼ã‚‚ホールドã«ãªã‚Šã¾ã™ã€‚(訳注: PERMISSIVE_HOLDã‚‚å‚ç…§)
+* `#define TAPPING_TERM_PER_KEY`
+ * キーã”ã¨ã® `TAPPING_TERM` 設定ã®å‡¦ç†ã‚’有効ã«ã—ã¾ã™
+* `#define RETRO_TAPPING`
+ * 押下ã¨ãƒªãƒªãƒ¼ã‚¹ã®é–“ã«ä»–ã®ã‚­ãƒ¼ã«ã‚ˆã‚‹ä¸­æ–­ãŒãªã‘ã‚Œã°ã€TAPPING_TERM ã®å¾Œã§ã‚ã£ã¦ã‚‚ã¨ã«ã‹ãタップã—ã¾ã™
+ * 詳細㯠[Retro Tapping](ja/feature_advanced_keycodes.md#retro-tapping) を見ã¦ãã ã•ã„
+* `#define TAPPING_TOGGLE 2`
+ * トグルを引ãèµ·ã“ã™å‰ã®ã‚¿ãƒƒãƒ—æ•°
+* `#define PERMISSIVE_HOLD`
+ * `TAPPING_TERM` ã«ãƒ’ットã—ã¦ã„ãªãã¦ã‚‚ã€ãƒªãƒªãƒ¼ã‚¹ã™ã‚‹å‰ã«åˆ¥ã®ã‚­ãƒ¼ãŒæŠ¼ã•ã‚Œã‚‹ã¨ã€ã‚¿ãƒƒãƒ—ã¨ãƒ•ã‚©ãƒ¼ãƒ«ãƒ‰ã‚­ãƒ¼ãŒãƒ›ãƒ¼ãƒ«ãƒ‰ã‚’引ãèµ·ã“ã—ã¾ã™
+ * 詳細㯠[Permissive Hold](ja/feature_advanced_keycodes.md#permissive-hold) を見ã¦ãã ã•ã„
+* `#define IGNORE_MOD_TAP_INTERRUPT`
+ * 両方ã®ã‚­ãƒ¼ã« `TAPPING_TERM` ã‚’é©ç”¨ã™ã‚‹ã“ã¨ã§ã€ãƒ›ãƒ¼ãƒ«ãƒ‰æ™‚ã«ä»–ã®ã‚­ãƒ¼ã«å¤‰æ›ã™ã‚‹ã‚­ãƒ¼ã‚’使ã£ã¦ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚³ãƒ³ãƒœ (zx) ã‚’ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã—ã¾ã™
+ * 詳細㯠[Mod tap interrupt](ja/feature_advanced_keycodes.md#ignore-mod-tap-interrupt) を見ã¦ãã ã•ã„
+* `#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
+ * キーã”ã¨ã® `IGNORE_MOD_TAP_INTERRUPT` 設定ã®å‡¦ç†ã‚’有効ã«ã—ã¾ã™
+* `#define TAPPING_FORCE_HOLD`
+ * タップã•ã‚ŒãŸç›´å¾Œã«ã€ãƒ‡ãƒ¥ã‚¢ãƒ«ãƒ­ãƒ¼ãƒ«ã‚­ãƒ¼ã‚’修飾å­ã¨ã—ã¦ä½¿ç”¨ã§ãるよã†ã«ã—ã¾ã™
+ * [Hold after tap](ja/feature_advanced_keycodes.md#tapping-force-hold)を見ã¦ãã ã•ã„
+ * タップトグル機能を無効ã«ã—ã¾ã™ (`TT` ã‚ã‚‹ã„㯠One Shot Tap Toggle)
+* `#define LEADER_TIMEOUT 300`
+ * リーダーキーãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã™ã‚‹ã¾ã§ã®æ™‚é–“
+ * タイムアウトã™ã‚‹å‰ã«ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’終了ã§ããªã„å ´åˆã¯ã€ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®è¨­å®šã‚’増やã™å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã‚ã‚‹ã„ã¯ã€`LEADER_PER_KEY_TIMING` オプションを有効ã«ã™ã‚‹ã¨è‰¯ã„ã§ã—ょã†ã€‚ã“ã‚Œã¯å„キーãŒã‚¿ãƒƒãƒ—ã•ã‚ŒãŸå¾Œã§ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã‚’å†è¨­å®šã—ã¾ã™ã€‚
+* `#define LEADER_PER_KEY_TIMING`
+ * 全体ã§ã¯ç„¡ãå„キーを押ã™ãŸã³ã«å®Ÿè¡Œã•ã‚Œã‚‹ãƒªãƒ¼ãƒ€ãƒ¼ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®ã‚¿ã‚¤ãƒžãƒ¼ã‚’設定ã—ã¾ã™
+* `#define LEADER_KEY_STRICT_KEY_PROCESSING`
+ * Mod-Tap ãŠã‚ˆã³ Layer-Tap キーコードã®ãŸã‚ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã‚’無効ã«ã—ã¾ã™ã€‚例ãˆã°ã€ã“れを有効ã«ã™ã‚‹ã¨ã€`KC_A` を使ã„ãŸã„å ´åˆã¯ `MT(MOD_CTL, KC_A)` を指定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+* `#define ONESHOT_TIMEOUT 300`
+ * ワンショットãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã™ã‚‹ã¾ã§ã®æ™‚é–“
+* `#define ONESHOT_TAP_TOGGLE 2`
+ * ワンショットトグルãŒå¼•ãèµ·ã“ã•ã‚Œã‚‹ã¾ã§ã®ã‚¿ãƒƒãƒ—æ•°
+* `#define QMK_KEYS_PER_SCAN 4`
+ * 走査ã”ã¨ã«1ã¤ä»¥ä¸Šã®ã‚­ãƒ¼ã‚’é€ä¿¡ã§ãるよã†ã«ã—ã¾ã™ã€‚デフォルトã§ã¯ã€èµ°æŸ»ã”ã¨ã« `process_record()` 経由ã§1ã¤ã®ã‚­ãƒ¼ã‚¤ãƒ™ãƒ³ãƒˆã®ã¿ãŒé€ä¿¡ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã»ã¨ã‚“ã©ã®ã‚¿ã‚¤ãƒ”ングã«ã»ã¨ã‚“ã©å½±éŸ¿ã—ã¾ã›ã‚“ãŒã€å¤šãã®ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ã„ã‚‹ã‹ã€èµ°æŸ»ãƒ¬ãƒ¼ãƒˆãŒæœ€åˆã‹ã‚‰é…ã„å ´åˆã€ã‚­ãƒ¼ã‚¤ãƒ™ãƒ³ãƒˆã®å‡¦ç†ã«å¤šå°‘ã®é…延ãŒç”Ÿã˜ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ãã‚Œãžã‚Œã®ãƒ—レスã¨ãƒªãƒªãƒ¼ã‚¹ã¯åˆ¥ã®ã‚¤ãƒ™ãƒ³ãƒˆã§ã™ã€‚スキャン時間㌠1ms 程度ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å ´åˆã€ã¨ã¦ã‚‚高速ãªã‚¿ã‚¤ãƒ”ストã§ã•ãˆã€å®Ÿéš›ã«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰æ•° ms 以上ã®é…延を発生ã•ã›ã‚‹ã®ã«å¿…è¦ãª 500 キーストロークを1秒間ã«ç”Ÿæˆã™ã‚‹ã“ã¨ã¯ãªã„ã§ã—ょã†ã€‚ã—ã‹ã—ã€3~4ms ã®èµ°æŸ»æ™‚é–“ã§ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ã„ã‚‹å ´åˆã¯ã©ã†ã§ã—ょã†ã‹ï¼ŸãŠãらãã“ã‚ŒãŒå¿…è¦ã§ã™ã€‚
+* `#define COMBO_COUNT 2`
+ * [コンボ](ja/feature_combo.md)機能ã§ä½¿ã£ã¦ã„るコンボã®æ•°ã«ã“れを設定ã—ã¾ã™ã€‚
+* `#define COMBO_TERM 200`
+ * コンボキーãŒæ¤œå‡ºã•ã‚Œã‚‹ã¾ã§ã®æ™‚間。定義ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ `TAPPING_TERM` ã§ã™ã€‚
+* `#define TAP_CODE_DELAY 100`
+ * é©åˆ‡ãªç™»éŒ²ã«å•é¡ŒãŒã‚ã‚‹å ´åˆ(VUSB ボードã§çã—ããªã„)ã€`register_code` 㨠`unregister_code` ã®é–“ã®é…延を設定ã—ã¾ã™ã€‚値ã¯ãƒŸãƒªç§’ã§ã™ã€‚
+* `#define TAP_HOLD_CAPS_DELAY 80`
+ * MacOS ã§ç‰¹åˆ¥ãªå‡¦ç†ãŒè¡Œã‚れるãŸã‚ã€`KC_CAPSLOCK` を使ã†æ™‚ã«ã‚¿ãƒƒãƒ—ホールドキー (`LT`, `MT`) ã«é…延を設定ã—ã¾ã™ã€‚ã“ã®å€¤ã¯ãƒŸãƒªç§’ã§ã€å®šç¾©ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯80msã§ã™ã€‚macOS ã«ã¤ã„ã¦ã¯ã€ã“れを200以上ã«è¨­å®šã™ã‚‹ã¨è‰¯ã„ã§ã—ょã†ã€‚
+
+## RGB ライト設定 :id=rgb-light-configuration
+
+* `#define RGB_DI_PIN D7`
+ * WS2812 ã® DI 端å­ã«ã¤ãªãピン
+* `#define RGBLIGHT_ANIMATIONS`
+ * RGB アニメーションを実行ã—ã¾ã™
+* `#define RGBLED_NUM 12`
+ * LED ã®æ•°
+* `#define RGBLIGHT_SPLIT`
+ * 分割キーボードã®å·¦åŠåˆ†ã® RGB LED ã®å‡ºåŠ›ã‚’å³åŠåˆ†ã® RGB LED ã®å…¥åŠ›ã«ã¤ãªã’ã‚‹ã‹ã‚ã‚Šã«ã€ãã‚Œãžã‚Œã®å´ã§å€‹åˆ¥ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã®å‡ºåŠ›ãƒ”ンãŒç›´æŽ¥ RGB LED ã®å…¥åŠ›ã«ç¹‹ãŒã£ã¦ã„ã‚‹ã¨ãã¯ã€ã“ã®å®šç¾©ãŒå¿…è¦ã§ã™ã€‚
+* `#define RGBLED_SPLIT { 6, 6 }`
+ * 分割キーボードã®å„åŠåˆ†ã® `RGB_DI_PIN` ã«ç›´æŽ¥é…ç·šã•ã‚Œã¦ã„る接続ã•ã‚Œã¦ã„ã‚‹LEDã®æ•°
+ * 最åˆã®å€¤ã¯å·¦åŠåˆ†ã® LED ã®æ•°ã‚’示ã—ã€2番目ã®å€¤ã¯å³åŠåˆ†ã§ã™ã€‚
+ * RGBLED_SPLIT ãŒå®šç¾©ã•ã‚Œã¦ã„ã‚‹å ´åˆã€RGBLIGHT_SPLIT ã¯æš—黙的ã«å®šç¾©ã•ã‚Œã¾ã™ã€‚
+* `#define RGBLIGHT_HUE_STEP 12`
+ * 色相ã®å¢—減時ã®ã‚¹ãƒ†ãƒƒãƒ—å˜ä½
+* `#define RGBLIGHT_SAT_STEP 25`
+ * 彩度ã®å¢—減時ã®ã‚¹ãƒ†ãƒƒãƒ—å˜ä½
+* `#define RGBLIGHT_VAL_STEP 12`
+ * 値(明度)ã®å¢—減時ã®ã‚¹ãƒ†ãƒƒãƒ—å˜ä½
+* `#define RGBW`
+ * RGBW LED ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™
+
+## マウスキーオプション
+
+* `#define MOUSEKEY_INTERVAL 20`
+* `#define MOUSEKEY_DELAY 0`
+* `#define MOUSEKEY_TIME_TO_MAX 60`
+* `#define MOUSEKEY_MAX_SPEED 7`
+* `#define MOUSEKEY_WHEEL_DELAY 0`
+
+## 分割キーボードオプション
+
+分割キーボード固有ã®ã‚ªãƒ—ション。ã‚ãªãŸã® rules.mk ã« 'SPLIT_KEYBOARD = yes' ãŒæœ‰ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+
+* `SPLIT_TRANSPORT = custom`
+ * 標準ã®åˆ†å‰²é€šä¿¡ãƒ«ãƒ¼ãƒãƒ³ã‚’カスタムã®ã‚‚ã®ã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ç¾åœ¨ã€ARM ベースã®åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ã“れを使ã‚ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+
+### å·¦å³ã®è¨­å®š
+
+一ã¤è¦šãˆã¦ãŠã‹ãªã‘ã‚Œã°ãªã‚‰ãªã„ã“ã¨ã¯ã€USB ãƒãƒ¼ãƒˆãŒæŽ¥ç¶šã•ã‚Œã¦ã„ã‚‹å´ãŒå¸¸ã«ãƒžã‚¹ã‚¿ãƒ¼å´ã§ã‚ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚USB ã«æŽ¥ç¶šã•ã‚Œã¦ã„ãªã„å´ã¯ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ã™ã€‚
+
+分割キーボードã®å·¦å³ã‚’設定ã™ã‚‹ã«ã¯ã€å¹¾ã¤ã‹ã®ç•°ãªã‚‹æ–¹æ³•ãŒã‚ã‚Šã¾ã™ (優先度ã®é †ã«ãƒªã‚¹ãƒˆã•ã‚Œã¦ã„ã¾ã™):
+
+1. `SPLIT_HAND_PIN` を設定ã—ã¾ã™: å·¦å³ã‚’決定ã™ã‚‹ãŸã‚ã«ãƒ”ンを読ã¿è¾¼ã¿ã¾ã™ã€‚ピン㌠high ã®å ´åˆã€ãã‚ŒãŒå·¦å´ã§ã™ã€‚low ã§ã‚ã‚Œã°ã€ãã®åŠåˆ†å´ãŒå³å´ã§ã‚ã‚‹ã¨æ±ºå®šã•ã‚Œã¾ã™ã€‚
+2. `EE_HANDS` を設定ã—ã€å„åŠåˆ†ã« `eeprom-lefthand.eep`/`eeprom-righthand.eep` を書ãè¾¼ã¿ã¾ã™
+ * DFU ブートローダをæ­è¼‰ã—ãŸãƒœãƒ¼ãƒ‰ã§ã¯ã€ã“れら㮠EEPROM ファイルを書ã込むãŸã‚ã« `:dfu-split-left`/`:dfu-split-right` を使ã†ã“ã¨ãŒã§ãã¾ã™
+ * Caterina ブートローダをæ­è¼‰ã—ãŸãƒœãƒ¼ãƒ‰ (標準的㪠Pro Micros ãªã©)ã§ã¯ã€`:avrdude-split-left`/`:avrdude-split-right` を使ã£ã¦ãã ã•ã„
+ * ARM DFU ブートローダをæ­è¼‰ã—ãŸãƒœãƒ¼ãƒ‰ (Proton C ãªã©)ã§ã¯ã€`:dfu-util-split-left`/`:dfu-util-split-right` を使ã£ã¦ãã ã•ã„
+3. `MASTER_RIGHT` を設定ã—ã¾ã™: USBãƒãƒ¼ãƒˆã«å·®ã—è¾¼ã¾ã‚ŒãŸå´ã¯ãƒžã‚¹ã‚¿ãƒ¼å´ã§å³å´ã§ã‚ã‚‹ã¨æ±ºå®šã•ã‚Œã¾ã™(デフォルトã®é€†)
+4. デフォルト: USB ãƒãƒ¼ãƒˆã«å·®ã—è¾¼ã¾ã‚Œã¦ã„ã‚‹å´ãŒãƒžã‚¹ã‚¿ãƒ¼å´ã§ã‚ã‚Šã€å·¦å´ã§ã‚ã‚‹ã¨è¦‹ãªã•ã‚Œã¾ã™ã€‚スレーブå´ã¯å³å´ã§ã™
+
+#### å·¦å³ã‚’定義ã—ã¾ã™
+
+* `#define SPLIT_HAND_PIN B7`
+ * high/low ピンを使ã£ã¦å·¦å³ã‚’決定ã—ã¾ã™ã€‚low = å³æ‰‹ã€high = 左手。`B7` を使ã£ã¦ã„るピンã«ç½®ãæ›ãˆã¾ã™ã€‚ã“ã‚Œã¯ã‚ªãƒ—ションã§ã€`SPLIT_HAND_PIN` ãŒæœªå®šç¾©ã®ã¾ã¾ã§ã‚ã‚‹å ´åˆã€EE_HANDS メソッドã¾ãŸã¯æ¨™æº–ã® Let's SplitãŒä½¿ã£ã¦ã„ã‚‹ MASTER_LEFT / MASTER_RIGHT 定義をã¾ã ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+* `#define EE_HANDS` (`SPLIT_HAND_PIN` ãŒå®šç¾©ã•ã‚Œã¦ã„ãªã„å ´åˆã®ã¿å‹•ä½œã—ã¾ã™)
+ * `eeprom-lefthand.eep`/`eeprom-righthand.eep` ãŒãã‚Œãžã‚Œã®åŠåˆ†ã«æ›¸ãè¾¼ã¾ã‚ŒãŸå¾Œã§ã€EEPROM 内ã«æ ¼ç´ã•ã‚Œã¦ã„ã‚‹å·¦å³ã®è¨­å®šã®å€¤ã‚’読ã¿è¾¼ã¿ã¾ã™ã€‚
+
+* `#define MASTER_RIGHT`
+ * マスターå´ãŒå³å´ã¨å®šç¾©ã•ã‚Œã¾ã™ã€‚
+
+### ä»–ã®ã‚ªãƒ—ション
+
+* `#define USE_I2C`
+ * Serial ã®ä»£ã‚ã‚Šã« I2C を使ã†å ´åˆ (デフォルト㯠serial)
+
+* `#define SOFT_SERIAL_PIN D0`
+ * serial を使ã†å ´åˆã€ã“れを定義ã—ã¾ã™ã€‚`D0` ã‚ã‚‹ã„㯠`D1`,`D2`,`D3`,`E6`。
+
+* `#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
+* `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
+ * å³åŠåˆ†ã«å·¦åŠåˆ†ã¨ç•°ãªã‚‹ãƒ”ンé…置を指定ã—ãŸã„å ´åˆã¯ã€`MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT` を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ç¾åœ¨ã®ã¨ã“ã‚ã€`MATRIX_ROW_PINS` ã®ã‚µã‚¤ã‚ºã¯ `MATRIX_ROW_PINS_RIGHT` ã¨åŒã˜ã§ãªã‘ã‚Œã°ãªã‚‰ãšã€åˆ—ã®å®šç¾©ã‚‚åŒæ§˜ã§ã™ã€‚
+
+* `#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
+ * å³åŠåˆ†ã«å·¦åŠåˆ†ã¨ç•°ãªã‚‹ç›´æŽ¥ãƒ”ンé…置を指定ã—ãŸã„å ´åˆã¯ã€`DIRECT_PINS_RIGHT` を定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ç¾åœ¨ã®ã¨ã“ã‚ã€`DIRECT_PINS` ã®ã‚µã‚¤ã‚ºã¯ `DIRECT_PINS_RIGHT` ã¨åŒã˜ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+
+* `#define RGBLED_SPLIT { 6, 6 }`
+ * [RGB ライト設定](#rgb-light-configuration)を見ã¦ãã ã•ã„。
+
+* `#define SELECT_SOFT_SERIAL_SPEED <speed>` (デフォルトã®é€Ÿåº¦ã¯1ã§ã™)
+ * serial 通信を使ã†æ™‚ã®ãƒ—ロトコルã®é€Ÿåº¦ã‚’設定ã—ã¾ã™ã€‚
+ * 速度:
+ * 0: ç´„189kbps (実験目的ã®ã¿)
+ * 1: 約 137kbps (デフォルト)
+ * 2: ç´„ 75kbps
+ * 3: ç´„ 39kbps
+ * 4: ç´„ 26kbps
+ * 5: ç´„ 20kbps
+
+* `#define SPLIT_USB_DETECT`
+ * マスタ/スレーブを委任ã™ã‚‹æ™‚ã«(タイムアウト付ãã§) USB 接続を検出ã—ã¾ã™
+ * ARM ã«ã¤ã„ã¦ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æŒ™å‹•
+ * AVR Teensy ã«ã¤ã„ã¦ã¯å¿…é ˆ
+
+* `#define SPLIT_USB_TIMEOUT 2500`
+ * `SPLIT_USB_DETECT` を使ã†æ™‚ã®ãƒžã‚¹ã‚¿/スレーブを検出ã™ã‚‹å ´åˆã®æœ€å¤§ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ
+
+# `rules.mk` ファイル
+
+ã“ã‚Œã¯ã€ãƒˆãƒƒãƒ—レベル㮠`Makefile` ã‹ã‚‰ include ã•ã‚Œã‚‹ [make](https://www.gnu.org/software/make/manual/make.html) ファイルã§ã™ã€‚ã“ã‚Œã¯ç‰¹å®šã®æ©Ÿèƒ½ã‚’有効ã¾ãŸã¯ç„¡åŠ¹ã«ã™ã‚‹ã ã‘ã§ãªãã€ã‚³ãƒ³ãƒ‘イルã™ã‚‹ MCU ã«é–¢ã™ã‚‹æƒ…報を設定ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚
+
+## ビルドオプション
+
+* `DEFAULT_FOLDER`
+ * キーボードã«1ã¤ä»¥ä¸Šã®ã‚µãƒ–フォルダãŒã‚ã‚‹å ´åˆã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’指定ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚
+* `FIRMWARE_FORMAT`
+ * ビルドã®å¾Œã§ãƒ«ãƒ¼ãƒˆ `qmk_firmware` フォルダã«ã‚³ãƒ”ーã•ã‚Œã‚‹å½¢å¼ (bin, hex) を定義ã—ã¾ã™ã€‚
+* `SRC`
+ * コンパイル・リンクリストã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚
+* `LIB_SRC`
+ * コンパイル・リンクリストã«ãƒ©ã‚¤ãƒ–ラリã¨ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚
+ `LIB_SRC` ã§æŒ‡å®šã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€`SRC` ã§æŒ‡å®šã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å¾Œã«ãƒªãƒ³ã‚¯ã•ã‚Œã¾ã™ã€‚
+ 例ãˆã°ã€æ¬¡ã®ã‚ˆã†ã«æŒ‡å®šã—ãŸå ´åˆ:
+ ```
+ SRC += a.c
+ LIB_SRC += lib_b.c
+ SRC += c.c
+ LIB_SRC += lib_d.c
+ ```
+ リンク順ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+ ```
+ ... a.o c.o ... lib_b.a lib_d.a ...
+ ```
+* `LAYOUTS`
+ * ã“ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹[レイアウト](ja/feature_layouts.md)ã®ãƒªã‚¹ãƒˆ
+* `LINK_TIME_OPTIMIZATION_ENABLE`
+ * キーボードをコンパイルã™ã‚‹æ™‚ã«ã€Link Time Optimization (`LTO`) を有効ã«ã—ã¾ã™ã€‚ã“ã‚Œã¯å‡¦ç†ã«æ™‚é–“ãŒæŽ›ã‹ã‚Šã¾ã™ãŒã€ã‚³ãƒ³ãƒ‘イルã•ã‚ŒãŸã‚µã‚¤ã‚ºã‚’大幅ã«æ¸›ã‚‰ã—ã¾ã™ (ãã—ã¦ã€ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒå°ã•ã„ãŸã‚ã€è¿½åŠ ã®æ™‚é–“ã¯åˆ†ã‹ã‚‰ãªã„ãらã„ã§ã™)。ãŸã ã—ã€`LTO` ãŒæœ‰åŠ¹ãªå ´åˆã€å¤ã„マクロã¨é–¢æ•°ã®æ©Ÿèƒ½ãŒå£Šã‚Œã‚‹ãŸã‚ã€è‡ªå‹•çš„ã«ã“れらã®æ©Ÿèƒ½ã‚’無効ã«ã—ã¾ã™ã€‚ã“れ㯠`NO_ACTION_MACRO` 㨠`NO_ACTION_FUNCTION` を自動的ã«å®šç¾©ã™ã‚‹ã“ã¨ã§è¡Œã‚ã‚Œã¾ã™ã€‚
+* `LTO_ENABLE`
+ * LINK_TIME_OPTIMIZATION_ENABLE ã¨åŒã˜æ„味ã§ã™ã€‚`LINK_TIME_OPTIMIZATION_ENABLE` ã®ä»£ã‚ã‚Šã« `LTO_ENABLE` を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+## AVR MCU オプション
+* `MCU = atmega32u4`
+* `F_CPU = 16000000`
+* `ARCH = AVR8`
+* `F_USB = $(F_CPU)`
+* `OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT`
+* `BOOTLOADER = atmel-dfu` ã¨ä»¥ä¸‹ã®ã‚ªãƒ—ション:
+ * `atmel-dfu`
+ * `lufa-dfu`
+ * `qmk-dfu`
+ * `halfkay`
+ * `caterina`
+ * `bootloadHID`
+ * `USBasp`
+
+## 機能オプション
+
+ã“れらを使ã£ã¦ç‰¹å®šã®æ©Ÿèƒ½ã®ãƒ“ルドを有効ã¾ãŸã¯ç„¡åŠ¹ã«ã—ã¾ã™ã€‚有効ã«ã™ã‚Œã°ã™ã‚‹ã»ã©ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒå¤§ãããªã‚Šã€MCU ã«ã¯å¤§ãã™ãŽã‚‹ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’構築ã™ã‚‹ãƒªã‚¹ã‚¯ãŒã‚ã‚Šã¾ã™ã€‚
+
+* `BOOTMAGIC_ENABLE`
+ * 仮想 DIP スイッãƒè¨­å®š
+* `MOUSEKEY_ENABLE`
+ * マウスキー
+* `EXTRAKEY_ENABLE`
+ * オーディオ制御ã¨ã‚·ã‚¹ãƒ†ãƒ åˆ¶å¾¡
+* `CONSOLE_ENABLE`
+ * デãƒãƒƒã‚°ç”¨ã‚³ãƒ³ã‚½ãƒ¼ãƒ«
+* `COMMAND_ENABLE`
+ * デãƒãƒƒã‚°åŠã³è¨­å®šç”¨ã®ã‚³ãƒžãƒ³ãƒ‰
+* `COMBO_ENABLE`
+ * キーコンボ機能
+* `NKRO_ENABLE`
+ * USB N-キーロールオーãƒãƒ¼ - ã“ã‚ŒãŒå‹•ä½œã—ãªã„å ´åˆã¯ã€ã“ã“を見ã¦ãã ã•ã„: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+* `AUDIO_ENABLE`
+ * オーディオサブシステムを有効ã«ã—ã¾ã™ã€‚
+* `RGBLIGHT_ENABLE`
+ * キーボードアンダーライト機能を有効ã«ã—ã¾ã™
+* `LEADER_ENABLE`
+ * リーダーキーコードを有効ã«ã—ã¾ã™
+* `MIDI_ENABLE`
+ * MIDI 制御
+* `UNICODE_ENABLE`
+ * Unicode
+* `BLUETOOTH_ENABLE`
+ * Adafruit EZ-Key HID 㧠Bluetooth を有効ã«ã™ã‚‹ãƒ¬ã‚¬ã‚·ãƒ¼ã‚ªãƒ—ション。BLUETOOTH を見ã¦ãã ã•ã„
+* `BLUETOOTH`
+ * ç¾åœ¨ã®ã‚ªãƒ—ションã¯ã€AdafruitEzKeyã€AdafruitBLEã€RN42
+* `SPLIT_KEYBOARD`
+ * 分割キーボード (let's split ã‚„ bakingpy ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚ˆã†ãªãƒ‡ãƒ¥ã‚¢ãƒ« MCU) ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã€quantum/split_common ã«ã‚ã‚‹å…¨ã¦ã®å¿…è¦ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’インクルードã—ã¾ã™
+* `CUSTOM_MATRIX`
+ * 標準マトリックス走査ルーãƒãƒ³ã‚’独自ã®ã‚‚ã®ã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+* `DEBOUNCE_TYPE`
+ * 標準キーデãƒã‚¦ãƒ³ã‚¹ãƒ«ãƒ¼ãƒãƒ³ã‚’代替ã¾ãŸã¯ç‹¬è‡ªã®ã‚‚ã®ã«ç½®ãæ›ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+* `WAIT_FOR_USB`
+ * キーボードãŒèµ·å‹•ã™ã‚‹å‰ã«ã€USB 接続ãŒç¢ºç«‹ã•ã‚Œã‚‹ã®ã‚’キーボードã«å¾…æ©Ÿã•ã›ã¾ã™
+* `NO_USB_STARTUP_CHECK`
+ * キーボードã®èµ·å‹•å¾Œã® usb サスペンドãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã—ã¾ã™ã€‚通常ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•ã‚Œã‚‹å‰ã«ãƒ›ã‚¹ãƒˆãŒã‚¦ã‚§ã‚¤ã‚¯ アップã™ã‚‹ã®ã‚’å¾…ã¡ã¾ã™ã€‚分割キーボードã¯åŠåˆ†ã¯ã‚¦ã‚§ã‚¤ã‚¯ã‚¢ãƒƒãƒ—コールをå–å¾—ã§ãã¾ã›ã‚“ãŒã€ãƒžã‚¹ã‚¿ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’é€ä¿¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€å½¹ã«ç«‹ã¡ã¾ã™ã€‚
+
+## USB エンドãƒã‚¤ãƒ³ãƒˆã®åˆ¶é™
+
+USB 経由ã§ã‚µãƒ¼ãƒ“スをæä¾›ã™ã‚‹ãŸã‚ã«ã€QMK 㯠USB エンドãƒã‚¤ãƒ³ãƒˆã‚’使ã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ã“れらã¯æœ‰é™ãªãƒªã‚½ãƒ¼ã‚¹ã§ã™: å„マイクロコントローラã¯ç‰¹å®šã®æ•°ã—ã‹æŒã¡ã¾ã›ã‚“。
+ã“ã‚Œã¯ä¸€ç·’ã«æœ‰åŠ¹ã«ã§ãる機能を制é™ã—ã¾ã™ã€‚
+利用å¯èƒ½ãªã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’超ãˆã‚‹ã¨ã€ãƒ“ルドエラーをã²ããŠã“ã—ã¾ã™ã€‚
+
+以下ã®æ©Ÿèƒ½ã¯å€‹åˆ¥ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’å¿…è¦ã¨ã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“:
+
+* `MOUSEKEY_ENABLE`
+* `EXTRAKEY_ENABLE`
+* `CONSOLE_ENABLE`
+* `NKRO_ENABLE`
+* `MIDI_ENABLE`
+* `RAW_ENABLE`
+* `VIRTSER_ENABLE`
+
+エンドãƒã‚¤ãƒ³ãƒˆã®ä½¿ç”¨çŽ‡ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€HID 機能を組ã¿åˆã‚ã›ã¦1ã¤ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã‚’使ã†ã‚ˆã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+デフォルトã§ã¯ã€`MOUSEKEY`ã€`EXTRAKEY` ãŠã‚ˆã³ `NKRO` ãŒå˜ä¸€ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«çµåˆã•ã‚Œã¾ã™ã€‚
+
+基本キーボード機能もã€`KEYBOARD_SHARED_EP = yes` を設定ã™ã‚‹ã“ã¨ã§åŒã˜ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«çµåˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ã“ã‚Œã«ã‚ˆã‚Šã‚‚ã†1ã¤ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆãŒè§£æ”¾ã•ã‚Œã¾ã™ãŒã€ä¸€éƒ¨ã® BIOS ã§ã¯ãƒ–ートキーボードプロトコルã®åˆ‡ã‚Šæ›¿ãˆã‚’実装ã—ãªã„ãŸã‚ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒå‹•ä½œã—ãªããªã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+
+マウスã®çµåˆã‚‚ã€ãƒ–ートマウス互æ›æ€§ã‚’破壊ã—ã¾ã™ã€‚
+ã“ã®æ©Ÿèƒ½ãŒå¿…è¦ãªå ´åˆã¯ã€`MOUSE_SHARED_EP = no` を設定ã™ã‚‹ã“ã¨ã§ã€ãƒžã‚¦ã‚¹ã‚’çµåˆã—ãªã„よã†ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
diff --git a/docs/ja/contributing.md b/docs/ja/contributing.md
new file mode 100644
index 0000000000..401cabcd4e
--- /dev/null
+++ b/docs/ja/contributing.md
@@ -0,0 +1,173 @@
+# 貢献方法
+
+<!---
+ original document: d47809575:docs/contributing.md
+ git diff d47809575 HEAD -- docs/contributing.md | cat
+-->
+
+ðŸ‘🎉 ã¾ãšã€ã“れを読ã¿è²¢çŒ®ã™ã‚‹æ™‚間を作ã£ã¦ãã‚Œã¦ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™ï¼ðŸŽ‰ðŸ‘
+
+サードパーティã®è²¢çŒ®ã¯ã€QMK ã®æˆé•·ã¨æ”¹å–„ã«å½¹ç«‹ã¡ã¾ã™ã€‚プルリクエストã¨è²¢çŒ®ãƒ—ロセスを貢献者ã¨ãƒ¡ãƒ³ãƒ†ãƒŠã®ä¸¡æ–¹ã«ã¨ã£ã¦ä¾¿åˆ©ã§ç°¡å˜ãªã‚‚ã®ã«ã—ãŸã„ã§ã™ã€‚ã“ã®ç›®çš„ã®ãŸã‚ã«ã€å¤§ããªå¤‰æ›´ã‚’ã›ãšã«ãƒ—ルリクエストãŒå—ã‘入れられるよã†ã«è²¢çŒ®è€…å‘ã‘ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’ã¾ã¨ã‚ã¾ã—ãŸã€‚
+
+* [プロジェクトã®æ¦‚è¦](#project-overview)
+* [コーディングè¦ç´„](#coding-conventions)
+* [一般的ãªã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³](#general-guidelines)
+* [行動è¦ç¯„ã¯ç§ã«ã¨ã£ã¦ä½•ã‚’æ„味ã—ã¾ã™ã‹ï¼Ÿ](#what-does-the-code-of-conduct-mean-for-me)
+
+## ã“ã®å…¨ã¦ã‚’読ã¿ãŸãã¯ã‚ã‚Šã¾ã›ã‚“ï¼å˜ç´”ã«è³ªå•ãŒã‚ã‚Šã¾ã™ï¼
+
+QMK ã«ã¤ã„ã¦è³ªå•ã—ãŸã„å ´åˆã¯ã€[OLKB Subreddit](https://reddit.com/r/olkb) ã‚ã‚‹ã„㯠[Discord](https://discord.gg/Uq7gcHh) ã§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+以下ã®äº‹ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„:
+
+* 誰ã‹ãŒã‚ãªãŸã®è³ªå•ã«ç­”ãˆã‚‹ã®ã«æ•°æ™‚間掛ã‹ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„ï¼
+* QMK ã«é–¢ã‚ã‚‹å…¨ã¦ã®äººãŒå½¼ã‚‰ã®æ™‚é–“ã¨ã‚¨ãƒãƒ«ã‚®ãƒ¼ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚QMK ã«é–¢ã™ã‚‹ä½œæ¥­ã‚„質å•ã¸ã®å›žç­”ã«å¯¾ã™ã‚‹å ±é…¬ã¯ã‚ã‚Šã¾ã›ã‚“。
+* ã§ãã‚‹ã ã‘ç°¡å˜ã«ç­”ãˆã‚‰ã‚Œã‚‹ã‚ˆã†ã«è³ªå•ã—ã¦ã¿ã¦ãã ã•ã„。ãã®æ–¹æ³•ãŒåˆ†ã‹ã‚‰ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã«å¹¾ã¤ã‹ã®è‰¯ã„ガイドãŒã‚ã‚Šã¾ã™:
+ * https://opensource.com/life/16/10/how-ask-technical-questions
+ * http://www.catb.org/esr/faqs/smart-questions.html
+
+# プロジェクトã®æ¦‚è¦ :id=project-overview
+
+QMK ã¯ä¸»ã« C ã§æ›¸ã‹ã‚Œã¦ãŠã‚Šã€ç‰¹å®šã®æ©Ÿèƒ½ã¨éƒ¨å“㯠C++ ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚QMK ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ä¸­ã®çµ„ã¿è¾¼ã¿ãƒ—ロセッサã€ç‰¹ã« AVR ([LUFA](http://www.fourwalledcubicle.com/LUFA.php)) 㨠ARM ([ChibiOS](http://www.chibios.com)) を対象ã«ã—ã¦ã„ã¾ã™ã€‚ã™ã§ã« Arduino プログラミングã«ç²¾é€šã—ã¦ã„ã‚‹å ´åˆã¯ã€å¤šãã®æ¦‚念ã¨åˆ¶é™ãŒãŠãªã˜ã¿ã®ã‚‚ã®ã§ã™ã€‚QMK ã«è²¢çŒ®ã™ã‚‹ã«ã¯ Arduino を使用ã—ãŸçµŒé¨“ã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。
+
+<!-- FIXME: We should include a list of resources for learning C here. -->
+
+# ã©ã“ã§åŠ©ã‘を得られã¾ã™ã‹ï¼Ÿ
+
+助ã‘ãŒå¿…è¦ã§ã‚ã‚Œã°ã€[issue ã‚’é–‹ã](https://github.com/qmk/qmk_firmware/issues) ã‹ [Discord ã§ä¼šè©±ã™ã‚‹](https://discord.gg/Uq7gcHh)ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+# ã©ã†ã‚„ã£ã¦è²¢çŒ®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã‹ï¼Ÿ
+
+以å‰ã«ã‚ªãƒ¼ãƒ—ンソースã«è²¢çŒ®ã—ãŸã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“ã‹ï¼Ÿ QMK ã§è²¢çŒ®ãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ãŒç–‘å•ã§ã™ã‹ï¼Ÿ ã“ã“ã«ç°¡å˜ãªèª¬æ˜ŽãŒã‚ã‚Šã¾ã™ï¼
+
+0. [GitHub](https://github.com) アカウントã«ã‚µã‚¤ãƒ³ã‚¢ãƒƒãƒ—ã—ã¾ã™ã€‚
+1. 貢献ã™ã‚‹ãŸã‚ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã‚’ã¾ã¨ã‚ã‚‹ã‹ã€è§£æ±ºã«èˆˆå‘³ãŒã‚ã‚‹[å•é¡Œã‚’見ã¤ã‘ã‚‹](https://github.com/qmk/qmk_firmware/issues)ã€ã‚ã‚‹ã„ã¯è¿½åŠ ã—ãŸã„[機能](https://github.com/qmk/qmk_firmware/issues?q=is%3Aopen+is%3Aissue+label%3Afeature)を見ã¤ã‘ã¾ã™ã€‚
+2. å•é¡Œã«é–¢é€£ä»˜ã‘られã¦ã„るリãƒã‚¸ãƒˆãƒªã‚’ã‚ãªãŸã® GitHub アカウントã«ãƒ•ã‚©ãƒ¼ã‚¯ã—ã¾ã™ã€‚ã“ã‚Œã¯ã€`GitHub上ã®ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/qmk_firmware` ã®ä¸‹ã«ãƒªãƒã‚¸ãƒˆãƒªã®ã‚³ãƒ”ーをæŒã¤ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚
+3. `git clone https://github.com/GitHub上ã®ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/repository-name.git` を使ã£ã¦ãƒ­ãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ã«ãƒªãƒã‚¸ãƒˆãƒªã‚’クローンã—ã¾ã™ã€‚
+4. æ–°ã—ã„機能ã«å–り組んã§ã„ã‚‹å ´åˆã¯ã€issue ã‚’é–‹ãã“ã‚Œã‹ã‚‰è¡Œã†ä½œæ¥­ã«ã¤ã„ã¦è©±ã—åˆã†ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。
+5. `git checkout -b branch-name-here` を使ã£ã¦ä¿®æ­£ç”¨ã®æ–°ã—ã„ブランãƒã‚’作æˆã—ã¾ã™ã€‚
+6. 解決ã—よã†ã¨ã—ã¦ã„ã‚‹å•é¡Œã€ã‚ã‚‹ã„ã¯è¿½åŠ ã—ãŸã„機能ã«ã¤ã„ã¦é©åˆ‡ãªå¤‰æ›´ã‚’加ãˆã¾ã™ã€‚
+7. `git add insert-paths-of-changed-files-here` を使ã£ã¦å¤‰æ›´ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を git ãŒãƒ—ロジェクトã®çŠ¶æ…‹ã‚’管ç†ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ "snapshot"ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¨ã—ã¦ã‚‚知られã¦ã„ã‚‹ã€ã«è¿½åŠ ã—ã¾ã™ã€‚
+8. `git commit -m "Insert a short message of the changes made here"` を使ã£ã¦ã€èª¬æ˜Žçš„ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨ã¨ã‚‚ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã®å†…容をä¿å­˜ã—ã¾ã™ã€‚
+9. `git push origin branch-name-here` を使ã£ã¦ GitHub 上ã®ãƒªãƒã‚¸ãƒˆãƒªã«å¤‰æ›´ã‚’プッシュã—ã¾ã™ã€‚
+10. プルリクエストを [QMK Firmware](https://github.com/qmk/qmk_firmware/pull/new/master) ã«ã‚µãƒ–ミットã—ã¾ã™ã€‚
+11. è¡Œã‚ã‚ŒãŸå¤‰æ›´ã®ç°¡å˜ãªèª¬æ˜Žã¨ã€å¤‰æ›´ã«é–¢ã™ã‚‹å•é¡Œã¾ãŸã¯ãƒã‚°ç•ªå·ã‚’使ã£ã¦ã€ãƒ—ルリクエストã«ã‚¿ã‚¤ãƒˆãƒ«ã‚’付ã‘ã¾ã™ã€‚例ãˆã°ã€issue ã« "Added more log outputting to resolve #4352" ã®ã‚ˆã†ãªã‚¿ã‚¤ãƒˆãƒ«ã‚’ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+12. プルリクエストã®èª¬æ˜Žã§ã¯ã€è¡Œã£ãŸå¤‰æ›´ã€è¡Œã£ãŸãƒ—ルリクエストã«å­˜åœ¨ã™ã‚‹ã¨æ€ã‚れるå•é¡Œã€ãŠã‚ˆã³ãƒ¡ãƒ³ãƒ†ãƒŠã«å¯¾ã™ã‚‹è³ªå•ã‚’説明ã—ã¾ã™ã€‚プルリクエストãŒå®Œãºãã§ã¯ãªã„å ´åˆ(プルリクエストãŒç„¡ã„å ´åˆ)ã§ã‚‚å•é¡Œã‚ã‚Šã¾ã›ã‚“。レビュワーãŒå•é¡Œã®ä¿®æ­£ã¨æ”¹å–„を手ä¼ã„ã¾ã™ã€‚
+13. プルリクエストãŒãƒ¡ãƒ³ãƒ†ãƒŠã«ã‚ˆã£ã¦ãƒ¬ãƒ“ューã•ã‚Œã‚‹ã®ã‚’å¾…ã¡ã¾ã™ã€‚
+14. レビューをã—ã¦ã„るメンテナãŒå¤‰æ›´ã‚’推奨ã™ã‚‹å ´åˆã¯ã€ãƒ—ルリクエストã«å¤‰æ›´ã‚’加ãˆã¾ã™ã€‚
+15. プルリクエストãŒãƒžãƒ¼ã‚¸ã•ã‚ŒãŸå¾Œã§æˆåŠŸã‚’ç¥ã„ã¾ã™ï¼
+
+# コーディングè¦ç´„ :id=coding-conventions
+
+ç§ãŸã¡ã®ã‚¹ã‚¿ã‚¤ãƒ«ã®ã»ã¨ã‚“ã©ã¯ç°¡å˜ã«ç†è§£ã§ãã¾ã™ã€‚C ã‚ã‚‹ã„㯠Python ã®ã„ãšã‚Œã‹ã«ç²¾é€šã—ã¦ã„ã‚‹å ´åˆã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¹ã‚¿ã‚¤ãƒ«ã«ãã‚Œã»ã©å•é¡Œã¯ãªã„ã¯ãšã§ã™ã€‚
+
+* [コーディングè¦ç´„ - C](ja/coding_conventions_c.md)
+* [コーディングè¦ç´„ - Python](ja/coding_conventions_python.md)
+
+# 一般的ãªã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ :id=general-guidelines
+
+QMK ã«ã¯å¹¾ã¤ã‹ã®ç•°ãªã‚‹ã‚¿ã‚¤ãƒ—ã®å¤‰æ›´ãŒã‚ã‚Šã€ãã‚Œãžã‚Œç•°ãªã‚‹ãƒ¬ãƒ™ãƒ«ã®åŽ³å¯†ã•ãŒå¿…è¦ã§ã™ã€‚ã©ã®ã‚ˆã†ãªç¨®é¡žã®å¤‰æ›´ã‚’è¡Œã£ã¦ã‚‚ã€æ¬¡ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«ç•™æ„ã—ã¦ãã ã•ã„。
+
+* PR ã‚’è«–ç†å˜ä½ã«åˆ†å‰²ã—ã¾ã™ã€‚例ãˆã°ã€2ã¤ã®å€‹åˆ¥ã®æ©Ÿèƒ½ã‚’ã‚«ãƒãƒ¼ã™ã‚‹1ã¤ã® PR ã‚’é€ä¿¡ã™ã‚‹ã®ã§ã¯ãªãã€ä»£ã‚ã‚Šã«æ©Ÿèƒ½ã”ã¨ã«å€‹åˆ¥ã® PR をサブミットã—ã¾ã™ã€‚
+* コミットã™ã‚‹å‰ã«ã€`git diff --check` を使ã£ã¦ä¸è¦ãªç©ºç™½ã‚’確èªã—ã¾ã™ã€‚
+* コードã®å¤‰æ›´ãŒå®Ÿéš›ã«ã‚³ãƒ³ãƒ‘イルã•ã‚Œã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+ * キーマップ: `make keyboard:your_new_keymap` ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã•ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+ * キーボード: `make keyboard:all` ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã•ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+ * コア: `make all` ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã•ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+* コミットメッセージãŒãれ自体ã§ç†è§£ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。最åˆã®è¡Œã«çŸ­ã„説明(70文字以内)を入れã€2行目ã¯ç©ºã«ã—ã€3行目以é™ã§ã¯å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒŸãƒƒãƒˆã‚’詳細ã«èª¬æ˜Žã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚例:
+
+```
+kerpleplork ã® fronzlebop を調整ã—ã¾ã™
+
+kerpleplork ã¯ã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ 23 ã§é€£ç¶šçš„ã«å¤±æ•—ã—ã¦ã„ã¾ã—ãŸã€‚根本的ãªåŽŸå› ã¯ fronzlebop 設定ã§ã€ã“ã‚Œã«ã‚ˆã‚Š kerpleplork ã¯N回ã®ç¹°ã‚Šè¿”ã—ã”ã¨ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã¾ã™ã€‚
+
+ç§ãŒä½¿ç”¨ã§ãるデãƒã‚¤ã‚¹ã®é™ã‚‰ã‚ŒãŸå®Ÿé¨“ã§ã¯ã€kerpleplork ã®æ··ä¹±ã‚’é¿ã‘ã‚‹ãŸã‚ã« 7 ã¯å分高ã„値ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ãŒã€å¿µã®ãŸã‚ ARM デãƒã‚¤ã‚¹ã‚’æŒã¤äººãŸã¡ã‹ã‚‰ãƒ•ã‚£ãƒ¼ãƒ‰ãƒãƒƒã‚¯ã‚’å¾—ãŸã„ã§ã™ã€‚
+```
+
+!> **é‡è¦:** デフォルト以外ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã€ãƒ¦ãƒ¼ã‚¶ã‚¹ãƒšãƒ¼ã‚¹ãŠã‚ˆã³ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã‚³ãƒ¼ãƒ‰ã¸ã®ãƒã‚°ä¿®æ­£ã‚ã‚‹ã„ã¯æ”¹å–„ã«è²¢çŒ®ã—ãŸã„å ´åˆã¯ã€PR ã«ã‚³ãƒ¼ãƒ‰ã®å…ƒã®æ出者ã«ã‚¿ã‚°ã‚’ã¤ã‘ã¦ãã ã•ã„。Git 㨠GitHub ã®ã‚¹ã‚­ãƒ«ãƒ¬ãƒ™ãƒ«ã«é–¢ä¿‚ãªãã€å¤šãã®ãƒ¦ãƒ¼ã‚¶ã¯çŸ¥ã‚‰ãªã„ã†ã¡ã«ã‚³ãƒ¼ãƒ‰ãŒå¤‰æ›´ã•ã‚Œã‚‹ã“ã¨ã«æ··ä¹±ã—ãŸã‚Šã‚¤ãƒ©ã‚¤ãƒ©ã—ãŸã‚Šã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+
+## ドキュメント
+
+ドキュメント㯠QMK ã¸ã®è²¢çŒ®ã‚’始ã‚る最も簡å˜ãªæ–¹æ³•ã®1ã¤ã§ã™ã€‚ドキュメントãŒé–“é•ã£ã¦ã„ã‚‹ã‹ä¸å®Œå…¨ãªå ´æ‰€ã‚’見ã¤ã‘ã€ã“れらを修正ã™ã‚‹ã®ã¯ç°¡å˜ã§ã™ï¼ç§ãŸã¡ã‚‚ドキュメントを編集ã™ã‚‹äººã‚’éžå¸¸ã«å¿…è¦ã¨ã—ã¦ã„ã¾ã™ã€‚編集ã™ã‚‹ã‚¹ã‚­ãƒ«ãŒã‚ã‚‹ãŒã€ã©ã“ã«ã©ã®ã‚ˆã†ã«é£›ã³ä¹—ã‚Œã°ã„ã„ã®ã‹åˆ†ã‹ã‚‰ãªã„å ´åˆã¯ã€[助ã‘ã‚’ã‚‚ã¨ã‚ã¦](#where-can-i-go-for-help)ãã ã•ã„ï¼
+
+å…¨ã¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ `qmk_firmware/docs` ディレクトリã®ä¸­ã«ã‚ã‚Šã¾ã™ã€‚ã‚ã‚‹ã„㯠web ベースã®ãƒ¯ãƒ¼ã‚¯ãƒ•ãƒ­ãƒ¼ã‚’使ã„ãŸã„å ´åˆã¯ã€https://docs.qmk.fm/ ã®å„ページã®ä¸‹éƒ¨ã«ã‚ã‚‹ "Edit this page" リンクをクリックã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+ドキュメントã®ä¸­ã«ã‚³ãƒ¼ãƒ‰ã®ä¾‹ã‚’æä¾›ã™ã‚‹å ´åˆã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå†…ã®ä»–ã®å ´æ‰€ã§ä½¿ç”¨ã•ã‚Œã¦ã„る命åè¦å‰‡ã‚’順守ã—ã¦ãã ã•ã„。例ãˆã°ã€ä¸€è²«æ€§ã‚’ä¿ã¤ãŸã‚ã«ã€`my_layers` ã‚ã‚‹ã„㯠`my_keycodes` ã¨ã—ã¦åˆ—挙型を標準化ã—ã¾ã™:
+
+```c
+enum my_layers {
+ _FIRST_LAYER,
+ _SECOND_LAYER
+};
+
+enum my_keycodes {
+ FIRST_LAYER = SAFE_RANGE,
+ SECOND_LAYER
+};
+```
+
+### ドキュメントã®ãƒ—レビュー
+
+開発環境をセットアップã—ãŸå ´åˆã¯ã€ãƒ—ルリクエストを開ãå‰ã«ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’ `qmk_firmware/` フォルダã‹ã‚‰å®Ÿè¡Œã™ã‚‹ã“ã¨ã§ã€ã‚ãªãŸã®å¤‰æ›´ã‚’プレビューã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+
+ ./bin/qmk docs
+
+ã¾ãŸã¯ã€Python 3 ã®ã¿ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹å ´åˆ:
+
+ python3 -m http.server 8936
+
+ãã®å¾Œã€ã‚¦ã‚§ãƒ–ブラウザã§ã€`http://localhost:8936/` を表示ã—ã¾ã™ã€‚
+
+## キーマップ
+
+ã»ã¨ã‚“ã©ã®åˆã‚ã¦ã® QMK 貢献者ã¯ã€å€‹äººã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã‹ã‚‰å§‹ã‚ã¾ã™ã€‚キーマップã®æ¨™æº–ã¯ã‹ãªã‚Šã‚«ã‚¸ãƒ¥ã‚¢ãƒ«ãªã‚‚ã®ã«ã—よã†ã¨ã—ã¦ã„ã¾ã™(キーマップã¯çµå±€ã®ã¨ã“ã‚作æˆè€…ã®æ€§æ ¼ã‚’å映ã—ã¦ã„ã¾ã™)ãŒã€ä»–ã®äººãŒã‚ãªãŸã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã‚’ç°¡å˜ã«è¦‹ã¤ã‘ã¦å­¦ã¶ã“ã¨ãŒã§ãるよã†ã«ã€ã“れらã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã†ã‚ˆã†ã«ãŠé¡˜ã„ã—ã¾ã™ã€‚
+
+* [the template](documentation_templates.md) を使ã£ã¦ `readme.md` を書ãã¾ã™ã€‚
+* å…¨ã¦ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã® PR 㯠squash ã•ã‚Œã‚‹ãŸã‚ã€ã‚³ãƒŸãƒƒãƒˆãŒã©ã®ã‚ˆã†ã« squash ã•ã‚Œã‚‹ã‹ã‚’æ°—ã«ã™ã‚‹å ´åˆã¯ã€è‡ªåˆ†ã§è¡Œã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+* キーマップ㮠PR ã«æ©Ÿèƒ½ã‚’ã¾ã¨ã‚ãªã„ã§ãã ã•ã„。最åˆã«æ©Ÿèƒ½ã‚’サブミットã—ã€æ¬¡ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ãŸã‚ã®2ã¤ç›®ã® PR をサブミットã—ã¾ã™ã€‚
+* `Makefile` をキーマップフォルダã«å«ã‚ãªã„ã§ãã ã•ã„(ã‚‚ã†ä½¿ã‚ã‚Œã¦ã„ã¾ã›ã‚“)。
+* ファイルヘッダã®è‘—作権を更新ã—ã¾ã™ (`%YOUR_NAME%` を探ã—ã¾ã™)
+
+## キーボード
+
+キーボード㯠QMK ã®å­˜åœ¨ç†ç”±ã§ã™ã€‚一部ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã«ã‚ˆã£ã¦ç®¡ç†ã•ã‚Œã¦ã„ã¾ã™ãŒã€ä»–ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãã‚Œãžã‚Œã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹è²¬ä»»è€…ã«ã‚ˆã£ã¦ç®¡ç†ã•ã‚Œã¦ã„ã¾ã™ã€‚`readme.md` を見るã¨ãã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’管ç†ã—ã¦ã„ã‚‹ã®ãŒèª°ã‹ãŒåˆ†ã‹ã‚Šã¾ã™ã€‚特定ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«é–¢ã™ã‚‹è³ªå•ãŒã‚ã‚‹å ´åˆã€[Issue ã‚’é–‹ã„ã¦](https://github.com/qmk/qmk_firmware/issues)質å•ã«ãƒ¡ãƒ³ãƒ†ãƒŠã‚’タグ付ã‘ã—ã¦ãã ã•ã„。(訳注: タグ付㑠㯠[メンションã™ã‚‹](https://help.github.com/ja/github/writing-on-github/basic-writing-and-formatting-syntax#mentioning-people-and-teams) ã¨ã„ã†æ„味ã§ã™ã€‚)
+
+ã¾ãŸä»¥ä¸‹ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã†ã“ã¨ã‚’ãŠé¡˜ã„ã—ã¾ã™:
+
+* [the template](ja/documentation_templates.md) を使ã£ã¦ `readme.md` を書ãã¾ã™ã€‚
+* コミットã®æ•°ã‚’é©åˆ‡ã«ä¿ã£ã¦ãã ã•ã„。ãã†ã§ãªã‘ã‚Œã°ã‚ãªãŸã® PR ã‚’ squash ã—ã¾ã™ã€‚
+* コア機能を新ã—ã„キーボードã«ã¾ã¨ã‚ãªã„ã§ãã ã•ã„。最åˆã«æ©Ÿèƒ½ã‚’サブミットã—ã€æ¬¡ã«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã«åˆ¥ã® PR をサブミットã—ã¦ãã ã•ã„。
+* `.c`/`.h` ファイルã«ã™ã上ã®è¦ªãƒ•ã‚©ãƒ«ãƒ€ã«å¾“ã£ã¦åå‰ã‚’付ã‘ã¾ã™ã€‚例ãˆã°ã€`/keyboards/<kb1>/<kb2>/<kb2>.[ch]`
+* `Makefile` をキーボードフォルダã«å«ã‚ãªã„ã§ãã ã•ã„(ã‚‚ã†ä½¿ã‚ã‚Œã¦ã„ã¾ã›ã‚“)
+* ファイルヘッダã®è‘—作権を更新ã—ã¾ã™ (`%YOUR_NAME%` を探ã—ã¾ã™)
+
+## Quantum/TMK コア
+
+æ–°ã—ã„機能をビルドã™ã‚‹ãŸã‚ã«å¤šãã®ä½œæ¥­ã‚’è¡Œã†å‰ã«ã€æœ€é©ãªæ–¹æ³•ã§å®Ÿè£…ã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚[QMK ã®ç†è§£](ja/understanding_qmk.md)を読むã“ã¨ã§ã€QMK ã®åŸºæœ¬çš„ãªç†è§£ã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã‚Œã¯ã‚ãªãŸã‚’ QMK ã®ãƒ—ログラムフローã®ãƒ„アーã«é€£ã‚Œã¦è¡Œãã¾ã™ã€‚ã“ã“ã‹ã‚‰ã€ã‚ãªãŸã®ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’実装ã™ã‚‹ãŸã‚ã®æœ€è‰¯ã®æ–¹æ³•ã®æ„Ÿè¦šã‚’ã¤ã‹ã‚€ãŸã‚ã«ã€ç§ãŸã¡ã¨è©±ã™å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã“れを行ã†ã«ã¯ä¸»ã«2ã¤ã®æ–¹æ³•ãŒã‚ã‚Šã¾ã™:
+
+* [Discord ã§ã®ãƒãƒ£ãƒƒãƒˆ](https://discord.gg/Uq7gcHh)
+* [Issue ã‚’é–‹ã](https://github.com/qmk/qmk_firmware/issues/new)
+
+機能ã¨ãƒã‚°ä¿®æ­£ã® PR ã¯å…¨ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«å½±éŸ¿ã—ã¾ã™ã€‚ã¾ãŸã€ç§ãŸã¡ã¯ QMK ã®å†ç·¨ã‚‚進ã‚ã¦ã„ã¾ã™ã€‚ã“ã®ãŸã‚ã€å®Ÿè£…ãŒè¡Œã‚れるå‰ã«ç‰¹ã«é‡è¦ãªå¤‰æ›´ã«ã¤ã„ã¦è­°è«–ã™ã‚‹ã“ã¨ãŒç‰¹ã«é‡è¦ã§ã™ã€‚最åˆã«ç§ãŸã¡ã¨è©±ã‚’ã›ãšã« PR ã‚’é–‹ã„ãŸå ´åˆã€ã‚ãªãŸã®é¸æŠžãŒç§ãŸã¡ã®è¨ˆç”»ã—ãŸæ–¹å‘ã¨ã†ã¾ãåˆã‚ãªã„å ´åˆã¯å¹¾ã¤ã‹ã®å¤§ããªå†ä½œæ¥­ã‚’è¡Œã†è¦šæ‚Ÿã‚’ã—ã¦ãã ã•ã„。
+
+機能やãƒã‚°ã®ä¿®æ­£ã«å–り組む時ã«ç•™æ„ã™ã¹ãå¹¾ã¤ã‹ã®äº‹ãŒã‚ã‚Šã¾ã™ã€‚
+
+* **デフォルトã§ç„¡åŠ¹** - QMK ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ã»ã¨ã‚“ã©ã®ãƒãƒƒãƒ—ã§ãƒ¡ãƒ¢ãƒªãŒã‹ãªã‚Šåˆ¶é™ã•ã‚Œã¦ãŠã‚Šã€ç¾åœ¨ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ãŒå£Šã‚Œã¦ã„ãªã„ã“ã¨ãŒé‡è¦ã§ã™ã€‚ã§ã™ã®ã§ã€ã‚ãªãŸã®æ©Ÿèƒ½ã‚’オフã«ã™ã‚‹ã®ã§ã¯ãªã**オン**ã«ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。デフォルトã§ã‚ªãƒ³ã«ã™ã¹ãå ´åˆã€ã‚ã‚‹ã„ã¯ã‚³ãƒ¼ãƒ‰ã®ã‚µã‚¤ã‚ºã‚’å°ã•ãã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ã€ç›¸è«‡ã—ã¦ãã ã•ã„。
+* **サブミットã™ã‚‹å‰ã«ãƒ­ãƒ¼ã‚«ãƒ«ã§ã‚³ãƒ³ãƒ‘イル** - ã“ã‚ŒãŒæ˜Žç™½ã§ã‚ã‚‹ã“ã¨ã‚’願ã£ã¦ã„ã¾ã™ãŒã€ã‚³ãƒ³ãƒ‘イルã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ç§ãŸã¡ã® Travis システムã¯å…¨ã¦ã®å•é¡Œã‚’キャッãƒã—ã¾ã™ãŒã€çµæžœãŒè¿”ã£ã¦ãã‚‹ã®ã‚’å¾…ã¤ä»£ã‚ã‚Šã«å¹¾ã¤ã‹ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’ローカルã§ã‚³ãƒ³ãƒ‘イルã™ã‚‹æ–¹ãŒä¸€èˆ¬çš„ã«é€Ÿã„ã§ã™ã€‚
+* **リビジョンã¨ç•°ãªã‚‹ãƒãƒƒãƒ—ベースを考慮** - 僅ã‹ã«ç•°ãªã‚‹è¨­å®šã€ã•ã‚‰ã«ã¯ç•°ãªã‚‹ãƒãƒƒãƒ—ベースをå¯èƒ½ã«ã™ã‚‹ãƒªãƒ“ジョンをæŒã¤ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒå¹¾ã¤ã‹ã‚ã‚Šã¾ã™ã€‚ARM ãŠã‚ˆã³ AVR ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹æ©Ÿèƒ½ã‚’作æˆã™ã‚‹ã€ã‚ã‚‹ã„ã¯å‹•ä½œã—ãªã„プラットフォームã§ã¯è‡ªå‹•çš„ã«ç„¡åŠ¹åŒ–ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。
+* **機能ã®èª¬æ˜Ž** - æ–°ã—ã„ファイルã‚ã‚‹ã„ã¯æ—¢å­˜ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ä¸€éƒ¨ã¨ã—ã¦ã€`docs/` ã®ä¸­ã«æ–‡ç« åŒ–ã—ã¾ã™ã€‚文章化ã—ãªã„ã¨ã€ä»–ã®äººã¯ã‚ãªãŸã®è‹¦åŠ´ã‹ã‚‰åˆ©ç›Šã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+
+ã¾ãŸä»¥ä¸‹ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«å¾“ã†ã“ã¨ã‚’ãŠé¡˜ã„ã—ã¾ã™:
+
+* コミットã®æ•°ã‚’é©åˆ‡ã«ä¿ã£ã¦ãã ã•ã„。ãã†ã§ãªã‘ã‚Œã°ã‚ãªãŸã® PR ã‚’ squash ã—ã¾ã™ã€‚
+* キーボードã‚ã‚‹ã„ã¯ã‚­ãƒ¼ãƒžãƒƒãƒ—をコアã®å¤‰æ›´ã«ã¾ã¨ã‚ãªã„ã§ãã ã•ã„。コアã®å¤‰æ›´ã‚’最åˆã«ã‚µãƒ–ミットã—ã¦ãã ã•ã„。
+* 機能ã®ãŸã‚ã®[ユニット テスト](ja/unit_testing.md)を書ã„ã¦ãã ã•ã„。
+* 編集ã—ã¦ã„るファイルã®ã‚¹ã‚¿ã‚¤ãƒ«ã«å¾“ã£ã¦ãã ã•ã„。スタイルãŒæ˜Žç¢ºã§ãªã„ã‹ã€ã‚¹ã‚¿ã‚¤ãƒ«ãŒæ··åœ¨ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä¸Šè¨˜ã®[コーディングè¦ç´„](#coding-conventions)ã«æº–æ‹ ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+## リファクタリング
+
+QMK ã§ç‰©äº‹ãŒã©ã®ã‚ˆã†ã«ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã•ã‚Œã‚‹ã‹ã«ã¤ã„ã¦æ˜Žç¢ºãªãƒ“ジョンを維æŒã™ã‚‹ãŸã‚ã«ã€ç§ãŸã¡ã¯ãƒªãƒ•ã‚¡ã‚¯ã‚¿ãƒªãƒ³ã‚°ã‚’詳細ã«è¨ˆç”»ã—ã€å¤‰æ›´ã‚’ã™ã‚‹å”力者ãŒã„ã¾ã™ã€‚リファクタリングã®ã‚¢ã‚¤ãƒ‡ã‚¢ã‚ã‚‹ã„ã¯æ案ãŒã‚ã‚‹å ´åˆã¯ã€[issue ã‚’é–‹ã„ã¦ãã ã•ã„](https://github.com/qmk/qmk_firmware/issues)。QMK を改善ã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ãŠè©±ã—ã—ãŸã„ã¨æ€ã„ã¾ã™ã€‚
+
+# 行動è¦ç¯„ã¯ç§ã«ã¨ã£ã¦ä½•ã‚’æ„味ã—ã¾ã™ã‹ï¼Ÿ :id=what-does-the-code-of-conduct-mean-for-me
+
+ç§ãŸã¡ã®[行動è¦ç¯„](https://github.com/qmk/qmk_firmware/blob/master/CODE_OF_CONDUCT.md)ã¯ã€èº«å…ƒã«é–¢ä¿‚ãªãã‚ãªãŸãŒãƒ—ロジェクトã®å…¨å“¡ã‚’敬æ„ã¨ç¤¼å„€ã‚’æŒã£ã¦æ‰±ã†è²¬ä»»ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã‚ãªãŸãŒè¡Œå‹•è¦ç¯„ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã‚‹ä¸é©åˆ‡ãªè¡Œå‹•ã‚„コメントã®è¢«å®³è€…ã§ã‚ã‚‹å ´åˆã¯ã€ç§ãŸã¡ã¯ã‚ãªãŸã®ãŸã‚ã«ã“ã“ã«ãŠã‚Šã€ç§ãŸã¡ã®ã‚³ãƒ¼ãƒ‰ã«å¾“ã£ã¦è™å¾…者ãŒé©åˆ‡ã«æ‡²æˆ’ã•ã‚Œã‚‹ã‚ˆã†ã«æœ€å–„ã‚’å°½ãã—ã¾ã™ã€‚
diff --git a/docs/ja/driver_installation_zadig.md b/docs/ja/driver_installation_zadig.md
new file mode 100644
index 0000000000..268940ec06
--- /dev/null
+++ b/docs/ja/driver_installation_zadig.md
@@ -0,0 +1,53 @@
+# Zadig を使ã£ãŸãƒ–ートローダドライãƒã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«
+
+<!---
+ original document: d598f01cb:docs/driver_installation_zadig.md
+ git diff d598f01cb HEAD -- docs/driver_installation_zadig.md | cat
+-->
+
+QMK ã¯ãƒ›ã‚¹ãƒˆã«ãŸã„ã—ã¦é€šå¸¸ã® HID キーボードデãƒã‚¤ã‚¹ã¨ã—ã¦æŒ¯ã‚‹èˆžã†ãŸã‚特別ãªãƒ‰ãƒ©ã‚¤ãƒã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。ã—ã‹ã—ã€Windows ã§ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¸ã®æ›¸ãè¾¼ã¿ã¯ã€å¤šãã®å ´åˆã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’リセットã—ãŸæ™‚ã«ç¾ã‚Œã‚‹ãƒ–ートローダデãƒã‚¤ã‚¹ã§*è¡Œã„ã¾ã™*。
+
+2ã¤ã®æ³¨ç›®ã™ã¹ã例外ãŒã‚ã‚Šã¾ã™: 通常 Pro Micro ã§è¦‹ã‚‰ã‚Œã‚‹ Caterina ブートローダやã€PJRC Teensy ã«æ›¸ãè¾¼ã¾ã‚Œã¦ã„ã‚‹ HalfKay ブートローダã¯ã€ãã‚Œãžã‚Œã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆã¨æ±Žç”¨ HID デãƒã‚¤ã‚¹ã¨ã—ã¦æŒ¯ã‚‹èˆžã†ãŸã‚ã€ãƒ‰ãƒ©ã‚¤ãƒã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。
+
+[Zadig](https://zadig.akeo.ie/) ユーティリティを使ã†ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚MSYS2 ã‚ã‚‹ã„㯠WSL を使ã£ã¦é–‹ç™ºç’°å¢ƒã‚’セットアップã—ãŸå ´åˆã€`qmk_install.sh` スクリプトã¯ãƒ‰ãƒ©ã‚¤ãƒã‚’インストールã™ã‚‹ã‹ã©ã†ã‹ã‚’ãŸãšã­ã¾ã™ã€‚
+
+## インストール
+
+`RESET` キーコード (別ã®ãƒ¬ã‚¤ãƒ¤ã«ã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“)を押ã™ã‹ã€é€šå¸¸ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ä¸‹é¢ã«ã‚るリセットスイッãƒã‚’押ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’ブートローダモードã«ã—ã¾ã™ã€‚ã©ã¡ã‚‰ã‚‚キーボードã«ç„¡ã„å ´åˆã¯ã€Escape ã¾ãŸã¯ Space+`B` を押ã—ãªãŒã‚‰æŽ¥ç¶šã—ã¦ã¿ã¦ãã ã•ã„ (詳細ã¯ã€[ブートマジック](ja/feature_bootmagic.md) ドキュメントを見ã¦ãã ã•ã„)。一部ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãƒ–ートマジックã®ä»£ã‚ã‚Šã«[コマンド](ja/feature_command.md)を使ã„ã¾ã™ã€‚ã“ã®å ´åˆã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒæŽ¥ç¶šã•ã‚Œã¦ã„る状態ã§ã€Œå·¦Shift + å³Shift + `B`ã€ã‚ã‚‹ã„ã¯ã€Œå·¦Shift + å³Shift + Escapeã€ã‚’押ã™ã¨ã€ãƒ–ートローダモードã«å…¥ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+一部ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãƒ–ートローダã«å…¥ã‚‹ãŸã‚ã«ç‰¹å®šã®æ“作をã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚例ãˆã°ã€[ブートマジック Lite](ja/feature_bootmagic.md#bootmagic-lite) キー (デフォルト: Escape) ã¯åˆ¥ã®ã‚­ãƒ¼(例ãˆã°ã€å·¦Control)ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã¾ãŸã€ã‚³ãƒžãƒ³ãƒ‰ã‚’有効ã«ã™ã‚‹ã‚­ãƒ¼ã®çµ„ã¿åˆã‚ã› (デフォルト: å·¦Shift + å³Shift) ã¯ä½•ã‹ä»–ã®ã‚­ãƒ¼(例ãˆã° å·¦Control + å³Control)を押ã—続ã‘ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚ä¸æ˜Žãªå ´åˆã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® README ファイルをå‚ç…§ã—ã¦ãã ã•ã„。
+
+USBaspLoader を使ã£ã¦ãƒ‡ãƒã‚¤ã‚¹ã‚’ブートローダモードã«ã™ã‚‹ã«ã¯ã€`BOOT` ボタンを押ã—ãªãŒã‚‰ `RESET` ボタンをタップã—ã¦ãã ã•ã„。
+ã‚ã‚‹ã„㯠`BOOT` を押ã—続ã‘ãªãŒã‚‰ USB ケーブルを挿入ã—ã¾ã™ã€‚
+
+Zadig ã¯è‡ªå‹•çš„ã«ãƒ–ートローダデãƒã‚¤ã‚¹ã‚’検知ã—ã¾ã™ã€‚**Options → List All Devices** を確èªã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚
+
+- Atmel AVR MCU ã‚’æ­è¼‰ã—ãŸã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å ´åˆã€ãƒ–ートローダ㯠`ATm32U4DFU` ã«ä¼¼ãŸåå‰ãŒä»˜ã‘られã€ãƒ™ãƒ³ãƒ€ãƒ¼ ID 㯠`03EB` ã§ã™ã€‚
+- USBasp ブートローダ㯠`USBasp` ã¨ã—ã¦è¡¨ç¤ºã•ã‚Œã€VID/PID ã¯`16C0:05DC` ã§ã™ã€‚
+- QMK-DFU ブートローダを使ã£ã¦æ›¸ãè¾¼ã¾ã‚ŒãŸ AVR キーボード㯠`<keyboard name> Bootloader` ã¨ã„ã†åå‰ãŒä»˜ã‘られã€VID 㯠`03EB` ã§ã™ã€‚
+- ã»ã¨ã‚“ã©ã® ARM キーボードã§ã¯ã€`STM32 BOOTLOADER` ã¨å‘¼ã°ã‚Œã€VID/PID 㯠`0483:DF11` ã§ã™ã€‚
+
+!> Zadig ㌠`HidUsb` ドライãƒã‚’使用ã™ã‚‹1ã¤ä»¥ä¸Šã®ãƒ‡ãƒã‚¤ã‚¹ã‚’表示ã™ã‚‹å ´åˆã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãŠãらãブートローダモードã§ã¯ã‚ã‚Šã¾ã›ã‚“。矢å°ã¯ã‚ªãƒ¬ãƒ³ã‚¸è‰²ã«ãªã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ãƒ‰ãƒ©ã‚¤ãƒã®å¤‰æ›´ã‚’確èªã™ã‚‹ã‚ˆã†ã«æ±‚ã‚られã¾ã™ã€‚ã“ã®å ´åˆã€ç¶šè¡Œ**ã—ãªã„ã§ãã ã•ã„**ï¼
+
+矢å°ãŒç·‘色ã§è¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€ãƒ‰ãƒ©ã‚¤ãƒã‚’é¸æŠžã—ã€**Install Driver** をクリックã—ã¾ã™ã€‚`libusb-win32` ドライãƒã¯é€šå¸¸ AVR ã§å‹•ä½œã—ã€`WinUSB`㯠ARM ã§å‹•ä½œã—ã¾ã™ãŒã€ãã‚Œã§ã‚‚キーボードã«æ›¸ãè¾¼ã¿ã§ããªã„å ´åˆã¯ã€ãƒªã‚¹ãƒˆã‹ã‚‰ç•°ãªã‚‹ãƒ‰ãƒ©ã‚¤ãƒã‚’インストールã—ã¦ã¿ã¦ãã ã•ã„。msys2 を使ã£ã¦ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³çµŒç”±ã§ USBaspLoader デãƒã‚¤ã‚¹ã«æ›¸ã込むã«ã¯ã€`libusbk` ドライãƒãŒãŠå‹§ã‚ã§ã™ã€‚ãã†ã§ã¯ãªã書ãè¾¼ã¿ã« QMK Toolbox を使ã£ã¦ã„ã‚‹å ´åˆã¯ `libusb-win32` ãŒã†ã¾ã動作ã—ã¾ã™ã€‚
+
+![ブートローダドライãƒãŒæ­£å¸¸ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸ Zadig](https://i.imgur.com/b8VgXzx.png)
+
+最後ã«ã€æ–°ã—ã„ドライãƒãŒãƒ­ãƒ¼ãƒ‰ã•ã‚ŒãŸã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒ—ラグを抜ã„ã¦å†æŽ¥ç¶šã—ã¾ã™ã€‚書ãè¾¼ã¿ã« QMK Toolbox を使ã†å ´åˆã¯ã€ãƒ‰ãƒ©ã‚¤ãƒã®å¤‰æ›´ã‚’èªè­˜ã—ãªã„å ´åˆãŒã‚ã‚‹ãŸã‚ã€QMK Toolkit を終了ã—ã¦å†èµ·å‹•ã—ã¾ã™ã€‚
+
+## é–“é•ã£ãŸãƒ‡ãƒã‚¤ã‚¹ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‹ã‚‰ã®å›žå¾©
+
+キーボードãŒå…¥åŠ›ã§ããªããªã£ãŸå ´åˆã¯ã€ãƒ–ートローダã§ã¯ãªãキーボード自体ã®ãƒ‰ãƒ©ã‚¤ãƒã‚’é–“é•ã£ã¦å…¥ã‚Œæ›¿ãˆãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒãƒ–ートローダモードã§ãªã„å ´åˆã«èµ·ã“ã‚Šãˆã¾ã™ã€‚ã“れ㯠Zadig ã§ç°¡å˜ã«ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ - å¥å…¨ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ã¯ã€å…¨ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã« `HidUsb` ドライãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã™:
+
+![Zadig ã‹ã‚‰è¦‹ãŸå¥å…¨ãªã‚­ãƒ¼ãƒœãƒ¼ãƒ‰](https://i.imgur.com/Hx0E5kC.png)
+
+デãƒã‚¤ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’é–‹ãã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨æ€ã‚れるデãƒã‚¤ã‚¹ã‚’探ã—ã¾ã™ã€‚
+
+![デãƒã‚¤ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã«ãŠã‘ã‚‹ã€é–“é•ã£ãŸãƒ‰ãƒ©ã‚¤ãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸã‚­ãƒ¼ãƒœãƒ¼ãƒ‰](https://i.imgur.com/L3wvX8f.png)
+
+å³ã‚¯ãƒªãƒƒã‚¯ã—ã€**デãƒã‚¤ã‚¹ã®ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«** をクリックã—ã¾ã™ã€‚最åˆã« **ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã®ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’削除ã—ã¾ã™** ã«ãƒã‚§ãƒƒã‚¯ãŒä»˜ã„ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+
+!["ドライãƒã®å‰Šé™¤"ã«ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã«ãƒã‚§ãƒƒã‚¯ãŒä»˜ã„ãŸã€ãƒ‡ãƒã‚¤ã‚¹ã®ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãƒ€ã‚¤ã‚¢ãƒ­ã‚°](https://i.imgur.com/aEs2RuA.png)
+
+**Action → Scan for hardware changes** をクリックã—ã¾ã™ã€‚ã“ã®æ™‚点ã§ã€å†ã³å…¥åŠ›ã§ãるよã†ã«ãªã£ã¦ã„ã‚‹ã¯ãšã§ã™ã€‚Zadig ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ‡ãƒã‚¤ã‚¹ãŒ `HidUsb` ドライãƒã‚’使ã£ã¦ã„ã‚‹ã“ã¨ã‚’å†ç¢ºèªã—ã¾ã™ã€‚ãã†ã§ã‚ã‚Œã°å®Œäº†ã§ã™ã€‚キーボードã¯å†ã³æ©Ÿèƒ½ã™ã‚‹ã¯ãšã§ã™ï¼
+
+?> Windows ãŒæ–°ã—ã„ドライãƒã‚’使ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹ãŸã‚ã«ã€ã“ã®æ™‚点ã§ã‚³ãƒ³ãƒ”ュータを完全ã«å†èµ·å‹•ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
diff --git a/docs/ja/faq.md b/docs/ja/faq.md
new file mode 100644
index 0000000000..00b0ff8277
--- /dev/null
+++ b/docs/ja/faq.md
@@ -0,0 +1,11 @@
+# よãã‚る質å•
+
+<!---
+ original document: d598f01cb:docs/faq.md
+ git diff d598f01cb HEAD -- docs/faq.md | cat
+-->
+
+* [一般](ja/faq_general.md)
+* [QMK ã®ãƒ“ルドã‚ã‚‹ã„ã¯ã‚³ãƒ³ãƒ‘イル](ja/faq_build.md)
+* [QMK ã®ãƒ‡ãƒãƒƒã‚°ã¨ãƒˆãƒ©ãƒ–ルシューティング](ja/faq_debug.md)
+* [キーマップ](ja/faq_keymap.md)
diff --git a/docs/ja/faq_build.md b/docs/ja/faq_build.md
new file mode 100644
index 0000000000..9b4ce12a48
--- /dev/null
+++ b/docs/ja/faq_build.md
@@ -0,0 +1,160 @@
+# よãã‚るビルドã®è³ªå•
+
+<!---
+ original document: 0f43c2652:docs/faq_build.md
+ git diff 0f43c2652 HEAD -- docs/faq_build.md | cat
+-->
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯ QMK ã®ãƒ“ルドã«é–¢ã™ã‚‹è³ªå•ã‚’説明ã—ã¾ã™ã€‚ã¾ã ãƒ“ルドをã—ã¦ã„ãªã„å ´åˆã¯ã€[ビルド環境ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—](ja/getting_started_build_tools.md) ãŠã‚ˆã³ [Make 手順](ja/getting_started_make_guide.md)ガイドを読むã¹ãã§ã™ã€‚
+
+## Linux ã§ãƒ—ログラムã§ãã¾ã›ã‚“
+デãƒã‚¤ã‚¹ã‚’æ“作ã™ã‚‹ã«ã¯é©åˆ‡ãªæ¨©é™ãŒå¿…è¦ã§ã™ã€‚Linux ユーザã®å ´åˆã¯ã€ä»¥ä¸‹ã® `udev` ルールã«é–¢ã™ã‚‹æŒ‡ç¤ºã‚’見ã¦ãã ã•ã„。`udev` ã«å•é¡ŒãŒã‚ã‚‹å ´åˆã¯ã€å›žé¿ç­–㯠`sudo` コマンドを使ã†ã“ã¨ã§ã™ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã«æ…£ã‚Œã¦ã„ãªã„å ´åˆã¯ã€`man sudo` コマンドã§ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’確èªã™ã‚‹ã‹ã€[ã“ã® web ページを見ã¦ãã ã•ã„](https://linux.die.net/man/8/sudo)。
+
+コントローラ㌠ATMega32u4 ã®å ´åˆã® `sudo` ã®ä½¿ã„æ–¹ã®ä¾‹:
+
+ $ sudo dfu-programmer atmega32u4 erase --force
+ $ sudo dfu-programmer atmega32u4 flash your.hex
+ $ sudo dfu-programmer atmega32u4 reset
+
+ã‚ã‚‹ã„ã¯ã€å˜ç´”ã«:
+
+ $ sudo make <keyboard>:<keymap>:dfu
+
+`make` ã‚’ `sudo` ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ã¯ä¸€èˆ¬çš„ã«ã¯è‰¯ã„考ãˆã§ã¯***ãªã***ã€å¯èƒ½ã§ã‚ã‚Œã°å‰è€…ã®æ–¹æ³•ã®ã„ãšã‚Œã‹ã‚’使ã†ã¹ãã§ã™ã€‚
+
+### Linux 㮠`udev` ルール
+Linux ã§ã¯ã€MCU ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯é©åˆ‡ãªæ¨©é™ãŒå¿…è¦ã§ã™ã€‚ファームウェアを書ã込む時㫠`sudo` を使ã†ã‹ã€`/etc/udev/rules.d/` ã«ã“れらã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é…ç½®ã™ã‚‹ã“ã¨ã§ã€ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚権é™ã®è¿½åŠ ãŒå®Œäº†ã—ãŸã‚‰ã€ä»¥ä¸‹ã‚’実行ã—ã¾ã™:
+```console
+sudo udevadm control --reload-rules
+sudo udevadm trigger
+```
+
+**/etc/udev/rules.d/50-atmel-dfu.rules:**
+```
+# Atmel ATMega32U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
+# Atmel USBKEY AT90USB1287
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
+# Atmel ATMega32U2
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
+```
+
+**/etc/udev/rules.d/52-tmk-keyboard.rules:**
+```
+# tmk keyboard products https://github.com/tmk/tmk_keyboard
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
+```
+**/etc/udev/rules.d/54-input-club-keyboard.rules:**
+
+```
+# Input Club keyboard bootloader
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
+```
+
+**/etc/udev/rules.d/55-caterina.rules:**
+```
+# ModemManager should ignore the following devices
+ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
+ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
+```
+
+**注æ„:** ModemManager フィルタリングã¯åŽ³æ ¼ãƒ¢ãƒ¼ãƒ‰ã§ã¯ç„¡ã„å ´åˆã®ã¿å‹•ä½œã—ã¾ã™ã€‚以下ã®ã‚³ãƒžãƒ³ãƒ‰ã§ãã®è¨­å®šã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+```console
+sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service
+sudo systemctl daemon-reload
+sudo systemctl restart ModemManager
+```
+
+**/etc/udev/rules.d/56-dfu-util.rules:**
+```
+# stm32duino
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666"
+# Generic stm32
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
+```
+
+**/etc/udev/rules.d/57-bootloadhid.rules:**
+```
+# bootloadHID
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
+```
+
+### Linux ã®ãƒ–ートローダモード㧠Serial デãƒã‚¤ã‚¹ãŒæ¤œçŸ¥ã•ã‚Œãªã„
+カーãƒãƒ«ãŒãƒ‡ãƒã‚¤ã‚¹ã‚’é©åˆ‡ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。デãƒã‚¤ã‚¹ãŒã€Pro Micro (Atmega32u4) ã®ã‚ˆã†ã« USB ACM を使ã†å ´åˆã€`CONFIG_USB_ACM=y` ã‚’å«ã‚るよã†ã«ã—ã¦ãã ã•ã„。他ã®ãƒ‡ãƒã‚¤ã‚¹ã¯ `USB_SERIAL` ãŠã‚ˆã³ãã®ã‚µãƒ–オプションを必è¦ã¨ã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+
+## DFU ブートローダã®ä¸æ˜Žãªãƒ‡ãƒã‚¤ã‚¹
+
+Windows 上ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’書ã込む時ã«ç™ºç”Ÿã™ã‚‹å•é¡Œã¯ã€ãƒ–ートローダ用ã«é–“é•ã£ãŸãƒ‰ãƒ©ã‚¤ãƒãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹ã‹ã€å…¨ãインストールã•ã‚Œã¦ã„ãªã„ã‹ã«ã‚ˆã‚‹ã‚‚ã®ãŒã»ã¨ã‚“ã©ã§ã™ã€‚
+
+QMK インストールスクリプト (MSYS2 ã‚ã‚‹ã„㯠WSL 内㮠`qmk_firmware` ディレクトリã‹ã‚‰ `./util/qmk_install.sh`) ã‚’å†å®Ÿè¡Œã™ã‚‹ã‹ã€QMK Toolbox ã®å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ã“ã®å•é¡ŒãŒè§£æ±ºã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。別ã®ã‚„ã‚Šæ–¹ã¨ã—ã¦ã€æ‰‹å‹•ã§ [`qmk_driver_installer`](https://github.com/qmk/qmk_driver_installer) パッケージをダウンロードã—ã¦å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+ãã‚Œã§ã‚‚ã†ã¾ãè¡Œã‹ãªã„å ´åˆã¯ã€Zadig をダウンロードã—ã¦å®Ÿè¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚詳細ãªæƒ…報㯠[Zadig を使ã£ãŸãƒ–ートローダドライãƒã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«](ja/driver_installation_zadig.md)を見ã¦ãã ã•ã„。
+
+## USB VID 㨠PID
+`config.h` を編集ã™ã‚‹ã“ã¨ã§ä»»æ„ã® ID を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ãŠãらã未使用㮠ID を使ã£ã¦ã‚‚ã€ä»–ã®è£½å“ã¨è¡çªã™ã‚‹ã¨ã¦ã‚‚低ã„å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã‚’除ã„ã¦ã€å®Ÿéš›ã«ã¯å•é¡Œã¯ã‚ã‚Šã¾ã›ã‚“。
+
+QMK ã®ã»ã¨ã‚“ã©ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ã€vendor ID ã¨ã—ã¦ã€`0xFEED` を使ã„ã¾ã™ã€‚ä»–ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’調ã¹ã¦ã€ãƒ¦ãƒ‹ãƒ¼ã‚¯ãª ID ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+
+ã¾ãŸã“れも見ã¦ãã ã•ã„。
+https://github.com/tmk/tmk_keyboard/issues/150
+
+ã“ã“ã§æœ¬å½“ã«ãƒ¦ãƒ‹ãƒ¼ã‚¯ãª VID:PID ã‚’è²·ã†ã“ã¨ãŒã§ãã¾ã™ã€‚個人的ãªä½¿ç”¨ã«ã¯ã“ã‚Œã¯å¿…è¦ãªã„ã¨æ€ã„ã¾ã™ã€‚
+- http://www.obdev.at/products/vusb/license.html
+- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
+
+## AVR ã®ãŸã‚ã® BOOTLOADER_SIZE
+Teensy2.0++ ブートローダã®ã‚µã‚¤ã‚ºã¯ 2048 ãƒã‚¤ãƒˆã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。一部㮠Makefile ã«ã¯é–“é•ã£ãŸã‚³ãƒ¡ãƒ³ãƒˆãŒã‚ã‚Šã¾ã™ã€‚
+
+```
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 2048
+# Atmel DFU loader 4096 (TMK Alt Controller)
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=2048
+```
+
+## MacOS ã§ã® `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)`
+ã“れ㯠brew ã§ã®æ›´æ–°ã«é–¢ã™ã‚‹å•é¡Œã§ã€avr-gcc ãŒä¾å­˜ã™ã‚‹ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã‚’壊ã—ã¾ã™ã€‚
+
+解決法ã¯å…¨ã¦ã®å½±éŸ¿ã‚’å—ã‘ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’削除ã—å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã§ã™ã€‚
+
+```
+brew rm avr-gcc
+brew rm avr-gcc@8
+brew rm dfu-programmer
+brew rm dfu-util
+brew rm gcc-arm-none-eabi
+brew rm arm-gcc-bin@8
+brew rm avrdude
+brew install avr-gcc@8
+brew install dfu-programmer
+brew install dfu-util
+brew install arm-gcc-bin@8
+brew install avrdude
+brew link --force avr-gcc@8
+brew link --force arm-gcc-bin@8
+```
+
+### `avr-gcc` 㨠LUFA
+
+`avr-gcc` ã‚’æ›´æ–°ã—ã€LUFA ã«é–¢é€£ã™ã‚‹ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•ã‚ŒãŸå ´åˆã€ä¾‹ãˆã°:
+
+`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
+
+今ã®ã¨ã“ã‚ã€Homebrew 㧠`avr-gcc` ã‚’ 8 ã«ãƒ­ãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+```
+brew uninstall --force avr-gcc
+brew install avr-gcc@8
+brew link --force avr-gcc@8
+```
+
+### キーボードã«æ›¸ã込んã ãŒä½•ã‚‚èµ·ã“らãªã„ã€ã‚ã‚‹ã„ã¯ã‚­ãƒ¼ã®æŠ¼ä¸‹ãŒç™»éŒ²ã•ã‚Œãªã„ - ARM (rev6 planckã€clueboard 60ã€hs60v2 ãªã©) ã§ã‚‚åŒã˜ (Feb 2019)
+ARM ベースã®ãƒãƒƒãƒ—上ã§ã® EEPROM ã®å‹•ä½œã«ã‚ˆã£ã¦ã€ä¿å­˜ã•ã‚ŒãŸè¨­å®šãŒç„¡åŠ¹ã«ãªã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ¬ã‚¤ãƒ¤ã«å½±éŸ¿ã—ã€ã¾ã èª¿æŸ»ä¸­ã®ç‰¹å®šã®ç’°å¢ƒä¸‹ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒä½¿ãˆãªããªã‚‹*ã—ã‚Œã¾ã›ã‚“*。EEPROM ã®ãƒªã‚»ãƒƒãƒˆã§ã“ã‚ŒãŒä¿®æ­£ã•ã‚Œã¾ã™ã€‚
+
+[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) を使ã£ã¦ eeprom ã®ãƒªã‚»ãƒƒãƒˆã‚’強制ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’書ã込んã å¾Œã§ã€é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ã込むã¨ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒ_通常_ ã®å‹•ä½œé †åºã«å¾©å…ƒã•ã‚Œã¾ã™ã€‚
+[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
+
+ã„ãšã‚Œã‹ã®å½¢å¼ã§ãƒ–ートマジックãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€ã“れも実行ã§ãã‚‹ã¯ãšã§ã™ (実行方法ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€[ブートマジックドキュメント](feature_bootmagic.md)ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰æƒ…報を見ã¦ãã ã•ã„)。
diff --git a/docs/ja/faq_debug.md b/docs/ja/faq_debug.md
new file mode 100644
index 0000000000..8e42aebbb5
--- /dev/null
+++ b/docs/ja/faq_debug.md
@@ -0,0 +1,161 @@
+# デãƒãƒƒã‚°ã® FAQ
+
+<!---
+ original document: 376419a4f:docs/faq_debug.md
+ git diff 376419a4f HEAD -- docs/faq_debug.md | cat
+-->
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒˆãƒ©ãƒ–ルシューティングã«ã¤ã„ã¦ã®æ§˜ã€…ãªä¸€èˆ¬çš„ãªè³ªå•ã‚’説明ã—ã¾ã™ã€‚
+
+# デãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«
+
+## `hid_listen` ãŒãƒ‡ãƒã‚¤ã‚¹ã‚’èªè­˜ã§ããªã„
+デãƒã‚¤ã‚¹ã®ãƒ‡ãƒãƒƒã‚°ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®æº–å‚™ãŒã§ãã¦ã„ãªã„å ´åˆã€ä»¥ä¸‹ã®ã‚ˆã†ã«è¡¨ç¤ºã•ã‚Œã¾ã™:
+
+```
+Waiting for device:.........
+```
+
+デãƒã‚¤ã‚¹ãŒæŽ¥ç¶šã•ã‚Œã‚‹ã¨ã€*hid_listen* ãŒãƒ‡ãƒã‚¤ã‚¹ã‚’見ã¤ã‘ã€ä»¥ä¸‹ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¾ã™:
+
+```
+Waiting for new device:.........................
+Listening:
+```
+
+ã“ã® 'Listening:' ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œãªã„å ´åˆã¯ã€[Makefile] ã‚’ `CONSOLE_ENABLE=yes` ã«è¨­å®šã—ã¦ãƒ“ルドã—ã¦ã¿ã¦ãã ã•ã„
+
+Linux ã®ã‚ˆã†ãª OS ã§ãƒ‡ãƒã‚¤ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€æ¨©é™ãŒå¿…è¦ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+- `sudo hid_listen` を試ã—ã¦ãã ã•ã„
+
+## コンソールã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œãªã„
+以下を調ã¹ã¦ãã ã•ã„:
+- *hid_listen* ãŒãƒ‡ãƒã‚¤ã‚¹ã‚’検出ã™ã‚‹ã€‚上記を見ã¦ãã ã•ã„。
+- **Magic**+d を使ã£ã¦ãƒ‡ãƒãƒƒã‚°ã‚’有効ã«ã™ã‚‹ã€‚[マジックコマンド](https://github.com/tmk/tmk_keyboard#magic-commands)を見ã¦ãã ã•ã„。
+- `debug_enable=true` を設定ã—ã¾ã™ã€‚[テストã¨ãƒ‡ãƒãƒƒã‚°](ja/newbs_testing_debugging.md#debugging)を見ã¦ãã ã•ã„
+- デãƒãƒƒã‚° print ã®ä»£ã‚ã‚Šã« 'print' 関数を使ã£ã¦ã¿ã¦ãã ã•ã„。**common/print.h** を見ã¦ãã ã•ã„。
+- コンソール機能をæŒã¤ä»–ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’切断ã—ã¾ã™ã€‚[Issue #97](https://github.com/tmk/tmk_keyboard/issues/97) を見ã¦ãã ã•ã„。
+
+## Linux ã‚ã‚‹ã„㯠UNIX ã®ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ ã¯ã‚¹ãƒ¼ãƒ‘ーユーザ権é™ã‚’å¿…è¦ã¨ã—ã¾ã™
+権é™ä»˜ã㧠*hid_listen* を実行ã™ã‚‹ãŸã‚ã« 'sudo' を使ã£ã¦ãã ã•ã„。
+```
+$ sudo hid_listen
+```
+
+ã¾ãŸã¯ rules ディレクトリã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ã„ã¦ã€TMK デãƒã‚¤ã‚¹ã®ãŸã‚ã® *udev rule* を追加ã—ã¾ã™ã€‚ディレクトリã¯å„システムã§ç•°ãªã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+
+File: /etc/udev/rules.d/52-tmk-keyboard.rules (Ubuntu ã®å ´åˆ)
+```
+# tmk keyboard products https://github.com/tmk/tmk_keyboard
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
+```
+
+***
+
+# 雑多ãªã“ã¨
+## 安全性ã®è€ƒæ…®
+
+ã‚ãªãŸã¯ãŠãらãキーボードを「文鎮化ã€ã—ãŸããªã„ã§ã—ょã†ã€‚文鎮化ã™ã‚‹ã¨ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ãæ›ãˆã‚‰ã‚Œãªã„よã†ã«ãªã‚Šã¾ã™ã€‚リスクãŒã‚ã¾ã‚Šã«é«˜ã„(ãã—ã¦ãã†ã§ãªã„ã‹ã‚‚ã—ã‚Œãªã„)ã‚‚ã®ã®ä¸€éƒ¨ã®ãƒªã‚¹ãƒˆã‚’示ã—ã¾ã™ã€‚
+
+- キーボードマップ㫠RESET ãŒå«ã¾ã‚Œãªã„å ´åˆã€DFU モードã«å…¥ã‚‹ã«ã¯ã€PCB ã®ãƒªã‚»ãƒƒãƒˆãƒœã‚¿ãƒ³ã‚’押ã™å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚底部ã®ãƒã‚¸ã‚’外ã™å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+- tmk_core / common ã«ã‚るファイルを触るã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒæ“作ä¸èƒ½ã«ãªã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+- .hex ファイルãŒå¤§ãã™ãŽã‚‹ã¨å•é¡Œã‚’引ãèµ·ã“ã—ã¾ã™; `make dfu` コマンドã¯ãƒ–ロックを削除ã—ã€
+サイズを検査ã—(ãŠã£ã¨ã€é–“é•ã£ãŸé †åºã§ã™ï¼)ã€ã‚¨ãƒ©ãƒ¼ã‚’出力ã—ã€
+キーボードã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã€DFU モードã®ã¾ã¾ã«ãªã‚Šã¾ã™ã€‚
+ - ã“ã®ç›®çš„ã®ãŸã‚ã«ã¯ã€Planck ã®æœ€å¤§ã® .hex ファイルサイズ㯠7000h (10進数ã§28672)ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
+
+```
+Linking: .build/planck_rev4_cbbrowne.elf [OK]
+Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK]
+
+Size after:
+ text data bss dec hex filename
+ 0 22396 0 22396 577c planck_rev4_cbbrowne.hex
+```
+
+- 上ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚µã‚¤ã‚ºã¯ 22396/577ch ã§ã€28672/7000h よりå°ã•ã„ã§ã™
+- é©åˆ‡ãªæ›¿ã‚ã‚Šã® .hex ファイルãŒã‚ã‚‹é™ã‚Šã€ãれをロードã—ã¦å†è©¦è¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™
+- ã‚ãªãŸãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® Makefile ã§æŒ‡å®šã—ãŸã‹ã‚‚ã—ã‚Œãªã„一部ã®ã‚ªãƒ—ションã¯ã€ä½™åˆ†ãªãƒ¡ãƒ¢ãƒªã‚’消費ã—ã¾ã™; BOOTMAGIC_ENABLEã€MOUSEKEY_ENABLEã€EXTRAKEY_ENABLEã€CONSOLE_ENABLEã€API_SYSEX_ENABLE ã«æ³¨æ„ã—ã¦ãã ã•ã„
+- DFU ツールã¯(オプションã®ä½™è¨ˆãªãƒ•ãƒ«ãƒ¼ãƒ„サラダを投ã’è¾¼ã¾ãªã„é™ã‚Š)ブートローダã«æ›¸ã込むã“ã¨ã‚’許å¯ã—ãªã„ã®ã§ã€
+ã“ã“ã«ã¯ãƒªã‚¹ã‚¯ã¯ã»ã¨ã‚“ã©ã‚ã‚Šã¾ã›ã‚“。
+- EEPROM ã®æ›¸ãè¾¼ã¿ã‚µã‚¤ã‚¯ãƒ«ã¯ã€ç´„100000ã§ã™ã€‚ファームウェアを繰り返ã—継続的ã«æ›¸ãæ›ãˆã‚‹ã¹ãã§ã¯ã‚ã‚Šã¾ã›ã‚“。ãã‚Œã¯æœ€çµ‚çš„ã« EEPROM を焼ã焦ãŒã—ã¾ã™ã€‚
+
+## NKRO ãŒå‹•ä½œã—ã¾ã›ã‚“
+最åˆã«ã€**Makefile** 内ã§ãƒ“ルドオプション `NKRO_ENABLE` を使ã£ã¦ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’コンパイルã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+**NKRO** ãŒã¾ã å‹•ä½œã—ãªã„å ´åˆã¯ã€`Magic` **N** コマンド(デフォルトã§ã¯ `LShift+RShift+N`)を試ã—ã¦ã¿ã¦ãã ã•ã„。**NKRO** モード㨠**6KRO** モード間を一時的ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ãŸã‚ã«ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚**NKRO** ãŒæ©Ÿèƒ½ã—ãªã„状æ³ã€ç‰¹ã« BIOS ã®å ´åˆã¯ **6KRO** モードã«åˆ‡ã‚Šæ›¿ãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+ファームウェアを `BOOTMAGIC_ENABLE` ã§ãƒ“ルドã—ãŸå ´åˆã€`ブートマジック` **N** コマンドã§åˆ‡ã‚Šæ›¿ãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ (デフォルトã§ã¯ `Space+N`)。ã“ã®è¨­å®šã¯ EEPROM ã«æ ¼ç´ã•ã‚Œã€é›»æºã‚’入れ直ã—ã¦ã‚‚ä¿æŒã•ã‚Œã¾ã™ã€‚
+
+https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
+
+
+## TrackPoint ã¯ãƒªã‚»ãƒƒãƒˆå›žè·¯ãŒå¿…è¦ã§ã™ (PS/2 マウスサãƒãƒ¼ãƒˆ)
+リセット回路ãŒç„¡ã„ã¨ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ä¸é©åˆ‡ãªåˆæœŸåŒ–ã®ãŸã‚ã«ä¸€è²«æ€§ã®ç„¡ã„çµæžœã«ãªã‚Šã¾ã™ã€‚TPM754 ã®å›žè·¯å›³ã‚’見ã¦ãã ã•ã„。
+
+- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
+- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
+
+
+## 16 を超ãˆã‚‹ãƒžãƒˆãƒªãƒƒã‚¯ã®åˆ—を読ã¿è¾¼ã‚ãªã„
+列㌠16 を超ãˆã‚‹å ´åˆã€[matrix.h] ã® `read_cols()` 内㮠`1<<16` ã®ä»£ã‚ã‚Šã« `1UL<<16` を使ã£ã¦ãã ã•ã„。
+
+C ã§ã¯ã€AVR ã®å ´åˆ `1` 㯠[16 bit] ã§ã‚ã‚‹ [int] åž‹ã®1ã‚’æ„味ã—ã€15 を超ãˆã¦å·¦ã«ã‚·ãƒ•ãƒˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。`1<<16` ã™ã‚‹ã¨äºˆæœŸã—ãªã„ゼロãŒç™ºç”Ÿã—ã¾ã™ã€‚`1UL` ã¨ã—㦠[unsigned long] 型を使ã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
+
+## 特別ãªã‚¨ã‚¯ã‚¹ãƒˆãƒ©ã‚­ãƒ¼ãŒå‹•ä½œã—ãªã„ (システムã€ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚­ãƒ¼)
+QMK ã§ãれらを使ã†ã«ã¯ã€`rules.mk` 内㧠`EXTRAKEY_ENABLE` を定義ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+```
+EXTRAKEY_ENABLE = yes # オーディオ制御ã¨ã‚·ã‚¹ãƒ†ãƒ åˆ¶å¾¡
+```
+
+## スリープã‹ã‚‰å¾©å¸°ã—ãªã„
+
+Windows ã§ã¯ã€**デãƒã‚¤ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£**ã®**é›»æºã®ç®¡ç†**タブ内㮠`ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã€ã‚³ãƒ³ãƒ”ュータã®ã‚¹ã‚¿ãƒ³ãƒã‚¤çŠ¶æ…‹ã‚’解除ã§ãるよã†ã«ã™ã‚‹` 設定を調ã¹ã¦ãã ã•ã„。ã¾ãŸ BIOS 設定も調ã¹ã¦ãã ã•ã„。
+
+スリープ中ã«ä»»æ„ã®ã‚­ãƒ¼ã‚’押ã™ã¨ãƒ›ã‚¹ãƒˆãŒèµ·å‹•ã™ã‚‹ã¯ãšã§ã™ã€‚
+
+## Arduino を使ã£ã¦ã„ã¾ã™ã‹ï¼Ÿ
+
+**Arduino ã®ãƒ”ンã®å‘½åã¯å®Ÿéš›ã®ãƒãƒƒãƒ—ã¨ç•°ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。** 例ãˆã°ã€Arduino ã®ãƒ”ン `D0` 㯠`PD0` ã§ã¯ã‚ã‚Šã¾ã›ã‚“。回路図を自身ã§ç¢ºèªã—ã¦ãã ã•ã„。
+
+- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
+- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
+
+Arduino ã® Leonardo 㨠micro ã«ã¯ **ATMega32U4** ãŒè¼‰ã£ã¦ã„ã¦ã€TMK 用ã«ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ãŒã€Arduino ã®ãƒ–ートローダãŒå•é¡Œã«ãªã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
+
+## JTAG を有効ã«ã™ã‚‹
+
+デフォルトã§ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒèµ·å‹•ã™ã‚‹ã¨ã™ãã« JTAG デãƒãƒƒã‚°ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ãŒç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚JTAG 対応 MCU 㯠`JTAGEN` ヒューズãŒè¨­å®šã•ã‚ŒãŸçŠ¶æ…‹ã§å‡ºè·ã•ã‚Œã¦ãŠã‚Šã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒã‚¹ã‚¤ãƒƒãƒãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã€LED ãªã©ã«ä½¿ç”¨ã—ã¦ã„ã‚‹å¯èƒ½æ€§ã®ã‚ã‚‹ MCU ã®ç‰¹å®šã®ãƒ”ンを乗ã£å–ã‚Šã¾ã™ã€‚
+
+JTAG を有効ã«ã—ãŸã¾ã¾ã«ã—ãŸã„å ´åˆã¯ã€å˜ã«ä»¥ä¸‹ã®ã‚‚ã®ã‚’ `config.h` ã«è¿½åŠ ã—ã¾ã™:
+
+```c
+#define NO_JTAG_DISABLE
+```
+
+## USB 3 ã®äº’æ›æ€§
+USB 3 ãƒãƒ¼ãƒˆã§å•é¡ŒãŒã‚る人ãŒã„ã‚‹ã¨èžãã¾ã—ãŸã€‚USB 2 ãƒãƒ¼ãƒˆã‚’試ã—ã¦ãã ã•ã„。
+
+
+## Mac ã®äº’æ›æ€§
+### OS X 10.11 㨠Hub
+https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
+
+
+## リジューム (スリープã¨ã‚¦ã‚§ãƒ¼ã‚¯ã‚¢ãƒƒãƒ—)/é›»æºã‚µã‚¤ã‚¯ãƒ«ã®å•é¡Œ
+一部ã®äººãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒ BIOS ã§å‹•ä½œã—ãªããªã£ãŸã€ã¾ãŸã¯ãƒªã‚¸ãƒ¥ãƒ¼ãƒ (é›»æºã‚µã‚¤ã‚¯ãƒ«)ã®å¾Œã§å‹•ä½œã—ãªããªã£ãŸã¨å ±å‘Šã—ã¾ã—ãŸã€‚
+
+今ã®ã¨ã“ã‚ã€ã“ã®å•é¡Œã®æ ¹æœ¬ã¯æ˜Žç¢ºã§ã¯ãªã„ã§ã™ãŒã€å¹¾ã¤ã‹ã®ãƒ“ルドオプションãŒé–¢ä¿‚ã—ã¦ã„るよã†ã§ã™ã€‚Makefileã§ã€`CONSOLE_ENABLE`ã€`NKRO_ENABLE`ã€`SLEEP_LED_ENABLE` ã‚ã‚‹ã„ã¯ä»–ã®ã‚ªãƒ—ションを無効ã«ã—ã¦ã¿ã¦ãã ã•ã„。
+
+https://github.com/tmk/tmk_keyboard/issues/266
+https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
+
+
+
+## FLIP ãŒå‹•ä½œã—ãªã„
+### `AtLibUsbDfu.dll` ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
+デãƒã‚¤ã‚¹ãƒžãƒãƒ¼ã‚¸ãƒ£ã‹ã‚‰ç¾åœ¨ã®ãƒ‰ãƒ©ã‚¤ãƒã‚’削除ã—ã€FLIP ãŒæä¾›ã™ã‚‹ã‚‚ã®ã‚’å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚
+http://imgur.com/a/bnwzy
diff --git a/docs/ja/faq_general.md b/docs/ja/faq_general.md
new file mode 100644
index 0000000000..935d1a3c6a
--- /dev/null
+++ b/docs/ja/faq_general.md
@@ -0,0 +1,20 @@
+# よãã‚る質å•
+
+<!---
+ original document: d598f01cb:docs/faq_general.md
+ git diff d598f01cb HEAD -- docs/faq_general.md | cat
+-->
+
+## QMK ã¨ã¯ä½•ã‹ï¼Ÿ
+
+Quantum Mechanical Keyboard ã®ç•¥ã§ã‚ã‚‹ [QMK](https://github.com/qmk) ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãŸã‚ã®ãƒ„ールをビルドã—ã¦ã„る人々ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚[TMK](https://github.com/tmk/tmk_keyboard) ã®å¤§å¹…ã«ä¿®æ­£ã•ã‚ŒãŸãƒ•ã‚©ãƒ¼ã‚¯ã§ã‚ã‚‹ [QMK ファームウェア](https://github.com/qmk/qmk_firmware)ã‹ã‚‰å§‹ã¾ã‚Šã¾ã—ãŸã€‚
+
+## QMK 㨠TMK ã®é•ã„ã¯ä½•ã‹ï¼Ÿ
+
+TMK 㯠[Jun Wako](https://github.com/tmk) ã«ã‚ˆã£ã¦è¨­è¨ˆã•ã‚Œå®Ÿè£…ã•ã‚Œã¾ã—ãŸã€‚QMK 㯠[Jack Humbert](https://github.com/jackhumbert) ã® Planck 用 TMK ã®ãƒ•ã‚©ãƒ¼ã‚¯ã¨ã—ã¦å§‹ã¾ã‚Šã¾ã—ãŸã€‚ã—ã°ã‚‰ãã—ã¦ã€Jack ã®ãƒ•ã‚©ãƒ¼ã‚¯ã¯ TMK ã‹ã‚‰ã‹ãªã‚Šåˆ†å²ã—ã€2015å¹´ã« Jack ã¯ãƒ•ã‚©ãƒ¼ã‚¯ã‚’ QMK ã«åå‰ã‚’変ãˆã‚‹ã“ã¨ã«ã—ã¾ã—ãŸã€‚
+
+技術的ãªè¦³ç‚¹ã‹ã‚‰ã€QMK ã¯å¹¾ã¤ã‹ã®æ–°ã—ã„機能を追加ã—㟠TMK ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚最も注目ã™ã¹ãã“ã¨ã¯ã€QMK ã¯åˆ©ç”¨å¯èƒ½ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®æ•°ã‚’増やã—ã€`S()`ã€`LCTL()` ãŠã‚ˆã³ `MO()` ãªã©ã®é«˜åº¦ãªæ©Ÿèƒ½ã‚’実装ã™ã‚‹ãŸã‚ã«ã“れらを使ã£ã¦ã„ã¾ã™ã€‚[キーコード](keycodes.md)ã§ã“れらã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚
+
+プロジェクトã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ç®¡ç†ã®è¦³ç‚¹ã‹ã‚‰ã€TMK ã¯å…¬å¼ã«ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹å…¨ã¦ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’自分ã§ç®¡ç†ã—ã¦ãŠã‚Šã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã‚µãƒãƒ¼ãƒˆã‚‚å°‘ã—å—ã‘ã¦ã„ã¾ã™ã€‚ä»–ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã«åˆ¥å€‹ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒç¶­æŒã™ã‚‹ãƒ•ã‚©ãƒ¼ã‚¯ãŒå­˜åœ¨ã™ã‚‹ã‹ã€ä½œæˆã§ãã¾ã™ã€‚デフォルトã§ã¯å°‘æ•°ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ã¿ãŒæä¾›ã•ã‚Œã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ã¯ä¸€èˆ¬çš„ã«ãŠäº’ã„ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—を共有ã—ã¾ã›ã‚“。QMK ã¯é›†ä¸­ç®¡ç†ã•ã‚ŒãŸãƒªãƒã‚¸ãƒˆãƒªã‚’介ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®ä¸¡æ–¹ã‚’共有ã™ã‚‹ã“ã¨ã‚’奨励ã—ã¦ãŠã‚Šã€å“質基準ã«æº–æ‹ ã™ã‚‹å…¨ã¦ã®ãƒ—ルリクエストをå—ã‘付ã‘ã¾ã™ã€‚ã“れらã¯ã»ã¨ã‚“ã©ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã§ç®¡ç†ã•ã‚Œã¾ã™ãŒã€å¿…è¦ãªå ´åˆã¯ QMK ãƒãƒ¼ãƒ ã‚‚支æ´ã—ã¾ã™ã€‚
+
+ã©ã¡ã‚‰ã®ã‚¢ãƒ—ローãƒã‚‚メリットã¨ãƒ‡ãƒ¡ãƒªãƒƒãƒˆãŒã‚ã‚Šã€ç†ã«é©ã†å ´åˆã¯ TMK 㨠QMK ã®é–“ã§ã‚³ãƒ¼ãƒ‰ã¯è‡ªç”±ã«ã‚„ã‚Šå–ã‚Šã•ã‚Œã¾ã™ã€‚
diff --git a/docs/ja/faq_keymap.md b/docs/ja/faq_keymap.md
new file mode 100644
index 0000000000..0c742bf6b9
--- /dev/null
+++ b/docs/ja/faq_keymap.md
@@ -0,0 +1,149 @@
+# キーマップ㮠FAQ
+
+<!---
+ original document: 376419a4f:docs/faq_keymap.md
+ git diff 376419a4f HEAD -- docs/faq_keymap.md | cat
+-->
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯äººã€…ãŒã‚­ãƒ¼ãƒžãƒƒãƒ—ã«ã¤ã„ã¦ã—ã°ã—ã°æŒã¤ç–‘å•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ã¾ã èª­ã‚“ã ã“ã¨ãŒç„¡ã„å ´åˆã«ã¯ã€[キーマップã®æ¦‚è¦](ja/keymap.md)を最åˆã«èª­ã‚€ã¹ãã§ã™ã€‚
+
+## ã©ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’使ãˆã¾ã™ã‹ï¼Ÿ
+ã‚ãªãŸãŒåˆ©ç”¨å¯èƒ½ãªã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã«ã¤ã„ã¦ã¯ã€[キーコード](ja/keycodes.md)を見ã¦ãã ã•ã„。より広範ãªãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒã‚ã‚‹å ´åˆã¯ã€ãã“ã‹ã‚‰ãƒªãƒ³ã‚¯ã—ã¦ã‚ã‚Šã¾ã™ã€‚
+
+キーコードã¯å®Ÿéš›ã«ã¯ [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h) ã§å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ã€‚
+
+## デフォルトã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã¨ã¯ä½•ã‹ï¼Ÿ
+
+世界中ã§ä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹ ANSIã€ISO ãŠã‚ˆã³ JIS ã®3ã¤ã®æ¨™æº–キーボードãŒã‚ã‚Šã¾ã™ã€‚北米ã§ã¯ä¸»ã« ANSI ãŒä½¿ã‚ã‚Œã€ãƒ¨ãƒ¼ãƒ­ãƒƒãƒ‘ãŠã‚ˆã³ã‚¢ãƒ•ãƒªã‚«ã§ã¯ä¸»ã« ISO ãŒä½¿ã‚ã‚Œã€æ—¥æœ¬ã§ã¯ JIS ãŒä½¿ã‚ã‚Œã¾ã™ã€‚言åŠã•ã‚Œã¦ã„ãªã„地域ã§ã¯ã€ANSI ã‚ã‚‹ã„㯠ISO ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚ã“れらã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã«å¯¾å¿œã™ã‚‹ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™:
+
+<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/bf431647d1001cff5eff20ae55621e9a -->
+![キーボードã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚¤ãƒ¡ãƒ¼ã‚¸](https://i.imgur.com/5wsh5wM.png)
+
+## 一部ã®ã‚­ãƒ¼ãŒå…¥ã‚Œæ›¿ã‚ã£ã¦ã„ã‚‹ã‹ã€ã¾ãŸã¯å‹•ä½œã—ãªã„
+
+QMK ã«ã¯2ã¤ã®æ©Ÿèƒ½ã€ãƒ–ートマジックã¨ã‚³ãƒžãƒ³ãƒ‰ãŒã‚ã‚Šã€ã“ã‚Œã«ã‚ˆã‚Šãã®å ´ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å‹•ä½œã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã‚Œã«ã¯ Ctrl/Caps ã®äº¤æ›ã€Gui ã®ç„¡åŠ¹åŒ–ã€Alt/GUI ã®äº¤æ›ã€Backspace/Backslash ã®äº¤æ›ã€å…¨ã¦ã®ã‚­ãƒ¼ã®ç„¡åŠ¹åŒ–ãŠã‚ˆã³ãã®ä»–ã®å‹•ä½œã®å¤‰æ›´ãŒå«ã¾ã‚Œã¾ã™ãŒã€ã“れらã«é™å®šã•ã‚Œã¾ã›ã‚“。
+
+迅速ãªè§£æ±ºç­–ã¨ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’接続ã—ã¦ã„る時㫠`Space`+`Backspace` を押ã—ã¦ã¿ã¦ãã ã•ã„。ã“ã‚Œã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ä¿å­˜ã•ã‚Œã¦ã„る設定をリセットã—ã€ã“れらã®ã‚­ãƒ¼ã‚’通常ã®æ“作ã«æˆ»ã—ã¾ã™ã€‚ã†ã¾ãè¡Œã‹ãªã„å ´åˆã¯ã€ä»¥ä¸‹ã‚’見ã¦ãã ã•ã„:
+
+* [ブートマジック](ja/feature_bootmagic.md)
+* [コマンド](ja/feature_command.md)
+
+## メニューキーãŒå‹•ä½œã—ãªã„
+
+ã»ã¨ã‚“ã©ã®æœ€è¿‘ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ã‚ã‚‹ã€`KC_RGUI` 㨠`KC_RCTL` ã®é–“ã«ã‚るキーã¯ã€å®Ÿéš›ã«ã¯ `KC_APP` ã¨å‘¼ã°ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ãã®ã‚­ãƒ¼ãŒç™ºæ˜Žã•ã‚ŒãŸæ™‚ã«ã€é–¢é€£ã™ã‚‹æ¨™æº–ã«ã™ã§ã« `MENU` ã¨ã„ã†åå‰ã®ã‚­ãƒ¼ãŒå­˜åœ¨ã—ã¦ã„ãŸãŸã‚ã€MS ã¯ãれを `APP` キーã¨å‘¼ã¶ã“ã¨ã‚’é¸æŠžã—ãŸãŸã‚ã§ã™ã€‚
+
+## `KC_SYSREQ` ãŒå‹•ä½œã—ã¾ã›ã‚“
+`KC_SYSREQ` ã®ä»£ã‚ã‚Šã«ã€Print Screen(`KC_PSCREEN` ã‚ã‚‹ã„㯠`KC_PSCR`) ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’使ã£ã¦ãã ã•ã„。'Alt + Print Screen' ã®ã‚­ãƒ¼ã®çµ„ã¿åˆã‚ã›ã¯ã€'システムリクエスト' ã¨èªè­˜ã•ã‚Œã¾ã™ã€‚
+
+[issue #168](https://github.com/tmk/tmk_keyboard/issues/168) ã¨ä»¥ä¸‹ã‚’見ã¦ãã ã•ã„
+* http://en.wikipedia.org/wiki/Magic_SysRq_key
+* http://en.wikipedia.org/wiki/System_request
+
+## é›»æºã‚­ãƒ¼ãŒå‹•ä½œã—ã¾ã›ã‚“
+
+やや紛らã‚ã—ã„ã“ã¨ã«ã€QMK ã«ã¯2ã¤ã® "Power" キーコードãŒã‚ã‚Šã¾ã™: キーボード/キーパッド HID usage page ã§ã¯ `KC_POWER`ã€Consumer page ã§ã¯ `KC_SYSTEM_POWER` (ã‚ã‚‹ã„㯠`KC_PWR`)。
+
+å‰è€…㯠macOS ã§ã®ã¿èªè­˜ã•ã‚Œã¾ã™ãŒã€å¾Œè€… `KC_SLEP` ãŠã‚ˆã³ `KC_WAKE` ã¯3ã¤ã®ä¸»è¦ãªã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ å…¨ã¦ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹ãŸã‚ã€ã“れらを使ã†ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚Windows ã§ã¯ã“れらã®ã‚­ãƒ¼ã¯ã™ãã«æ©Ÿèƒ½ã—ã¾ã™ãŒã€macOS ã§ã¯ãれらã¯ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã¾ã§æŠ¼ã—続ã‘ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+## ワンショットモディファイア
+ç§ã®å€‹äººçš„㪠'the' ã®å•é¡Œã‚’解決ã—ã¾ã™ã€‚'The' ã§ã¯ãªã 'the' ã‚ã‚‹ã„㯠'THe' ã‚’é–“é•ã£ã¦å…¥åŠ›ã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã—ãŸã€‚ワンショットシフトã¯ã“れを軽減ã—ã¾ã™ã€‚
+https://github.com/tmk/tmk_keyboard/issues/67
+
+## モディファイヤ/レイヤスタック
+修飾キーã‚ã‚‹ã„ã¯ãƒ¬ã‚¤ãƒ¤ã¯ã€ãƒ¬ã‚¤ãƒ¤ã®åˆ‡ã‚Šæ›¿ãˆãŒé©åˆ‡ã«è¨­å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€ã‚¹ã‚¿ãƒƒã‚¯ã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
+修飾キーãŠã‚ˆã³ãƒ¬ã‚¤ãƒ¤åˆ‡ã‚Šæ›¿ãˆã®å ´åˆã€ãƒªãƒªãƒ¼ã‚¹ã‚¤ãƒ™ãƒ³ãƒˆæ™‚ã«ä¿®é£¾ã‚­ãƒ¼ã®ç™»éŒ²ã‚’解除ã™ã‚‹ã€ã‚‚ã—ãã¯å‰ã®ãƒ¬ã‚¤ãƒ¤ã«æˆ»ã‚‹ãŸã‚ã«ã€ç›®çš„ã®ãƒ¬ã‚¤ãƒ¤ã®åŒã˜ä½ç½®ã« `KC_TRANS` ã‚’é…ç½®ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#31-momentary-switching
+* http://geekhack.org/index.php?topic=57008.msg1492604#msg1492604
+* https://github.com/tmk/tmk_keyboard/issues/248
+
+
+## メカニカルロックスイッãƒã®ã‚µãƒãƒ¼ãƒˆ
+
+ã“ã®æ©Ÿèƒ½ã¯ [Alps](http://deskthority.net/wiki/Alps_SKCL_Lock) ã®ã‚ˆã†ãª*メカニカルロックスイッãƒ*用ã§ã™ã€‚以下を `config.h` ã«è¿½åŠ ã™ã‚‹ã“ã¨ã§æœ‰åŠ¹ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+
+```
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+```
+
+ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã—ãŸå¾Œã§ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã§ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ `KC_LCAP`ã€`KC_LNUM` ãŠã‚ˆã³ `KC_LSCR` を使ã„ã¾ã™ã€‚
+
+å¤ã„ビンテージメカニカルキーボードã«ã¯ãƒ­ãƒƒã‚¯ã‚¹ã‚¤ãƒƒãƒãŒä»˜ã„ã¦ã„ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ãŒã€æœ€æ–°ã®ã‚‚ã®ã«ã¯ã‚ã‚Šã¾ã›ã‚“。***ã»ã¨ã‚“ã©ã®å ´åˆã“ã®æ©Ÿèƒ½ã¯å¿…è¦ãªãã€å˜ã«ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ `KC_CAPS`ã€`KC_NLCK` ãŠã‚ˆã³ `KC_SLCK`*** を使ã„ã¾ã™ã€‚
+
+## セディーユ 'Ç' ã®ã‚ˆã†ãª ASCII 以外ã®ç‰¹åˆ¥æ–‡å­—ã®å…¥åŠ›
+
+[ユニコード](ja/feature_unicode.md) 機能を見ã¦ãã ã•ã„。
+
+## macOS ã§ã® `Fn` キー
+
+ã»ã¨ã‚“ã©ã® Fn キーã¨ç•°ãªã‚Šã€Apple ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® Fn キーã«ã¯å®Ÿéš›ã«ã¯ç‹¬è‡ªã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚基本的㪠6KRO HID レãƒãƒ¼ãƒˆã®6番目ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®ä»£ã‚ã‚Šã«ãªã‚Šã¾ã™ -- ã¤ã¾ã‚Šã€Apple キーボードã¯å®Ÿéš›ã«ã¯ 5KRO ã®ã¿ã§ã™ã€‚
+
+QMK ã«ã“ã®ã‚­ãƒ¼ã‚’é€ä¿¡ã•ã›ã‚‹ã“ã¨ã¯æŠ€è¡“çš„ã«å¯èƒ½ã§ã™ã€‚ãŸã ã—ã€ãã†ã™ã‚‹ã«ã¯ Fn キーã®çŠ¶æ…‹ã‚’追加ã™ã‚‹ãŸã‚ã«ãƒ¬ãƒãƒ¼ãƒˆå½¢å¼ã®ä¿®æ­£ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚
+ã•ã‚‰ã«æ‚ªã„ã“ã¨ã«ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® VID 㨠PID ãŒå®Ÿéš›ã® Apple ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚‚ã®ã¨ä¸€è‡´ã—ãªã„é™ã‚Šã€èªè­˜ã•ã‚Œã¾ã›ã‚“。公å¼ã® QMK ãŒã“ã®æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã§æ³•çš„ãªå•é¡ŒãŒèµ·ãã‚‹ãŸã‚ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹ã“ã¨ã¯ãªã„ã§ã—ょã†ã€‚
+
+詳細ã«ã¤ã„ã¦ã¯ã€[ã“ã® issue](https://github.com/qmk/qmk_firmware/issues/2179) を見ã¦ãã ã•ã„。
+
+## Mac OSX ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹ã‚­ãƒ¼ã¯ï¼Ÿ
+ã“ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‹ã‚‰ã€ã©ã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ãŒ OSX ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹ã‹ã‚’知るã“ã¨ãŒã§ãã¾ã™ã€‚
+
+`usb_2_adb_keymap` é…列ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰/キーパッドページ㮠Page usages ã‚’ ADB スキャンコード(OSX 内部キーコード)ã«ãƒžãƒƒãƒ—ã—ã¾ã™ã€‚
+
+https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/Cosmo_USB2ADB.c
+
+`IOHIDConsumer::dispatchConsumerEvent` 㯠Consumer page usages を処ç†ã—ã¾ã™ã€‚
+
+https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/IOHIDConsumer.cpp
+
+
+## Mac OSX ã§ã® JIS キー
+`無変æ›(Muhenkan)`, `変æ›(Henkan)`, `ã²ã‚‰ãŒãª(hiragana)` ã®ã‚ˆã†ãªæ—¥æœ¬èªž JIS キーボード固有ã®ã‚­ãƒ¼ã¯ OSX ã§ã¯èªè­˜ã•ã‚Œã¾ã›ã‚“。**Seil** を使ã£ã¦ã“れらã®ã‚­ãƒ¼ã‚’使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã®ã‚ªãƒ—ションを試ã—ã¦ãã ã•ã„。
+
+* PC キーボード㧠NFER キーを有効ã«ã™ã‚‹
+* PC キーボード㧠XFER キーを有効ã«ã™ã‚‹
+* PC キーボード㧠KATAKANA キーを有効ã«ã™ã‚‹
+
+https://pqrs.org/osx/karabiner/seil.html
+
+
+## RN-42 Bluetooth ㌠Karabiner ã§å‹•ä½œã—ãªã„
+Karabiner - Mac OSX 上ã®ã‚­ãƒ¼ãƒžãƒƒãƒ”ングツール - ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ RN-42 モジュールã‹ã‚‰ã®å…¥åŠ›ã‚’無視ã—ã¾ã™ã€‚Karabiner をキーボードã§å‹•ä½œã•ã›ã‚‹ã«ã¯ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+https://github.com/tekezo/Karabiner/issues/403#issuecomment-102559237
+
+ã“ã®å•é¡Œã®è©³ç´°ã«ã¤ã„ã¦ã¯ã“れらを見ã¦ãã ã•ã„。
+https://github.com/tmk/tmk_keyboard/issues/213
+https://github.com/tekezo/Karabiner/issues/403
+
+
+## å˜ä¸€ã®ã‚­ãƒ¼ã§ã® Esc ã¨<code>&#96;</code>
+
+[Grave Escape](feature_grave_esc.md) 機能を見ã¦ãã ã•ã„。
+
+## Mac OSX ã§ã® Eject
+`KC_EJCT` キーコード㯠OSX ã§å‹•ä½œã—ã¾ã™ã€‚https://github.com/tmk/tmk_keyboard/issues/250
+Windows 10 ã¯ã‚³ãƒ¼ãƒ‰ã‚’無視ã—ã€Linux/Xorg ã¯èªè­˜ã—ã¾ã™ãŒã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯ãƒžãƒƒãƒ”ングãŒã‚ã‚Šã¾ã›ã‚“。
+
+実際㮠Apple キーボードã«ã‚ã‚‹ Eject キーコードã¯å®Ÿéš›ã«ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“。HHKB 㯠Mac モードã§ã¯ Eject キー (`Fn+f`) ã« `F20` を使ã„ã¾ã™ãŒã€ã“ã‚Œã¯ãŠãらã Apple ã® Eject キーコードã¨åŒã˜ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+
+
+## `action_util.c` ã® `weak_mods` 㨠`real_mods` ã¯ä½•ã‹
+___改善ã•ã‚Œã‚‹ã¹ãã§ã™___
+
+real_mods ã¯å®Ÿéš›ã®ç‰©ç†çš„ãªä¿®é£¾ã‚­ãƒ¼ã®çŠ¶æ…‹ã‚’ä¿æŒã™ã‚‹ã“ã¨ã‚’目的ã«ã—ã¦ã„ã¾ã™ãŒã€weak_mods ã¯å®Ÿéš›ã®ä¿®é£¾ã‚­ãƒ¼ã®çŠ¶æ…‹ã«å½±éŸ¿ã—ãªã„仮想ã‚ã‚‹ã„ã¯ä¸€æ™‚çš„ãªãƒ¢ãƒ‡ã‚£ãƒ•ã‚¡ã‚¤ã‚¢ã®çŠ¶æ…‹ã‚’ä¿æŒã—ã¾ã™ã€‚
+
+物ç†çš„ãªå·¦ã‚·ãƒ•ãƒˆã‚­ãƒ¼ã‚’押ã—ãªãŒã‚‰ ACTION_MODS_KEY(LSHIFT, KC_A) を入力ã™ã‚‹ã¨ã—ã¾ã™
+
+weak_mods ã§ã¯ã€
+* (1) 左シフトキーを押ã—続ã‘ã‚‹: real_mods |= MOD_BIT(LSHIFT)
+* (2) ACTION_MODS_KEY(LSHIFT, KC_A) を押ã™: weak_mods |= MOD_BIT(LSHIFT)
+* (3) ACTION_MODS_KEY(LSHIFT, KC_A) を放ã™: weak_mods &= ~MOD_BIT(LSHIFT)
+real_mods ã¯ãƒ¢ãƒ‡ã‚£ãƒ•ã‚¡ã‚¤ã‚¢ã®çŠ¶æ…‹ã‚’維æŒã—ã¾ã™ã€‚
+
+weak mods ç„¡ã—ã§ã¯ã€
+* (1) 左シフトキーを押ã—続ã‘ã‚‹: real_mods |= MOD_BIT(LSHIFT)
+* (2) ACTION_MODS_KEY(LSHIFT, KC_A) を押ã™: real_mods |= MOD_BIT(LSHIFT)
+* (3) ACTION_MODS_KEY(LSHIFT, KC_A) を放ã™: real_mods &= ~MOD_BIT(LSHIFT)
+ã“ã“ã§ã€real_mods 㯠'physical left shift' '物ç†çš„ãªå·¦ã‚·ãƒ•ãƒˆ' ã®çŠ¶æ…‹ã‚’見失ã„ã¾ã™ã€‚
+
+キーボードレãƒãƒ¼ãƒˆãŒé€ä¿¡ã•ã‚Œã‚‹æ™‚ã€weak_mods 㯠real_mods ã¨è«–ç†å’ŒãŒã¨ã‚‰ã‚Œã¾ã™ã€‚
+https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57
diff --git a/docs/ja/getting_started_getting_help.md b/docs/ja/getting_started_getting_help.md
new file mode 100644
index 0000000000..4b5d492faf
--- /dev/null
+++ b/docs/ja/getting_started_getting_help.md
@@ -0,0 +1,20 @@
+# 助ã‘ã‚’å¾—ã‚‹
+
+<!---
+ original document: d598f01cb:docs/getting_started_getting_help.md
+ git diff d598f01cb HEAD -- docs/getting_started_getting_help.md | cat
+-->
+
+QMK ã«é–¢ã—ã¦åŠ©ã‘ã‚’å¾—ã‚‹ãŸã‚ã®å¤šãã®ãƒªã‚½ãƒ¼ã‚¹ãŒã‚ã‚Šã¾ã™ã€‚
+
+## リアルタイム ãƒãƒ£ãƒƒãƒˆ
+
+メイン㮠[Discord server](https://discord.gg/Uq7gcHh) 㧠QMK ã®é–‹ç™ºè€…ã¨ãƒ¦ãƒ¼ã‚¶ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚サーãƒã«ã¯ã€ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã€Toolboxã€ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŠã‚ˆã³ Configurator ã«ã¤ã„ã¦ãƒãƒ£ãƒƒãƒˆã™ã‚‹ãŸã‚ã®ç‰¹å®šã®ãƒãƒ£ãƒ³ãƒãƒ«ãŒã‚ã‚Šã¾ã™ã€‚
+
+## OLKB Subreddit
+
+å…¬å¼ã® QMK フォーラム㯠[reddit.com](https://reddit.com) ã® [/r/olkb](https://reddit.com/r/olkb) ã§ã™ã€‚
+
+## Github Issues
+
+[GitHub 㧠issue](https://github.com/qmk/qmk_firmware/issues) ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã™ã€‚issue ãŒé•·æœŸçš„ãªè­°è«–ã‚ã‚‹ã„ã¯ãƒ‡ãƒãƒƒã‚°ã‚’å¿…è¦ã¨ã™ã‚‹å ´åˆã¯ã€ç‰¹ã«ä¾¿åˆ©ã§ã™ã€‚
diff --git a/docs/ja/getting_started_github.md b/docs/ja/getting_started_github.md
new file mode 100644
index 0000000000..261f1d3917
--- /dev/null
+++ b/docs/ja/getting_started_github.md
@@ -0,0 +1,70 @@
+# QMK 㧠Github を使ã†æ–¹æ³•
+
+<!---
+ original document: d598f01cb:docs/getting_started_github.md
+ git diff d598f01cb HEAD -- docs/getting_started_github.md | cat
+-->
+
+Github ã¯æ…£ã‚Œã¦ã„ãªã„人ã«ã¯å°‘ã—注æ„ãŒå¿…è¦ã§ã™ - ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€QMK ã«ãŠã‘るフォークã€ã‚¯ãƒ­ãƒ¼ãƒ³ã€ãƒ—ルリクエストã®ã‚µãƒ–ミットã®å„ステップã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚
+
+?> ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã‚ãªãŸãŒã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã®å®Ÿè¡Œã«ã‚る程度慣れã¦ãŠã‚Šã€ã‚·ã‚¹ãƒ†ãƒ ã« git ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’å‰æã«ã—ã¦ã„ã¾ã™ã€‚
+
+[QMK Github ページ](https://github.com/qmk/qmk_firmware)ã‚’é–‹ãã¨ã€å³ä¸Šã« "Fork" ã¨ã„ã†ãƒœã‚¿ãƒ³ãŒè¦‹ãˆã¾ã™:
+
+![Git ã§ã®ãƒ•ã‚©ãƒ¼ã‚¯](http://i.imgur.com/8Toomz4.jpg)
+
+ã‚ãªãŸãŒçµ„ç¹”ã®ä¸€å“¡ã§ã‚ã‚‹å ´åˆã¯ã€ã©ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãƒ•ã‚©ãƒ¼ã‚¯ã™ã‚‹ã‹ã‚’é¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ã»ã¨ã‚“ã©ã®å ´åˆã€ã‚ãªãŸã®å€‹äººã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãƒ•ã‚©ãƒ¼ã‚¯ã—ãŸã„ã§ã—ょã†ã€‚フォークãŒå®Œäº†ã—ãŸã‚‰(ã—ã°ã‚‰ã時間ãŒæŽ›ã‹ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™)ã€"Clone or Download" ボタンをクリックã—ã¾ã™:
+
+![Git ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰](http://i.imgur.com/N1NYcSz.jpg)
+
+å¿…ãš "HTTPS" ã‚’é¸æŠžã—ã€ãƒªãƒ³ã‚¯ã‚’é¸æŠžã—ã¦ã‚³ãƒ”ーã—ã¾ã™:
+
+![HTTPS リンク](http://i.imgur.com/eGO0ohO.jpg)
+
+ã“ã“ã‹ã‚‰ã€`git clone --recurse-submodules ` をコマンドラインã«å…¥åŠ›ã—ã€ãƒªãƒ³ã‚¯ã‚’貼り付ã‘ã¾ã™:
+
+```
+user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
+Cloning into 'qmk_firmware'...
+remote: Enumerating objects: 9, done.
+remote: Counting objects: 100% (9/9), done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
+Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
+Resolving deltas: 100% (119972/119972), done.
+...
+Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
+Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
+Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
+Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
+Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
+```
+
+ローカルマシン㫠QMK ã®ãƒ•ã‚©ãƒ¼ã‚¯ãŒã§ãã‚‹ã®ã§ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®è¿½åŠ ã€ã‚³ãƒ³ãƒ‘イルã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¸ã®æ›¸ãè¾¼ã¿ãŒã§ãã¾ã™ã€‚変更ã«æº€è¶³ã—ãŸã‚‰ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãれらをフォークã¸è¿½åŠ ã€ã‚³ãƒŸãƒƒãƒˆãŠã‚ˆã³ãƒ—ッシュã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+
+```
+user@computer:~$ git add .
+user@computer:~$ git commit -m "adding my keymap"
+[master cccb1608] adding my keymap
+ 1 file changed, 1 insertion(+)
+ create mode 100644 keyboards/planck/keymaps/mine/keymap.c
+user@computer:~$ git push
+Counting objects: 1, done.
+Delta compression using up to 4 threads.
+Compressing objects: 100% (1/1), done.
+Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
+Total 1 (delta 1), reused 0 (delta 0)
+remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
+To https://github.com/whoeveryouare/qmk_firmware.git
+ + 20043e64...7da94ac5 master -> master
+```
+
+ã‚ãªãŸã®å¤‰æ›´ã¯ä»Šã§ã¯ Github 上ã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ã‚ã‚Šã¾ã™ - フォーク (`https://github.com/<whoeveryouare>/qmk_firmware`)ã«æˆ»ã‚‹ã¨ã€"New Pull Request" ボタンをクリックã™ã‚‹ã“ã¨ã§æ–°ã—ã„プルリクエストを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+
+![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
+
+ã“ã“ã§ã¯ã€ã‚³ãƒŸãƒƒãƒˆã—ãŸå†…容を正確ã«ç¢ºèªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ - å…¨ã¦è‰¯ã„よã†ã«è¦‹ãˆã‚‹å ´åˆã¯ã€"Create Pull Request" をクリックã™ã‚‹ã“ã¨ã§æœ€çµ‚çš„ã«æ‰¿èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
+
+![Create Pull Request](http://i.imgur.com/Ojydlaj.jpg)
+
+サブミットã®å¾Œã§ã€ç§ãŸã¡ã¯ã‚ãªãŸã®å¤‰æ›´ã«ã¤ã„ã¦è©±ã—ã€å¤‰æ›´ã‚’ä¾é ¼ã—ã€æœ€çµ‚çš„ã«ãれをå—ã‘入れるã§ã—ょã†ï¼QMK ã«è²¢çŒ®ã—ã¦ãã‚Œã¦ã‚ã‚ŠãŒã¨ã† :)
diff --git a/docs/ja/getting_started_introduction.md b/docs/ja/getting_started_introduction.md
new file mode 100644
index 0000000000..b4f8b574da
--- /dev/null
+++ b/docs/ja/getting_started_introduction.md
@@ -0,0 +1,65 @@
+# ã¯ã˜ã‚ã«
+
+<!---
+ original document: d598f01cb:docs/getting_started_introduction.md
+ git diff d598f01cb HEAD -- docs/getting_started_introduction.md | cat
+-->
+
+ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€QMK プロジェクトã§ä½œæ¥­ã™ã‚‹ãŸã‚ã«çŸ¥ã£ã¦ãŠãã¹ã基本的ãªæƒ…å ±ã«ã¤ã„ã¦èª¬æ˜Žã—よã†ã¨æ€ã„ã¾ã™ã€‚Unix シェルã®æ“作ã«ç²¾é€šã—ã¦ã„ã‚‹ã“ã¨ã‚’å‰æã¨ã—ã¦ã„ã¾ã™ãŒã€C ã«ã¤ã„ã¦ã€ã¾ãŸã¯ make を使ã£ãŸã‚³ãƒ³ãƒ‘イルã«ã¤ã„ã¦ç²¾é€šã—ã¦ã„ã‚‹ã¨ã¯æƒ³å®šã—ã¦ã„ã¾ã›ã‚“。
+
+## 基本的㪠QMK ã®æ§‹é€ 
+
+QMK 㯠[Jun Wako](https://github.com/tmk) ã® [tmk_keyboard](https://github.com/tmk/tmk_keyboard) プロジェクトã®ãƒ•ã‚©ãƒ¼ã‚¯ã§ã™ã€‚変更ã•ã‚ŒãŸå…ƒã® TMK コードã¯ã€`tmk_core` フォルダã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚プロジェクトã¸ã® QMK ã®è¿½åŠ ã¯ã€`quantum` フォルダã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚キーボードプロジェクト㯠`handwired` ãŠã‚ˆã³ `keyboard` フォルダã§è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+### ユーザスペースã®æ§‹é€ 
+
+`users` フォルダ内ã¯å„ユーザã®ãŸã‚ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚ã“ã‚Œã¯ãƒ¦ãƒ¼ã‚¶ãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰é–“ã§ä½¿ã†ã‹ã‚‚ã—ã‚Œãªã„コードを置ããŸã‚ã®ãƒ•ã‚©ãƒ«ãƒ€ã§ã™ã€‚詳細ã¯[ユーザスペース機能](ja/feature_userspace.md) ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’見ã¦ãã ã•ã„。
+
+### キーボードプロジェクトã®æ§‹é€ 
+
+`keyboards` フォルダã€ãã®ã‚µãƒ–フォルダ `handwired`ã€ãƒ™ãƒ³ãƒ€ã¨è£½å“ã®ã‚µãƒ–ディレクトリ (例ãˆã°ã€`clueboard`) ã®ä¸­ã«ã¯ã€å„キーボードプロジェクトã®ãŸã‚ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª (例ãˆã° `qmk_firmware/keyboards/clueboard/2x1800`) ãŒã‚ã‚Šã¾ã™ã€‚ãã®ä¸­ã«ã¯ã€ä»¥ä¸‹ã®æ§‹é€ ãŒã‚ã‚Šã¾ã™:
+
+* `keymaps/`: ビルドã§ãる様々ãªã‚­ãƒ¼ãƒžãƒƒãƒ—
+* `rules.mk`: デフォルト㮠"make" オプションを設定ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã€‚ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’直接編集ã—ãªã„ã§ãã ã•ã„。代ã‚ã‚Šã«ã‚­ãƒ¼ãƒžãƒƒãƒ—固有㮠`rules.mk` を使ã£ã¦ãã ã•ã„。
+* `config.h`: デフォルトã®ã‚³ãƒ³ãƒ‘イル時ã®ã‚ªãƒ—ションを設定ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã€‚ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’直接編集ã—ãªã„ã§ãã ã•ã„。代ã‚ã‚Šã«ã‚­ãƒ¼ãƒžãƒƒãƒ—固有㮠`config.h` を使ã£ã¦ãã ã•ã„。
+* `info.json`: QMK Configurator ã®ãŸã‚ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã®è¨­å®šã«ä½¿ã‚れるファイル。詳細㯠[Configurator サãƒãƒ¼ãƒˆ](ja/reference_configurator_support.md)を見ã¦ãã ã•ã„。
+* `readme.md`: キーボードã®ç°¡å˜ãªæ¦‚è¦
+* `<keyboardName>.h`: ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚¹ã‚¤ãƒƒãƒãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã«å¯¾ã—ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒå®šç¾©ã•ã‚Œã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ã€‚
+* `<keyboardName>.c`: ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãŸã‚ã®ã‚«ã‚¹ã‚¿ãƒ ã‚³ãƒ¼ãƒ‰ãŒã‚ã‚Šã¾ã™ã€‚
+
+プロジェクトã®æ§‹é€ ã«ã¤ã„ã¦ã®è©³ç´°ã¯ã€[QMK キーボードガイドライン](ja/hardware_keyboard_guidelines.md)を見ã¦ãã ã•ã„。
+
+### キーマップ構造
+
+å…¨ã¦ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—フォルダã«ã¯ã€ä»¥ä¸‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã™ã€‚`keymap.c` ã ã‘ãŒå¿…é ˆã§ã€æ®‹ã‚Šã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚ªãƒ—ションãŒé¸æŠžã•ã‚Œã¾ã™ã€‚
+
+* `config.h`: キーマップを設定ã™ã‚‹ãŸã‚ã®ã‚ªãƒ—ション
+* `keymap.c`: å…¨ã¦ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—コード。必須
+* `rules.mk`: 有効ã«ãªã£ã¦ã„ã‚‹ QMK ã®æ©Ÿèƒ½
+* `readme.md`: キーマップã®èª¬æ˜Žã€‚ä»–ã®äººãŒä½¿ã†æ–¹æ³•ãŠã‚ˆã³æ©Ÿèƒ½ã®èª¬æ˜Žã€‚imgur ã®ã‚ˆã†ãªã‚µãƒ¼ãƒ“スã«ç”»åƒã‚’アップロードã—ã¦ãã ã•ã„。
+
+# `config.h` ファイル
+
+3ã¤ã® `config.h` ã®å ´æ‰€ãŒè€ƒãˆã‚‰ã‚Œã¾ã™:
+
+* キーボード (`/keyboards/<keyboard>/config.h`)
+* ユーザスペース (`/users/<user>/config.h`)
+* キーマップ (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
+
+ビルドシステムã¯è‡ªå‹•çš„ã«ä¸Šã®é †ã« config ファイルをå–å¾—ã—ã¾ã™ã€‚å‰ã® `config.h` ã§è¨­å®šã•ã‚ŒãŸè¨­å®šã‚’上書ãã—ãŸã„å ´åˆã¯ã€å¤‰æ›´ã—ãŸã„設定ã®æº–å‚™ã®ãŸã‚ã«æœ€åˆã«å®šåž‹ã‚³ãƒ¼ãƒ‰ã‚’ç½®ãå¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+```
+#pragma once
+```
+
+次ã«ã€å‰ã® `config.h` ファイルã®è¨­å®šã‚’上書ãã™ã‚‹ãŸã‚ã«ã€è¨­å®šã‚’ `#undef` ã—å†ã³ `#define` ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+定型コードã¨è¨­å®šã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™:
+
+```
+#pragma once
+
+// ã“ã“ã«ä¸Šæ›¸ãã—ã¾ã™ï¼
+#undef MY_SETTING
+#define MY_SETTING 4
+```
diff --git a/docs/ja/newbs.md b/docs/ja/newbs.md
index d1043a4a16..465b82106d 100644
--- a/docs/ja/newbs.md
+++ b/docs/ja/newbs.md
@@ -2,8 +2,8 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
- original document: ed0575fc8:docs/newbs.md
- git diff ed0575fc8 HEAD docs/newbs.md | cat
+ original document: adf4acf59:docs/newbs.md
+ git diff adf4acf59 HEAD -- docs/newbs.md | cat
-->
QMK ã¯ã€ãƒ¡ã‚«ãƒ‹ã‚«ãƒ«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã®å¼·åŠ›ãªã‚ªãƒ¼ãƒ—ンソースファームウェアã§ã™ã€‚
@@ -19,18 +19,18 @@ QMK ã¯[多ãã®è¶£å‘³ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰](http://qmk.fm/keyboards/)をサãƒãƒ¼
ã“ã®ã‚¬ã‚¤ãƒ‰ã«ã¯7ã¤ã®ä¸»è¦ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒã‚ã‚Šã¾ã™ã€‚
-* [ã¯ã˜ã‚ã«](newbs_getting_started.md)
-* [コマンドラインを使用ã—ã¦åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’構築ã™ã‚‹](newbs_building_firmware.md)
-* [オンライン GUI を使用ã—ã¦åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’構築ã™ã‚‹](newbs_building_firmware_configurator.md)
-* [ファームウェアを書ãã“ã‚€](newbs_flashing.md)
-* [テストã¨ãƒ‡ãƒãƒƒã‚°](newbs_testing_debugging.md)
-* [QMK ã«ãŠã‘ã‚‹ Git é‹ç”¨ä½œæ³•](newbs_best_practices.md)
-* [ã•ã‚‰ã«å­¦ã¶ãŸã‚ã®å­¦ç¿’リソース](newbs_learn_more_resources.md)
+* [ã¯ã˜ã‚ã«](ja/newbs_getting_started.md)
+* [コマンドラインを使用ã—ã¦åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’構築ã™ã‚‹](ja/newbs_building_firmware.md)
+* [オンライン GUI を使用ã—ã¦åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’構築ã™ã‚‹](ja/newbs_building_firmware_configurator.md)
+* [ファームウェアを書ãã“ã‚€](ja/newbs_flashing.md)
+* [テストã¨ãƒ‡ãƒãƒƒã‚°](ja/newbs_testing_debugging.md)
+* [QMK ã«ãŠã‘ã‚‹ Git é‹ç”¨ä½œæ³•](ja/newbs_git_best_practices.md)
+* [ã•ã‚‰ã«å­¦ã¶ãŸã‚ã®å­¦ç¿’リソース](ja/newbs_learn_more_resources.md)
ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€ã“ã‚Œã¾ã§ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’コンパイルã—ãŸã“ã¨ãŒãªã„人を支æ´ã™ã‚‹ã“ã¨ã«ç‰¹åŒ–ã—ã¦ã„ã¾ã™ã€‚
ãã®è¦³ç‚¹ã‹ã‚‰é¸æŠžã¨æŽ¨å¥¨ã‚’è¡Œã„ã¾ã™ã€‚
ã“れらã®æ‰‹é †ã®å¤šãã«ã¯ä»£æ›¿æ–¹æ³•ãŒã‚ã‚Šã€ã“れらã®ä»£æ›¿æ–¹æ³•ã®ã»ã¨ã‚“ã©ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚
-タスクをé”æˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ç–‘å•ãŒã‚ã‚‹å ´åˆã¯ã€[案内を求ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™](getting_started_getting_help.md)。
+タスクをé”æˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ç–‘å•ãŒã‚ã‚‹å ´åˆã¯ã€[案内を求ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™](ja/getting_started_getting_help.md)。
## 追加ã®ãƒªã‚½ãƒ¼ã‚¹(英語)
diff --git a/docs/ja/newbs_best_practices.md b/docs/ja/newbs_best_practices.md
deleted file mode 100644
index 2e90ffcabe..0000000000
--- a/docs/ja/newbs_best_practices.md
+++ /dev/null
@@ -1,263 +0,0 @@
-<!-- # Best Practices -->
-# QMK ã«ãŠã‘ã‚‹ Git é‹ç”¨ä½œæ³•
-
-<!---
- grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
- original document: e75919960:docs/newbs_best_practices.md
- git diff e75919960 HEAD docs/newbs_best_practices.md | cat
--->
-
-<!-- ## Or, "How I Learned to Stop Worrying and Love Git." -->
-## ã¾ãŸã¯ã€å¦‚何ã«ã—ã¦ç§ã¯å¿ƒé…ã™ã‚‹ã“ã¨ã‚’ã‚„ã‚㦠Git ã‚’æ„›ã™ã‚‹ã“ã¨ã‚’学んã ã‹ã€‚
-
-<!-- _Almost the same as #7231:25fdbf2a0:newbs_git_best_practices.md L5_ -->
-<!-- This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them. -->
-ã“ã®æ–‡æ›¸ã¯ã€QMK ã¸ã®è²¢çŒ®ã‚’スムーズã«è¡Œãªã†æœ€ã‚‚よã„方法をåˆå¿ƒè€…ã«æ•™ãˆã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚
-QMK ã«è²¢çŒ®ã™ã‚‹ãƒ—ロセスを順を追ã£ã¦èª¬æ˜Žã—ã€ã“ã®ä½œæ¥­ã‚’ç°¡å˜ã«ã™ã‚‹ã„ãã¤ã‹ã®æ–¹æ³•ã‚’詳ã—ã説明ã—ã¾ã™ã€‚
-ãã®å¾Œã€æ„図的ã«ä¸€éƒ¨ã‚’壊ã—ã¦ã¿ã›ã¦ã€ãれらを修正ã™ã‚‹æ–¹æ³•ã‚’æ•™ãˆã¾ã™ã€‚
-
-<!-- This document assumes a few things: -->
-ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ä»¥ä¸‹ã®ã“ã¨ã‚’å‰æã¨ã—ã¦ã„ã¾ã™:
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_best_practices.md L9_ -->
-<!-- 1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account. -->
-<!-- 2. You've [set up your build environment](newbs_getting_started.md?id=environment-setup). -->
-<!-- #7231:da7d49246: 2. You've set up both [your build environment](newbs_getting_started.md?id=set-up-your-environment) and [QMK](newbs_getting_started.md?id=set-up-qmk). -->
-
-1. ã‚ãªãŸã¯ GitHub アカウントãŒã‚ã‚Šã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã« [qmk_firmware リãƒã‚¸ãƒˆãƒªã‚’フォーク](getting_started_github.md) ã—ã¦ã„る。
-2. ã‚ãªãŸã¯ã€[環境構築](newbs_getting_started.md#環境構築) 㨠[QMK ã®è¨­å®š](newbs_getting_started.md#qmk-ã®è¨­å®š) を両方ã¨ã‚‚完了ã—ã¦ã„る。
-
-<!-- ## Your fork's master: Update Often, Commit Never -->
-## ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒ: æ›´æ–°ã¯é »ç¹ã«ã€ã‚³ãƒŸãƒƒãƒˆã¯ã—ãªã„ã“ã¨
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L3_ -->
-<!-- It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing. -->
-QMK ã®é–‹ç™ºã§ã¯ã€ä½•ãŒã©ã“ã§è¡Œã‚ã‚Œã¦ã„ã‚‹ã‹ã«ã‹ã‹ã‚らãšã€`master` ブランãƒã‚’最新ã®çŠ¶æ…‹ã«ä¿ã¤ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€ã—ã‹ã— `master` ブランãƒã«ã¯***絶対ã«ç›´æŽ¥ã‚³ãƒŸãƒƒãƒˆã—ãªã„ã§ãã ã•ã„***。
-代ã‚ã‚Šã«ã€ã‚ãªãŸã®ã™ã¹ã¦ã®å¤‰æ›´ã¯é–‹ç™ºãƒ–ランãƒã§è¡Œã„ã€ã‚ãªãŸãŒé–‹ç™ºã™ã‚‹æ™‚ã«ã¯ãã®ãƒ–ランãƒã‹ã‚‰ãƒ—ルリクエストを発行ã—ã¾ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L5_ -->
-<!-- To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch. -->
-マージã®ç«¶åˆ &mdash; ã“れ㯠2人以上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®åŒã˜éƒ¨åˆ†ã‚’ãã‚Œãžã‚Œç•°ãªã‚‹ç·¨é›†ã‚’ã—ã¦çµ±åˆã§ããªããªã£ãŸçŠ¶æ…‹ &mdash; ã®å¯èƒ½æ€§ã‚’減らã™ãŸã‚ `master` ブランãƒã‚’ãªã‚‹ã¹ã最新ã®çŠ¶æ…‹ã«ä¿ã¡ã€æ–°ã—ã„ブランãƒã‚’作æˆã—ã¦æ–°ã—ã„開発を開始ã—ã¾ã™ã€‚
-
-<!-- ### Updating your master branch -->
-### ã‚ãªãŸã® master ブランãƒã‚’æ›´æ–°ã™ã‚‹
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L9_ -->
-<!-- To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter: -->
-`master` ブランãƒã‚’最新ã®çŠ¶æ…‹ã«ä¿ã¤ã«ã¯ã€git ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã¨ã—㦠QMK ファームウェアã®ãƒªãƒã‚¸ãƒˆãƒª(以é™ã€QMK リãƒã‚¸ãƒˆãƒª)を追加ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
-ã“れを行ã†ã«ã¯ã€Git コマンドラインインターフェイスを開ãã€æ¬¡ã®ã‚ˆã†ã«å…¥åŠ›ã—ã¾ã™ã€‚
-
-```
-git remote add upstream https://github.com/qmk/qmk_firmware.git
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L15_ -->
-<!-- To verify that the repository has been added, run `git remote -v`, which should return the following: -->
-リãƒã‚¸ãƒˆãƒªãŒè¿½åŠ ã•ã‚ŒãŸã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€`git remote -v` を実行ã—ã¾ã™ã€‚
-次ã®ã‚ˆã†ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚(訳注: `upstream` ã¯`上æµ`ã¨ã„ã†æ„味ã§ã™ã€‚)
-
-```
-$ git remote -v
-origin https://github.com/<your_username>/qmk_firmware.git (fetch)
-origin https://github.com/<your_username>/qmk_firmware.git (push)
-upstream https://github.com/qmk/qmk_firmware.git (fetch)
-upstream https://github.com/qmk/qmk_firmware.git (push)
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L25_ -->
-<!-- Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK. -->
-ã“ã‚ŒãŒå®Œäº†ã™ã‚‹ã¨ã€`git fetch upstream` を実行ã—ã¦ãƒªãƒã‚¸ãƒˆãƒªã®æ›´æ–°ã‚’確èªã§ãã¾ã™ã€‚
-ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ `upstream` ã¨ã„ã†ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã‚’æŒã¤ QMK リãƒã‚¸ãƒˆãƒªã‹ã‚‰ã€ãƒ–ランãƒã¨ã‚¿ã‚° &mdash; "refs" ã¨ç·ç§°ã•ã‚Œã¾ã™ &mdash; ã‚’å–å¾—ã—ã¾ã™ã€‚
-ã“ã‚Œã§ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ `origin` ã®ãƒ‡ãƒ¼ã‚¿ã‚’ QMK ãŒä¿æŒã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¨æ¯”較ã§ãã¾ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L27_ -->
-<!-- To update your fork's master, run the following, hitting the Enter key after each line: -->
-ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® `master` ã‚’æ›´æ–°ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€å„è¡Œã®å¾Œã«Enterキーを押ã—ã¦ãã ã•ã„:
-
-```
-git checkout master
-git fetch upstream
-git pull upstream master
-git push origin master
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L36_ -->
-<!-- This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork. -->
-ã“ã‚Œã«ã‚ˆã‚Šã€ã‚ãªãŸã® `master` ブランãƒã«åˆ‡ã‚Šæ›¿ã‚ã‚Šã€QMK リãƒã‚¸ãƒˆãƒªã‹ã‚‰ 'refs' ã‚’å–å¾—ã—ã€ç¾åœ¨ã® QMK ã® `master` ブランãƒã‚’コンピュータã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ã‹ã‚‰ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ã‚¢ãƒƒãƒ—ロードã—ã¾ã™ã€‚
-
-<!-- ### Making Changes -->
-### 変更を行ãªã†
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L40_ -->
-<!-- To make changes, create a new branch by entering: -->
-変更ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’入力ã—ã¦æ–°ã—ã„ブランãƒã‚’作æˆã—ã¾ã™:
-
-```
-git checkout -b dev_branch
-git push --set-upstream origin dev_branch
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L47_ -->
-<!-- This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments. -->
-ã“ã‚Œã«ã‚ˆã‚Šã€`dev_branch` ã¨ã„ã†åå‰ã®æ–°ã—ã„ブランãƒãŒä½œæˆã•ã‚Œã€ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã€æ–°ã—ã„ブランãƒãŒã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ä¿å­˜ã•ã‚Œã¾ã™ã€‚
-`--set-upstream` 引数ã¯ã€ã“ã®ãƒ–ランãƒã‹ã‚‰ `git push` ã¾ãŸã¯ `git pull` を使用ã™ã‚‹ãŸã³ã«ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã¨ `dev_branch` ブランãƒã‚’使用ã™ã‚‹ã‚ˆã†ã« git ã«æŒ‡ç¤ºã—ã¾ã™ã€‚
-ã“ã®å¼•æ•°ã¯æœ€åˆã®ãƒ—ッシュã§ã®ã¿ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
-ãã®å¾Œã€æ®‹ã‚Šã®å¼•æ•°ãªã—㧠`git push` ã¾ãŸã¯ `git pull` を安全ã«ä½¿ç”¨ã§ãã¾ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L49_ -->
-<!-- With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`. -->
-!> `git push` ã§ã¯ã€`-set-upstream` ã®ä»£ã‚ã‚Šã« `-u` を使用ã§ãã¾ã™ã€ `-u` 㯠`--set-upstream` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L51_ -->
-<!-- You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make. -->
-ブランãƒã«ã¯ã»ã¼ä»»æ„ã®åå‰ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ã‚ãªãŸãŒè¡Œãªã†å¤‰æ›´ã‚’表ã™åå‰ã‚’付ã‘ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L53_ -->
-<!-- By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command: -->
-デフォルトã§ã¯ã€`git checkout -b`ã¯ã€ä»Šãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã¦ã„るブランãƒã«åŸºã¥ã„ã¦æ–°ã—ã„ブランãƒã‚’作æˆã—ã¾ã™ã€‚
-コマンド末尾ã«æ—¢å­˜ã®ãƒ–ランãƒã®åå‰ã‚’追加指定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã¦ã„ãªã„既存ã®ãƒ–ランãƒã‚’基ã«ã—ã¦æ–°ã—ã„ブランãƒã‚’作æˆã§ãã¾ã™:
-
-```
-git checkout -b dev_branch master
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L59_ -->
-<!-- Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch: -->
-ã“ã‚Œã§é–‹ç™ºãƒ–ランãƒãŒã§ããŸã®ã§ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ãå¿…è¦ãªå¤‰æ›´ã‚’加ãˆã¾ã™ã€‚
-ブランãƒã«å¯¾ã—ã¦å¤šãã®å°ã•ãªã‚³ãƒŸãƒƒãƒˆã‚’è¡Œã†ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
-ãã†ã™ã‚‹ã“ã¨ã§ã€å•é¡Œã‚’引ãèµ·ã“ã™å¤‰æ›´ã‚’より簡å˜ã«ç‰¹å®šã—å¿…è¦ã«å¿œã˜ã¦å…ƒã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
-変更を加ãˆã‚‹ã«ã¯ã€æ›´æ–°ãŒå¿…è¦ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¦ä¿å­˜ã—ã€Git ã® *ステージングエリア* ã«è¿½åŠ ã—ã¦ã‹ã‚‰ã€ãƒ–ランãƒã«ã‚³ãƒŸãƒƒãƒˆã—ã¾ã™:
-
-```
-git add path/to/updated_file
-git commit -m "My commit message."
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L66_ -->
-<!-- `git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance. -->
-`git add`ã¯ã€å¤‰æ›´ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ Git ã® *ステージングエリア* ã«è¿½åŠ ã—ã¾ã™ã€‚
-ã“ã‚Œã¯ã€Git ã®ã€Œãƒ­ãƒ¼ãƒ‰ã‚¾ãƒ¼ãƒ³ã€ã§ã™ã€‚
-ã“ã‚Œã«ã¯ã€`git commit` ã«ã‚ˆã£ã¦ *コミット* ã•ã‚Œã‚‹å¤‰æ›´ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãƒªãƒã‚¸ãƒˆãƒªã¸ã®å¤‰æ›´ãŒä¿å­˜ã•ã‚Œã¾ã™ã€‚
-変更内容ãŒä¸€ç›®ã§ã‚ã‹ã‚‹ã‚ˆã†ã«ã€èª¬æ˜Žçš„ãªã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’使用ã—ã¾ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L68_ -->
-<!-- !> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually. -->
-!> 多ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’変更ã—ãŸãŒã€ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒåŒã˜å¤‰æ›´ã®ä¸€éƒ¨ã§ã‚ã‚‹å ´åˆã€å„ファイルを個別ã«è¿½åŠ ã™ã‚‹ã®ã§ã¯ãªã〠`git add .` を使用ã—ã¦ã€ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚ã‚‹ã™ã¹ã¦ã®å¤‰æ›´ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã§ãã¾ã™ã€‚
-
-<!-- ### Publishing Your Changes -->
-### 変更を公開ã™ã‚‹
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L72_ -->
-<!-- The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork. -->
-最後ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€å¤‰æ›´ã‚’フォークã«ãƒ—ッシュã™ã‚‹ã“ã¨ã§ã™ã€‚ã“れを行ã†ã«ã¯ã€`git push`ã¨å…¥åŠ›ã—ã¾ã™ã€‚
-Git 㯠`dev_branch` ã®ç¾åœ¨ã®çŠ¶æ…‹ã‚’フォークã«å…¬é–‹ã—ã¾ã™ã€‚
-
-<!-- ## Resolving Merge Conflicts -->
-## マージã®ç«¶åˆã®è§£æ±º
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L3_ -->
-<!-- Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files. -->
-ブランãƒã§ã®ä½œæ¥­ã®å®Œäº†ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆã€ä»–ã®äººãŒè¡Œã£ãŸå¤‰æ›´ãŒã€ãƒ—ルリクエストを開ã„ãŸã¨ãã«ãƒ–ランãƒã«åŠ ãˆãŸå¤‰æ›´ã¨ç«¶åˆã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
-ã“れ㯠*マージã®ç«¶åˆ* ã¨å‘¼ã°ã‚Œã€è¤‡æ•°ã®äººãŒåŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã®åŒã˜éƒ¨åˆ†ã‚’編集ã™ã‚‹ã¨ç™ºç”Ÿã—ã¾ã™ã€‚
-
-<!-- ### Rebasing Your Changes -->
-### 変更ã®ãƒªãƒ™ãƒ¼ã‚¹
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L9_ -->
-<!-- A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time. -->
-*リベース* ã¯ã€ã‚る時点ã§é©ç”¨ã•ã‚ŒãŸå¤‰æ›´ã‚’å–å¾—ã—ã€ãれらを元ã«æˆ»ã—ã€æ¬¡ã«åŒã˜å¤‰æ›´ã‚’別ã®ãƒã‚¤ãƒ³ãƒˆã«é©ç”¨ã™ã‚‹ Git ã®æ–¹æ³•ã§ã™ã€‚
-マージã®ç«¶åˆãŒç™ºç”Ÿã—ãŸå ´åˆã€ãƒ–ランãƒã‚’リベースã—ã¦ã€ãƒ–ランãƒã‚’作æˆã—ã¦ã‹ã‚‰ç¾åœ¨ã¾ã§ã«è¡Œã‚ã‚ŒãŸå¤‰æ›´ã‚’å–å¾—ã§ãã¾ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L11_ -->
-<!-- To start, run the following: -->
-開始ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™:
-
-```
-git fetch upstream
-git rev-list --left-right --count HEAD...upstream/master
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L18_ -->
-<!-- The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers: -->
-ã“ã“ã«å…¥åŠ›ã•ã‚ŒãŸ `git rev-list` コマンドã¯ã€ç¾åœ¨ã®ãƒ–ランãƒã¨ QMK ã® master ブランãƒã§ç•°ãªã‚‹ã‚³ãƒŸãƒƒãƒˆã®æ•°ã‚’è¿”ã—ã¾ã™ã€‚
-最åˆã« `git fetch` を実行ã—ã¦ã€upstream リãƒã‚¸ãƒˆãƒªã®ç¾åœ¨ã®çŠ¶æ…‹ã‚’表㙠refs ãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚
-入力ã•ã‚ŒãŸ `git rev-list` コマンドã®å‡ºåŠ›ã¯2ã¤ã®æ•°å€¤ã‚’è¿”ã—ã¾ã™:
-
-```
-$ git rev-list --left-right --count HEAD...upstream/master
-7 35
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L25_ -->
-<!-- The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch. -->
-最åˆã®æ•°å­—ã¯ã€ç¾åœ¨ã®ãƒ–ランãƒãŒä½œæˆã•ã‚Œã¦ã‹ã‚‰ã®ã‚³ãƒŸãƒƒãƒˆæ•°ã‚’表ã—ã€2番目ã®æ•°å­—ã¯ã€ç¾åœ¨ã®ãƒ–ランãƒãŒä½œæˆã•ã‚Œã¦ã‹ã‚‰ `upstream/master` ã«å¯¾ã—ã¦è¡Œã‚ã‚ŒãŸã‚³ãƒŸãƒƒãƒˆã®æ•°ã§ã‚ã‚Šã€ã—ãŸãŒã£ã¦ã€ç¾åœ¨ã®ãƒ–ランãƒã«è¨˜éŒ²ã•ã‚Œã¦ã„ãªã„変更ã§ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L27_-->
-<!-- Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation: -->
-ç¾åœ¨ã®ãƒ–ランãƒã¨ upstream リãƒã‚¸ãƒˆãƒªã®ä¸¡æ–¹ã®ç¾åœ¨ã®çŠ¶æ…‹ãŒã‚ã‹ã£ãŸã®ã§ã€ãƒªãƒ™ãƒ¼ã‚¹æ“作を開始ã§ãã¾ã™:
-
-```
-git rebase upstream/master
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L33_ -->
-<!-- This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch. -->
-ã“ã‚Œã«ã‚ˆã‚Šã€Git ã¯ç¾åœ¨ã®ãƒ–ランãƒã®ã‚³ãƒŸãƒƒãƒˆã‚’å–り消ã—ã¦ã‹ã‚‰ã€QMK ã® master ブランãƒã«å¯¾ã—ã¦ã‚³ãƒŸãƒƒãƒˆã‚’å†é©ç”¨ã—ã¾ã™ã€‚
-
-```
-$ git rebase upstream/master
-First, rewinding head to replay your work on top of it...
-Applying: Commit #1
-Using index info to reconstruct a base tree...
-M conflicting_file_1.txt
-Falling back to patching base and 3-way merge...
-Auto-merging conflicting_file_1.txt
-CONFLICT (content): Merge conflict in conflicting_file_1.txt
-error: Failed to merge in the changes.
-hint: Use 'git am --show-current-patch' to see the failed patch
-Patch failed at 0001 Commit #1
-
-Resolve all conflicts manually, mark them as resolved with
-"git add/rm <conflicted_files>", then run "git rebase --continue".
-You can instead skip this commit: run "git rebase --skip".
-To abort and get back to the state before "git rebase", run "git rebase --abort".
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L54_ -->
-<!-- This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this: -->
-ã“ã‚Œã«ã‚ˆã‚Šã€ãƒžãƒ¼ã‚¸ã®ç«¶åˆãŒã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã€ç«¶åˆã®ã‚るファイルã®åå‰ãŒç¤ºã•ã‚Œã¾ã™ã€‚
-テキストエディタã§ç«¶åˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãã¨ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®ã©ã“ã‹ã«æ¬¡ã®ã‚ˆã†ãªè¡ŒãŒã‚ã‚Šã¾ã™:
-
-```
-<<<<<<< HEAD
-<p>For help with any issues, email us at support@webhost.us.</p>
-=======
-<p>Need help? Email support@webhost.us.</p>
->>>>>>> Commit #1
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L64_ -->
-<!-- The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit. -->
-è¡Œ `<<<<<<< HEAD` ã¯ãƒžãƒ¼ã‚¸ç«¶åˆã®å§‹ã¾ã‚Šã‚’示ã—ã€è¡Œ `>>>>>>> commit #1` ã¯çµ‚了を示ã—ã€ç«¶åˆã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ `=======` ã§åŒºåˆ‡ã‚‰ã‚Œã¾ã™ã€‚
-`HEAD` å´ã®éƒ¨åˆ†ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã® QMK master ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰ã®ã‚‚ã®ã§ã‚ã‚Šã€ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ãƒžãƒ¼ã‚¯ã•ã‚ŒãŸéƒ¨åˆ†ã¯ç¾åœ¨ã®ãƒ–ランãƒã¨ã‚³ãƒŸãƒƒãƒˆã‹ã‚‰ã®ã‚‚ã®ã§ã™ã€‚
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L66_ -->
-<!-- Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file. -->
-Git ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容ã§ã¯ãªã *ファイルã¸ã®å¤‰æ›´* を直接追跡ã™ã‚‹ãŸã‚ã€Git ãŒã‚³ãƒŸãƒƒãƒˆã®å‰ã«ãƒ•ã‚¡ã‚¤ãƒ«å†…ã«ã‚ã£ãŸãƒ†ã‚­ã‚¹ãƒˆã‚’見ã¤ã‘られãªã„å ´åˆã€ãƒ•ã‚¡ã‚¤ãƒ«ã®ç·¨é›†æ–¹æ³•ãŒã‚ã‹ã‚Šã¾ã›ã‚“。
-ファイルをå†ç·¨é›†ã—ã¦ã€ç«¶åˆã‚’解決ã—ã¾ã™ã€‚
-変更を加ãˆã¦ã‹ã‚‰ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã—ã¾ã™ã€‚
-
-```
-<p>Need help? Email support@webhost.us.</p>
-```
-
-ãã—ã¦ã‚³ãƒžãƒ³ãƒ‰å®Ÿè¡Œ:
-
-```
-git add conflicting_file_1.txt
-git rebase --continue
-```
-
-<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L79_ -->
-<!-- Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end. -->
-Git ã¯ã€ç«¶åˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã¸ã®å¤‰æ›´ã‚’ログã«è¨˜éŒ²ã—ã€ãƒ–ランãƒã®ã‚³ãƒŸãƒƒãƒˆãŒæœ€å¾Œã«é”ã™ã‚‹ã¾ã§é©ç”¨ã—続ã‘ã¾ã™ã€‚
diff --git a/docs/ja/newbs_building_firmware.md b/docs/ja/newbs_building_firmware.md
index 5fb10d4243..bcbc64a218 100644
--- a/docs/ja/newbs_building_firmware.md
+++ b/docs/ja/newbs_building_firmware.md
@@ -2,8 +2,8 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
- original document: ed0575fc8:docs/newbs_building_firmware.md
- git diff ed0575fc8 HEAD docs/newbs_building_firmware.md | cat
+ original document: 0f43c2652:docs/newbs_building_firmware.md
+ git diff 0f43c2652 HEAD -- docs/newbs_building_firmware.md | cat
-->
ビルド環境をセットアップã—ãŸã®ã§ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®ãƒ“ルドを開始ã™ã‚‹æº–å‚™ãŒã§ãã¾ã—ãŸã€‚
@@ -56,7 +56,7 @@ macOS ã¾ãŸã¯ Windows を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—フォãƒ
ã“ã®è¡Œã¯ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®ãƒªã‚¹ãƒˆã®é–‹å§‹ã‚’表ã‚ã—ã¦ã„ã¾ã™ã€‚
ãã®ä¸‹ã«ã¯ã€`LAYOUT` ã¾ãŸã¯ `KEYMAP` ã®ã„ãšã‚Œã‹ã‚’å«ã‚€è¡ŒãŒã‚ã‚Šã€ã“れらã®è¡Œã¯ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®é–‹å§‹ã‚’表ã‚ã—ã¦ã„ã¾ã™ã€‚
-ãã®è¡Œã®ä¸‹ã«ã¯ã€ãã®ç‰¹å®šã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’構æˆã™ã‚‹ã‚­ãƒ¼ã®ãƒªã‚¹ãƒˆãŒã‚ã‚Šã¾ã™ã€‚
+ãã®è¡Œã®ä¸‹ã«ã¯ã€ãã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’構æˆã™ã‚‹ã‚­ãƒ¼ã®ãƒªã‚¹ãƒˆãŒã‚ã‚Šã¾ã™ã€‚
!> キーマップファイルを編集ã™ã‚‹ã¨ãã¯ã€ã‚«ãƒ³ãƒžã‚’追加ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã—ãªã„よã†ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãã†ã™ã‚‹ã¨ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®ã‚³ãƒ³ãƒ‘イルãŒã§ããªããªã‚Šã€ä½™åˆ†ã§ã‚ã£ãŸã‚Šæ¬ è½ã—ã¦ã„ãŸã‚Šã™ã‚‹ã‚«ãƒ³ãƒžãŒã©ã“ã«ã‚ã‚‹ã®ã‹ã‚’容易ã«æŠŠæ¡ã§ããªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚
@@ -67,9 +67,9 @@ macOS ã¾ãŸã¯ Windows を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—フォãƒ
ã‚るレイヤー全体ãŒå¿…è¦ãªã„å ´åˆã¯ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’削除ã™ã‚‹ã“ã¨ã‚‚ã§ãã€å¿…è¦ãŒã‚ã‚Œã°ã€åˆè¨ˆ 32 個ã¾ã§ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
ã“ã“ã§å®šç¾©ã§ãる内容ã«ã¤ã„ã¦ã¯ã€æ¬¡ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。
-* [キーコード](keycodes.md)
-* [機能](features.md)
-* [FAQ](faq.md)
+* [キーコード](ja/keycodes.md)
+* [機能](ja/features.md)
+* [FAQ](ja/faq.md)
?> キーマップãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã‚’æ„Ÿã˜ãªãŒã‚‰ã€å„変更をå°ã•ãã—ã¦ãã ã•ã„。大ããªå¤‰æ›´ã¯ã€ç™ºç”Ÿã™ã‚‹å•é¡Œã®ãƒ‡ãƒãƒƒã‚°ã‚’困難ã«ã—ã¾ã™ã€‚
@@ -96,4 +96,4 @@ Checking file size of planck_rev5_xyverz.hex
## ファームウェアを書ãã“ã‚€
-[「ファームウェアを書ãã“ã‚€ã€](newbs_flashing.md) ã«ç§»å‹•ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ–°ã—ã„ファームウェアを書ã込む方法を学習ã—ã¾ã™ã€‚
+[「ファームウェアを書ãã“ã‚€ã€](ja/newbs_flashing.md) ã«ç§»å‹•ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ–°ã—ã„ファームウェアを書ã込む方法を学習ã—ã¾ã™ã€‚
diff --git a/docs/ja/newbs_building_firmware_configurator.md b/docs/ja/newbs_building_firmware_configurator.md
index b44504ade4..ae3d3cf286 100644
--- a/docs/ja/newbs_building_firmware_configurator.md
+++ b/docs/ja/newbs_building_firmware_configurator.md
@@ -3,7 +3,7 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: ed0575fc8:docs/newbs_building_firmware_configurator.md
- git diff ed0575fc8 HEAD docs/newbs_building_firmware_configurator.md | cat
+ git diff ed0575fc8 HEAD -- docs/newbs_building_firmware_configurator.md | cat
-->
[QMK Configurator](https://config.qmk.fm) ã¯ã€QMKファームウェア㮠hex ファイルを生æˆã™ã‚‹ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã§ã™ã€‚
@@ -83,7 +83,7 @@ QMK Configurator 㯠Chrome/Firefox ã§æœ€é©ã«å‹•ä½œã—ã¾ã™ã€‚
## キーボードã«æ›¸ã込む(フラッシュã™ã‚‹)
-[ファームウェアを書ãã“ã‚€](newbs_flashing.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+[ファームウェアを書ãã“ã‚€](ja/newbs_flashing.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
## トラブルシューティング
diff --git a/docs/ja/newbs_flashing.md b/docs/ja/newbs_flashing.md
index 0c85514cf5..f2ca914ee4 100644
--- a/docs/ja/newbs_flashing.md
+++ b/docs/ja/newbs_flashing.md
@@ -3,7 +3,7 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: ed0575fc8:docs/newbs_flashing.md
- git diff ed0575fc8 HEAD docs/newbs_flashing.md | cat
+ git diff ed0575fc8 HEAD -- docs/newbs_flashing.md | cat
-->
カスタムファームウェアã¯å‡ºæ¥ãŸã®ã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ãè¾¼ã¿ãŸããªã‚‹ã§ã—ょã†/フラッシュã—ãŸããªã‚‹ã§ã—ょã†ã€‚
@@ -13,7 +13,7 @@
キーボードã«æ›¸ã込む最も簡å˜ãªæ–¹æ³•ã¯ [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) を使ã†ã“ã¨ã§ã™ã€‚
ãŸã ã—ã€QMK Toolbox ã¯ã€ç¾åœ¨ã¯ Windows 㨠macOS ã§ã—ã‹ä½¿ãˆã¾ã›ã‚“。
-Linuxを使用ã—ã¦ã„ã‚‹å ´åˆ(ãŠã‚ˆã³ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ãè¾¼ã¿ãŸã„å ´åˆ)ã¯ã€ä¸‹ã®æ–¹ã§æ¦‚説ã™ã‚‹[方法](newbs_flashing.md#コマンドラインã§ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ã込む)ã§è¡Œãªã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+Linuxを使用ã—ã¦ã„ã‚‹å ´åˆ(ãŠã‚ˆã³ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ãè¾¼ã¿ãŸã„å ´åˆ)ã¯ã€ä¸‹ã®æ–¹ã§æ¦‚説ã™ã‚‹[方法](ja/newbs_flashing.md#flash-your-keyboard-from-the-command-line)ã§è¡Œãªã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
### QMK Toolbox ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ロードã™ã‚‹
@@ -98,7 +98,7 @@ QMK Toolbox ã® `Flash` ボタンをクリックã—ã¾ã™ã€‚
*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
```
-## コマンドラインã§ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ã込む
+## コマンドラインã§ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’書ã込む :id=flash-your-keyboard-from-the-command-line
ã“ã‚Œã¯ã€ä»¥å‰ã®ã‚‚ã®ã¨æ¯”較ã—ã¦éžå¸¸ã«å˜ç´”ã«ãªã‚Šã¾ã—ãŸã€‚
ファームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
@@ -123,7 +123,7 @@ QMK Toolbox ã® `Flash` ボタンをクリックã—ã¾ã™ã€‚
ブートローダã¯ä¸»ã« 5 種類ã®ã‚‚ã®ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚
Pro Micro ã¨ãã®ã‚¯ãƒ­ãƒ¼ãƒ³ã¯ Caterina ã‚’ã€Teensy 㯠HalfKay ã‚’ã€OLKBã® AVR ボード㯠QMK-DFU ã‚’ã€ãã®ä»–ã® ATmega32U4 ボード㯠DFU ã‚’ã€ãã—ã¦å¤šãã® ARM ボード㯠ARM DFU を使ã„ã¾ã™ã€‚
-より詳ã—ã„ブートローダã®æƒ…å ±ã¯ã€[Flashing Instructions and Bootloader Information](flashing.md) ã«ã‚ã‚Šã¾ã™ã€‚
+より詳ã—ã„ブートローダã®æƒ…å ±ã¯ã€[Flashing Instructions and Bootloader Information](ja/flashing.md) ã«ã‚ã‚Šã¾ã™ã€‚
使用ã—ã¦ã„るブートローダãŒã‚ã‹ã£ã¦ã„ã‚‹ãªã‚‰ã°ã€ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’コンパイルã™ã‚‹ã¨ãã«ã€å®Ÿã¯ `make` コマンドã«ãƒ–ートローダを指定ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã—ã¦ã€æ›¸ãè¾¼ã¿ãƒ—ロセスを自動化ã§ãã¾ã™ã€‚
@@ -172,7 +172,7 @@ Checking file size of planck_rev5_xyverz.hex
>>> dfu-programmer atmega32u4 reset
```
-?> `dfu-programmer:no device present` ãªã©ã€ã“ã‚Œã«é–¢ã™ã‚‹å•é¡ŒãŒã‚ã‚‹å ´åˆã¯ã€[よãã‚る質å•](faq_build.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+?> `dfu-programmer:no device present` ãªã©ã€ã“ã‚Œã«é–¢ã™ã‚‹å•é¡ŒãŒã‚ã‚‹å ´åˆã¯ã€[よãã‚る質å•](ja/faq_build.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
#### DFU コマンド
@@ -397,4 +397,4 @@ Uploading 22016 (0x5600) bytes starting at 0 (0x0)
ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ カスタムファームウェアãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ãƒ—ログラムã•ã‚Œã¾ã—ãŸï¼
使ã£ã¦ã¿ã¦ã€ã™ã¹ã¦ãŒã‚ãªãŸã®æœ›ã‚€ã‚ˆã†ã«å‹•ä½œã™ã‚‹ã‹ã©ã†ã‹ç¢ºèªã—ã¦ãã ã•ã„。
-ã“ã®åˆå¿ƒè€…ガイドを完全ãªã‚‚ã®ã«ã™ã‚‹ãŸã‚ã« [テストã¨ãƒ‡ãƒãƒƒã‚°](newbs_testing_debugging.md) を書ã„ãŸã®ã§ã€ã‚«ã‚¹ã‚¿ãƒ æ©Ÿèƒ½ã®ãƒˆãƒ©ãƒ–ルシューティング方法ã«ã¤ã„ã¦ã¯ã€ã“ã¡ã‚‰ã‚’ã”覧ãã ã•ã„。
+ã“ã®åˆå¿ƒè€…ガイドを完全ãªã‚‚ã®ã«ã™ã‚‹ãŸã‚ã« [テストã¨ãƒ‡ãƒãƒƒã‚°](ja/newbs_testing_debugging.md) を書ã„ãŸã®ã§ã€ã‚«ã‚¹ã‚¿ãƒ æ©Ÿèƒ½ã®ãƒˆãƒ©ãƒ–ルシューティング方法ã«ã¤ã„ã¦ã¯ã€ã“ã¡ã‚‰ã‚’ã”覧ãã ã•ã„。
diff --git a/docs/ja/newbs_getting_started.md b/docs/ja/newbs_getting_started.md
index a57e6e054b..6f5cd92cd7 100644
--- a/docs/ja/newbs_getting_started.md
+++ b/docs/ja/newbs_getting_started.md
@@ -2,8 +2,8 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
- original document: docs/newbs_getting_started.md
- git diff 161d469 HEAD docs/newbs_getting_started.md | cat
+ original document: 161d469:docs/newbs_getting_started.md
+ git diff 161d469 HEAD -- docs/newbs_getting_started.md | cat
-->
キーボードã«ã¯ãƒ—ロセッサãŒå…¥ã£ã¦ãŠã‚Šã€ãã‚Œã¯ã‚³ãƒ³ãƒ”ュータã«å…¥ã£ã¦ã„ã‚‹ã‚‚ã®ã¨å¤§ã—ã¦é•ã‚ãªã„ã‚‚ã®ã§ã™ã€‚
@@ -20,7 +20,7 @@ QMK ã¯ã€ç°¡å˜ãªã“ã¨ã¯ç°¡å˜ã«ã€ãã—ã¦ã€é›£ã—ã„ã“ã¨ã‚’å¯èƒ½ãªã
ファームウェアをコンパイルã™ã‚‹ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æ•°ã«é–¢ã‚らãšã€ã“ã®ä½œæ¥­ã‚’一度ã ã‘実行ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
ã‚‚ã—ã€GUI ã§ä½œæ¥­ã‚’ã—ãŸã„å ´åˆã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ä½œæ¥­ã§ãã‚‹ [QMK Configurator](https://config.qmk.fm) を使ã£ã¦ãã ã•ã„。
-使ã„方㯠[Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+使ã„方㯠[オンライン GUI を使用ã—ã¦åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’構築ã™ã‚‹](ja/newbs_building_firmware_configurator.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
## ソフトウェアã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰
@@ -45,7 +45,7 @@ QMK Toolbox ã¯ã€Windows 㨠macOS ã§ä½¿ãˆã‚‹ GUI ã‚’å‚™ãˆãŸãƒ—ログラム
* Windows 版: `qmk_toolbox.exe` (portable) ã¾ãŸã¯ `qmk_toolbox_install.exe` (installer)
* macOS 版: `QMK.Toolbox.app.zip` (portable) ã¾ãŸã¯ `QMK.Toolbox.pkg` (installer)
-## 環境構築
+## 環境構築 :id=set-up-your-environment
ç§ãŸã¡ã¯ã€QMK ã‚’å¯èƒ½ãªé™ã‚Šç°¡å˜ã«æ§‹ç¯‰ã§ãるよã†ã«åŠªåŠ›ã—ã¦ã„ã¾ã™ã€‚
Linux ã‹ Unix 環境を用æ„ã™ã‚‹ã ã‘ã§ã€QMK ã«æ®‹ã‚Šã‚’インストールã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
@@ -77,9 +77,9 @@ Git ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¿…è¦ã§ã™ã€‚æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã
* Fedora / Red Hat / CentOS: `yum install git`
* Arch: `pacman -S git`
-?> å…¨ã¦ã®ãƒ—ラットフォームã«ãŠã„ã¦ã€Docker を使ã†ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚[詳細ã¯ã“ã¡ã‚‰ã‚’クリックã—ã¦ãã ã•ã„](getting_started_build_tools.md#docker)。
+?> å…¨ã¦ã®ãƒ—ラットフォームã«ãŠã„ã¦ã€Docker を使ã†ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚[詳細ã¯ã“ã¡ã‚‰ã‚’クリックã—ã¦ãã ã•ã„](ja/getting_started_build_tools.md#docker)。
-## QMK ã®è¨­å®š
+## QMK ã®è¨­å®š :id=set-up-qmk
Linux/Unix 環境ãŒæº–å‚™ã§ããŸã‚‰ QMK ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®æº–å‚™ã¯å®Œäº†ã§ã™ã€‚Git を使用ã—㦠QMK ã®ãƒªãƒã‚¸ãƒˆãƒªã‚’「クローンã€ã™ã‚‹ã“ã¨ã§ QMK をダウンロードã—ã¾ã™ã€‚ターミナル㋠MSYS2 MinGW ウィンドウを開ã„ã¦ã€ã“ã®ã‚¬ã‚¤ãƒ‰ã®æ®‹ã‚Šã®éƒ¨åˆ†ã§ã¯é–‹ã„ãŸã¾ã¾ã«ã—ã¾ã™ã€‚ãã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦å†…ã§ã€æ¬¡ã®2ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚
@@ -88,7 +88,7 @@ git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
```
-?> 既㫠[GitHub ã®ä½¿ã„ã‹ãŸ](getting_started_github.md)を知ã£ã¦ã„ã‚‹ãªã‚‰ã€clone ã§ã¯ãªã fork を勧ã‚ã¾ã™ã€‚ã“ã®ä¸€æ–‡ã®æ„味ãŒåˆ†ã‹ã‚‰ãªã„å ´åˆã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ç„¡è¦–ã—ã¦ã‹ã¾ã„ã¾ã›ã‚“。
+?> 既㫠[GitHub ã®ä½¿ã„ã‹ãŸ](ja/getting_started_github.md)を知ã£ã¦ã„ã‚‹ãªã‚‰ã€clone ã§ã¯ãªã fork を勧ã‚ã¾ã™ã€‚ã“ã®ä¸€æ–‡ã®æ„味ãŒåˆ†ã‹ã‚‰ãªã„å ´åˆã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ç„¡è¦–ã—ã¦ã‹ã¾ã„ã¾ã›ã‚“。
QMK ã«ã¯ã€å¿…è¦ãªæ®‹ã‚Šã®è¨­å®šã‚’手助ã‘ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
セットアップ作業を完了ã•ã›ã‚‹ãŸã‚ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚
@@ -119,4 +119,4 @@ Checking file size of clueboard_66_rev3_default.hex
# キーマップã®ä½œæˆ
ã“ã‚Œã§ã‚ãªãŸå°‚用ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã™ã‚‹æº–å‚™ãŒã§ãã¾ã—ãŸï¼
-次㯠[Building Your First Firmware](newbs_building_firmware.md) ã§å°‚用ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¾ã™ã€‚
+次㯠[Building Your First Firmware](ja/newbs_building_firmware.md) ã§å°‚用ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¾ã™ã€‚
diff --git a/docs/ja/newbs_git_best_practices.md b/docs/ja/newbs_git_best_practices.md
new file mode 100644
index 0000000000..4e20e4e0b0
--- /dev/null
+++ b/docs/ja/newbs_git_best_practices.md
@@ -0,0 +1,24 @@
+# QMK ã«ãŠã‘ã‚‹ Git é‹ç”¨ä½œæ³• :id=best-git-practices-for-working-with-qmk
+
+<!---
+ grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
+ original document: adf4acf59:docs/newbs_git_best_practices.md
+ git diff adf4acf59 HEAD -- docs/newbs_git_best_practices.md | cat
+-->
+
+## ã¾ãŸã¯ã€"如何ã«ã—ã¦ç§ã¯å¿ƒé…ã™ã‚‹ã“ã¨ã‚’ã‚„ã‚㦠Git ã‚’æ„›ã™ã‚‹ã“ã¨ã‚’学んã ã‹ã€‚"
+
+ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€QMK ã¸ã®è²¢çŒ®ã‚’スムーズã«è¡Œãªã†æœ€ã‚‚よã„方法をåˆå¿ƒè€…ã«æ•™ãˆã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚
+QMK ã«è²¢çŒ®ã™ã‚‹ãƒ—ロセスを順を追ã£ã¦èª¬æ˜Žã—ã€ã“ã®ä½œæ¥­ã‚’ç°¡å˜ã«ã™ã‚‹ã„ãã¤ã‹ã®æ–¹æ³•ã‚’詳ã—ã説明ã—ã¾ã™ã€‚
+ãã®å¾Œã€æ„図的ã«ä¸€éƒ¨ã‚’壊ã—ã¦ã¿ã›ã¦ã€ãれらを修正ã™ã‚‹æ–¹æ³•ã‚’説明ã—ã¾ã™ã€‚
+
+ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ä»¥ä¸‹ã®ã“ã¨ã‚’å‰æã¨ã—ã¦ã„ã¾ã™:
+
+1. ã‚ãªãŸã¯ GitHub アカウントãŒã‚ã‚Šã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã« [qmk_firmware リãƒã‚¸ãƒˆãƒªã‚’フォーク](ja/getting_started_github.md) ã—ã¦ã„る。
+2. ã‚ãªãŸã¯ã€[環境構築](ja/newbs_getting_started.md#set-up-your-environment) 㨠[QMK ã®è¨­å®š](ja/newbs_getting_started.md#set-up-qmk) を両方ã¨ã‚‚完了ã—ã¦ã„る。
+
+---
+
+- パート 1: [ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒ: æ›´æ–°ã¯é »ç¹ã«ã€ã‚³ãƒŸãƒƒãƒˆã¯ã—ãªã„ã“ã¨](ja/newbs_git_using_your_master_branch.md)
+- パート 2: [マージã®ç«¶åˆã®è§£æ±º](ja/newbs_git_resolving_merge_conflicts.md)
+- パート 3: [åŒæœŸã®ã¨ã‚Œã¦ã„ãªã„ git ブランãƒã®å†åŒæœŸ](ja/newbs_git_resynchronize_a_branch.md)
diff --git a/docs/ja/newbs_git_resolving_merge_conflicts.md b/docs/ja/newbs_git_resolving_merge_conflicts.md
new file mode 100644
index 0000000000..893c3d5035
--- /dev/null
+++ b/docs/ja/newbs_git_resolving_merge_conflicts.md
@@ -0,0 +1,94 @@
+# マージã®ç«¶åˆã®è§£æ±º
+
+<!---
+ grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
+ original document: adf4acf59:docs/newbs_git_resolving_merge_conflicts.md
+ git diff adf4acf59 HEAD -- docs/newbs_git_resolving_merge_conflicts.md | cat
+-->
+
+ブランãƒã§ã®ä½œæ¥­ã®å®Œäº†ã«æ™‚é–“ãŒã‹ã‹ã‚‹å ´åˆã€ä»–ã®äººãŒè¡Œã£ãŸå¤‰æ›´ãŒã€ãƒ—ルリクエストを開ã„ãŸã¨ãã«ãƒ–ランãƒã«åŠ ãˆãŸå¤‰æ›´ã¨ç«¶åˆã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
+ã“れ㯠*マージã®ç«¶åˆ* ã¨å‘¼ã°ã‚Œã€è¤‡æ•°ã®äººãŒåŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã®åŒã˜éƒ¨åˆ†ã‚’編集ã™ã‚‹ã¨ç™ºç”Ÿã—ã¾ã™ã€‚
+
+?> ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ [ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒ: æ›´æ–°ã¯é »ç¹ã«ã€ã‚³ãƒŸãƒƒãƒˆã¯ã—ãªã„ã“ã¨](ja/newbs_git_using_your_master_branch.md) ã§è©³è¿°ã•ã‚Œã¦ã„る概念ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚
+ãã®æ¦‚念ã«æ…£ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ã¾ãšãれを読んã§ã‹ã‚‰ã€ã“ã“ã«æˆ»ã£ã¦ãã ã•ã„。
+
+## 変更ã®ãƒªãƒ™ãƒ¼ã‚¹
+
+*リベース* ã¯ã€ã‚³ãƒŸãƒƒãƒˆå±¥æ­´ã®ã‚る時点ã§é©ç”¨ã•ã‚ŒãŸå¤‰æ›´ã‚’å–å¾—ã—ã€ãれらを元ã«æˆ»ã—ã€æ¬¡ã«åŒã˜å¤‰æ›´ã‚’別ã®ãƒã‚¤ãƒ³ãƒˆã«é©ç”¨ã™ã‚‹ Git ã®æ–¹æ³•ã§ã™ã€‚
+マージã®ç«¶åˆãŒç™ºç”Ÿã—ãŸå ´åˆã€ãƒ–ランãƒã‚’リベースã—ã¦ã€ãƒ–ランãƒã‚’作æˆã—ã¦ã‹ã‚‰ç¾åœ¨ã¾ã§ã«è¡Œã‚ã‚ŒãŸå¤‰æ›´ã‚’å–å¾—ã§ãã¾ã™ã€‚
+
+開始ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™:
+
+```
+git fetch upstream
+git rev-list --left-right --count HEAD...upstream/master
+```
+
+ã“ã“ã«å…¥åŠ›ã•ã‚ŒãŸ `git rev-list` コマンドã¯ã€ç¾åœ¨ã®ãƒ–ランãƒã¨ QMK ã® master ブランãƒã§ç•°ãªã‚‹ã‚³ãƒŸãƒƒãƒˆã®æ•°ã‚’è¿”ã—ã¾ã™ã€‚
+最åˆã« `git fetch` を実行ã—ã¦ã€upstream リãƒã‚¸ãƒˆãƒªã®ç¾åœ¨ã®çŠ¶æ…‹ã‚’表㙠refs ãŒã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚
+入力ã•ã‚ŒãŸ `git rev-list` コマンドã®å‡ºåŠ›ã¯2ã¤ã®æ•°å€¤ã‚’è¿”ã—ã¾ã™:
+
+```
+$ git rev-list --left-right --count HEAD...upstream/master
+7 35
+```
+
+最åˆã®æ•°å­—ã¯ã€ç¾åœ¨ã®ãƒ–ランãƒãŒä½œæˆã•ã‚Œã¦ã‹ã‚‰ã®ã‚³ãƒŸãƒƒãƒˆæ•°ã‚’表ã—ã€2番目ã®æ•°å­—ã¯ã€ç¾åœ¨ã®ãƒ–ランãƒãŒä½œæˆã•ã‚Œã¦ã‹ã‚‰ `upstream/master` ã«å¯¾ã—ã¦è¡Œã‚ã‚ŒãŸã‚³ãƒŸãƒƒãƒˆã®æ•°ã§ã‚ã‚Šã€ã—ãŸãŒã£ã¦ã€ç¾åœ¨ã®ãƒ–ランãƒã«è¨˜éŒ²ã•ã‚Œã¦ã„ãªã„変更ã§ã™ã€‚
+
+ç¾åœ¨ã®ãƒ–ランãƒã¨ upstream リãƒã‚¸ãƒˆãƒªã®ä¸¡æ–¹ã®ç¾åœ¨ã®çŠ¶æ…‹ãŒã‚ã‹ã£ãŸã®ã§ã€ãƒªãƒ™ãƒ¼ã‚¹æ“作を開始ã§ãã¾ã™:
+
+```
+git rebase upstream/master
+```
+
+ã“ã‚Œã«ã‚ˆã‚Šã€Git ã¯ç¾åœ¨ã®ãƒ–ランãƒã®ã‚³ãƒŸãƒƒãƒˆã‚’å–り消ã—ã¦ã‹ã‚‰ã€QMK ã® master ブランãƒã«å¯¾ã—ã¦ã‚³ãƒŸãƒƒãƒˆã‚’å†é©ç”¨ã—ã¾ã™ã€‚
+
+```
+$ git rebase upstream/master
+First, rewinding head to replay your work on top of it...
+Applying: Commit #1
+Using index info to reconstruct a base tree...
+M conflicting_file_1.txt
+Falling back to patching base and 3-way merge...
+Auto-merging conflicting_file_1.txt
+CONFLICT (content): Merge conflict in conflicting_file_1.txt
+error: Failed to merge in the changes.
+hint: Use 'git am --show-current-patch' to see the failed patch
+Patch failed at 0001 Commit #1
+
+Resolve all conflicts manually, mark them as resolved with
+"git add/rm <conflicted_files>", then run "git rebase --continue".
+You can instead skip this commit: run "git rebase --skip".
+To abort and get back to the state before "git rebase", run "git rebase --abort".
+```
+
+ã“ã‚Œã«ã‚ˆã‚Šã€ãƒžãƒ¼ã‚¸ã®ç«¶åˆãŒã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚Šã€ç«¶åˆã®ã‚るファイルã®åå‰ãŒç¤ºã•ã‚Œã¾ã™ã€‚
+テキストエディタã§ç«¶åˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãã¨ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®ã©ã“ã‹ã«æ¬¡ã®ã‚ˆã†ãªè¡ŒãŒã‚ã‚Šã¾ã™:
+
+```
+<<<<<<< HEAD
+<p>For help with any issues, email us at support@webhost.us.</p>
+=======
+<p>Need help? Email support@webhost.us.</p>
+>>>>>>> Commit #1
+```
+
+è¡Œ `<<<<<<< HEAD` ã¯ãƒžãƒ¼ã‚¸ç«¶åˆã®å§‹ã¾ã‚Šã‚’示ã—ã€è¡Œ `>>>>>>> commit #1` ã¯çµ‚了を示ã—ã€ç«¶åˆã™ã‚‹ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã¯ `=======` ã§åŒºåˆ‡ã‚‰ã‚Œã¾ã™ã€‚
+`HEAD` å´ã®éƒ¨åˆ†ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã® QMK master ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ã‚‰ã®ã‚‚ã®ã§ã‚ã‚Šã€ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ãƒžãƒ¼ã‚¯ã•ã‚ŒãŸéƒ¨åˆ†ã¯ç¾åœ¨ã®ãƒ–ランãƒã¨ã‚³ãƒŸãƒƒãƒˆã‹ã‚‰ã®ã‚‚ã®ã§ã™ã€‚
+
+Git ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容ã§ã¯ãªã *ファイルã¸ã®å¤‰æ›´* を直接追跡ã™ã‚‹ãŸã‚ã€Git ãŒã‚³ãƒŸãƒƒãƒˆã®å‰ã«ãƒ•ã‚¡ã‚¤ãƒ«å†…ã«ã‚ã£ãŸãƒ†ã‚­ã‚¹ãƒˆã‚’見ã¤ã‘られãªã„å ´åˆã€ãƒ•ã‚¡ã‚¤ãƒ«ã®ç·¨é›†æ–¹æ³•ãŒã‚ã‹ã‚Šã¾ã›ã‚“。
+ファイルをå†ç·¨é›†ã—ã¦ã€ç«¶åˆã‚’解決ã—ã¾ã™ã€‚
+変更を加ãˆã¦ã‹ã‚‰ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã—ã¾ã™ã€‚
+
+```
+<p>Need help? Email support@webhost.us.</p>
+```
+
+ãã—ã¦ã‚³ãƒžãƒ³ãƒ‰å®Ÿè¡Œ:
+
+```
+git add conflicting_file_1.txt
+git rebase --continue
+```
+
+Git ã¯ã€ç«¶åˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã¸ã®å¤‰æ›´ã‚’ログã«è¨˜éŒ²ã—ã€ãƒ–ランãƒã®ã‚³ãƒŸãƒƒãƒˆãŒæœ€å¾Œã«é”ã™ã‚‹ã¾ã§é©ç”¨ã—続ã‘ã¾ã™ã€‚
diff --git a/docs/ja/newbs_git_resynchronize_a_branch.md b/docs/ja/newbs_git_resynchronize_a_branch.md
new file mode 100644
index 0000000000..80ae794a92
--- /dev/null
+++ b/docs/ja/newbs_git_resynchronize_a_branch.md
@@ -0,0 +1,88 @@
+# åŒæœŸã®ã¨ã‚Œã¦ã„ãªã„ git ブランãƒã®å†åŒæœŸ
+
+<!---
+ grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
+ original document: adf4acf59:docs/newbs_git_resynchronize_a_branch.md
+ git diff adf4acf59 HEAD -- docs/newbs_git_resynchronize_a_branch.md | cat
+-->
+
+ä»®ã«ã‚ãªãŸã® `master` ブランãƒã«ã‚ãªãŸã®ã‚³ãƒŸãƒƒãƒˆã‚’è¡Œã„ã€ãã—ã¦ã‚ãªãŸã® QMK リãƒã‚¸ãƒˆãƒªã®æ›´æ–°ãŒå¿…è¦ã«ãªã£ãŸã¨ã—ã¾ã™ã€‚
+(フォーク元ã®) QMKã® `master` ブランãƒã‚’ã‚ãªãŸã® `master` ブランãƒã« `git pull` ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€GitHub ã¯ã€ã‚ãªãŸã®ãƒ–ランãƒãŒ `qmk:master` より何コミットã‹å…ˆè¡Œã—ã¦ã„ã‚‹ã¨é€šçŸ¥ã—ã¾ã™ã€ã“ã®çŠ¶æ…‹ã§ QMK ã«ãƒ—ルリクエストを行ã†å ´åˆã€å•é¡ŒãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+(訳注:ã“ã®é€šçŸ¥ã¯ã€GitHub ã®ã‚ãªãŸã®ãƒªãƒã‚¸ãƒˆãƒªã® code ペインã®ãƒ–ランãƒé¸æŠžãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ä¸‹ã®ã‚ãŸã‚Šã§ `This branch is 3 commit ahead of qmk:master` ã¨ã„ã†æ§˜ãªæ–‡é¢ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚)
+
+?> ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ [ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒ: æ›´æ–°ã¯é »ç¹ã«ã€ã‚³ãƒŸãƒƒãƒˆã¯ã—ãªã„ã“ã¨](ja/newbs_git_using_your_master_branch.md) ã§è©³è¿°ã•ã‚Œã¦ã„る概念ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚ãã®æ¦‚念ã«æ…£ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ã¾ãšãれを読んã§ã‹ã‚‰ã€ã“ã“ã«æˆ»ã£ã¦ãã ã•ã„。
+(訳注:ã“ã®æ–‡æ›¸ã§è¨€ã†ã€ã€ŒåŒæœŸã®ã¨ã‚Œã¦ã„ãªã„ git ブランãƒã€ã¨ã¯ã€master ブランãƒã«é–¢ã™ã‚‹ã€ã“ã®ã€Œã‚³ãƒŸãƒƒãƒˆã—ãªã„ã€æ–¹é‡ã‚’逸脱ã—ã¦ã€QMK ã® master リãƒã‚¸ãƒˆãƒªã«å­˜åœ¨ã—ãªã„コミットãŒã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒã«å…¥ã£ã¦ã„る状態を指ã—ã¾ã™ã€‚)
+
+## ã‚ãªãŸè‡ªèº«ã® `master` ブランãƒã§ã®å¤‰æ›´ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—(オプション)
+
+æ•‘ãˆã‚‹ã‚‚ã®ãªã‚‰è‡ªåˆ†ã®è¡Œã£ãŸå¤‰æ›´ã‚’失ã„ãŸãã¯ãªã„ã§ã—ょã†ã€‚
+ã‚ãªãŸã® `master` ブランãƒã«æ—¢ã«åŠ ãˆãŸå¤‰æ›´ã‚’ä¿å­˜ã—ãŸã„å ´åˆã€æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•ã¯ã€å˜ã«ã€Œãƒ€ãƒ¼ãƒ†ã‚£ãªã€`master` ブランãƒã®è¤‡è£½ã‚’作æˆã™ã‚‹ã“ã¨ã§ã™ï¼š
+
+```sh
+git branch old_master master
+```
+
+ã“ã‚Œã§ã€ `master` ブランãƒã®è¤‡è£½ã§ã‚ã‚‹ `old_master` ã¨ã„ã†åå‰ã®ãƒ–ランãƒãŒã§ãã¾ã—ãŸã€‚
+
+## ã‚ãªãŸã®ãƒ–ランãƒã®å†åŒæœŸ
+
+ã•ã‚ã€`master` ブランãƒã‚’å†åŒæœŸã—ã¾ã™ã€‚
+ã“ã®æ‰‹é †ã§ã¯ã€QMK ã®ãƒªãƒã‚¸ãƒˆãƒªã‚’ git ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã¨ã—ã¦è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+設定済ã¿ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã‚’確èªã™ã‚‹ã«ã¯ã€`git remote -v` を実行ã—ã€æ¬¡ã®ã‚ˆã†ãªçµæžœãŒè¿”ã•ã‚Œãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+
+```sh
+QMKuser ~/qmk_firmware (master)
+$ git remote -v
+origin https://github.com/<your_username>/qmk_firmware.git (fetch)
+origin https://github.com/<your_username>/qmk_firmware.git (push)
+upstream https://github.com/qmk/qmk_firmware.git (fetch)
+upstream https://github.com/qmk/qmk_firmware.git (push)
+```
+
+ã‚‚ã—ã€ä¸Šè¨˜ã®ã‚ˆã†ã«ãªã‚‰ãšã«ä»¥ä¸‹ã®ã‚ˆã†ã«å‚ç…§ã•ã‚Œã‚‹ãƒ•ã‚©ãƒ¼ã‚¯ãŒã€1ã¤ã ã‘表示ã•ã‚Œã‚‹å ´åˆï¼š
+
+```sh
+QMKuser ~/qmk_firmware (master)
+$ git remote -v
+origin https://github.com/qmk/qmk_firmware.git (fetch)
+origin https://github.com/qmk/qmk_firmware.git (push)
+```
+
+æ–°ã—ã„リモートリãƒã‚¸ãƒˆãƒªã‚’追加ã—ã¾ã™ï¼š
+
+```sh
+git remote add upstream https://github.com/qmk/qmk_firmware.git
+```
+
+次ã«ã€`origin` リモートリãƒã‚¸ãƒˆãƒªã‚’ã€ã‚ãªãŸè‡ªèº«ã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ï¼š
+
+```sh
+git remote set-url origin https://github.com/<ã‚ãªãŸã®ãƒ¦ãƒ¼ã‚¶å>/qmk_firmware.git
+```
+
+両方ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªãŒè¨­å®šã•ã‚ŒãŸã®ã§ã€æ¬¡ã‚’実行ã—ã¦ã€QMK ã§ã‚ã‚‹ `upstream` リãƒã‚¸ãƒˆãƒªã®å‚照を更新ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+
+```sh
+git fetch upstream
+```
+
+ã“ã®æ™‚点ã§ã€æ¬¡ã‚’実行ã—ã¦ã‚ãªãŸã®(訳注:master)ブランãƒã‚’ QMK ã®ãƒ–ランãƒã«å†åŒæœŸã—ã¾ã™ã€‚
+(訳注: 今ç¾åœ¨ `master` ブランãƒãŒãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+ ãã†ãªã£ã¦ãªã‘ã‚Œã°ã€`git checkout master` ã‚’å…ˆã«å®Ÿè¡Œã—ã¦ãŠãå¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚)
+
+```sh
+git reset --hard upstream/master
+```
+
+ã“れらã®æ‰‹é †ã«ã‚ˆã‚Šã€ã‚ãªãŸã®ã‚³ãƒ³ãƒ”ュータ上ã®ãƒªãƒã‚¸ãƒˆãƒªãŒæ›´æ–°ã•ã‚Œã¾ã™ãŒã€ã‚ãªãŸã® GitHub 上ã®ãƒ•ã‚©ãƒ¼ã‚¯ã¯ã¾ã åŒæœŸã•ã‚Œã¦ã„ã¾ã›ã‚“。
+GitHub 上ã®ãƒ•ã‚©ãƒ¼ã‚¯ã‚’å†åŒæœŸã™ã‚‹ã«ã¯ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ãƒ—ッシュã—ã¦ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒªãƒã‚¸ãƒˆãƒªã«å映ã•ã‚Œã¦ã„ãªã„リモート変更をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã‚ˆã†ã« Git ã«æŒ‡ç¤ºã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ã“れを行ã†ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ï¼š
+
+```sh
+git push --force-with-lease
+```
+
+!> ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚³ãƒŸãƒƒãƒˆã‚’投稿ã™ã‚‹ãƒ•ã‚©ãƒ¼ã‚¯ã§ `git push --force-with-lease` ã‚’**実行ã—ãªã„ã§ãã ã•ã„**。ã“れをã™ã‚‹ã¨ã€ã‹ã‚Œã‚‰ã®ã‚³ãƒŸãƒƒãƒˆãŒæ¶ˆåŽ»ã•ã‚Œã¦ã—ã¾ã„ã¾ã™ã€‚
+
+ã“ã‚Œã§ã€ã‚ãªãŸã® GitHub フォークã€ã‚ãªãŸã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã€ãŠã‚ˆã³ QMK ã®ãƒªãƒã‚¸ãƒˆãƒªã¯ã™ã¹ã¦åŒã˜ã«ãªã‚Šã¾ã—ãŸã€‚
+ã“ã“ã‹ã‚‰ã€[ブランãƒã‚’使ã£ã¦](ja/newbs_git_using_your_master_branch.md#making-changes)ã•ã‚‰ã«å¿…è¦ãªå¤‰æ›´ã‚’加ãˆã€é€šå¸¸ã©ãŠã‚Šãれらを投稿ã§ãã¾ã™ã€‚
diff --git a/docs/ja/newbs_git_using_your_master_branch.md b/docs/ja/newbs_git_using_your_master_branch.md
new file mode 100644
index 0000000000..0860050349
--- /dev/null
+++ b/docs/ja/newbs_git_using_your_master_branch.md
@@ -0,0 +1,101 @@
+# ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® master ブランãƒ: æ›´æ–°ã¯é »ç¹ã«ã€ã‚³ãƒŸãƒƒãƒˆã¯ã—ãªã„ã“ã¨
+
+<!---
+ grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
+ original document: adf4acf59:docs/newbs_git_using_your_master_branch.md
+ git diff adf4acf59 HEAD -- docs/newbs_git_using_your_master_branch.md | cat
+-->
+
+QMK ã®é–‹ç™ºã§ã¯ã€ä½•ãŒã©ã“ã§è¡Œã‚ã‚Œã¦ã„ã‚‹ã‹ã«ã‹ã‹ã‚らãšã€`master` ブランãƒã‚’最新ã®çŠ¶æ…‹ã«ä¿ã¤ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€ã—ã‹ã— `master` ブランãƒã«ã¯***絶対ã«ç›´æŽ¥ã‚³ãƒŸãƒƒãƒˆã—ãªã„ã§ãã ã•ã„***。
+代ã‚ã‚Šã«ã€ã‚ãªãŸã®ã™ã¹ã¦ã®å¤‰æ›´ã¯é–‹ç™ºãƒ–ランãƒã§è¡Œã„ã€ã‚ãªãŸãŒé–‹ç™ºã™ã‚‹æ™‚ã«ã¯ãã®ãƒ–ランãƒã‹ã‚‰ãƒ—ルリクエストを発行ã—ã¾ã™ã€‚
+
+マージã®ç«¶åˆ &mdash; ã“れ㯠2人以上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®åŒã˜éƒ¨åˆ†ã‚’ãã‚Œãžã‚Œç•°ãªã‚‹ç·¨é›†ã‚’ã—ã¦çµ±åˆã§ããªããªã£ãŸçŠ¶æ…‹ &mdash; ã®å¯èƒ½æ€§ã‚’減らã™ãŸã‚ `master` ブランãƒã‚’ãªã‚‹ã¹ã最新ã®çŠ¶æ…‹ã«ä¿ã¡ã€æ–°ã—ã„ブランãƒã‚’作æˆã—ã¦æ–°ã—ã„開発を開始ã—ã¾ã™ã€‚
+
+## ã‚ãªãŸã® master ブランãƒã‚’æ›´æ–°ã™ã‚‹
+
+`master` ブランãƒã‚’最新ã®çŠ¶æ…‹ã«ä¿ã¤ã«ã¯ã€git ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã¨ã—㦠QMK ファームウェアã®ãƒªãƒã‚¸ãƒˆãƒª(以é™ã€QMK リãƒã‚¸ãƒˆãƒª)を追加ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+ã“れを行ã†ã«ã¯ã€Git コマンドラインインターフェイスを開ãã€æ¬¡ã®ã‚ˆã†ã«å…¥åŠ›ã—ã¾ã™ã€‚
+
+```
+git remote add upstream https://github.com/qmk/qmk_firmware.git
+```
+
+?> `upstream`(訳注: `upstream` ã¯`上æµ`ã¨ã„ã†æ„味ã§ã™)ã¨ã„ã†åå‰ã¯ä»»æ„ã§ã™ãŒã€ä¸€èˆ¬çš„ãªæ…£ç¿’ã§ã™ã€‚
+QMK ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã«ã¯ã€ã‚ãªãŸã«ã¨ã£ã¦åˆ†ã‹ã‚Šã‚„ã™ã„åå‰ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+Git ã® `remote` コマンドã¯ã€æ§‹æ–‡ `git remote add <name> <url>` を使用ã—ã¾ã™ã€‚
+`<name>` ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã®çœç•¥å½¢ã¨ã—ã¦ã‚ãªãŸãŒæŒ‡å®šã™ã‚‹ã‚‚ã®ã§ã™ã€‚
+ã“ã®åå‰ã¯ã€`fetch`ã€`pull`ã€`push` ã‚„ãれ以外ã®å¤šãã® Git コマンドã§ã€å¯¾è±¡ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒªãƒã‚¸ãƒˆãƒªã‚’指定ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚
+
+リãƒã‚¸ãƒˆãƒªãŒè¿½åŠ ã•ã‚ŒãŸã“ã¨ã‚’確èªã™ã‚‹ã«ã¯ã€`git remote -v` を実行ã—ã¾ã™ã€‚
+次ã®ã‚ˆã†ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+
+```
+$ git remote -v
+origin https://github.com/<your_username>/qmk_firmware.git (fetch)
+origin https://github.com/<your_username>/qmk_firmware.git (push)
+upstream https://github.com/qmk/qmk_firmware.git (fetch)
+upstream https://github.com/qmk/qmk_firmware.git (push)
+```
+
+ã“ã‚ŒãŒå®Œäº†ã™ã‚‹ã¨ã€`git fetch upstream` を実行ã—ã¦ãƒªãƒã‚¸ãƒˆãƒªã®æ›´æ–°ã‚’確èªã§ãã¾ã™ã€‚
+ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ `upstream` ã¨ã„ã†ãƒ‹ãƒƒã‚¯ãƒãƒ¼ãƒ ã‚’æŒã¤ QMK リãƒã‚¸ãƒˆãƒªã‹ã‚‰ã€ãƒ–ランãƒã¨ã‚¿ã‚° &mdash; "refs" ã¨ç·ç§°ã•ã‚Œã¾ã™ &mdash; ã‚’å–å¾—ã—ã¾ã™ã€‚
+ã“ã‚Œã§ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ `origin` ã®ãƒ‡ãƒ¼ã‚¿ã‚’ QMK ãŒä¿æŒã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¨æ¯”較ã§ãã¾ã™ã€‚
+
+ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã® `master` ã‚’æ›´æ–°ã™ã‚‹ã«ã¯ã€æ¬¡ã‚’実行ã—ã¾ã™ã€å„è¡Œã®å¾Œã«Enterキーを押ã—ã¦ãã ã•ã„:
+
+```
+git checkout master
+git fetch upstream
+git pull upstream master
+git push origin master
+```
+
+ã“ã‚Œã«ã‚ˆã‚Šã€ã‚ãªãŸã® `master` ブランãƒã«åˆ‡ã‚Šæ›¿ã‚ã‚Šã€QMK リãƒã‚¸ãƒˆãƒªã‹ã‚‰ 'refs' ã‚’å–å¾—ã—ã€ç¾åœ¨ã® QMK ã® `master` ブランãƒã‚’コンピュータã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¦ã‹ã‚‰ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ã‚¢ãƒƒãƒ—ロードã—ã¾ã™ã€‚
+
+## 変更を行ãªã† :id=making-changes
+
+変更ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã‚’入力ã—ã¦æ–°ã—ã„ブランãƒã‚’作æˆã—ã¾ã™:
+
+```
+git checkout -b dev_branch
+git push --set-upstream origin dev_branch
+```
+
+ã“ã‚Œã«ã‚ˆã‚Šã€`dev_branch` ã¨ã„ã†åå‰ã®æ–°ã—ã„ブランãƒãŒä½œæˆã•ã‚Œã€ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã€æ–°ã—ã„ブランãƒãŒã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã«ä¿å­˜ã•ã‚Œã¾ã™ã€‚
+`--set-upstream` 引数ã¯ã€ã“ã®ãƒ–ランãƒã‹ã‚‰ `git push` ã¾ãŸã¯ `git pull` を使用ã™ã‚‹ãŸã³ã«ã€ã‚ãªãŸã®ãƒ•ã‚©ãƒ¼ã‚¯ã¨ `dev_branch` ブランãƒã‚’使用ã™ã‚‹ã‚ˆã†ã« git ã«æŒ‡ç¤ºã—ã¾ã™ã€‚
+ã“ã®å¼•æ•°ã¯æœ€åˆã®ãƒ—ッシュã§ã®ã¿ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ãã®å¾Œã€æ®‹ã‚Šã®å¼•æ•°ãªã—㧠`git push` ã¾ãŸã¯ `git pull` を安全ã«ä½¿ç”¨ã§ãã¾ã™ã€‚
+
+?> `git push` ã§ã¯ã€`-set-upstream` ã®ä»£ã‚ã‚Šã« `-u` を使用ã§ãã¾ã™ã€ `-u` 㯠`--set-upstream` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚
+
+ブランãƒã«ã¯ã»ã¼ä»»æ„ã®åå‰ã‚’付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ã‚ãªãŸãŒè¡Œãªã†å¤‰æ›´ã‚’表ã™åå‰ã‚’付ã‘ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+
+デフォルトã§ã¯ã€`git checkout -b`ã¯ã€ä»Šãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã¦ã„るブランãƒã«åŸºã¥ã„ã¦æ–°ã—ã„ブランãƒã‚’作æˆã—ã¾ã™ã€‚
+コマンド末尾ã«æ—¢å­˜ã®ãƒ–ランãƒã®åå‰ã‚’追加指定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãƒã‚§ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã¦ã„ãªã„既存ã®ãƒ–ランãƒã‚’基ã«ã—ã¦æ–°ã—ã„ブランãƒã‚’作æˆã§ãã¾ã™:
+
+```
+git checkout -b dev_branch master
+```
+
+ã“ã‚Œã§é–‹ç™ºãƒ–ランãƒãŒã§ããŸã®ã§ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ãå¿…è¦ãªå¤‰æ›´ã‚’加ãˆã¾ã™ã€‚
+ブランãƒã«å¯¾ã—ã¦å¤šãã®å°ã•ãªã‚³ãƒŸãƒƒãƒˆã‚’è¡Œã†ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+ãã†ã™ã‚‹ã“ã¨ã§ã€å•é¡Œã‚’引ãèµ·ã“ã™å¤‰æ›´ã‚’より簡å˜ã«ç‰¹å®šã—å¿…è¦ã«å¿œã˜ã¦å…ƒã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
+変更を加ãˆã‚‹ã«ã¯ã€æ›´æ–°ãŒå¿…è¦ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¦ä¿å­˜ã—ã€Git ã® *ステージングエリア* ã«è¿½åŠ ã—ã¦ã‹ã‚‰ã€ãƒ–ランãƒã«ã‚³ãƒŸãƒƒãƒˆã—ã¾ã™:
+
+```
+git add path/to/updated_file
+git commit -m "My commit message."
+```
+
+`git add`ã¯ã€å¤‰æ›´ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ Git ã® *ステージングエリア* ã«è¿½åŠ ã—ã¾ã™ã€‚
+ã“ã‚Œã¯ã€Git ã®ã€Œãƒ­ãƒ¼ãƒ‰ã‚¾ãƒ¼ãƒ³ã€ã§ã™ã€‚
+ã“ã‚Œã«ã¯ã€`git commit` ã«ã‚ˆã£ã¦ *コミット* ã•ã‚Œã‚‹å¤‰æ›´ãŒå«ã¾ã‚Œã¦ãŠã‚Šã€ãƒªãƒã‚¸ãƒˆãƒªã¸ã®å¤‰æ›´ãŒä¿å­˜ã•ã‚Œã¾ã™ã€‚
+変更内容ãŒä¸€ç›®ã§ã‚ã‹ã‚‹ã‚ˆã†ã«ã€èª¬æ˜Žçš„ãªã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’使用ã—ã¾ã™ã€‚
+
+?> 複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’変更ã—ãŸå ´åˆã€`git add -- path/to/file1 path/to/file2 ...` を実行ã™ã‚Œã°ã€ã‚ãªãŸã®æœ›ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã§ãã¾ã™ã€‚
+
+## 変更を公開ã™ã‚‹
+
+最後ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯ã€å¤‰æ›´ã‚’フォークã«ãƒ—ッシュã™ã‚‹ã“ã¨ã§ã™ã€‚
+ã“れを行ã†ã«ã¯ã€`git push`ã¨å…¥åŠ›ã—ã¾ã™ã€‚
+Gitã¯ã€ `dev_branch`ã®ç¾åœ¨ã®çŠ¶æ…‹ã‚’フォークã«å…¬é–‹ã—ã¾ã™ã€‚
diff --git a/docs/ja/newbs_learn_more_resources.md b/docs/ja/newbs_learn_more_resources.md
index 632cd9100a..9adcf53606 100644
--- a/docs/ja/newbs_learn_more_resources.md
+++ b/docs/ja/newbs_learn_more_resources.md
@@ -3,7 +3,7 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: ed0575fc8:docs/newbs_learn_more_resources.md
- git diff ed0575fc8 HEAD docs/newbs_learn_more_resources.md | cat
+ git diff ed0575fc8 HEAD -- docs/newbs_learn_more_resources.md | cat
-->
ã“れらã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã€QMKコミュニティã®æ–°ã—ã„メンãƒãƒ¼ã«ã€åˆå¿ƒè€…å‘ã‘ドキュメントã§æä¾›ã•ã‚Œã¦ã„る情報ã«å¯¾ã™ã‚‹ç†è§£ã‚’æ·±ã‚ã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚
@@ -21,6 +21,10 @@
_日本語ã®ãƒªã‚½ãƒ¼ã‚¹æƒ…報を募集中ã§ã™ã€‚_
+* [Git Game To Learn From Examples(日本語対応有り)](https://learngitbranching.js.org/)
+* [QMK 㧠Github を使ã†æ–¹æ³•](ja/getting_started_github.md)
+* [貢献方法](ja/contributing.md)
+
## コマンドラインã«é–¢ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹:
### 英語
diff --git a/docs/ja/newbs_testing_debugging.md b/docs/ja/newbs_testing_debugging.md
index a96406187b..5ec5811a1e 100644
--- a/docs/ja/newbs_testing_debugging.md
+++ b/docs/ja/newbs_testing_debugging.md
@@ -3,7 +3,7 @@
<!---
grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
original document: ed0575fc8:docs/newbs_testing_debugging.md
- git diff ed0575fc8 HEAD docs/newbs_testing_debugging.md | cat
+ git diff ed0575fc8 HEAD -- docs/newbs_testing_debugging.md | cat
-->
カスタムファームウェアをキーボードã¸æ›¸ã込んã ã‚‰ã€ãƒ†ã‚¹ãƒˆã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã™ã€‚é‹ãŒè‰¯ã‘ã‚Œã°å…¨ã¦å•é¡Œãªã動作ã—ã¦ã„ã‚‹ã¯ãšã§ã™ãŒã€ã‚‚ã—ãã†ã§ãªã‘ã‚Œã°ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒã©ã“ãŒæ‚ªã„ã®ã‹èª¿ã¹ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚
@@ -22,7 +22,7 @@
## デãƒãƒƒã‚°
-`rules.mk`ã¸`CONSOLE_ENABLE = yes`ã®è¨­å®šã‚’ã™ã‚‹ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãƒ‡ãƒãƒƒã‚°æƒ…報を出力ã—ã¾ã™ã€‚デフォルトã®å‡ºåŠ›ã¯éžå¸¸ã«é™ã‚‰ã‚ŒãŸã‚‚ã®ã§ã™ãŒã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’オンã«ã™ã‚‹ã“ã¨ã§ãƒ‡ãƒãƒƒã‚°æƒ…å ±ã®é‡ã‚’増やã™ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚キーマップã®`DEBUG`キーコードを使用ã™ã‚‹ã‹ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹ [Command](feature_command.md) 機能を使用ã™ã‚‹ã‹ã€ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’キーマップã«è¿½åŠ ã—ã¾ã™ã€‚
+`rules.mk`ã¸`CONSOLE_ENABLE = yes`ã®è¨­å®šã‚’ã™ã‚‹ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãƒ‡ãƒãƒƒã‚°æƒ…報を出力ã—ã¾ã™ã€‚デフォルトã®å‡ºåŠ›ã¯éžå¸¸ã«é™ã‚‰ã‚ŒãŸã‚‚ã®ã§ã™ãŒã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’オンã«ã™ã‚‹ã“ã¨ã§ãƒ‡ãƒãƒƒã‚°æƒ…å ±ã®é‡ã‚’増やã™ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚キーマップã®`DEBUG`キーコードを使用ã™ã‚‹ã‹ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹ [Command](ja/feature_command.md) 機能を使用ã™ã‚‹ã‹ã€ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’キーマップã«è¿½åŠ ã—ã¾ã™ã€‚
```c
void keyboard_post_init_user(void) {
@@ -46,7 +46,7 @@ void keyboard_post_init_user(void) {
## 独自ã®ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã™ã‚‹
-[custom code](custom_quantum_functions.md)内ã‹ã‚‰ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出力ã™ã‚‹ã¨ä¾¿åˆ©ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€‚ãã‚Œã¯ã¨ã¦ã‚‚ç°¡å˜ã§ã™ã€‚ファイルã®å…ˆé ­ã«`print.h`ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚’追加ã—ã¾ã™:
+[custom code](ja/custom_quantum_functions.md)内ã‹ã‚‰ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出力ã™ã‚‹ã¨ä¾¿åˆ©ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€‚ãã‚Œã¯ã¨ã¦ã‚‚ç°¡å˜ã§ã™ã€‚ファイルã®å…ˆé ­ã«`print.h`ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚’追加ã—ã¾ã™:
#include <print.h>
@@ -59,7 +59,7 @@ void keyboard_post_init_user(void) {
## デãƒãƒƒã‚°ã®ä¾‹
-以下ã¯ç¾å®Ÿä¸–ç•Œã§ã®å®Ÿéš›ã®ãƒ‡ãƒãƒƒã‚°æ‰‹æ³•ã®ä¾‹ã‚’集ã‚ãŸã‚‚ã®ã§ã™ã€‚追加情報ã¯[Debugging/Troubleshooting QMK](faq_debug.md)ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+以下ã¯ç¾å®Ÿä¸–ç•Œã§ã®å®Ÿéš›ã®ãƒ‡ãƒãƒƒã‚°æ‰‹æ³•ã®ä¾‹ã‚’集ã‚ãŸã‚‚ã®ã§ã™ã€‚追加情報ã¯[Debugging/Troubleshooting QMK](ja/faq_debug.md)ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
### マトリックス上ã®ã©ã®å ´æ‰€ã§ã‚­ãƒ¼æŠ¼ä¸‹ãŒèµ·ã“ã£ãŸã‹ï¼Ÿ
diff --git a/docs/keycodes.md b/docs/keycodes.md
index fa01df63dc..dd4c4418ba 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -214,18 +214,8 @@ This is a reference only. Each group of keys links to the page documenting their
|`DEBUG` | |Toggle debug mode |
|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
-|`KC_LSPO` | |Left Shift when held, `(` when tapped |
-|`KC_RSPC` | |Right Shift when held, `)` when tapped |
-|`KC_LCPO` | |Left Control when held, `(` when tapped |
-|`KC_RCPC` | |Right Control when held, `)` when tapped |
-|`KC_LAPO` | |Left Alt when held, `(` when tapped |
-|`KC_RAPC` | |Right Alt when held, `)` when tapped |
-|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
-|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
-|`M(n)` | |Call macro `n` |
-|`MACROTAP(n)` | |Macro-tap `n` idk FIXME |
## [Audio Keys](feature_audio.md)
@@ -257,37 +247,37 @@ This is a reference only. Each group of keys links to the page documenting their
## [Bootmagic](feature_bootmagic.md)
-|Key |Aliases |Description |
-|----------------------------------|---------|-------------------------------------------|
-|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Caps Lock and Left Control |
-|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Control |
-|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and GUI |
-|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and GUI |
-|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and GUI |
-|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and GUI |
-|`MAGIC_NO_GUI` | |Disable the GUI key |
-|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>&#96;</code> and Escape |
-|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
-|`MAGIC_HOST_NKRO` | |Force NKRO on |
-|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
-|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)|
-|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Caps Lock and Left Control |
-|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Control |
-|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and GUI |
-|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and GUI |
-|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and GUI |
-|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and GUI |
-|`MAGIC_UNNO_GUI` | |Enable the GUI key |
-|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>&#96;</code> and Escape |
-|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
-|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
-|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
-|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI on both sides |
-|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
-|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap on both sides |
-|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
-|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness |
-|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness |
+|Key |Aliases |Description |
+|----------------------------------|---------|--------------------------------------------------------------------------|
+|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
+|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
+|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
+|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
+|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
+|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
+|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
+|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
+|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
+|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
+|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
+|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
+|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
+|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
+|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
+|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
+|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
+|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
+|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
+|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
+|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>&#96;</code> and Escape |
+|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>&#96;</code> and Escape |
+|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
+|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
+|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
+|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
+|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
+|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
+|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
## [Bluetooth](feature_bluetooth.md)
@@ -389,12 +379,12 @@ This is a reference only. Each group of keys links to the page documenting their
|`RGB_TOG` | |Toggle RGB lighting on or off |
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
-|`RGB_HUI` | |Increase hue |
-|`RGB_HUD` | |Decrease hue |
-|`RGB_SAI` | |Increase saturation |
-|`RGB_SAD` | |Decrease saturation |
-|`RGB_VAI` | |Increase value (brightness) |
-|`RGB_VAD` | |Decrease value (brightness) |
+|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
+|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
+|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
+|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
+|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
+|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
@@ -407,19 +397,19 @@ This is a reference only. Each group of keys links to the page documenting their
## [RGB Matrix Lighting](feature_rgb_matrix.md)
-|Key |Aliases |Description |
-|-------------------|----------|--------------------------------------------------------------------|
-|`RGB_TOG` | |Toggle RGB lighting on or off |
-|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
-|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
-|`RGB_HUI` | |Increase hue |
-|`RGB_HUD` | |Decrease hue |
-|`RGB_SAI` | |Increase saturation |
-|`RGB_SAD` | |Decrease saturation |
-|`RGB_VAI` | |Increase value (brightness) |
-|`RGB_VAD` | |Decrease value (brightness) |
-|`RGB_SPI` | |Increase effect speed (does no support eeprom yet) |
-|`RGB_SPD` | |Decrease effect speed (does no support eeprom yet) |
+|Key |Aliases |Description |
+|-------------------|----------|--------------------------------------------------------------------------------------|
+|`RGB_TOG` | |Toggle RGB lighting on or off |
+|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
+|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
+|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
+|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
+|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
+|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
+|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
+|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
+|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
+|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
## [Thermal Printer](feature_thermal_printer.md)
@@ -461,6 +451,18 @@ 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|
+## [Space Cadet](feature_space_cadet.md)
+
+|Key |Description |
+|-----------|----------------------------------------|
+|`KC_LCPO` |Left Control when held, `(` when tapped |
+|`KC_RCPC` |Right Control when held, `)` when tapped|
+|`KC_LSPO` |Left Shift when held, `(` when tapped |
+|`KC_RSPC` |Right Shift when held, `)` when tapped |
+|`KC_LAPO` |Left Alt when held, `(` when tapped |
+|`KC_RAPC` |Right Alt when held, `)` when tapped |
+|`KC_SFTENT`|Right Shift when held, Enter when tapped|
+
## [Swap Hands](feature_swap_hands.md)
|Key |Description |
diff --git a/docs/newbs.md b/docs/newbs.md
index 904a529455..775bba2caa 100644
--- a/docs/newbs.md
+++ b/docs/newbs.md
@@ -13,7 +13,7 @@ There are 7 main sections to this guide:
* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
* [Flashing Firmware](newbs_flashing.md)
* [Testing and Debugging](newbs_testing_debugging.md)
-* [Git Best Practices](newbs_best_practices.md)
+* [Best Git Practices](newbs_git_best_practices.md)
* [Learn More with these Resources](newbs_learn_more_resources.md)
This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
diff --git a/docs/newbs_best_practices.md b/docs/newbs_best_practices.md
deleted file mode 100644
index 61bcc0c6ad..0000000000
--- a/docs/newbs_best_practices.md
+++ /dev/null
@@ -1,163 +0,0 @@
-# Best Practices
-
-## Or, "How I Learned to Stop Worrying and Love Git."
-
-This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
-
-This document assumes a few things:
-
-1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
-2. You've [set up your build environment](newbs_getting_started.md?id=environment-setup).
-
-
-## Your fork's master: Update Often, Commit Never
-
-It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
-
-To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
-
-### Updating your master branch
-
-To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
-
-```
-git remote add upstream https://github.com/qmk/qmk_firmware.git
-```
-
-To verify that the repository has been added, run `git remote -v`, which should return the following:
-
-```
-$ git remote -v
-origin https://github.com/<your_username>/qmk_firmware.git (fetch)
-origin https://github.com/<your_username>/qmk_firmware.git (push)
-upstream https://github.com/qmk/qmk_firmware.git (fetch)
-upstream https://github.com/qmk/qmk_firmware.git (push)
-```
-
-Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
-
-To update your fork's master, run the following, hitting the Enter key after each line:
-
-```
-git checkout master
-git fetch upstream
-git pull upstream master
-git push origin master
-```
-
-This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
-
-### Making Changes
-
-To make changes, create a new branch by entering:
-
-```
-git checkout -b dev_branch
-git push --set-upstream origin dev_branch
-```
-
-This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
-
-!> With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`.
-
-You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
-
-By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
-
-```
-git checkout -b dev_branch master
-```
-
-Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
-
-```
-git add path/to/updated_file
-git commit -m "My commit message."
-```
-
-`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
-
-!> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually.
-
-### Publishing Your Changes
-
-The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork.
-
-
-## Resolving Merge Conflicts
-
-Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
-
-### Rebasing Your Changes
-
-A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
-
-To start, run the following:
-
-```
-git fetch upstream
-git rev-list --left-right --count HEAD...upstream/master
-```
-
-The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
-
-```
-$ git rev-list --left-right --count HEAD...upstream/master
-7 35
-```
-
-The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
-
-Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
-
-```
-git rebase upstream/master
-```
-
-This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
-
-```
-$ git rebase upstream/master
-First, rewinding head to replay your work on top of it...
-Applying: Commit #1
-Using index info to reconstruct a base tree...
-M conflicting_file_1.txt
-Falling back to patching base and 3-way merge...
-Auto-merging conflicting_file_1.txt
-CONFLICT (content): Merge conflict in conflicting_file_1.txt
-error: Failed to merge in the changes.
-hint: Use 'git am --show-current-patch' to see the failed patch
-Patch failed at 0001 Commit #1
-
-Resolve all conflicts manually, mark them as resolved with
-"git add/rm <conflicted_files>", then run "git rebase --continue".
-You can instead skip this commit: run "git rebase --skip".
-To abort and get back to the state before "git rebase", run "git rebase --abort".
-```
-
-This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
-
-```
-<<<<<<< HEAD
-<p>For help with any issues, email us at support@webhost.us.</p>
-=======
-<p>Need help? Email support@webhost.us.</p>
->>>>>>> Commit #1
-```
-
-The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
-
-Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
-
-```
-<p>Need help? Email support@webhost.us.</p>
-```
-
-Now run:
-
-```
-git add conflicting_file_1.txt
-git rebase --continue
-```
-
-Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
diff --git a/docs/newbs_building_firmware.md b/docs/newbs_building_firmware.md
index 5a8f181b8c..d7d31c07fe 100644
--- a/docs/newbs_building_firmware.md
+++ b/docs/newbs_building_firmware.md
@@ -42,7 +42,7 @@ Open up your `keymap.c`. Inside this file you'll find the structure that control
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-This line indicates the start of the list of Layers. Below that you'll find lines containing either `LAYOUT` or `KEYMAP`, and these lines indicate the start of a layer. Below that line is the list of keys that comprise a that particular layer.
+This line indicates the start of the list of Layers. Below that you'll find lines containing either `LAYOUT` or `KEYMAP`, and these lines indicate the start of a layer. Below that line is the list of keys that comprise a particular layer.
!> When editing your keymap file be careful not to add or remove any commas. If you do you will prevent your firmware from compiling and it may not be easy to figure out where the extra, or missing, comma is.
diff --git a/docs/newbs_git_best_practices.md b/docs/newbs_git_best_practices.md
new file mode 100644
index 0000000000..c0cb3a2944
--- /dev/null
+++ b/docs/newbs_git_best_practices.md
@@ -0,0 +1,16 @@
+# Best Git Practices for Working with QMK
+
+## Or, "How I Learned to Stop Worrying and Love Git."
+
+This section aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
+
+This section assumes a few things:
+
+1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
+2. You've set up both [your build environment](newbs_getting_started.md#set-up-your-environment) and [QMK](newbs_getting_started.md#set-up-qmk).
+
+---
+
+- Part 1: [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md)
+- Part 2: [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
+- Part 3: [Resynchronizing an Out-of-Sync Git Branch](newbs_git_resynchronize_a_branch.md)
diff --git a/docs/newbs_git_resolving_merge_conflicts.md b/docs/newbs_git_resolving_merge_conflicts.md
new file mode 100644
index 0000000000..467c13abba
--- /dev/null
+++ b/docs/newbs_git_resolving_merge_conflicts.md
@@ -0,0 +1,79 @@
+# Resolving Merge Conflicts
+
+Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
+
+?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
+
+## Rebasing Your Changes
+
+A *rebase* is Git's way of taking changes that were applied at one point in the commit history, reversing them, and then applying the same changes at another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
+
+To start, run the following:
+
+```
+git fetch upstream
+git rev-list --left-right --count HEAD...upstream/master
+```
+
+The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
+
+```
+$ git rev-list --left-right --count HEAD...upstream/master
+7 35
+```
+
+The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
+
+Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
+
+```
+git rebase upstream/master
+```
+
+This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
+
+```
+$ git rebase upstream/master
+First, rewinding head to replay your work on top of it...
+Applying: Commit #1
+Using index info to reconstruct a base tree...
+M conflicting_file_1.txt
+Falling back to patching base and 3-way merge...
+Auto-merging conflicting_file_1.txt
+CONFLICT (content): Merge conflict in conflicting_file_1.txt
+error: Failed to merge in the changes.
+hint: Use 'git am --show-current-patch' to see the failed patch
+Patch failed at 0001 Commit #1
+
+Resolve all conflicts manually, mark them as resolved with
+"git add/rm <conflicted_files>", then run "git rebase --continue".
+You can instead skip this commit: run "git rebase --skip".
+To abort and get back to the state before "git rebase", run "git rebase --abort".
+```
+
+This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
+
+```
+<<<<<<< HEAD
+<p>For help with any issues, email us at support@webhost.us.</p>
+=======
+<p>Need help? Email support@webhost.us.</p>
+>>>>>>> Commit #1
+```
+
+The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
+
+Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
+
+```
+<p>Need help? Email support@webhost.us.</p>
+```
+
+Now run:
+
+```
+git add conflicting_file_1.txt
+git rebase --continue
+```
+
+Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
diff --git a/docs/newbs_git_resynchronize_a_branch.md b/docs/newbs_git_resynchronize_a_branch.md
new file mode 100644
index 0000000000..3e7acdba7a
--- /dev/null
+++ b/docs/newbs_git_resynchronize_a_branch.md
@@ -0,0 +1,71 @@
+# Resynchronizing an Out-of-Sync Git Branch
+
+Suppose you have committed to your `master` branch, and now need to update your QMK repository. You could `git pull` QMK's `master` branch into your own, but GitHub will tell you that your branch is a number of commits ahead of `qmk:master`, which can create issues if you want to make a pull request to QMK.
+
+?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
+
+## Backing Up the Changes on Your Own Master Branch (Optional)
+
+No one wants to lose work if it can be helped. If you want to save the changes you've already made to your `master` branch, the simplest way to do so is to simply create a duplicate of your "dirty" `master` branch:
+
+```sh
+git branch old_master master
+```
+
+Now you have a branch named `old_master` that is a duplicate of your `master` branch.
+
+## Resynchronizing Your Branch
+
+Now it's time to resynchronize your `master` branch. For this step, you'll want to have QMK's repository configured as a remote in Git. To check your configured remotes, run `git remote -v`, which should return something similar to:
+
+```sh
+QMKuser ~/qmk_firmware (master)
+$ git remote -v
+origin https://github.com/<your_username>/qmk_firmware.git (fetch)
+origin https://github.com/<your_username>/qmk_firmware.git (push)
+upstream https://github.com/qmk/qmk_firmware.git (fetch)
+upstream https://github.com/qmk/qmk_firmware.git (push)
+```
+
+If you only see one fork referenced:
+
+```sh
+QMKuser ~/qmk_firmware (master)
+$ git remote -v
+origin https://github.com/qmk/qmk_firmware.git (fetch)
+origin https://github.com/qmk/qmk_firmware.git (push)
+```
+
+add a new remote with:
+
+```sh
+git remote add upstream https://github.com/qmk/qmk_firmware.git
+```
+
+Then, redirect the `origin` remote to your own fork with:
+
+```sh
+git remote set-url origin https://github.com/<your_username>/qmk_firmware.git
+```
+
+Now that you have both remotes configured, you need to update the references for the upstream repository, which is QMK's, by running:
+
+```sh
+git fetch upstream
+```
+
+At this point, resynchronize your branch to QMK's by running:
+
+```sh
+git reset --hard upstream/master
+```
+
+These steps will update the repository on your computer, but your GitHub fork will still be out of sync. To resynchronize your fork on GitHub, you need to push to your fork, instructing Git to override any remote changes that are not reflected in your local repository. To do this, run:
+
+```sh
+git push --force-with-lease
+```
+
+!> **DO NOT** run `git push --force-with-lease` on a fork to which other users post commits. This will erase their commits.
+
+Now your GitHub fork, your local files, and QMK's repository are all the same. From here you can make further needed changes ([use a branch!](newbs_git_using_your_master_branch.md#making-changes)) and post them as normal.
diff --git a/docs/newbs_git_using_your_master_branch.md b/docs/newbs_git_using_your_master_branch.md
new file mode 100644
index 0000000000..2032b83b2f
--- /dev/null
+++ b/docs/newbs_git_using_your_master_branch.md
@@ -0,0 +1,74 @@
+# Your Fork's Master: Update Often, Commit Never
+
+It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
+
+To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
+
+## Updating your master branch
+
+To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
+
+```
+git remote add upstream https://github.com/qmk/qmk_firmware.git
+```
+
+?> The name `upstream` is arbitrary, but a common convention; you can give the QMK remote any name that suits you. Git's `remote` command uses the syntax `git remote add <name> <url>`, `<name>` being shorthand for the remote repo. This name can be used with many Git commands, including but not limited to `fetch`, `pull` and `push`, to specify the remote repo on which to act.
+
+To verify that the repository has been added, run `git remote -v`, which should return the following:
+
+```
+$ git remote -v
+origin https://github.com/<your_username>/qmk_firmware.git (fetch)
+origin https://github.com/<your_username>/qmk_firmware.git (push)
+upstream https://github.com/qmk/qmk_firmware.git (fetch)
+upstream https://github.com/qmk/qmk_firmware.git (push)
+```
+
+Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
+
+To update your fork's master, run the following, hitting the Enter key after each line:
+
+```
+git checkout master
+git fetch upstream
+git pull upstream master
+git push origin master
+```
+
+This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
+
+## Making Changes
+
+To make changes, create a new branch by entering:
+
+```
+git checkout -b dev_branch
+git push --set-upstream origin dev_branch
+```
+
+This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
+
+?> With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`.
+
+You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
+
+By default `git checkout -b` will base your new branch on the branch that is currently checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
+
+```
+git checkout -b dev_branch master
+```
+
+Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
+
+```
+git add path/to/updated_file
+git commit -m "My commit message."
+```
+
+`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
+
+?> If you've changed multiple files, you can use `git add -- path/to/file1 path/to/file2 ...` to add all your desired files.
+
+## Publishing Your Changes
+
+The last step is to push your changes to your fork. To do this, enter `git push`. Git will then publish the current state of `dev_branch` to your fork.
diff --git a/docs/proton_c_conversion.md b/docs/proton_c_conversion.md
index 8014a35e04..dc0a3f4849 100644
--- a/docs/proton_c_conversion.md
+++ b/docs/proton_c_conversion.md
@@ -29,3 +29,5 @@ These are defaults based on what has been implemented for ARM boards.
| [Audio](feature_audio.md) | Enabled |
| [RGB Lighting](feature_rgblight.md) | Disabled |
| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
+| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
+| [Split keyboards](feature_split_keyboard.md) | Not supported yet |
diff --git a/docs/pt-br/README.md b/docs/pt-br/README.md
new file mode 100644
index 0000000000..7cff6ce621
--- /dev/null
+++ b/docs/pt-br/README.md
@@ -0,0 +1,31 @@
+# Quantum Mechanical Keyboard Firmware
+
+[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
+[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
+[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
+[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
+[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
+[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
+
+## O que é o firmware QMK?
+QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mantém o QMK Firmware, o QMK Toolbox, qmk.fm e suas documentações. O QMK Firmware é um software embarcado ("firmware") de teclado baseado no [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) com alguns recursos úteis para os controladores Atmel AVR e, mais especificamente, na [linha de produtos OLKB](http://olkb.com), o teclado [ErgoDox EZ](http://www.ergodox-ez.com) e a [linha de produtos Clueboard](http://clueboard.co/). Também foi portado para chips ARM usando o ChibiOS. Você pode usá-lo no seu próprio teclado com fio ou personalizado.
+
+## Como obter e usar o QMK
+
+Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
+
+Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
+
+## Como compilar
+
+Antes de compilar, você precisará [instalar um ambiente específico](getting_started_build_tools.md) para o desenvolvimento em plataforma AVR e/ou ARM; vez que isto for feito, você usará o comando `make` para criar um teclado e um mapa de teclas com a seguinte notação:
+
+ make planck/rev4:default
+
+Isso compilaria a revisão `rev4` do teclado ` planck` com o mapa de teclas `default`. Nem todos os teclados têm revisões (também chamadas de _subprojects_ ou _folders_); nesse caso, a revisão pode ser omitida:
+
+ make preonic:default
+
+## Como personalizar
+
+O QMK tem muitos [recursos](features.md) para explorar e uma boa quantidade de [documentação de referência](http://docs.qmk.fm) para explorar. A maioria dos recursos é aproveitada modificando seu [keymap](keymap.md) e alterando os [keycodes](keycodes.md).
diff --git a/docs/pt-br/_summary.md b/docs/pt-br/_summary.md
new file mode 100644
index 0000000000..27efd73ab2
--- /dev/null
+++ b/docs/pt-br/_summary.md
@@ -0,0 +1,121 @@
+* [Complete Newbs Guide](pt-br/newbs.md)
+ * [Getting Started](pt-br/newbs_getting_started.md)
+ * [Building Your First Firmware](pt-br/newbs_building_firmware.md)
+ * [Flashing Firmware](pt-br/newbs_flashing.md)
+ * [Testing and Debugging](pt-br/newbs_testing_debugging.md)
+ * [Git Best Practices](pt-br/newbs_best_practices.md)
+ * [Learning Resources](pt-br/newbs_learn_more_resources.md)
+
+* [QMK Basics](pt-br/README.md)
+ * [QMK Introduction](pt-br/getting_started_introduction.md)
+ * [QMK CLI](pt-br/cli.md)
+ * [QMK CLI Config](pt-br/cli_configuration.md)
+ * [Contributing to QMK](pt-br/contributing.md)
+ * [How to Use Github](pt-br/getting_started_github.md)
+ * [Getting Help](pt-br/getting_started_getting_help.md)
+
+* [Breaking Changes](pt-br/breaking_changes.md)
+ * [2019 Aug 30](pt-br/ChangeLog/20190830.md)
+
+* [FAQ](faq.md)
+ * [General FAQ](pt-br/faq_general.md)
+ * [Build/Compile QMK](pt-br/faq_build.md)
+ * [Debugging/Troubleshooting QMK](pt-br/faq_debug.md)
+ * [Keymap](pt-br/faq_keymap.md)
+ * [Driver Installation with Zadig](pt-br/driver_installation_zadig.md)
+
+* Detailed Guides
+ * [Install Build Tools](pt-br/getting_started_build_tools.md)
+ * [Vagrant Guide](pt-br/getting_started_vagrant.md)
+ * [Build/Compile Instructions](pt-br/getting_started_make_guide.md)
+ * [Flashing Firmware](pt-br/flashing.md)
+ * [Customizing Functionality](pt-br/custom_quantum_functions.md)
+ * [Keymap Overview](pt-br/keymap.md)
+
+* [Hardware](hardware.md)
+ * [AVR Processors](pt-br/hardware_avr.md)
+ * [Drivers](pt-br/hardware_drivers.md)
+
+* Reference
+ * [Keyboard Guidelines](pt-br/hardware_keyboard_guidelines.md)
+ * [Config Options](pt-br/config_options.md)
+ * [Keycodes](pt-br/keycodes.md)
+ * [Coding Conventions - C](pt-br/coding_conventions_c.md)
+ * [Coding Conventions - Python](pt-br/coding_conventions_python.md)
+ * [Documentation Best Practices](pt-br/documentation_best_practices.md)
+ * [Documentation Templates](pt-br/documentation_templates.md)
+ * [Glossary](pt-br/reference_glossary.md)
+ * [Unit Testing](pt-br/unit_testing.md)
+ * [Useful Functions](pt-br/ref_functions.md)
+ * [Configurator Support](pt-br/reference_configurator_support.md)
+ * [info.json Format](pt-br/reference_info_json.md)
+ * [Python CLI Development](pt-br/cli_development.md)
+
+* [Features](pt-br/features.md)
+ * [Basic Keycodes](pt-br/keycodes_basic.md)
+ * [US ANSI Shifted Keys](pt-br/keycodes_us_ansi_shifted.md)
+ * [Quantum Keycodes](pt-br/quantum_keycodes.md)
+ * [Advanced Keycodes](pt-br/feature_advanced_keycodes.md)
+ * [Audio](pt-br/feature_audio.md)
+ * [Auto Shift](pt-br/feature_auto_shift.md)
+ * [Backlight](pt-br/feature_backlight.md)
+ * [Bluetooth](pt-br/feature_bluetooth.md)
+ * [Bootmagic](pt-br/feature_bootmagic.md)
+ * [Combos](pt-br/feature_combo.md)
+ * [Command](pt-br/feature_command.md)
+ * [Debounce API](pt-br/feature_debounce_type.md)
+ * [DIP Switch](pt-br/feature_dip_switch.md)
+ * [Dynamic Macros](pt-br/feature_dynamic_macros.md)
+ * [Encoders](pt-br/feature_encoders.md)
+ * [Grave Escape](pt-br/feature_grave_esc.md)
+ * [Haptic Feedback](pt-br/feature_haptic_feedback.md)
+ * [HD44780 LCD Controller](pt-br/feature_hd44780.md)
+ * [Key Lock](pt-br/feature_key_lock.md)
+ * [Layouts](pt-br/feature_layouts.md)
+ * [Leader Key](pt-br/feature_leader_key.md)
+ * [LED Matrix](pt-br/feature_led_matrix.md)
+ * [Macros](pt-br/feature_macros.md)
+ * [Mouse Keys](pt-br/feature_mouse_keys.md)
+ * [OLED Driver](pt-br/feature_oled_driver.md)
+ * [One Shot Keys](pt-br/feature_advanced_keycodes.md#one-shot-keys)
+ * [Pointing Device](pt-br/feature_pointing_device.md)
+ * [PS/2 Mouse](pt-br/feature_ps2_mouse.md)
+ * [RGB Lighting](pt-br/feature_rgblight.md)
+ * [RGB Matrix](pt-br/feature_rgb_matrix.md)
+ * [Space Cadet](pt-br/feature_space_cadet.md)
+ * [Split Keyboard](pt-br/feature_split_keyboard.md)
+ * [Stenography](pt-br/feature_stenography.md)
+ * [Swap Hands](pt-br/feature_swap_hands.md)
+ * [Tap Dance](pt-br/feature_tap_dance.md)
+ * [Terminal](pt-br/feature_terminal.md)
+ * [Thermal Printer](pt-br/feature_thermal_printer.md)
+ * [Unicode](pt-br/feature_unicode.md)
+ * [Userspace](pt-br/feature_userspace.md)
+ * [Velocikey](pt-br/feature_velocikey.md)
+
+* For Makers and Modders
+ * [Hand Wiring Guide](pt-br/hand_wire.md)
+ * [ISP Flashing Guide](pt-br/isp_flashing_guide.md)
+ * [ARM Debugging Guide](pt-br/arm_debugging.md)
+ * [I2C Driver](pt-br/i2c_driver.md)
+ * [GPIO Controls](pt-br/internals_gpio_control.md)
+ * [Proton C Conversion](pt-br/proton_c_conversion.md)
+
+* For a Deeper Understanding
+ * [How Keyboards Work](pt-br/how_keyboards_work.md)
+ * [Understanding QMK](pt-br/understanding_qmk.md)
+
+* Other Topics
+ * [Using Eclipse with QMK](pt-br/other_eclipse.md)
+ * [Using VSCode with QMK](pt-br/other_vscode.md)
+ * [Support](pt-br/support.md)
+ * [How to add translations](pt-br/translating.md)
+
+* QMK Internals (In Progress)
+ * [Defines](pt-br/internals_defines.md)
+ * [Input Callback Reg](pt-br/internals_input_callback_reg.md)
+ * [Midi Device](pt-br/internals_midi_device.md)
+ * [Midi Device Setup Process](pt-br/internals_midi_device_setup_process.md)
+ * [Midi Util](pt-br/internals_midi_util.md)
+ * [Send Functions](pt-br/internals_send_functions.md)
+ * [Sysex Tools](pt-br/internals_sysex_tools.md)
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
index a2ba34c32d..26ce6d2447 100644
--- a/docs/quantum_keycodes.md
+++ b/docs/quantum_keycodes.md
@@ -14,15 +14,5 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
|`DEBUG` | |Toggle debug mode |
|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
-|`KC_LSPO` | |Left Shift when held, `(` when tapped |
-|`KC_RSPC` | |Right Shift when held, `)` when tapped |
-|`KC_LCPO` | |Left Control when held, `(` when tapped |
-|`KC_RCPC` | |Right Control when held, `)` when tapped |
-|`KC_LAPO` | |Left Alt when held, `(` when tapped |
-|`KC_RAPC` | |Right Alt when held, `)` when tapped |
-|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
-|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
-|`M(n)` | |Call macro `n` |
-|`MACROTAP(n)` | |Macro-tap `n` idk FIXME |
diff --git a/docs/ru-ru/_summary.md b/docs/ru-ru/_summary.md
new file mode 100644
index 0000000000..3269ac86dc
--- /dev/null
+++ b/docs/ru-ru/_summary.md
@@ -0,0 +1,123 @@
+* [Complete Newbs Guide](ru-ru/newbs.md)
+ * [Getting Started](ru-ru/newbs_getting_started.md)
+ * [Building Your First Firmware](ru-ru/newbs_building_firmware.md)
+ * [Flashing Firmware](ru-ru/newbs_flashing.md)
+ * [Testing and Debugging](ru-ru/newbs_testing_debugging.md)
+ * [Git Best Practices](ru-ru/newbs_best_practices.md)
+ * [Learning Resources](ru-ru/newbs_learn_more_resources.md)
+
+* [QMK Basics](ru-ru/README.md)
+ * [QMK Introduction](ru-ru/getting_started_introduction.md)
+ * [QMK CLI](ru-ru/cli.md)
+ * [QMK CLI Config](ru-ru/cli_configuration.md)
+ * [Contributing to QMK](ru-ru/contributing.md)
+ * [How to Use Github](ru-ru/getting_started_github.md)
+ * [Getting Help](ru-ru/getting_started_getting_help.md)
+
+* [Breaking Changes](ru-ru/breaking_changes.md)
+ * [2019 Aug 30](ru-ru/ChangeLog/20190830.md)
+
+* [FAQ](ru-ru/faq.md)
+ * [General FAQ](ru-ru/faq_general.md)
+ * [Build/Compile QMK](ru-ru/faq_build.md)
+ * [Debugging/Troubleshooting QMK](ru-ru/faq_debug.md)
+ * [Keymap](ru-ru/faq_keymap.md)
+ * [Driver Installation with Zadig](ru-ru/driver_installation_zadig.md)
+
+* Detailed Guides
+ * [Install Build Tools](ru-ru/getting_started_build_tools.md)
+ * [Vagrant Guide](ru-ru/getting_started_vagrant.md)
+ * [Build/Compile Instructions](ru-ru/getting_started_make_guide.md)
+ * [Flashing Firmware](ru-ru/flashing.md)
+ * [Customizing Functionality](ru-ru/custom_quantum_functions.md)
+ * [Keymap Overview](ru-ru/keymap.md)
+
+* [Hardware](ru-ru/hardware.md)
+ * [Compatible Microcontrollers](ru-ru/compatible_microcontrollers.md)
+ * [AVR Processors](ru-ru/hardware_avr.md)
+ * [Drivers](ru-ru/hardware_drivers.md)
+
+* Reference
+ * [Keyboard Guidelines](ru-ru/hardware_keyboard_guidelines.md)
+ * [Config Options](ru-ru/config_options.md)
+ * [Keycodes](ru-ru/keycodes.md)
+ * [Coding Conventions - C](ru-ru/coding_conventions_c.md)
+ * [Coding Conventions - Python](ru-ru/coding_conventions_python.md)
+ * [Documentation Best Practices](ru-ru/documentation_best_practices.md)
+ * [Documentation Templates](ru-ru/documentation_templates.md)
+ * [Glossary](ru-ru/reference_glossary.md)
+ * [Unit Testing](ru-ru/unit_testing.md)
+ * [Useful Functions](ru-ru/ref_functions.md)
+ * [Configurator Support](ru-ru/reference_configurator_support.md)
+ * [info.json Format](ru-ru/reference_info_json.md)
+ * [Python CLI Development](ru-ru/cli_development.md)
+
+* [Features](ru-ru/features.md)
+ * [Basic Keycodes](ru-ru/keycodes_basic.md)
+ * [US ANSI Shifted Keys](ru-ru/keycodes_us_ansi_shifted.md)
+ * [Quantum Keycodes](ru-ru/quantum_keycodes.md)
+ * [Advanced Keycodes](ru-ru/feature_advanced_keycodes.md)
+ * [Audio](ru-ru/feature_audio.md)
+ * [Auto Shift](ru-ru/feature_auto_shift.md)
+ * [Backlight](ru-ru/feature_backlight.md)
+ * [Bluetooth](ru-ru/feature_bluetooth.md)
+ * [Bootmagic](ru-ru/feature_bootmagic.md)
+ * [Combos](ru-ru/feature_combo.md)
+ * [Command](ru-ru/feature_command.md)
+ * [Debounce API](ru-ru/feature_debounce_type.md)
+ * [DIP Switch](ru-ru/feature_dip_switch.md)
+ * [Dynamic Macros](ru-ru/feature_dynamic_macros.md)
+ * [Encoders](ru-ru/feature_encoders.md)
+ * [Grave Escape](ru-ru/feature_grave_esc.md)
+ * [Haptic Feedback](ru-ru/feature_haptic_feedback.md)
+ * [HD44780 LCD Controller](ru-ru/feature_hd44780.md)
+ * [Key Lock](ru-ru/feature_key_lock.md)
+ * [Layouts](ru-ru/feature_layouts.md)
+ * [Leader Key](ru-ru/feature_leader_key.md)
+ * [LED Matrix](ru-ru/feature_led_matrix.md)
+ * [Macros](ru-ru/feature_macros.md)
+ * [Mouse Keys](ru-ru/feature_mouse_keys.md)
+ * [OLED Driver](ru-ru/feature_oled_driver.md)
+ * [One Shot Keys](ru-ru/feature_advanced_keycodes.md#one-shot-keys)
+ * [Pointing Device](ru-ru/feature_pointing_device.md)
+ * [PS/2 Mouse](ru-ru/feature_ps2_mouse.md)
+ * [RGB Lighting](ru-ru/feature_rgblight.md)
+ * [RGB Matrix](ru-ru/feature_rgb_matrix.md)
+ * [Space Cadet](ru-ru/feature_space_cadet.md)
+ * [Split Keyboard](ru-ru/feature_split_keyboard.md)
+ * [Stenography](ru-ru/feature_stenography.md)
+ * [Swap Hands](ru-ru/feature_swap_hands.md)
+ * [Tap Dance](ru-ru/feature_tap_dance.md)
+ * [Terminal](ru-ru/feature_terminal.md)
+ * [Thermal Printer](ru-ru/feature_thermal_printer.md)
+ * [Unicode](ru-ru/feature_unicode.md)
+ * [Userspace](ru-ru/feature_userspace.md)
+ * [Velocikey](ru-ru/feature_velocikey.md)
+
+* For Makers and Modders
+ * [Hand Wiring Guide](ru-ru/hand_wire.md)
+ * [ISP Flashing Guide](ru-ru/isp_flashing_guide.md)
+ * [ARM Debugging Guide](ru-ru/arm_debugging.md)
+ * [I2C Driver](ru-ru/i2c_driver.md)
+ * [WS2812 Driver](ru-ru/ws2812_driver.md)
+ * [GPIO Controls](ru-ru/internals_gpio_control.md)
+ * [Proton C Conversion](ru-ru/proton_c_conversion.md)
+
+* For a Deeper Understanding
+ * [How Keyboards Work](ru-ru/how_keyboards_work.md)
+ * [Understanding QMK](ru-ru/understanding_qmk.md)
+
+* Other Topics
+ * [Using Eclipse with QMK](ru-ru/other_eclipse.md)
+ * [Using VSCode with QMK](ru-ru/other_vscode.md)
+ * [Support](ru-ru/support.md)
+ * [Translating the QMK Docs](ru-ru/translating.md)
+
+* QMK Internals (In Progress)
+ * [Defines](ru-ru/internals_defines.md)
+ * [Input Callback Reg](ru-ru/internals_input_callback_reg.md)
+ * [Midi Device](ru-ru/internals_midi_device.md)
+ * [Midi Device Setup Process](ru-ru/internals_midi_device_setup_process.md)
+ * [Midi Util](ru-ru/internals_midi_util.md)
+ * [Send Functions](ru-ru/internals_send_functions.md)
+ * [Sysex Tools](ru-ru/internals_sysex_tools.md)
diff --git a/docs/ru-ru/becoming_a_qmk_collaborator.md b/docs/ru-ru/becoming_a_qmk_collaborator.md
new file mode 100644
index 0000000000..653f01ac87
--- /dev/null
+++ b/docs/ru-ru/becoming_a_qmk_collaborator.md
@@ -0,0 +1,9 @@
+# Стать Ñоавтором QMK
+
+Соавтор QMK - Ñто производитель или разработчик клавиатуры, который заинтереÑован в том, чтобы помочь QMK выраÑти. Ð”Ð»Ñ Ñтого он полноÑтью поддерживает Ñвои клавиатуры, поощрÑет пользователей и клиентов Ñоздавать новый функционал, идеи и раÑкладки клавиатур. Мы вÑегда ÑтремимÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑ‚ÑŒ больше клавиатур и Ñоавторов, но нам важно, чтобы они ÑоответÑтвовали Ñледующим требованиÑм:
+
+* **Иметь печатную плату на продажу.** К Ñожалению, у Ñобранных вручную клавиатур Ñлишком много вариаций и ÑложноÑтей.
+* **Поддерживать вашу клавиатуру в QMK.** Это может потребовать проÑто начальной наÑтройки, чтобы ваша клавиатура заработала. Ðо поддержка также может заключатьÑÑ Ð² адаптации изменений Ñдра QMK, которые ÑпоÑобны Ñломать или Ñделать избыточным любой пользовательÑкий код.
+* **ОдобрÑÑ‚ÑŒ и производить ÑлиÑние пулреквеÑтов Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ клавиатуры.** Мы призываем пользователей делитьÑÑ Ñвоими раÑкладками клавиатур, чтобы другие могли их видеть и опиратьÑÑ Ð½Ð° них при Ñоздании Ñвоих ÑобÑтвенных.
+
+ЕÑли вы чувÑтвуете, что удовлетворÑете Ñтим требованиÑм, напишите нам пиÑьмо по адреÑу hello@qmk.fm Ñ ÐºÑ€Ð°Ñ‚ÐºÐ¸Ð¼ опиÑанием и ÑÑылками на вашу клавиатуру!
diff --git a/docs/ru-ru/getting_started_github.md b/docs/ru-ru/getting_started_github.md
index 8a0fd07a27..3b4940dd15 100644
--- a/docs/ru-ru/getting_started_github.md
+++ b/docs/ru-ru/getting_started_github.md
@@ -15,17 +15,23 @@ GitHub может показатьÑÑ Ð½ÐµÑколько Ñложным длÑ
![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
-Теперь введите `git clone` в командную Ñтроку, а затем вÑтавьте ÑÑылку:
+Теперь введите `git clone --recurse-submodules ` в командную Ñтроку, а затем вÑтавьте ÑÑылку:
```
-user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
+user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
-remote: Counting objects: 46625, done.
-remote: Compressing objects: 100% (2/2), done.
-remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
-Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
-Resolving deltas: 100% (29362/29362), done.
-Checking out files: 100% (2799/2799), done.
+remote: Enumerating objects: 9, done.
+remote: Counting objects: 100% (9/9), done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
+Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
+Resolving deltas: 100% (119972/119972), done.
+...
+Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
+Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
+Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
+Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
+Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
```
Теперь у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ форк QMK на вашем локальном компьютере, и вы можете добавить Ñвою раÑкладку, Ñкомпилировать ее и прошить ей Ñвою клавиатуру. Как только вы будете довольны Ñвоими изменениÑми, еÑÑ‚ÑŒ возможноÑÑ‚ÑŒ добавить, зафикÑировать их и Ñделать коммит в Ñвой форк Ñледующим образом:
diff --git a/docs/ru-ru/getting_started_introduction.md b/docs/ru-ru/getting_started_introduction.md
new file mode 100644
index 0000000000..ccc4418068
--- /dev/null
+++ b/docs/ru-ru/getting_started_introduction.md
@@ -0,0 +1,58 @@
+# Введение
+
+Эта Ñтраница пытаетÑÑ Ð¾Ð±ÑŠÑÑнить оÑновную информацию, которую вы должны знать, чтобы работать Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¾Ð¼ QMK. ПредполагаетÑÑ, что вы знакомы Ñ Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸ÐµÐ¹ в оболочке Unix, но не предполагаетÑÑ, что вы знакомы Ñ C или Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñцией Ñ Ð¸Ñпользованием make.
+
+## Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ñтруктура QMK
+
+QMK - Ñто форк [Джуна Вако (Jun Wako)](https://github.com/tmk) проекта [tmk_keyboard](https://github.com/tmk/tmk_keyboard). Оригинальный код TMK Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñми можно найти в папке `tmk_core`. Ð”Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ QMK к проекту можно найти в папке `quantum`. Проекты клавиатур можно найти в папках `handwired` и `keyboard`.
+
+### Структура проÑтранÑтва пользователÑ
+
+Внутри папки `users` находитÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ пользователÑ. Это меÑто Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹, куда они могут помеÑтить код, чтобы иÑпользовать его Ñ Ñ€Ð°Ð·Ð½Ñ‹Ð¼Ð¸ клавиатурами. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации обратитеÑÑŒ к документации по [функциÑм пользовательÑкого проÑтранÑтва](ru-ru/feature_userspace.md).
+
+### Структура проекта клавиатуры
+
+Внутри папки `keyboards` еÑÑ‚ÑŒ подпапки `handwired` и еÑÑ‚ÑŒ подкаталоги поÑтавщиков и производителей, Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°, `clueboard` - Ñто каталог Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ проекта клавиатуры, например, `qmk_firmware/keyboards/clueboard/2x1800`. Ð’ нем вы найдете Ñледующую Ñтруктуру:
+* `keymaps/`: Различные раÑкладки клавиш, которые можно Ñобрать.
+* `rules.mk`: Файл, который уÑтанавливает параметры по умолчанию Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ "make". Ðе редактируйте Ñтот файл напрÑмую, вмеÑто Ñтого иÑпользуйте `rules.mk`, отноÑÑщийÑÑ Ðº конкретной раÑкладке.
+* `config.h`: Файл, который уÑтанавливает параметры времени компилÑции по умолчанию. Ðе редактируйте Ñтот файл напрÑмую, вмеÑто Ñтого иÑпользуйте `config.h`, отноÑÑщийÑÑ Ðº конкретной раÑкладке.
+* `info.json`: Файл наÑтройки раÑкладки Ð´Ð»Ñ QMK Configurator. ПоÑмотрите [Поддержку конфигуратора](ru-ru/reference_configurator_support.md) Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.
+* `readme.md`: Краткий обзор клавиатуры.
+* `<keyboardName>.h`: Ð’ Ñтом файле определÑетÑÑ Ñ€Ð°Ñкладка клавиатуры по матрице переключателей клавиатуры.
+* `<keyboardName>.c`: Ð’ Ñтом файле вы можете найти пользовательÑкий код Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹.
+
+Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации о Ñтруктуре проекта обратитеÑÑŒ к [РуководÑтву QMK по клавиатуре](ru-ru/hardware_keyboard_guidelines.md).
+
+### Структура раÑкладки клавиатуры
+
+Ð’ каждой папке раÑкладки клавиатуры могут быть найдены Ñледующие файлы. ОбÑзательным ÑвлÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ файл `keymap.c`, и еÑли оÑтальные файлы не найдены, то будут выбраны параметры по умолчанию.
+
+* `config.h`: наÑтройки вашей раÑкладки клавиатуры.
+* `keymap.c`: веÑÑŒ код вашей раÑкладки клавиатуры (обÑзателен).
+* `rules.mk`: активированные функции QMK.
+* `readme.md`: опиÑание вашей раÑкладки клавиш, как ее могут иÑпользовать другие, и объÑÑÐ½ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹. ПожалуйÑта, загрузите Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° ÑервиÑ, такой как imgur.
+
+# Файл `config.h`
+
+СущеÑтвует 3 возможных меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `config.h`:
+
+* клавиатура (`/keyboards/<keyboard>/config.h`)
+* проÑтранÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (`/users/<user>/config.h`)
+* раÑкладка клавиш (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
+
+СиÑтема Ñборки автоматичеÑки загружает файлы конфигурации в указанном выше порÑдке. ЕÑли вы хотите переопределить любую наÑтройку, заданную предыдущим `config.h`, вам Ñначала нужно будет включить некоторый шаблонный код Ð´Ð»Ñ Ð½Ð°Ñтроек, которые вы хотите изменить.
+
+```
+#pragma once
+```
+
+Затем, чтобы переопределить наÑтройку из предыдущего файла `config.h`, вы должны Ñделать `#undef` и `#define` Ð´Ð»Ñ Ð½ÐµÑ‘ Ñнова.
+
+Код и наÑтройка шаблона вмеÑте выглÑдÑÑ‚ так:
+```
+#pragma once
+
+// ÐŸÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´ÑÑ‚ÑÑ Ð·Ð´ÐµÑÑŒ!
+#undef MY_SETTING
+#define MY_SETTING 4
+```
diff --git a/docs/translating.md b/docs/translating.md
index 6eb268763a..4365817590 100644
--- a/docs/translating.md
+++ b/docs/translating.md
@@ -1,29 +1,55 @@
-# How to translate the QMK docs into different languages
+# Translating the QMK Docs
All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully.
A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder:
- * [QMK简介](zh-cn/getting_started_introduction.md)
+```markdown
+ * [QMK简介](zh-cn/getting_started_introduction.md)
+```
+
+All links to other docs pages must also be prefixed with the language folder. If the link is to a specific part of the page (ie. a certain heading), you must use the English ID for the heading, like so:
+
+```markdown
+[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
+
+## 建立你的环境 :id=set-up-your-environment
+```
Once you've finished translating a new language, you'll also need to modify the following files:
* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
- Each line should contain a country flag in the format `:us:` followed by the name represented in its own language:
-
- - [:cn: 中文](/zh-cn/)
+ Each line should contain a country flag as a [GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) followed by the name represented in its own language:
+
+ ```markdown
+ - [:cn: 中文](/zh-cn/)
+ ```
* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
- Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
-
- '/zh-cn/': '没有结果!',
+ Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
+
+ ```js
+ '/zh-cn/': '没有结果!',
+ ```
+
+ The `nameLink` object, for setting the "QMK Firmware" heading link in the sidebar, must also be added to:
+
+ ```js
+ '/zh-cn/': '/#/zh-cn/',
+ ```
-## Previewing the translations
+ And make sure to add the language folder in the `fallbackLanguages` list, so it will properly fall back to English instead of 404ing:
-Before opening a pull request, you can preview your additions if you have Python 3 installed by running this command in the `docs/` folder:
+ ```js
+ fallbackLanguages: [
+ // ...
+ 'zh-cn',
+ // ...
+ ],
+ ```
- python -m http.server 9000
+## Previewing the Translations
-and navigating to http://localhost:9000/ - you should be able to select your new language from the "Translations" menu at the top-right.
+See [Previewing the Documentation](contributing.md#previewing-the-documentation) for how to set up a local instance of the docs - you should be able to select your new language from the "Translations" menu at the top-right.
Once you're happy with your work, feel free to open a pull request!
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index 67481c458d..80b6948586 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -14,7 +14,7 @@ These LEDs are called "addressable" because instead of using a wire per color, e
|----------|--------------------|--------------------|
| bit bang | :heavy_check_mark: | :heavy_check_mark: |
| I2C | :heavy_check_mark: | |
-| SPI | | Soonâ„¢ |
+| SPI | | :heavy_check_mark: |
| PWM | | Soonâ„¢ |
## Driver configuration
@@ -40,3 +40,30 @@ Configure the hardware via your config.h:
#define WS2812_ADDRESS 0xb0 // default: 0xb0
#define WS2812_TIMEOUT 100 // default: 100
```
+
+### SPI
+Targeting STM32 boards where WS2812 support is offloaded to an SPI hardware device. The advantage is that the use of DMA offloads processing of the WS2812 protocol from the MCU. `RGB_DI_PIN` for this driver is the configured SPI MOSI pin. Due to the nature of repurposing SPI to drive the LEDs, the other SPI pins, MISO and SCK, **must** remain unused. To configure it, add this to your rules.mk:
+
+```make
+WS2812_DRIVER = spi
+```
+
+Configure the hardware via your config.h:
+```c
+#define WS2812_SPI SPID1 // default: SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 5 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
+```
+
+You must also turn on the SPI feature in your halconf.h and mcuconf.h
+
+#### Testing Notes
+
+While not an exhaustive list, the following table provides the scenarios that have been partially validated:
+
+| | SPI1 | SPI2 | SPI3 |
+|-|-|-|-|
+| f072 | ? | B15 :heavy_check_mark: | N/A |
+| f103 | A7 :heavy_check_mark: | B15 :heavy_check_mark: | N/A |
+| f303 | A7 :heavy_check_mark: B5 :heavy_check_mark: | B15 :heavy_check_mark: | B5 :heavy_check_mark: |
+
+*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.* \ No newline at end of file
diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md
index 9eb4ea777a..bb7e0130f0 100644
--- a/docs/zh-cn/README.md
+++ b/docs/zh-cn/README.md
@@ -19,7 +19,7 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开æºè½¯ä»¶ï¼ŒåŒ…æ‹
## 如何编译
-在你能编译之å‰, 你需è¦[部署环境](getting_started_build_tools.md) 用于 AVR or/and ARM å¼€å‘。完æˆåŽ, ä½ å¯ä»¥ä½¿ç”¨ `make` 命令æ¥ç¼–译一个键盘和布局使用以下命令:
+在你能编译之å‰, 你需è¦[部署环境](zh-cn/getting_started_build_tools.md) 用于 AVR or/and ARM å¼€å‘。完æˆåŽ, ä½ å¯ä»¥ä½¿ç”¨ `make` 命令æ¥ç¼–译一个键盘和布局使用以下命令:
make planck/rev4:default
@@ -29,4 +29,4 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开æºè½¯ä»¶ï¼ŒåŒ…æ‹
## 如何定制
-QMK 有许多 [特性](features.md)æ¥æŽ¢ç´¢ï¼Œä¹Ÿæœ‰å¾ˆå¤š [å‚考文档](http://docs.qmk.fm) 供您å‘掘。你å¯ä»¥é€šè¿‡ä¿®æ”¹ [布局](keymap.md)å’Œ[é”®ç ](keycodes.md)æ¥åˆ©ç”¨è®¸å¤šç‰¹æ€§ã€‚
+QMK 有许多 [特性](zh-cn/features.md)æ¥æŽ¢ç´¢ï¼Œä¹Ÿæœ‰å¾ˆå¤š [å‚考文档](http://docs.qmk.fm) 供您å‘掘。你å¯ä»¥é€šè¿‡ä¿®æ”¹ [布局](zh-cn/keymap.md)å’Œ[é”®ç ](zh-cn/keycodes.md)æ¥åˆ©ç”¨è®¸å¤šç‰¹æ€§ã€‚
diff --git a/docs/zh-cn/custom_quantum_functions.md b/docs/zh-cn/custom_quantum_functions.md
index 42ceba9cac..f2c6098dcb 100644
--- a/docs/zh-cn/custom_quantum_functions.md
+++ b/docs/zh-cn/custom_quantum_functions.md
@@ -1,31 +1,31 @@
-# ÈçºÎ¶¨ÖÆÄã¼üÅ̵ŦÄÜ
+# 如何定制你键盘的功能
-¶ÔÓںܶàÈËÀ´Ëµ¿ÍÖÆ»¯¼üÅ̿ɲ»Ö»ÊÇÏòÄãµÄµçÄÔ·¢ËÍÄã°´ÁËÄǸö¼þÕâô¼òµ¥¡£Äã¿Ï¶¨ÏëʵÏֱȼòµ¥°´¼üºÍºê¸ü¸´ÔӵŦÄÜ¡£QMKÓÐÄÜÈÃÄã×¢Èë´úÂëµÄ¹³×Ó, ¸²¸Ç¹¦ÄÜ, ÁíÍ⣬»¹¿ÉÒÔ×Ô¶¨Òå¼üÅÌÔÚ²»Í¬Çé¿öϵÄÐÐΪ¡£
+对于很多人æ¥è¯´å®¢åˆ¶åŒ–键盘å¯ä¸åªæ˜¯å‘你的电脑å‘é€ä½ æŒ‰äº†é‚£ä¸ªä»¶è¿™ä¹ˆç®€å•ã€‚你肯定想实现比简å•æŒ‰é”®å’Œå®æ›´å¤æ‚的功能。QMK有能让你注入代ç çš„é’©å­, 覆盖功能, å¦å¤–,还å¯ä»¥è‡ªå®šä¹‰é”®ç›˜åœ¨ä¸åŒæƒ…况下的行为。
-±¾Ò³²»¼Ù¶¨ÈκÎÌØÊâµÄQMK֪ʶ£¬µ«ÔĶÁ[Àí½âQMK](understanding_qmk.md)½«»áÔÚ¸ü»ù´¡µÄ²ãÃæ°ïÄãÀí½â·¢ÉúÁËʲô¡£
+本页ä¸å‡å®šä»»ä½•ç‰¹æ®Šçš„QMK知识,但阅读[ç†è§£QMK](understanding_qmk.md)将会在更基础的层é¢å¸®ä½ ç†è§£å‘生了什么。
-## A Word on Core vs ¼üÅÌ vs ²¼¾Ö
+## A Word on Core vs 键盘 vs 布局
-ÎÒÃÇ°Ñqmk×éÖ¯³ÉÒ»¸ö²ã´Î½á¹¹£º
+我们把qmk组织æˆä¸€ä¸ªå±‚次结构:
* Core (`_quantum`)
* Keyboard/Revision (`_kb`)
* Keymap (`_user`)
-ÏÂÃæÃèÊöµÄÿһ¸öº¯Êý¶¼¿ÉÒÔÔÚ¶¨ÒåÉϼÓÒ»¸ö`_kb()`»ò `_user()` ºó׺¡£ ½¨ÒéÔÚ¼üÅÌ/ÐÞ¶©²ãʹÓÃ`_kb()`ºó׺£¬ÔÚ²¼¾Ö²ãʹÓÃ`_user()`ºó׺¡£
+下é¢æè¿°çš„æ¯ä¸€ä¸ªå‡½æ•°éƒ½å¯ä»¥åœ¨å®šä¹‰ä¸ŠåŠ ä¸€ä¸ª`_kb()`或 `_user()` åŽç¼€ã€‚ 建议在键盘/修订层使用`_kb()`åŽç¼€ï¼Œåœ¨å¸ƒå±€å±‚使用`_user()`åŽç¼€ã€‚
-ÔÚ¼üÅÌ/ÐÞ¶©²ã¶¨Ò庯Êýʱ£¬`_kb()`ÔÚÖ´ÐÐÈκδúÂëÇ°Ïȵ÷ÓÃ`_user()`ÊDZØÒªµÄ£¬²»È»²¼¾Ö²ãº¯Êý¾Í²»Òª±»µ÷Óá£
-<!-- ·­ÒëÎÊÌ⣺ÉÏÃæÄǾ䷭ÒëµÄ²»Ì«ºÃ-->
-# ×Ô¶¨Òå¼üÂë
+在键盘/修订层定义函数时,`_kb()`在执行任何代ç å‰å…ˆè°ƒç”¨`_user()`是必è¦çš„,ä¸ç„¶å¸ƒå±€å±‚函数就ä¸è¦è¢«è°ƒç”¨ã€‚
+<!-- 翻译问题:上é¢é‚£å¥ç¿»è¯‘çš„ä¸å¤ªå¥½-->
+# 自定义键ç 
-µ½Ä¿Ç°ÎªÖ¹£¬×î³£¼ûµÄÈÎÎñÊǸü¸ÄÏÖÓмüÂëµÄÐÐΪ»ò´´½¨ÐµļüÂë¡£´Ó´úÂë½Ç¶ÈÀ´¿´ÕâЩ²Ù×÷¶¼ºÜÏàËÆ¡£
+到目å‰ä¸ºæ­¢ï¼Œæœ€å¸¸è§çš„任务是更改现有键ç çš„行为或创建新的键ç ã€‚从代ç è§’度æ¥çœ‹è¿™äº›æ“作都很相似。
-## ¶¨ÒåÒ»¸öмüÂë
+## 定义一个新键ç 
-´´½¨¼üÂëµÚÒ»²½£¬ÏÈö¾Ù³öËüÈ«²¿£¬Ò²¾ÍÊǸø¼üÂëÆð¸öÃû×Ö²¢·ÖÅäΨһÊýÖµ¡£QMKûÓÐÖ±½ÓÏÞÖÆ×î´ó¼üÂëÖµ´óС£¬¶øÊÇÌṩÁËÒ»¸ö`SAFE_RANGE`ºê¡£Äã¿ÉÒÔÔÚö¾ÙʱÓÃ`SAFE_RANGE`À´±£Ö¤ÄãÈ¡µÃÁËΨһµÄ¼üÂëÖµ¡£
+创建键ç ç¬¬ä¸€æ­¥ï¼Œå…ˆæžšä¸¾å‡ºå®ƒå…¨éƒ¨ï¼Œä¹Ÿå°±æ˜¯ç»™é”®ç èµ·ä¸ªå字并分é…唯一数值。QMK没有直接é™åˆ¶æœ€å¤§é”®ç å€¼å¤§å°ï¼Œè€Œæ˜¯æ供了一个`SAFE_RANGE`å®ã€‚ä½ å¯ä»¥åœ¨æžšä¸¾æ—¶ç”¨`SAFE_RANGE`æ¥ä¿è¯ä½ å–得了唯一的键ç å€¼ã€‚
-ÕâÓÐö¾ÙÁ½¸ö¼üÂëµÄÀý×Ó¡£°ÑÕâ¿é¼Óµ½`keymap.c`µÄ»°Äã¾ÍÔÚ²¼¾ÖÖÐÄÜÓÃ`FOO`ºÍ`BAR`ÁË¡£
+这有枚举两个键ç çš„例å­ã€‚把这å—加到`keymap.c`çš„è¯ä½ å°±åœ¨å¸ƒå±€ä¸­èƒ½ç”¨`FOO`å’Œ`BAR`了。
```c
enum my_keycodes {
@@ -34,46 +34,46 @@ enum my_keycodes {
};
```
-## Ϊ¼üÂëµÄÐÐΪ±à³Ì
+## 为键ç çš„行为编程
-µ±Ä㸲¸ÇÒ»¸öÒÑ´æÔÚ°´¼üµÄÐÐΪʱ£¬»ò½«Õâ¸öÐÐΪ¸³¸øмüʱ£¬ÄãÒªÓÃ`process_record_kb()`ºÍ`process_record_user()`º¯Êý¡£ÕâÁ©º¯ÊýÔÚ¼ü´¦ÀíÖÐÕæʵ¼üʼþ±»´¦ÀíÇ°±»QMKµ÷Óá£Èç¹ûÕâÁ©º¯Êý·µ»Ø`true`£¬QMK½«»áÓÃÕý³£µÄ·½Ê½´¦Àí¼üÂë¡£ÕâÑù¿ÉÒԺܷ½±ãµÄÀ©Õ¹¼üÂëµÄ¹¦Äܶø²»ÊÇÌæ»»Ëü¡£Èç¹ûº¯Êý·µ»Ø`false` QMK»áÌø¹ýÕý³£¼ü´¦Àí£¬È»ºó·¢Ëͼü×Ó̧Æð»¹ÊÇ°´ÏÂʼþ¾ÍÓÉÄã¾ö¶¨ÁË¡£
+当你覆盖一个已存在按键的行为时,或将这个行为赋给新键时,你è¦ç”¨`process_record_kb()`å’Œ`process_record_user()`函数。这俩函数在键处ç†ä¸­çœŸå®žé”®äº‹ä»¶è¢«å¤„ç†å‰è¢«QMK调用。如果这俩函数返回`true`,QMK将会用正常的方å¼å¤„ç†é”®ç ã€‚这样å¯ä»¥å¾ˆæ–¹ä¾¿çš„扩展键ç çš„功能而ä¸æ˜¯æ›¿æ¢å®ƒã€‚如果函数返回`false` QMK会跳过正常键处ç†ï¼Œç„¶åŽå‘é€é”®å­æŠ¬èµ·è¿˜æ˜¯æŒ‰ä¸‹äº‹ä»¶å°±ç”±ä½ å†³å®šäº†ã€‚
-µ±Ä³¸ö¼ü°´Ï»òÊÍ·ÅʱÕâÁ©º¯Êý»á±»µ÷Óá£
+当æŸä¸ªé”®æŒ‰ä¸‹æˆ–释放时这俩函数会被调用。
-### process_record_user()`º¯ÊýʾÀýʵÏÖ
+### process_record_user()`函数示例实现
-Õâ¸öÀý×Ó×öÁËÁ½¸öÊ¡£×Ô¶¨ÒåÁËÒ»¸ö½Ð×ö`FOO`µÄ¼üÂëµÄÐÐΪ£¬²¢²¹³äÁËÔÚ°´Ï»سµÊ±²¥·ÅÒô·û¡£
+这个例å­åšäº†ä¸¤ä¸ªäº‹ã€‚自定义了一个å«åš`FOO`çš„é”®ç çš„行为,并补充了在按下回车时播放音符。
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case FOO:
if (record->event.pressed) {
- // °´ÏÂʱ×öЩʲô
+ // 按下时åšäº›ä»€ä¹ˆ
} else {
- // ÊÍ·Åʱ×öЩʲô
+ // 释放时åšäº›ä»€ä¹ˆ
}
- return false; // Ìø¹ý´Ë¼üµÄËùÓнøÒ»²½´¦Àí
+ return false; // 跳过此键的所有进一步处ç†
case KC_ENTER:
- // µ±°´Ï»سµÊ±²¥·ÅÒô·û
+ // 当按下回车时播放音符
if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty);
}
- return true; // ÈÃQMK´¥·¢»Ø³µ°´ÏÂ/ÊÍ·Åʼþ
+ return true; // 让QMK触å‘回车按下/释放事件
default:
- return true; // Õý³£´¦ÀíÆäËû¼üÂë
+ return true; // 正常处ç†å…¶ä»–é”®ç 
}
}
```
-### `process_record_*` º¯ÊýÎĵµ
+### `process_record_*` 函数文档
-* ¼üÅÌ/ÐÞ¶©: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
-* ²¼¾Ö: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
+* 键盘/修订: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
+* 布局: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
-`keycode(¼üÂë)`²ÎÊýÊÇÔÚ²¼¾ÖÉ϶¨ÒåµÄ£¬±ÈÈç`MO(1)`, `KC_L`, µÈµÈ¡£ ÄãÒªÓà `switch...case` ¿éÀ´´¦ÀíÕâЩʼþ¡£
+`keycode(é”®ç )`å‚数是在布局上定义的,比如`MO(1)`, `KC_L`, 等等。 ä½ è¦ç”¨ `switch...case` å—æ¥å¤„ç†è¿™äº›äº‹ä»¶ã€‚
-`record`²ÎÊýº¬ÓÐʵ¼Ê°´¼üµÄÐÅÏ¢£º
+`record`å‚æ•°å«æœ‰å®žé™…按键的信æ¯ï¼š
```c
keyrecord_t record {
@@ -88,9 +88,9 @@ keyrecord_t record {
}
```
-# LED¿ØÖÆ
+# LED控制
-qmkÌṩÁ˶ÁÈ¡HID¹æ·¶°üº¬µÄ5¸öLEDµÄ·½·¨¡£:
+qmkæ供了读å–HID规范包å«çš„5个LED的方法。:
* `USB_LED_NUM_LOCK`
* `USB_LED_CAPS_LOCK`
@@ -98,20 +98,20 @@ qmkÌṩÁ˶ÁÈ¡HID¹æ·¶°üº¬µÄ5¸öLEDµÄ·½·¨¡£:
* `USB_LED_COMPOSE`
* `USB_LED_KANA`
-ÕâÎå¸ö³£Á¿¶ÔÓ¦ÓÚÖ÷»úLED״̬µÄλÖÃλ¡£
-ÓÐÁ½ÖÖ·½·¨¿ÉÒÔ»ñµÃÖ÷»úLED״̬£º
+这五个常é‡å¯¹åº”于主机LED状æ€çš„ä½ç½®ä½ã€‚
+有两ç§æ–¹æ³•å¯ä»¥èŽ·å¾—主机LED状æ€ï¼š
-* ͨ¹ýÖ´ÐÐ `led_set_user()`
-* ͨ¹ýµ÷Óà `host_keyboard_leds()`
+* 通过执行 `led_set_user()`
+* 通过调用 `host_keyboard_leds()`
## `led_set_user()`
-µ±5¸öLEDÖÐÈκÎÒ»¸öµÄ״̬ÐèÒª¸Ä±äʱ£¬´Ëº¯Êý½«±»µ÷Óᣴ˺¯Êýͨ¹ý²ÎÊýÊäÈëLED²ÎÊý¡£
-ʹÓÃ`IS_LED_ON(usb_led, led_name)`ºÍ`IS_LED_OFF(usb_led, led_name)`ÕâÁ½¸öºêÀ´¼ì²éLED״̬¡£
+当5个LED中任何一个的状æ€éœ€è¦æ”¹å˜æ—¶ï¼Œæ­¤å‡½æ•°å°†è¢«è°ƒç”¨ã€‚此函数通过å‚数输入LEDå‚数。
+使用`IS_LED_ON(usb_led, led_name)`å’Œ`IS_LED_OFF(usb_led, led_name)`这两个å®æ¥æ£€æŸ¥LED状æ€ã€‚
-!> `host_keyboard_leds()`¿ÉÄÜ»áÔÚ`led_set_user()`±»µ÷ÓÃÇ°·µ»ØÐÂÖµ¡£
+!> `host_keyboard_leds()`å¯èƒ½ä¼šåœ¨`led_set_user()`被调用å‰è¿”回新值。
-### `led_set_user()`º¯ÊýʾÀýʵÏÖ
+### `led_set_user()`函数示例实现
```c
void led_set_user(uint8_t usb_led) {
@@ -143,59 +143,59 @@ void led_set_user(uint8_t usb_led) {
}
```
-### `led_set_*`º¯ÊýÎĵµ
+### `led_set_*`函数文档
-* ¼üÅÌ/ÐÞ¶©: `void led_set_kb(uint8_t usb_led)`
-* ²¼¾Ö: `void led_set_user(uint8_t usb_led)`
+* 键盘/修订: `void led_set_kb(uint8_t usb_led)`
+* 布局: `void led_set_user(uint8_t usb_led)`
## `host_keyboard_leds()`
-µ÷ÓÃÕâ¸öº¯Êý»á·µ»Ø×îºóÊÕµ½µÄLED״̬¡£Õâ¸öº¯ÊýÔÚ`led_set_*`Ö®Íâ¶ÁÈ¡LED״̬ʱºÜÓÐÓ㬱ÈÈçÔÚ[`matrix_scan_user()`](#¾ØÕóɨÃè´úÂë).
-ΪÁ˱ã½Ý£¬Äã¿ÉÒÔÓÃ`IS_HOST_LED_ON(led_name)`ºÍ`IS_HOST_LED_OFF(led_name)` ºê£¬¶ø²»Ö±½Óµ÷Óúͼì²é`host_keyboard_leds()`¡£
+调用这个函数会返回最åŽæ”¶åˆ°çš„LED状æ€ã€‚这个函数在`led_set_*`之外读å–LED状æ€æ—¶å¾ˆæœ‰ç”¨ï¼Œæ¯”如在[`matrix_scan_user()`](#矩阵扫æ代ç ).
+为了便æ·ï¼Œä½ å¯ä»¥ç”¨`IS_HOST_LED_ON(led_name)`å’Œ`IS_HOST_LED_OFF(led_name)` å®ï¼Œè€Œä¸ç›´æŽ¥è°ƒç”¨å’Œæ£€æŸ¥`host_keyboard_leds()`。
-## ÉèÖÃÎïÀíLED״̬
+## 设置物ç†LED状æ€
-һЩ¼üÅÌʵÏÖÁËΪÉèÖÃÎïÀíLEDµÄ״̬ÌṩÁË·½±ãµÄ·½·¨¡£
+一些键盘实现了为设置物ç†LED的状æ€æ供了方便的方法。
### Ergodox Boards
-ErgodoxʵÏÖÁËÌṩ`ergodox_right_led_1`/`2`/`3_on`/`off()`À´ÈÃÿ¸öLED¿ª»ò¹Ø, Ò²¿ÉÒÔÓà `ergodox_right_led_on`/`off(uint8_t led)` °´Ë÷Òý´ò¿ª»ò¹Ø±ÕËûÃÇ¡£
+Ergodox实现了æä¾›`ergodox_right_led_1`/`2`/`3_on`/`off()`æ¥è®©æ¯ä¸ªLED开或关, 也å¯ä»¥ç”¨ `ergodox_right_led_on`/`off(uint8_t led)` 按索引打开或关闭他们。
-´ËÍ⣬»¹¿ÉÒÔʹÓÃ`ergodox_led_all_set(uint8_t n)`Ö¸¶¨ËùÓÐLEDµÄÁÁ¶È¼¶±ð£»Õë¶Ôÿ¸öLEDÓÃ`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`£»Ê¹ÓÃË÷ÒýµÄ»°ÓÃ`ergodox_right_led_set(uint8_t led, uint8_t n)`¡£
+此外,还å¯ä»¥ä½¿ç”¨`ergodox_led_all_set(uint8_t n)`指定所有LED的亮度级别;针对æ¯ä¸ªLED用`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`;使用索引的è¯ç”¨`ergodox_right_led_set(uint8_t led, uint8_t n)`。
-Ergodox boards ͬʱ¶¨ÒåÁË×îµÍÁÁ¶È¼¶±ð`LED_BRIGHTNESS_LO`ºÍ×î¸ßÁÁ¶È¼¶±ð`LED_BRIGHTNESS_HI`(ĬÈÏ×î¸ß).
+Ergodox boards åŒæ—¶å®šä¹‰äº†æœ€ä½Žäº®åº¦çº§åˆ«`LED_BRIGHTNESS_LO`和最高亮度级别`LED_BRIGHTNESS_HI`(默认最高).
-# ¼üÅ̳õʼ»¯´úÂë
+# 键盘åˆå§‹åŒ–代ç 
-¼üÅ̳õʼ»¯¹ý³ÌÓм¸¸ö²½Öè¡£ÄãÊÇÓÃÄǸöº¯ÊýÈ¡¾öÓÚÄãÏëÒª×öʲô¡£
+键盘åˆå§‹åŒ–过程有几个步骤。你是用那个函数å–决于你想è¦åšä»€ä¹ˆã€‚
-ÓÐÈý¸öÖ÷Òª³õʼ»¯º¯Êý£¬°´µ÷ÓÃ˳ÐòÁгö¡£
+有三个主è¦åˆå§‹åŒ–函数,按调用顺åºåˆ—出。
-* `keyboard_pre_init_*` - »áÔÚ´ó¶àÊýÆäËû¶«Î÷ÔËÐÐÇ°ÔËÐС£ÊÊÓÃÓÚÄÄЩÐèÒªÌáÇ°ÔËÐеÄÓ²¼þ³õʼ»¯¡£
-* `matrix_init_*` - Ôڹ̼þÆô¶¯¹ý³ÌÖм䱻µ÷ÓᣴËʱӲ¼þÒѳõʼ»¯£¬¹¦ÄÜÉÐδ³õʼ»¯¡£
-* `keyboard_post_init_*` - Ôڹ̼þÆô¶¯¹ý³Ì×îºó±»µ÷Óᣴó¶àÊýÇé¿öÏ£¬ÄãµÄ¡°¿ÍÖÆ»¯¡±´úÂ붼¿ÉÒÔ·ÅÔÚÕâÀï¡£
+* `keyboard_pre_init_*` - 会在大多数其他东西è¿è¡Œå‰è¿è¡Œã€‚适用于哪些需è¦æå‰è¿è¡Œçš„硬件åˆå§‹åŒ–。
+* `matrix_init_*` - 在固件å¯åŠ¨è¿‡ç¨‹ä¸­é—´è¢«è°ƒç”¨ã€‚此时硬件已åˆå§‹åŒ–,功能尚未åˆå§‹åŒ–。
+* `keyboard_post_init_*` - 在固件å¯åŠ¨è¿‡ç¨‹æœ€åŽè¢«è°ƒç”¨ã€‚大多数情况下,你的“客制化â€ä»£ç éƒ½å¯ä»¥æ”¾åœ¨è¿™é‡Œã€‚
-!> ¶ÔÓÚ´ó¶àÊýÈËÀ´Ëµ`keyboard_post_init_user`ÊÇÄãÏëÒªµ÷Óõĺ¯Êý¡£ÀýÈç, ´ËʱÄã¿ÉÒÔÉèÖÃRGBµÆ·¢¹â¡£
+!> 对于大多数人æ¥è¯´`keyboard_post_init_user`是你想è¦è°ƒç”¨çš„函数。例如, 此时你å¯ä»¥è®¾ç½®RGBç¯å‘光。
-## ¼üÅÌÔ¤³õʼ»¯´úÂë
+## 键盘预åˆå§‹åŒ–代ç 
-Õâ´úÂ뼫ÔçÔËÐУ¬ÉõÖÁ¶¼ÔÚUSB³õʼ»¯Ç°ÔËÐС£
+这代ç æžæ—©è¿è¡Œï¼Œç”šè‡³éƒ½åœ¨USBåˆå§‹åŒ–å‰è¿è¡Œã€‚
-ÔÚÕâÖ®ºó²»¾Ã¾ØÕó¾Í±»³õʼ»¯ÁË¡£
+在这之åŽä¸ä¹…矩阵就被åˆå§‹åŒ–了。
-¶ÔÓÚ´ó¶àÊýÓû§À´Ëµ,ÕâÓò»µ½£¬ÒòΪËüÖ÷ÒªÊÇÓÃÓÚÃæÏòÓ²¼þµÄ³õʼ»¯¡£
+对于大多数用户æ¥è¯´,这用ä¸åˆ°ï¼Œå› ä¸ºå®ƒä¸»è¦æ˜¯ç”¨äºŽé¢å‘硬件的åˆå§‹åŒ–。
-µ«Èç¹ûÄãÓÐÓ²¼þ³õʼ»¯µÄ»°·ÅÔÚÕâÀïÔٺò»¹ýÁË(±ÈÈç³õʼ»¯LEDÒý½ÅÒ»ÀàµÄ).
+但如果你有硬件åˆå§‹åŒ–çš„è¯æ”¾åœ¨è¿™é‡Œå†å¥½ä¸è¿‡äº†(比如åˆå§‹åŒ–LED引脚一类的).
-### `keyboard_pre_init_user()`º¯ÊýʾÀýʵÏÖ
+### `keyboard_pre_init_user()`函数示例实现
-±¾ÀýÖÐÔÚ¼üÅ̼¶±ð£¬É趨 B0, B1, B2, B3, ºÍ B4 ÊÇLEDÒý½Å¡£
+本例中在键盘级别,设定 B0, B1, B2, B3, 和 B4 是LED引脚。
```c
void keyboard_pre_init_user(void) {
- // µ÷ÓüüÅÌÔ¤³õʼ»¯´úÂë
+ // 调用键盘预åˆå§‹åŒ–代ç 
- // ÉèÖÃLEDÒý½ÅΪÊä³öģʽ
+ // 设置LED引脚为输出模å¼
setPinOutput(B0);
setPinOutput(B1);
setPinOutput(B2);
@@ -204,73 +204,73 @@ void keyboard_pre_init_user(void) {
}
```
-### `keyboard_pre_init_*` º¯ÊýÎĵµ
+### `keyboard_pre_init_*` 函数文档
-* ¼üÅÌ/ÐÞ¶©: `void keyboard_pre_init_kb(void)`
-* ²¼¾Ö: `void keyboard_pre_init_user(void)`
+* 键盘/修订: `void keyboard_pre_init_kb(void)`
+* 布局: `void keyboard_pre_init_user(void)`
-## ¾ØÕó³õʼ»¯´úÂë
+## 矩阵åˆå§‹åŒ–代ç 
-Õ⽫»áÔÚ¾ØÕó³õʼ»¯Ê±±»µ÷Óã¬ÔÚijЩӲ¼þÉèÖúú󣬵«ÔÚһЩ¹¦Äܱ»³õʼ»¯Ç°¡£
+这将会在矩阵åˆå§‹åŒ–时被调用,在æŸäº›ç¡¬ä»¶è®¾ç½®å¥½åŽï¼Œä½†åœ¨ä¸€äº›åŠŸèƒ½è¢«åˆå§‹åŒ–å‰ã€‚
-ÕâÔÚÄãÉèÖÃÆäËûµØ·½»áÓõ½µÄ¶«Î÷µÄʱºò»áºÜÓÐÓ㬵«ÓëÓ²¼þÎ޹أ¬Ò²²»ÒÀÀµÓÚËüµÄÆô¶¯Î»Öá£
+这在你设置其他地方会用到的东西的时候会很有用,但与硬件无关,也ä¸ä¾èµ–于它的å¯åŠ¨ä½ç½®ã€‚
-### `matrix_init_*`º¯ÊýÎĵµ
+### `matrix_init_*`函数文档
-* ¼üÅÌ/ÐÞ¶©: `void matrix_init_kb(void)`
-* ²¼¾Ö: `void matrix_init_user(void)`
+* 键盘/修订: `void matrix_init_kb(void)`
+* 布局: `void matrix_init_user(void)`
-## ¼üÅ̺ó³õʼ»¯´úÂë
+## 键盘åŽåˆå§‹åŒ–代ç 
-ÕâÊǼüÅ̳õʼ»¯¹ý³ÌÖеÄ×îºóÒ»¸öÈÎÎñ¡£Èç¹ûÄúÏë¸ü¸ÄijЩÌØÐÔ£¬Õâ»áºÜÓÐÓã¬ÒòΪ´ËʱӦ¸Ã¶ÔËüÃǽøÐгõʼ»¯¡£
+这是键盘åˆå§‹åŒ–过程中的最åŽä¸€ä¸ªä»»åŠ¡ã€‚如果您想更改æŸäº›ç‰¹æ€§ï¼Œè¿™ä¼šå¾ˆæœ‰ç”¨ï¼Œå› ä¸ºæ­¤æ—¶åº”该对它们进行åˆå§‹åŒ–。
-### `keyboard_post_init_user()`ʾÀýʵÏÖ
+### `keyboard_post_init_user()`示例实现
-±¾Ê¾ÀýÔÚËùÓгõʼ»¯Íê³ÉºóÔËÐУ¬ÅäÖÃRGBµÆ¡£
+本示例在所有åˆå§‹åŒ–完æˆåŽè¿è¡Œï¼Œé…ç½®RGBç¯ã€‚
```c
void keyboard_post_init_user(void) {
- // µ÷Óúó³õʼ»¯´úÂë
- rgblight_enable_noeeprom(); // ʹÄÜRgb£¬²»±£´æÉèÖÃ
- rgblight_sethsv_noeeprom(180, 255, 255); // ½«ÑÕÉ«ÉèÖõ½À¶ÂÌÉ«(ÇàÉ«)²»±£´æ
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // ÉèÖÿìËÙºôÎüģʽ²»±£´æ
+ // 调用åŽåˆå§‹åŒ–代ç 
+ rgblight_enable_noeeprom(); // 使能Rgb,ä¸ä¿å­˜è®¾ç½®
+ rgblight_sethsv_noeeprom(180, 255, 255); // 将颜色设置到è“绿色(é’色)ä¸ä¿å­˜
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // 设置快速呼å¸æ¨¡å¼ä¸ä¿å­˜
}
```
-### `keyboard_post_init_*` º¯ÊýÎĵµ
+### `keyboard_post_init_*` 函数文档
-* ¼üÅÌ/ÐÞ¶©: `void keyboard_post_init_kb(void)`
-* ²¼¾Ö: `void keyboard_post_init_user(void)`
+* 键盘/修订: `void keyboard_post_init_kb(void)`
+* 布局: `void keyboard_post_init_user(void)`
-# ¾ØÕóɨÃè´úÂë
+# 矩阵扫æ代ç 
-¿ÉÄܵĻ°ÄãÒªÓÃ`process_record_*()`×Ô¶¨Òå¼üÅÌ£¬ÒÔÕâÖÖ·½Ê½Á¬½Óµ½Ê¼þÖУ¬ÒÔÈ·±£´úÂë²»»á¶Ô¼üÅ̲úÉú¸ºÃæµÄÐÔÄÜÓ°Ï졣Ȼ¶ø£¬ÔÚ¼«ÉÙÊýÇé¿öÏ£¬ÓбØÒª½øÐоØÕóɨÃè¡£ÔÚÕâЩº¯ÊýÖÐÒªÌرð×¢Òâ´úÂëµÄÐÔÄÜ£¬ÒòΪËüÿÃëÖÁÉÙ±»µ÷ÓÃ10´Î¡£
+å¯èƒ½çš„è¯ä½ è¦ç”¨`process_record_*()`自定义键盘,以这ç§æ–¹å¼è¿žæŽ¥åˆ°äº‹ä»¶ä¸­ï¼Œä»¥ç¡®ä¿ä»£ç ä¸ä¼šå¯¹é”®ç›˜äº§ç”Ÿè´Ÿé¢çš„性能影å“。然而,在æžå°‘数情况下,有必è¦è¿›è¡ŒçŸ©é˜µæ‰«æ。在这些函数中è¦ç‰¹åˆ«æ³¨æ„代ç çš„性能,因为它æ¯ç§’至少被调用10次。
-### `matrix_scan_*`ʾÀýʵÏÖ
+### `matrix_scan_*`示例实现
-Õâ¸öÀý×Ó±»¹ÊÒâÊ¡ÂÔÁË¡£ÔÚhookÕâÑùÒ»¸ö¶ÔÐÔÄܼ°ÆäÃô¸ÐµÄÇøÓò֮ǰ£¬ÄúÓ¦¸Ã×ã¹»Á˽âqmkµÄÄÚ²¿½á¹¹£¬ÒÔ±ãÔÚûÓÐʾÀýµÄÇé¿öϱàд¡£Èç¹ûÄãÐèÒª°ïÖú£¬Çë[½¨Á¢Ò»¸öissue](https://github.com/qmk/qmk_firmware/issues/new)»ò[ÔÚDiscordÉÏÓëÎÒÃǽ»Á÷](https://discord.gg/Uq7gcHh).
+这个例å­è¢«æ•…æ„çœç•¥äº†ã€‚在hook这样一个对性能åŠå…¶æ•æ„Ÿçš„区域之å‰ï¼Œæ‚¨åº”该足够了解qmk的内部结构,以便在没有示例的情况下编写。如果你需è¦å¸®åŠ©ï¼Œè¯·[建立一个issue](https://github.com/qmk/qmk_firmware/issues/new)或[在Discord上与我们交æµ](https://discord.gg/Uq7gcHh).
-### `matrix_scan_*` º¯ÊýÎĵµ
+### `matrix_scan_*` 函数文档
-* ¼üÅÌ/ÐÞ¶©: `void matrix_scan_kb(void)`
-* ²¼¾Ö: `void matrix_scan_user(void)`
+* 键盘/修订: `void matrix_scan_kb(void)`
+* 布局: `void matrix_scan_user(void)`
-¸Ãº¯ÊýÔÚÿ´Î¾ØÕóɨÃèʱ±»µ÷Óã¬Õâ»ù±¾ÓëMCU´¦ÀíÄÜÁ¦ÉÏÏÞÏàͬ¡£ÔÚÕâÀïд´úÂëÒª½÷É÷£¬ÒòΪËü»áÔËÐкܶà´Î¡£
+该函数在æ¯æ¬¡çŸ©é˜µæ‰«æ时被调用,这基本与MCU处ç†èƒ½åŠ›ä¸Šé™ç›¸åŒã€‚在这里写代ç è¦è°¨æ…Žï¼Œå› ä¸ºå®ƒä¼šè¿è¡Œå¾ˆå¤šæ¬¡ã€‚
-Äã»áÔÚ×Ô¶¨Òå¾ØÕóɨÃè´úÂëʱÓõ½Õâ¸öº¯Êý¡£ÕâÒ²¿ÉÒÔÓÃ×÷×Ô¶¨Òå״̬Êä³ö(±ÈÈçLEDµÆ»òÕßÆÁÄ»)»òÕßÆäËû¼´±ãÓû§²»ÊäÈëÄãÒ²Ï붨ÆÚÔËÐеŦÄÜ¡£
+你会在自定义矩阵扫æ代ç æ—¶ç”¨åˆ°è¿™ä¸ªå‡½æ•°ã€‚这也å¯ä»¥ç”¨ä½œè‡ªå®šä¹‰çŠ¶æ€è¾“出(比如LEDç¯æˆ–者å±å¹•)或者其他å³ä¾¿ç”¨æˆ·ä¸è¾“入你也想定期è¿è¡Œçš„功能。
-# ¼üÅÌ ¿ÕÏÐ/»½ÐÑ ´úÂë
+# 键盘 空闲/唤醒 代ç 
-Èç¹û¼üÅÌÖ§³Ö¾Í¿ÉÒÔͨ¹ýÍ£Ö¹Ò»´óƱ¹¦ÄÜÀ´´ïµ½"¿ÕÏÐ"¡£RGBµÆºÍ±³¹â¾ÍÊǺܺõÄÀý×Ó¡£Õâ¿ÉÒÔ½ÚÔ¼Äܺģ¬Ò²¿ÉÄÜÈÃÄã¼üÅÌ·çζ¸ü¼Ñ¡£
+如果键盘支æŒå°±å¯ä»¥é€šè¿‡åœæ­¢ä¸€å¤§ç¥¨åŠŸèƒ½æ¥è¾¾åˆ°"空闲"。RGBç¯å’ŒèƒŒå…‰å°±æ˜¯å¾ˆå¥½çš„例å­ã€‚è¿™å¯ä»¥èŠ‚约能耗,也å¯èƒ½è®©ä½ é”®ç›˜é£Žå‘³æ›´ä½³ã€‚
-ÓÃÁ½¸öº¯Êý¿ØÖÆ: `suspend_power_down_*`ºÍ`suspend_wakeup_init_*`, ·Ö±ðÔÚϵͳ°å¿ÕÏкͻ½ÐÑʱµ÷Óá£
+用两个函数控制: `suspend_power_down_*`å’Œ`suspend_wakeup_init_*`, 分别在系统æ¿ç©ºé—²å’Œå”¤é†’时调用。
-### suspend_power_down_user()ºÍsuspend_wakeup_init_user()ʾÀýʵÏÖ
+### suspend_power_down_user()和suspend_wakeup_init_user()示例实现
```c
@@ -283,18 +283,18 @@ void suspend_wakeup_init_user(void) {
}
```
-### ¼üÅÌ ¹ÒÆð/»½ÐÑ º¯ÊýÎĵµ
+### 键盘 挂起/唤醒 函数文档
-* ¼üÅÌ/ÐÞ¶©: `void suspend_power_down_kb(void)` ºÍ`void suspend_wakeup_init_user(void)`
-* ²¼¾Ö: `void suspend_power_down_kb(void)` ºÍ `void suspend_wakeup_init_user(void)`
+* 键盘/修订: `void suspend_power_down_kb(void)` 和`void suspend_wakeup_init_user(void)`
+* 布局: `void suspend_power_down_kb(void)` 和 `void suspend_wakeup_init_user(void)`
-# ²ã¸Ä±ä´úÂë
+# 层改å˜ä»£ç 
-ÿµ±²ã¸Ä±äÕâ¸ö¾ÍÔËÐдúÂë¡£Õâ¶ÔÓÚ²ãָʾ»ò×Ô¶¨Òå²ã´¦ÀíºÜÓÐÓá£
+æ¯å½“层改å˜è¿™ä¸ªå°±è¿è¡Œä»£ç ã€‚这对于层指示或自定义层处ç†å¾ˆæœ‰ç”¨ã€‚
-### `layer_state_set_*` ʾÀýʵÏÖ
+### `layer_state_set_*` 示例实现
-±¾ÀýʹÓÃÁËPlanck¼üÅÌʾ·¶ÁËÈçºÎÉèÖà [RGB±³¹âµÆ](feature_rgblight.md)ʹ֮Óë²ã¶ÔÓ¦
+本例使用了Planck键盘示范了如何设置 [RGB背光ç¯](feature_rgblight.md)使之与层对应
```c
uint32_t layer_state_set_user(uint32_t state) {
@@ -318,31 +318,31 @@ uint32_t layer_state_set_user(uint32_t state) {
return state;
}
```
-### `layer_state_set_*` º¯ÊýÎĵµ
+### `layer_state_set_*` 函数文档
-* ¼üÅÌ/ÐÞ¶©: `uint32_t layer_state_set_kb(uint32_t state)`
-* ²¼¾Ö: `uint32_t layer_state_set_user(uint32_t state)`
+* 键盘/修订: `uint32_t layer_state_set_kb(uint32_t state)`
+* 布局: `uint32_t layer_state_set_user(uint32_t state)`
-¸Ã`״̬`Êǻ²ãµÄbitmask, Ïê¼û[²¼¾Ö¸ÅÊö](keymap.md#²¼¾ÖµÄ²ã״̬)
+该`状æ€`是活动层的bitmask, 详è§[布局概述](keymap.md#布局的层状æ€)
-# µôµç±£´æÅäÖà (EEPROM)
+# 掉电ä¿å­˜é…ç½® (EEPROM)
-Õâ»áÈÃÄãµÄÅäÖó¤Æڵı£´æÔÚ¼üÅÌÖС£ÕâЩÅäÖñ£´æÔÚÄãÖ÷¿ØµÄEEPROMÀµôµç²»»áÏûʧ¡£ ÉèÖÿÉÒÔÓÃ`eeconfig_read_kb`ºÍ`eeconfig_read_user`¶ÁÈ¡£¬¿ÉÒÔÓÃ`eeconfig_update_kb`ºÍ`eeconfig_update_user`дÈë¡£Õâ¶ÔÓÚÄúÏ£ÍûÄܹ»Çл»µÄ¹¦ÄܺÜÓÐÓÃ(±ÈÈçÇл»RGB²ãָʾ¡£´ËÍ⣬Äã¿ÉÒÔÓÃ`eeconfig_init_kb`ºÍ`eeconfig_init_user`À´ÉèÖÃEEPROMĬÈÏÖµ¡£
+这会让你的é…置长期的ä¿å­˜åœ¨é”®ç›˜ä¸­ã€‚这些é…ç½®ä¿å­˜åœ¨ä½ ä¸»æŽ§çš„EEPROM里,掉电ä¸ä¼šæ¶ˆå¤±ã€‚ 设置å¯ä»¥ç”¨`eeconfig_read_kb`å’Œ`eeconfig_read_user`读å–,å¯ä»¥ç”¨`eeconfig_update_kb`å’Œ`eeconfig_update_user`写入。这对于您希望能够切æ¢çš„功能很有用(比如切æ¢RGB层指示。此外,你å¯ä»¥ç”¨`eeconfig_init_kb`å’Œ`eeconfig_init_user`æ¥è®¾ç½®EEPROM默认值。
-×ÔӵIJ¿·Ö¿ÉÄÜÊÇ£¬Óкܶ෽·¨¿ÉÒÔͨ¹ýEEPROM´æ´¢ºÍ·ÃÎÊÊý¾Ý£¬²¢ÇÒ²¢Ã»ÓÐÓÃÄÄÖÖ·½·¨ÊÇ¡°ÕþÖÎÕýÈ·¡±µÄ¡£Äãÿ¸ö¹¦ÄÜÖ»ÓÐÒ»¸öË«×Ö(ËÄ×Ö½Ú)¿Õ¼ä¡£
+最å¤æ‚的部分å¯èƒ½æ˜¯ï¼Œæœ‰å¾ˆå¤šæ–¹æ³•å¯ä»¥é€šè¿‡EEPROM存储和访问数æ®ï¼Œå¹¶ä¸”并没有用哪ç§æ–¹æ³•æ˜¯â€œæ”¿æ²»æ­£ç¡®â€çš„。你æ¯ä¸ªåŠŸèƒ½åªæœ‰ä¸€ä¸ªåŒå­—(四字节)空间。
-¼ÇסEEPROMÊÇÓÐдÈëÊÙÃüµÄ¡£¾¡¹ÜдÈëÊÙÃüºÜ¸ß£¬µ«ÊDz¢²»ÊÇÖ»ÓÐÉèÖÃдµÀEEPROMÖС£Èç¹ûÄãдÈëƵ·±£¬ÄãµÄMCUÊÙÃü½«»á±ä¶Ì¡£
+è®°ä½EEPROM是有写入寿命的。尽管写入寿命很高,但是并ä¸æ˜¯åªæœ‰è®¾ç½®å†™é“EEPROM中。如果你写入频ç¹ï¼Œä½ çš„MCU寿命将会å˜çŸ­ã€‚
-* Èç¹ûÄú²»Àí½âÕâ¸öÀý×Ó£¬ÄÇôÄú¿ÉÄÜÏ£Íû±ÜÃâʹÓÃÕâ¸öÌØÐÔ£¬ÒòΪËüÏ൱¸´ÔÓ¡£
+* 如果您ä¸ç†è§£è¿™ä¸ªä¾‹å­ï¼Œé‚£ä¹ˆæ‚¨å¯èƒ½å¸Œæœ›é¿å…使用这个特性,因为它相当å¤æ‚。
-### ʾÀýʵÏÖ
+### 示例实现
-±¾Àý½²½âÁËÈçºÎÌí¼ÓÉèÖ㬲¢ÇÒ¶Áд¡£±¾ÀïʹÓÃÁËÓû§²¼¾Ö¡£ÕâÊÇÒ»¸ö¸´Ôӵĺ¯Êý£¬ÓкܶàÊÂÇéÒª×ö¡£Êµ¼ÊÉÏ£¬ËüʹÓÃÁ˺ܶàÉÏÊöº¯ÊýÀ´¹¤×÷£¡
+本例讲解了如何添加设置,并且读写。本里使用了用户布局。这是一个å¤æ‚的函数,有很多事情è¦åšã€‚实际上,它使用了很多上述函数æ¥å·¥ä½œï¼
-ÔÚÄãµÄkeymap.cÎļþÖУ¬½«ÒÔÏ´úÂëÌí¼ÓÖÁ¶¥²¿:
+在你的keymap.c文件中,将以下代ç æ·»åŠ è‡³é¡¶éƒ¨:
```c
typedef union {
uint32_t raw;
@@ -354,19 +354,19 @@ typedef union {
user_config_t user_config;
```
-ÒÔÉÏ´úÂ뽨Á¢ÁËÒ»¸ö½á¹¹Ì壬¸Ã½á¹¹Ìå¿ÉÒÔ´æ´¢ÉèÖò¢¿ÉÓÃÓÚдÈëEEPROM¡£Èç´ËÕâ°ã½«ÎÞÐ趨Òå±äÁ¿£¬ÒòΪÔڽṹÌåÖÐÒÑÈ»¶¨Òå¡£Òª¼Çס`bool` (²¼¶û)ֵʹÓÃ1λ, `uint8_t`ʹÓÃ8λ, `uint16_t`ʹÓÃ16λ¡£Äã¿ÉÒÔ»ìºÏ´îÅäʹÓ㬵«ÊÇ˳Ðò¼Ç´í¿ÉÄÜ»áÕÐÖÂÂé·³£¬ÒòΪÄÇ»á¸Ä±äдÈëд³öµÄÖµ¡£
+以上代ç å»ºç«‹äº†ä¸€ä¸ªç»“构体,该结构体å¯ä»¥å­˜å‚¨è®¾ç½®å¹¶å¯ç”¨äºŽå†™å…¥EEPROM。如此这般将无需定义å˜é‡ï¼Œå› ä¸ºåœ¨ç»“构体中已然定义。è¦è®°ä½`bool` (布尔)值使用1ä½, `uint8_t`使用8ä½, `uint16_t`使用16ä½ã€‚ä½ å¯ä»¥æ··åˆæ­é…使用,但是顺åºè®°é”™å¯èƒ½ä¼šæ‹›è‡´éº»çƒ¦ï¼Œå› ä¸ºé‚£ä¼šæ”¹å˜å†™å…¥å†™å‡ºçš„值。
- `layer_state_set_*`º¯ÊýÖÐʹÓÃÁË`rgb_layer_change`£¬Ê¹ÓÃÁË`keyboard_post_init_user`ºÍ`process_record_user`À´ÅäÖÃÒ»ÇС£
+ `layer_state_set_*`函数中使用了`rgb_layer_change`,使用了`keyboard_post_init_user`å’Œ`process_record_user`æ¥é…置一切。
-Ê×ÏÈҪʹÓÃ`keyboard_post_init_user£¬ÄãÒª¼ÓÈë`eeconfig_read_user()`À´Ìî³äÄã¸Õ¸Õ´´½¨µÄ½á¹¹Ì塣ȻºóÄú¿ÉÒÔÁ¢¼´Ê¹ÓÃÕâ¸ö½á¹¹À´¿ØÖÆÄúµÄ²¼¾ÖÖеŦÄÜ¡£¾ÍÏñÕâÑù£º
+首先è¦ä½¿ç”¨`keyboard_post_init_user,你è¦åŠ å…¥`eeconfig_read_user()`æ¥å¡«å……你刚刚创建的结构体。然åŽæ‚¨å¯ä»¥ç«‹å³ä½¿ç”¨è¿™ä¸ªç»“æž„æ¥æŽ§åˆ¶æ‚¨çš„布局中的功能。就åƒè¿™æ ·ï¼š
```c
void keyboard_post_init_user(void) {
- // µ÷Óò¼¾Ö¼¶±ðµÄ¾ØÕó³õʼ»¯
+ // 调用布局级别的矩阵åˆå§‹åŒ–
- // ´ÓEEPROM¶ÁÓû§ÅäÖÃ
+ // 从EEPROM读用户é…ç½®
user_config.raw = eeconfig_read_user();
- // ÈçʹÄÜ£¬ÉèÖÃĬÈϲã
+ // 如使能,设置默认层
if (user_config.rgb_layer_change) {
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom_cyan();
@@ -374,7 +374,7 @@ void keyboard_post_init_user(void) {
}
}
```
-ÒÔÉϺ¯Êý»áÔÚ¶ÁEEPROMÅäÖúóÁ¢¼´Ê¹ÓøÃÉèÖÃÀ´ÉèÖÃĬÈϲãRGBÑÕÉ«¡£"raw"µÄÖµÊÇ´ÓÄãÉÏÃæ»ùÓÚ"union"´´½¨µÄ½á¹¹ÌåÖÐת»»À´µÄ¡£
+以上函数会在读EEPROMé…ç½®åŽç«‹å³ä½¿ç”¨è¯¥è®¾ç½®æ¥è®¾ç½®é»˜è®¤å±‚RGB颜色。"raw"的值是从你上é¢åŸºäºŽ"union"创建的结构体中转æ¢æ¥çš„。
```c
uint32_t layer_state_set_user(uint32_t state) {
@@ -391,86 +391,86 @@ uint32_t layer_state_set_user(uint32_t state) {
case _ADJUST:
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
break;
- default: // Õë¶ÔÆäËû²ã»òĬÈϲã
+ default: // 针对其他层或默认层
if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
break;
}
return state;
}
```
-ÕâÑù½öÔÚֵʹÄÜʱ»á¸Ä±äRGB±³¹âµÆ¡£ÏÖÔÚÅäÖÃÕâ¸öÖµ, Ϊ`process_record_user`´´½¨Ò»¸öмüÂë½Ð×ö`RGB_LYR`¡£ÎÒÃÇҪȷ±££¬Èç¹ûʹÓÃÕý³£µÄRGB´úÂ룬ʹÓÃÉÏÃæµÄʾÀý½«Æä¹Ø±Õ£¬Ç뽫ÆäÉèÖÃΪ£º
+这样仅在值使能时会改å˜RGB背光ç¯ã€‚现在é…置这个值, 为`process_record_user`创建一个新键ç å«åš`RGB_LYR`。我们è¦ç¡®ä¿ï¼Œå¦‚果使用正常的RGB代ç ï¼Œä½¿ç”¨ä¸Šé¢çš„示例将其关闭,请将其设置为:
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case FOO:
if (record->event.pressed) {
- // °´ÏÂʱ×öµãʲô
+ // 按下时åšç‚¹ä»€ä¹ˆ
} else {
- // ÊÍ·Åʱ×öµãʲô
+ // 释放时åšç‚¹ä»€ä¹ˆ
}
- return false; // Ìø¹ý´Ë¼üµÄ½øÒ»²½´¦Àí
+ return false; // 跳过此键的进一步处ç†
case KC_ENTER:
- // ÔÚ°´Ï»سµÊ±²¥·ÅÒô·û
+ // 在按下回车时播放音符
if (record->event.pressed) {
PLAY_NOTE_ARRAY(tone_qwerty);
}
- return true; // ÈÃQMK²úÉú»Ø³µ°´ÏÂ/ÊÍ·Åʼþ
- case RGB_LYR: // ±¾¾äÈÃunderglow×÷Ϊ²ãָʾ£¬»òÕý³£Ê¹Óá£
+ return true; // 让QMK产生回车按下/释放事件
+ case RGB_LYR: // 本å¥è®©underglow作为层指示,或正常使用。
if (record->event.pressed) {
- user_config.rgb_layer_change ^= 1; // Çл»×´Ì¬
- eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëÐÂ״̬
- if (user_config.rgb_layer_change) { // Èç¹û²ã״̬±»Ê¹ÄÜ
- layer_state_set(layer_state); // ÄÇôÁ¢¿Ì¸üвãÑÕÉ«
+ user_config.rgb_layer_change ^= 1; // 切æ¢çŠ¶æ€
+ eeconfig_update_user(user_config.raw); // å‘EEPROM写入新状æ€
+ if (user_config.rgb_layer_change) { // 如果层状æ€è¢«ä½¿èƒ½
+ layer_state_set(layer_state); // 那么立刻更新层颜色
}
}
return false; break;
- case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // ¶ÔÓÚËùÓеÄRGB´úÂë (see quantum_keycodes.h, L400 ¿ÉÒԲο¼)
- if (record->event.pressed) { //±¾¾äʧÄܲãָʾ£¬¼ÙÉèÄã¸Ä±äÁËÕâ¸ö¡­ÄãÒª°ÑËü½ûÓÃ
- if (user_config.rgb_layer_change) { // ½öµ±Ê¹ÄÜʱ
- user_config.rgb_layer_change = false; // ʧÄÜ£¬È»ºó
- eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëÉèÖÃ
+ case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // 对于所有的RGBä»£ç  (see quantum_keycodes.h, L400 å¯ä»¥å‚考)
+ if (record->event.pressed) { //本å¥å¤±èƒ½å±‚指示,å‡è®¾ä½ æ”¹å˜äº†è¿™ä¸ªâ€¦ä½ è¦æŠŠå®ƒç¦ç”¨
+ if (user_config.rgb_layer_change) { // 仅当使能时
+ user_config.rgb_layer_change = false; // 失能,然åŽ
+ eeconfig_update_user(user_config.raw); // å‘EEPROM写入设置
}
}
return true; break;
default:
- return true; // °´ÆäËû¼üÕý³£
+ return true; // 按其他键正常
}
}
```
-×îºóÄãÒª¼ÓÈë`eeconfig_init_user`º¯Êý£¬ËùÒÔµ±EEPROMÖØÖÃʱ£¬¿ÉÒÔÖ¸¶¨Ä¬ÈÏÖµ, ÉõÖÁ×Ô¶¨Òå²Ù×÷¡£ÏëÇ¿ÖÆÖØÖÃEEPROM£¬ÇëÓÃ`EEP_RST`¼üÂë»ò[Bootmagic](feature_bootmagic.md)º¯Êý¡£±ÈÈ磬Èç¹ûÒªÔÚĬÈÏÇé¿öÏÂÉèÖÃRGB²ãָʾ£¬²¢±£´æĬÈÏÖµ
+最åŽä½ è¦åŠ å…¥`eeconfig_init_user`函数,所以当EEPROMé‡ç½®æ—¶ï¼Œå¯ä»¥æŒ‡å®šé»˜è®¤å€¼, 甚至自定义æ“作。想强制é‡ç½®EEPROM,请用`EEP_RST`é”®ç æˆ–[Bootmagic](feature_bootmagic.md)函数。比如,如果è¦åœ¨é»˜è®¤æƒ…况下设置RGB层指示,并ä¿å­˜é»˜è®¤å€¼
```c
-void eeconfig_init_user(void) { // EEPROMÕý±»ÖØÖÃ
+void eeconfig_init_user(void) { // EEPROM正被é‡ç½®
user_config.raw = 0;
- user_config.rgb_layer_change = true; // ÎÒÃÇÏëҪĬÈÏʹÄÜ
- eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëĬÈÏÖµ
+ user_config.rgb_layer_change = true; // 我们想è¦é»˜è®¤ä½¿èƒ½
+ eeconfig_update_user(user_config.raw); // å‘EEPROM写入默认值
- // use the non noeeprom versions, »¹ÒªÏòEEPROMдÈëÕâЩֵ
- rgblight_enable(); // ĬÈÏʹÄÜRGB
- rgblight_sethsv_cyan(); // ĬÈÏÉèÖÃÇàÉ«
- rgblight_mode(1); // ĬÈÏÉèÖó¤ÁÁ
+ // use the non noeeprom versions, 还è¦å‘EEPROM写入这些值
+ rgblight_enable(); // 默认使能RGB
+ rgblight_sethsv_cyan(); // 默认设置é’色
+ rgblight_mode(1); // 默认设置长亮
}
```
-È»ºó¾ÍÍêÊÂÁË¡£RGB²ãָʾ»áÔÚÄãÏëÈÃËü¹¤×÷ʱ¹¤×÷¡£Õâ¸öÉèÖûáÒ»Ö±±£´æ£¬¼´±ãÄã°ÎϼüÅÌ¡£Èç¹ûÄãʹÓÃÆäËûRGB´úÂ룬²ãָʾ½«Ê§ÄÜ£¬ÏÖÔÚËü¿ÉÒÔ×öÄãËùÏëÁË¡£
+然åŽå°±å®Œäº‹äº†ã€‚RGB层指示会在你想让它工作时工作。这个设置会一直ä¿å­˜ï¼Œå³ä¾¿ä½ æ‹”下键盘。如果你使用其他RGB代ç ï¼Œå±‚指示将失能,现在它å¯ä»¥åšä½ æ‰€æƒ³äº†ã€‚
-### 'EECONFIG' º¯ÊýÎĵµ
+### 'EECONFIG' 函数文档
-* ¼üÅÌ/ÐÞ¶©: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)`ºÍ`void eeconfig_update_kb(uint32_t val)`
-* ²¼¾Ö: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)`ºÍ`void eeconfig_update_user(uint32_t val)`
+* 键盘/修订: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)`和`void eeconfig_update_kb(uint32_t val)`
+* 布局: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)`和`void eeconfig_update_user(uint32_t val)`
-`val` ÊÇÄãÏëдÈëEEPROMµÄÖµ£¬`eeconfig_read_*`º¯Êý»á´ÓEEPROM·µ»ØÒ»¸ö32λ(Ë«×Ö)µÄÖµ¡£
+`val` 是你想写入EEPROM的值,`eeconfig_read_*`函数会从EEPROM返回一个32ä½(åŒå­—)的值。
-# ×Ô¶¨Òå»÷¼ü-³¤°´ÁÙ½çÖµ(TAPPING_TERM)
-ĬÈÏÇé¿öÏÂ,»÷¼ü-³¤°´ÁÙ½çÖµÊÇÈ«ÇòͳһµÄ£¬²¢ÇÒ²»ÄÜͨ¹ý¼ü½øÐÐÅäÖ᣶ÔÓÚ´ó¶àÊýÓû§À´ËµÕâºÜºÃ¡£µ«ÊÇÔÚÓÐЩÇé¿öÏ£¬¶ÔÓÚ`LT`¼üÀ´Ëµ°´¼üÑÓʱ¶ÔË«¹¦ÄܼüµÄÌáÉý¸ü´ó£¬¿ÉÄÜÊÇÒòΪÓÐЩ¼ü±ÈÆäËûµÄ¼ü¸üÈÝÒ×°´×¡¡£ÎªÁ˲»¸øÿ¸ö¶¼×Ô¶¨Òå¼üÂ룬±¾¹¦ÄÜ¿ÉÒÔΪÿ¸ö¼ü¶¨Òå`TAPPING_TERM`¡£
+# 自定义击键-长按临界值(TAPPING_TERM)
+默认情况下,击键-长按临界值是全çƒç»Ÿä¸€çš„,并且ä¸èƒ½é€šè¿‡é”®è¿›è¡Œé…置。对于大多数用户æ¥è¯´è¿™å¾ˆå¥½ã€‚但是在有些情况下,对于`LT`é”®æ¥è¯´æŒ‰é”®å»¶æ—¶å¯¹åŒåŠŸèƒ½é”®çš„æå‡æ›´å¤§ï¼Œå¯èƒ½æ˜¯å› ä¸ºæœ‰äº›é”®æ¯”其他的键更容易按ä½ã€‚为了ä¸ç»™æ¯ä¸ªéƒ½è‡ªå®šä¹‰é”®ç ï¼Œæœ¬åŠŸèƒ½å¯ä»¥ä¸ºæ¯ä¸ªé”®å®šä¹‰`TAPPING_TERM`。
-ÏëʹÄÜÕâ¸ö¹¦ÄܵĻ°, ÒªÏÈÔÚ`config.h`¼ÓÉÏ`#define TAPPING_TERM_PER_KEY`¡£
+想使能这个功能的è¯, è¦å…ˆåœ¨`config.h`加上`#define TAPPING_TERM_PER_KEY`。
-## `get_tapping_term`ʾÀýʵÏÖ
+## `get_tapping_term`示例实现
-ÏëÒªÐ޸ĻùÓÚ¼üÂëµÄ`TAPPING TERM`,ÄãÒªÏò`keymap.c`ÎļþÌí¼ÓÈçÏ´úÂë:
+想è¦ä¿®æ”¹åŸºäºŽé”®ç çš„`TAPPING TERM`,ä½ è¦å‘`keymap.c`文件添加如下代ç :
```c
uint16_t get_tapping_term(uint16_t keycode) {
@@ -485,6 +485,6 @@ uint16_t get_tapping_term(uint16_t keycode) {
}
```
-### `get_tapping_term` º¯ÊýÎĵµ
+### `get_tapping_term` 函数文档
-²»ÏñÕâƪµÄÆäËû¹¦ÄÜ,Õâ¸ö²»ÐèÒªquantum»òÕß¼üÅ̼¶±ðµÄº¯Êý£¬Ö»ÒªÓû§¼¶º¯Êý¼´¿É¡£
+ä¸åƒè¿™ç¯‡çš„其他功能,这个ä¸éœ€è¦quantum或者键盘级别的函数,åªè¦ç”¨æˆ·çº§å‡½æ•°å³å¯ã€‚
diff --git a/docs/zh-cn/faq_build.md b/docs/zh-cn/faq_build.md
index 8fb449db30..0d9047bc59 100644
--- a/docs/zh-cn/faq_build.md
+++ b/docs/zh-cn/faq_build.md
@@ -56,11 +56,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
?> 事实上没有一个驱动的最佳选择,有些选项就是和æŸäº›ç³»ç»Ÿç›¸è¾…相æˆã€‚但libUSBå’ŒWinUSB似乎也算是这里的最佳选择了。
如果bootloader在设备列表中没有显示,你å¯èƒ½è¦ä½¿èƒ½ "List all devices"选项在选项èœå•ä¸­`Options`,然åŽæ‰¾åˆ°æœ‰é—®é¢˜çš„bootloader设备。(译者注:在win10中å¯èƒ½ä¸º 查看-显示éšè—的设备)
-
-## WINAVR已淘汰
-ä¸å†æŽ¨è使用WINAVR,使用å¯èƒ½ä¼šå¯¼è‡´é—®é¢˜
-详情请è§[TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
-
## USB VID 和 PID
ä½ å¯ä»¥åœ¨ç¼–辑`config.h`时使用任何你想用的ID值。实际上,使用任何å¯èƒ½æœªä½¿ç”¨çš„ID都没有问题,除了有æžä½Žçš„与其他产å“å‘生冲çªçš„å¯èƒ½æ€§ã€‚
@@ -73,29 +68,6 @@ https://github.com/tmk/tmk_keyboard/issues/150
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
-## Cortex: `cstddef: No such file or directory`
-在Ubuntu 14.04上的GCC 4.8 会出现这ç§é—®é¢˜éœ€è¦ç”¨è¿™ä¸ªPPAå‡çº§åˆ°4.9。
-https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
-
-https://github.com/tmk/tmk_keyboard/issues/212
-https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
-https://developer.mbed.org/forum/mbed/topic/5205/
-
-## `clock_prescale_set` and `clock_div_1` Not Available
-你的工具链太旧了ä¸æ”¯æŒMCU。比如WinAVR 20100110å°±ä¸æ”¯æŒATMega32u2.
-
-```
-Compiling C: ../../tmk_core/protocol/lufa/lufa.c
-avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
-../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
-../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
-../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
-../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
-../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
-make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
-```
-
-
## AVRçš„BOOTLOADER_SIZE
注æ„Teensy2.0++ bootloader的大å°æ˜¯2048字节。有些Makefile注释错了。
diff --git a/docs/zh-cn/faq_debug.md b/docs/zh-cn/faq_debug.md
index a3cc7c510c..7eff7f2651 100644
--- a/docs/zh-cn/faq_debug.md
+++ b/docs/zh-cn/faq_debug.md
@@ -101,56 +101,6 @@ https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switc
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
-
-## Bootloader跳转ä¸å¥½ç”¨
-在**Makefile**中正确é…ç½®**Makefile**大å°ã€‚如果分区大å°ä¸æ­£ç¡®ï¼Œå¼•å¯¼åŠ è½½ç¨‹åºå¯èƒ½æ— æ³•ä»Ž**Magic command**å’Œ**Boot Magic**加载。
-```
-# bootloader字节数:
-# Atmel DFU loader(ATmega32U4) 4096
-# Atmel DFU loader(AT90USB128) 8192
-# LUFA bootloader(ATmega32U4) 4096
-# Arduino Caterina(ATmega32U4) 4096
-# USBaspLoader(ATmega***) 2048
-# Teensy halfKay(ATmega32U4) 512
-# Teensy++ halfKay(AT90USB128) 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-```
-AVR引导大å°æ˜¯é€šè¿‡**BOOTSZ**熔ä¸ä½æ¥è®¾ç½®çš„。查阅你å•ç‰‡æœºçš„datasheet。
-è®°ä½ï¼Œdatasheet用的是**Word**(2字节)表示大å°å’Œåœ°å€ï¼ŒTMK用的是**Byte**。
-
-AVR引导部分ä½äºŽé—ªå­˜çš„末尾,如下所示(Application是应用区,Bootloader是引导区)。
-```
-byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
-0x0000 +---------------+ 0x00000 +---------------+
- | | | |
- | | | |
- | Application | | Application |
- | | | |
- = = = =
- | | 32KB-4KB | | 128KB-8KB
-0x6000 +---------------+ 0x1E000 +---------------+
- | Bootloader | 4KB | Bootloader | 8KB
-0x7FFF +---------------+ 0x1FFFF +---------------+
-
-
-byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
-0x0000 +---------------+ 0x00000 +---------------+
- | | | |
- | | | |
- | Application | | Application |
- | | | |
- = = = =
- | | 32KB-512B | | 128KB-2KB
-0x7E00 +---------------+ 0x1FC00 +---------------+
- | Bootloader | 512B | Bootloader | 2KB
-0x7FFF +---------------+ 0x1FFFF +---------------+
-```
-
-详情请è§ä¸‹æ–¹issue。
-https://github.com/tmk/tmk_keyboard/issues/179
-
-如果你使用TeensyUSB, 有一个[已知bug](https://github.com/qmk/qmk_firmware/issues/164)硬件é‡ç½®æŒ‰é’®é˜»æ­¢è½¯ä»¶å®šä¹‰é‡ç½®é”®å·¥ä½œã€‚é‡æ–°æ’拔键盘就好了。
-
## 特殊é¢å¤–é”®ä¸èµ·ä½œç”¨(系统,音频控制键)
ä½ è¦åœ¨`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
@@ -173,24 +123,6 @@ EXTRAKEY_ENABLE = yes # 音频控制和系统控制
Arduino Leonardoå’Œmicro使用**ATMega32U4**,该芯片TMKå¯ç”¨ï¼Œä½†Arduinoçš„bootloader会导致问题。
-## 为é”定键添加指示ç¯
-ä½ è¦è‡ªåˆ¶CapsLock, ScrollLock å’Œ NumLock指示ç¯ï¼Ÿè§ä¸‹æ–‡ã€‚
-
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
-
-## 为Arduino Micro/Leonardo编程
-按下é‡ç½®é”®ç„¶åŽåœ¨8秒内è¿è¡Œä¸‹æ–¹è¿™æ ·çš„命令。
-
-```
-avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
-```
-
-设备å称因系统而异。
-
-http://arduino.cc/en/Main/ArduinoBoardMicro
-https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
-
-
## USB 3 兼容性
æ®ä¼ è¯´æœ‰äº›äººç”¨USB3接å£ä¼šæœ‰é—®é¢˜ï¼Œç”¨USB2的试试。
diff --git a/docs/zh-cn/faq_keymap.md b/docs/zh-cn/faq_keymap.md
index ee8e3c06bf..7fb434b4c8 100644
--- a/docs/zh-cn/faq_keymap.md
+++ b/docs/zh-cn/faq_keymap.md
@@ -66,24 +66,8 @@ https://github.com/tmk/tmk_keyboard/issues/67
è¿œå¤æœºæ¢°é”®ç›˜å¶å°”会有自é”机械开关,现在几乎没有了。***大多数情况下你ä¸éœ€è¦ä½¿ç”¨è¯¥åŠŸèƒ½ï¼Œä¸”è¦ä½¿ç”¨`KC_CAPS`, `KC_NLCK`å’Œ`KC_SLCK`这三个键ç ã€‚***
## 输入ASCII之外的特殊字符比如Cédille 'Ç'
-没有在所有系统中输入这个的通用方法。你è¦å®šä¹‰é’ˆå¯¹ä½ çš„特定æ“作系统或布局的**å®**。
-比如看这个**å®**代ç çš„文章。
-
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
-<!--翻译问题:下方维基百科链接应全部替æ¢ä¸ºä¸­æ–‡é“¾æŽ¥ï¼Œæš‚未找到全部-->
-在**Windows**上,å¯ä»¥ç”¨`AltGr`键或**Altç **。
-* http://en.wikipedia.org/wiki/AltGr_key
-* https://zh.wikipedia.org/wiki/Alt%E7%A0%81
-
-在**Mac OS**定义`Option`键组åˆã€‚
-* https://zh.wikipedia.org/wiki/Option%E9%94%AE#%E6%9B%BF%E4%BB%A3%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5
-
-在**Xorg**å¯ä»¥æ”¹ç”¨`compose`键。
-* http://en.wikipedia.org/wiki/Compose_key
-
-下方链接查看**Unicode**输入。
-* http://en.wikipedia.org/wiki/Unicode_input
+请è§[Unicode](feature_unicode.md)功能。
## macOS上的`Fn`
@@ -136,51 +120,6 @@ https://github.com/tekezo/Karabiner/issues/403
请è§[Grave Escape](feature_grave_esc.md)功能。
-## å³ä¾§åŒè§’色修改键(诸如Shiftã€Alt等有修改其他键作用的键)å˜ç®­å¤´é”®
-å³ä¾§ä¿®æ”¹é”®å•å‡»æ—¶ä¼šå˜ä¸ºç®­å¤´é”®ï¼Œé•¿æŒ‰å°±è¿˜æ˜¯ä¿®æ”¹é”®ã€‚在TMK中åŒè§’色键称之为**TAP**.
-```
-
-#include "keymap_common.h"
-
-
-/* 用TMKåŒè§’色键功能实现å³ä¾§ä¿®æ”¹é”®æ”¹ç®­å¤´é”®
- *
- * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
- * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- [0] = LAYOUT( \
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
- FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
- [1] = LAYOUT( \
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
- [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
- [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
- [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
- [4] = ACTION_LAYER_MOMENTARY(1),
- [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
- [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
- [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
- [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
-};
-
-```
-
-åŒè§’色键说明: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
-
-
## Mac OSX的弹出键
`KC_EJCT` é”®ç åœ¨OSXå¯ä»¥ä½¿ç”¨ https://github.com/tmk/tmk_keyboard/issues/250
似乎Windows10会忽略该键ç ï¼ŒLinux/Xorgå¯ä»¥è¯†åˆ«è¯¥é”®ç ä½†é»˜è®¤ä¸æ˜ å°„。
diff --git a/docs/zh-cn/getting_started_github.md b/docs/zh-cn/getting_started_github.md
index 0400eea643..2b2f7a75c5 100644
--- a/docs/zh-cn/getting_started_github.md
+++ b/docs/zh-cn/getting_started_github.md
@@ -16,17 +16,23 @@ Github can be a little tricky to those that aren't familiar with it - this guide
![HTTPS链接](http://i.imgur.com/eGO0ohO.jpg)
-然åŽï¼Œåœ¨å‘½ä»¤è¡Œè¾“å…¥`git clone `,然åŽç²˜è´´ä½ çš„链接:
+然åŽï¼Œåœ¨å‘½ä»¤è¡Œè¾“å…¥`git clone --recurse-submodules `,然åŽç²˜è´´ä½ çš„链接:
```
-user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
+user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
-remote: Counting objects: 46625, done.
-remote: Compressing objects: 100% (2/2), done.
-remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
-Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
-Resolving deltas: 100% (29362/29362), done.
-Checking out files: 100% (2799/2799), done.
+remote: Enumerating objects: 9, done.
+remote: Counting objects: 100% (9/9), done.
+remote: Compressing objects: 100% (5/5), done.
+remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
+Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
+Resolving deltas: 100% (119972/119972), done.
+...
+Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
+Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
+Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
+Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
+Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
```
现在你本地计算机有QMK的分å‰äº†,ä½ å¯ä»¥æ·»åŠ ä½ çš„布局了, 为你的键盘编译并刷新固件å§ã€‚如果你觉得你的修改很ä¸é”™, ä½ å¯ä»¥æ·»åŠ ,æ交,然åŽæƒ³ä½ çš„分å‰æŽ¨å‡ºï¼ˆpull)你的改å˜ï¼Œåƒè¿™æ ·:
diff --git a/docs/zh-cn/getting_started_introduction.md b/docs/zh-cn/getting_started_introduction.md
index dcd0b72a56..b977b63390 100644
--- a/docs/zh-cn/getting_started_introduction.md
+++ b/docs/zh-cn/getting_started_introduction.md
@@ -4,7 +4,7 @@
## 基本QMK结构
-QMK是[Jun Wako](https://github.com/tmk)çš„[tmk_keyboard](https://github.com/tmk/tmk_keyboard)工程的一个分å‰ã€‚ç»è¿‡æ›´æ”¹çš„TMK原始代ç æ”¾åœ¨`tmk` 文件夹中。 QMK增加的新东西å¯ä»¥åœ¨ `quantum` 文件夹中找到。 键盘项目å¯ä»¥åœ¨ `handwired`(手动飞线) å’Œ `keyboard`(PCB键盘)这两个文件夹找到。
+QMK是[Jun Wako](https://github.com/tmk)çš„[tmk_keyboard](https://github.com/tmk/tmk_keyboard)工程的一个分å‰ã€‚ç»è¿‡æ›´æ”¹çš„TMK原始代ç æ”¾åœ¨`tmk_core` 文件夹中。 QMK增加的新东西å¯ä»¥åœ¨ `quantum` 文件夹中找到。 键盘项目å¯ä»¥åœ¨ `handwired`(手动飞线) å’Œ `keyboard`(PCB键盘)这两个文件夹找到。
### 用户空间结构
diff --git a/doxygen-todo b/doxygen-todo
index d5ae84058a..0f3010ffaf 100644
--- a/doxygen-todo
+++ b/doxygen-todo
@@ -3,7 +3,6 @@ tmk_core/protocol/bluefruit
tmk_core/protocol/chibios
tmk_core/protocol/iwrap
tmk_core/protocol/lufa
-tmk_core/protocol/mbed
tmk_core/protocol/midi
tmk_core/protocol/midi/bytequeue
tmk_core/protocol/midi/Config
diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c
index 2a43ba2393..21aefd497c 100644
--- a/drivers/arm/i2c_master.c
+++ b/drivers/arm/i2c_master.c
@@ -24,9 +24,8 @@
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file. Pins B6 and B7 are used
* but using any other I2C pins should be trivial.
*/
-
-#include "i2c_master.h"
#include "quantum.h"
+#include "i2c_master.h"
#include <string.h>
#include <hal.h>
@@ -62,7 +61,7 @@ __attribute__((weak)) void i2c_init(void) {
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
chThdSleepMilliseconds(10);
-#ifdef USE_I2CV1
+#if defined(USE_GPIOV1)
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
#else
diff --git a/drivers/arm/i2c_master.h b/drivers/arm/i2c_master.h
index efe3909a66..3d3891289f 100644
--- a/drivers/arm/i2c_master.h
+++ b/drivers/arm/i2c_master.h
@@ -27,10 +27,6 @@
#include "ch.h"
#include <hal.h>
-#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
-# define USE_I2CV1
-#endif
-
#ifdef I2C1_BANK
# define I2C1_SCL_BANK I2C1_BANK
# define I2C1_SDA_BANK I2C1_BANK
@@ -62,14 +58,6 @@
# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
# endif
#else
-// The default PAL alternate modes are used to signal that the pins are used for I2C
-# ifndef I2C1_SCL_PAL_MODE
-# define I2C1_SCL_PAL_MODE 4
-# endif
-# ifndef I2C1_SDA_PAL_MODE
-# define I2C1_SDA_PAL_MODE 4
-# endif
-
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
# ifndef I2C1_TIMINGR_PRESC
@@ -93,6 +81,16 @@
# define I2C_DRIVER I2CD1
#endif
+#ifndef USE_GPIOV1
+// The default PAL alternate modes are used to signal that the pins are used for I2C
+# ifndef I2C1_SCL_PAL_MODE
+# define I2C1_SCL_PAL_MODE 4
+# endif
+# ifndef I2C1_SDA_PAL_MODE
+# define I2C1_SDA_PAL_MODE 4
+# endif
+#endif
+
typedef int16_t i2c_status_t;
#define I2C_STATUS_SUCCESS (0)
@@ -103,7 +101,6 @@ void i2c_init(void);
i2c_status_t i2c_start(uint8_t address);
i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
-i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t* tx_body, uint16_t tx_length, uint8_t* rx_body, uint16_t rx_length);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
void i2c_stop(void);
diff --git a/drivers/arm/ws2812.c b/drivers/arm/ws2812.c
index fa702fca98..bdca565d88 100644
--- a/drivers/arm/ws2812.c
+++ b/drivers/arm/ws2812.c
@@ -6,7 +6,7 @@
/* Adapted from https://github.com/bigjosh/SimpleNeoPixelDemo/ */
#ifndef NOP_FUDGE
-# if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F0XX) || defined(STM32F0xx) || defined(STM32F3XX) || defined(STM32F3xx) || defined(STM32L0XX) || defined(STM32L0xx)
+# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX)
# define NOP_FUDGE 0.4
# else
# error("NOP_FUDGE configuration required")
diff --git a/drivers/arm/ws2812_spi.c b/drivers/arm/ws2812_spi.c
index 2094e50098..0e954ec506 100644
--- a/drivers/arm/ws2812_spi.c
+++ b/drivers/arm/ws2812_spi.c
@@ -1 +1,90 @@
-#error("NOT SUPPORTED") \ No newline at end of file
+#include "quantum.h"
+#include "ws2812.h"
+
+/* Adapted from https://github.com/gamazeps/ws2812b-chibios-SPIDMA/ */
+
+#ifdef RGBW
+# error "RGBW not supported"
+#endif
+
+// Define the spi your LEDs are plugged to here
+#ifndef WS2812_SPI
+# define WS2812_SPI SPID1
+#endif
+
+#ifndef WS2812_SPI_MOSI_PAL_MODE
+# define WS2812_SPI_MOSI_PAL_MODE 5
+#endif
+
+#define BYTES_FOR_LED_BYTE 4
+#define NB_COLORS 3
+#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS)
+#define DATA_SIZE (BYTES_FOR_LED * RGBLED_NUM)
+#define RESET_SIZE 200
+#define PREAMBLE_SIZE 4
+
+static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE] = {0};
+
+/*
+ * As the trick here is to use the SPI to send a huge pattern of 0 and 1 to
+ * the ws2812b protocol, we use this helper function to translate bytes into
+ * 0s and 1s for the LED (with the appropriate timing).
+ */
+static uint8_t get_protocol_eq(uint8_t data, int pos) {
+ uint8_t eq = 0;
+ if (data & (1 << (2 * (3 - pos))))
+ eq = 0b1110;
+ else
+ eq = 0b1000;
+ if (data & (2 << (2 * (3 - pos))))
+ eq += 0b11100000;
+ else
+ eq += 0b10000000;
+ return eq;
+}
+
+static void set_led_color_rgb(LED_TYPE color, int pos) {
+ uint8_t* tx_start = &txbuf[PREAMBLE_SIZE];
+
+ for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.g, j);
+ for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.r, j);
+ for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j);
+}
+
+void ws2812_init(void) {
+#if defined(USE_GPIOV1)
+ palSetLineMode(RGB_DI_PIN, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
+#else
+ palSetLineMode(RGB_DI_PIN, PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL);
+#endif
+
+ // TODO: more dynamic baudrate
+ static const SPIConfig spicfg = {
+ NULL, PAL_PORT(RGB_DI_PIN), PAL_PAD(RGB_DI_PIN),
+ SPI_CR1_BR_1 | SPI_CR1_BR_0 // baudrate : fpclk / 8 => 1tick is 0.32us (2.25 MHz)
+ };
+
+ spiAcquireBus(&WS2812_SPI); /* Acquire ownership of the bus. */
+ spiStart(&WS2812_SPI, &spicfg); /* Setup transfer parameters. */
+ spiSelect(&WS2812_SPI); /* Slave Select assertion. */
+}
+
+void ws2812_setleds(LED_TYPE* ledarray, uint16_t leds) {
+ static bool s_init = false;
+ if (!s_init) {
+ ws2812_init();
+ s_init = true;
+ }
+
+ for (uint8_t i = 0; i < leds; i++) {
+ set_led_color_rgb(ledarray[i], i);
+ }
+
+ // Send async - each led takes ~0.03ms, 50 leds ~1.5ms, animations flushing faster than send will cause issues.
+ // Instead spiSend can be used to send synchronously (or the thread logic can be added back).
+#ifdef WS2812_SPI_SYNC
+ spiSend(&WS2812_SPI, sizeof(txbuf) / sizeof(txbuf[0]), txbuf);
+#else
+ spiStartSend(&WS2812_SPI, sizeof(txbuf) / sizeof(txbuf[0]), txbuf);
+#endif
+}
diff --git a/drivers/avr/analog.c b/drivers/avr/analog.c
index 1a8da4261d..abe478b712 100644
--- a/drivers/avr/analog.c
+++ b/drivers/avr/analog.c
@@ -14,24 +14,31 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// Simple analog to digitial conversion
-
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdint.h>
#include "analog.h"
-static uint8_t aref = (1 << REFS0); // default to AREF = Vcc
+static uint8_t aref = ADC_REF_POWER;
-void analogReference(uint8_t mode) { aref = mode & 0xC0; }
+void analogReference(uint8_t mode) { aref = mode & (_BV(REFS1) | _BV(REFS0)); }
// Arduino compatible pin input
int16_t analogRead(uint8_t pin) {
#if defined(__AVR_ATmega32U4__)
- static const uint8_t PROGMEM pin_to_mux[] = {0x00, 0x01, 0x04, 0x05, 0x06, 0x07, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20};
+ // clang-format off
+ static const uint8_t PROGMEM pin_to_mux[] = {
+ //A0 A1 A2 A3 A4 A5
+ //F7 F6 F5 F4 F1 F0
+ 0x07, 0x06, 0x05, 0x04, 0x01, 0x00,
+ //A6 A7 A8 A9 A10 A11
+ //D4 D7 B4 B5 B6 D6
+ 0x20, 0x22, 0x23, 0x24, 0x25, 0x21
+ };
+ // clang-format on
if (pin >= 12) return 0;
return adc_read(pgm_read_byte(pin_to_mux + pin));
-#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
+#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__)
if (pin >= 8) return 0;
return adc_read(pin);
#else
@@ -39,20 +46,87 @@ int16_t analogRead(uint8_t pin) {
#endif
}
-// Mux input
+int16_t analogReadPin(pin_t pin) { return adc_read(pinToMux(pin)); }
+
+uint8_t pinToMux(pin_t pin) {
+ switch (pin) {
+ // clang-format off
+#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
+ case F0: return 0; // ADC0
+ case F1: return _BV(MUX0); // ADC1
+ case F2: return _BV(MUX1); // ADC2
+ case F3: return _BV(MUX1) | _BV(MUX0); // ADC3
+ case F4: return _BV(MUX2); // ADC4
+ case F5: return _BV(MUX2) | _BV(MUX0); // ADC5
+ case F6: return _BV(MUX2) | _BV(MUX1); // ADC6
+ case F7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
+ default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
+#elif defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
+ case F0: return 0; // ADC0
+ case F1: return _BV(MUX0); // ADC1
+ case F4: return _BV(MUX2); // ADC4
+ case F5: return _BV(MUX2) | _BV(MUX0); // ADC5
+ case F6: return _BV(MUX2) | _BV(MUX1); // ADC6
+ case F7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
+ case D4: return _BV(MUX5); // ADC8
+ case D6: return _BV(MUX5) | _BV(MUX0); // ADC9
+ case D7: return _BV(MUX5) | _BV(MUX1); // ADC10
+ case B4: return _BV(MUX5) | _BV(MUX1) | _BV(MUX0); // ADC11
+ case B5: return _BV(MUX5) | _BV(MUX2); // ADC12
+ case B6: return _BV(MUX5) | _BV(MUX2) | _BV(MUX0); // ADC13
+ default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
+#elif defined(__AVR_ATmega32A__)
+ case A0: return 0; // ADC0
+ case A1: return _BV(MUX0); // ADC1
+ case A2: return _BV(MUX1); // ADC2
+ case A3: return _BV(MUX1) | _BV(MUX0); // ADC3
+ case A4: return _BV(MUX2); // ADC4
+ case A5: return _BV(MUX2) | _BV(MUX0); // ADC5
+ case A6: return _BV(MUX2) | _BV(MUX1); // ADC6
+ case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
+ default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
+#elif defined(__AVR_ATmega328P__)
+ case C0: return 0; // ADC0
+ case C1: return _BV(MUX0); // ADC1
+ case C2: return _BV(MUX1); // ADC2
+ case C3: return _BV(MUX1) | _BV(MUX0); // ADC3
+ case C4: return _BV(MUX2); // ADC4
+ case C5: return _BV(MUX2) | _BV(MUX0); // ADC5
+ // ADC7:6 not present in DIP package and not shared by GPIO pins
+ default: return _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
+#endif
+ // clang-format on
+ }
+}
+
int16_t adc_read(uint8_t mux) {
-#if defined(__AVR_AT90USB162__)
- return 0;
-#else
uint8_t low;
- ADCSRA = (1 << ADEN) | ADC_PRESCALER; // enable ADC
- ADCSRB = (1 << ADHSM) | (mux & 0x20); // high speed mode
- ADMUX = aref | (mux & 0x1F); // configure mux input
- ADCSRA = (1 << ADEN) | ADC_PRESCALER | (1 << ADSC); // start the conversion
- while (ADCSRA & (1 << ADSC))
- ; // wait for result
- low = ADCL; // must read LSB first
- return (ADCH << 8) | low; // must read MSB only once!
+ // Enable ADC and configure prescaler
+ ADCSRA = _BV(ADEN) | ADC_PRESCALER;
+
+#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
+ // High speed mode and ADC8-13
+ ADCSRB = _BV(ADHSM) | (mux & _BV(MUX5));
+#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
+ // High speed mode only
+ ADCSRB = _BV(ADHSM);
+#endif
+
+ // Configure mux input
+#if defined(MUX4)
+ ADMUX = aref | (mux & (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0)));
+#else
+ ADMUX = aref | (mux & (_BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0)));
#endif
+
+ // Start the conversion
+ ADCSRA |= _BV(ADSC);
+ // Wait for result
+ while (ADCSRA & _BV(ADSC))
+ ;
+ // Must read LSB first
+ low = ADCL;
+ // Must read MSB only once!
+ return (ADCH << 8) | low;
}
diff --git a/drivers/avr/analog.h b/drivers/avr/analog.h
index 1b773d82ce..058882450d 100644
--- a/drivers/avr/analog.h
+++ b/drivers/avr/analog.h
@@ -14,45 +14,40 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _analog_h_included__
-#define _analog_h_included__
+#pragma once
#include <stdint.h>
+#include "quantum.h"
#ifdef __cplusplus
extern "C" {
#endif
void analogReference(uint8_t mode);
int16_t analogRead(uint8_t pin);
+
+int16_t analogReadPin(pin_t pin);
+uint8_t pinToMux(pin_t pin);
+
int16_t adc_read(uint8_t mux);
#ifdef __cplusplus
}
#endif
-#define ADC_REF_POWER (1 << REFS0)
-#define ADC_REF_INTERNAL ((1 << REFS1) | (1 << REFS0))
-#define ADC_REF_EXTERNAL (0)
+#define ADC_REF_EXTERNAL 0 // AREF, Internal Vref turned off
+#define ADC_REF_POWER _BV(REFS0) // AVCC with external capacitor on AREF pin
+#define ADC_REF_INTERNAL (_BV(REFS1) | _BV(REFS0)) // Internal 2.56V Voltage Reference with external capacitor on AREF pin (1.1V for 328P)
// These prescaler values are for high speed mode, ADHSM = 1
-#if F_CPU == 16000000L
-# define ADC_PRESCALER ((1 << ADPS2) | (1 << ADPS1))
+#if F_CPU == 16000000L || F_CPU == 12000000L
+# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS1)) // /64
#elif F_CPU == 8000000L
-# define ADC_PRESCALER ((1 << ADPS2) | (1 << ADPS0))
+# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS0)) // /32
#elif F_CPU == 4000000L
-# define ADC_PRESCALER ((1 << ADPS2))
+# define ADC_PRESCALER (_BV(ADPS2)) // /16
#elif F_CPU == 2000000L
-# define ADC_PRESCALER ((1 << ADPS1) | (1 << ADPS0))
+# define ADC_PRESCALER (_BV(ADPS1) | _BV(ADPS0)) // /8
#elif F_CPU == 1000000L
-# define ADC_PRESCALER ((1 << ADPS1))
+# define ADC_PRESCALER _BV(ADPS1) // /4
#else
-# define ADC_PRESCALER ((1 << ADPS0))
-#endif
-
-// some avr-libc versions do not properly define ADHSM
-#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
-# if !defined(ADHSM)
-# define ADHSM (7)
-# endif
-#endif
-
+# define ADC_PRESCALER _BV(ADPS0) // /2
#endif
diff --git a/drivers/gpio/pca9555.c b/drivers/gpio/pca9555.c
index 496bbca04e..02b5abbdde 100644
--- a/drivers/gpio/pca9555.c
+++ b/drivers/gpio/pca9555.c
@@ -76,3 +76,20 @@ uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) {
}
return data;
}
+
+uint16_t pca9555_readAllPins(uint8_t slave_addr) {
+ uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+
+ typedef union {
+ uint8_t u8[2];
+ uint16_t u16;
+ } data16;
+
+ data16 data;
+
+ i2c_status_t ret = i2c_readReg(addr, CMD_INPUT_0, &data.u8[0], sizeof(data), TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS) {
+ print("pca9555_readAllPins::FAILED\n");
+ }
+ return data.u16;
+}
diff --git a/drivers/gpio/pca9555.h b/drivers/gpio/pca9555.h
index ebb97e2f30..3341ec3eb5 100644
--- a/drivers/gpio/pca9555.h
+++ b/drivers/gpio/pca9555.h
@@ -53,3 +53,5 @@ void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf);
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf);
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port);
+
+uint16_t pca9555_readAllPins(uint8_t slave_addr);
diff --git a/drivers/haptic/DRV2605L.c b/drivers/haptic/DRV2605L.c
index c40731913b..830d629dae 100644
--- a/drivers/haptic/DRV2605L.c
+++ b/drivers/haptic/DRV2605L.c
@@ -32,16 +32,9 @@ void DRV_write(uint8_t drv_register, uint8_t settings) {
}
uint8_t DRV_read(uint8_t regaddress) {
-#ifdef __AVR__
i2c_readReg(DRV2605L_BASE_ADDRESS << 1, regaddress, DRV2605L_read_buffer, 1, 100);
DRV2605L_read_register = (uint8_t)DRV2605L_read_buffer[0];
-#else
- DRV2605L_tx_register[0] = regaddress;
- if (MSG_OK != i2c_transmit_receive(DRV2605L_BASE_ADDRESS << 1, DRV2605L_tx_register, 1, DRV2605L_read_buffer, 1)) {
- printf("err reading reg \n");
- }
- DRV2605L_read_register = (uint8_t)DRV2605L_read_buffer[0];
-#endif
+
return DRV2605L_read_register;
}
@@ -127,4 +120,4 @@ void DRV_pulse(uint8_t sequence) {
DRV_write(DRV_GO, 0x00);
DRV_write(DRV_WAVEFORM_SEQ_1, sequence);
DRV_write(DRV_GO, 0x01);
-} \ No newline at end of file
+}
diff --git a/drivers/issi/is31fl3218.h b/drivers/issi/is31fl3218.h
index a70cc1e793..fa760da191 100644
--- a/drivers/issi/is31fl3218.h
+++ b/drivers/issi/is31fl3218.h
@@ -13,6 +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/>.
*/
+
#pragma once
#include <stdint.h>
diff --git a/drivers/issi/is31fl3731-simple.c b/drivers/issi/is31fl3731-simple.c
index fad4676def..bd3bb47460 100644
--- a/drivers/issi/is31fl3731-simple.c
+++ b/drivers/issi/is31fl3731-simple.c
@@ -16,21 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef __AVR__
-# include <avr/interrupt.h>
-# include <avr/io.h>
-# include <util/delay.h>
-#else
-# include "wait.h"
-#endif
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <string.h>
#include "is31fl3731-simple.h"
#include "i2c_master.h"
-#include "progmem.h"
-#include "print.h"
+#include "wait.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)
@@ -156,6 +144,7 @@ void IS31FL3731_init(uint8_t addr) {
// enable software shutdown
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
+
// this delay was copied from other drivers, might not be needed
wait_ms(10);
diff --git a/drivers/issi/is31fl3731-simple.h b/drivers/issi/is31fl3731-simple.h
index a223c351e8..85b458753c 100644
--- a/drivers/issi/is31fl3731-simple.h
+++ b/drivers/issi/is31fl3731-simple.h
@@ -16,8 +16,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef IS31FL3731_DRIVER_H
-#define IS31FL3731_DRIVER_H
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
typedef struct is31_led {
uint8_t driver : 2;
@@ -203,5 +205,3 @@ void IS31FL3731_update_led_control_registers(uint8_t addr, uint8_t index);
#define C9_14 0xB1
#define C9_15 0xB2
#define C9_16 0xB3
-
-#endif // IS31FL3731_DRIVER_H
diff --git a/drivers/issi/is31fl3731.c b/drivers/issi/is31fl3731.c
index 0b6f3e985d..9f006b8174 100644
--- a/drivers/issi/is31fl3731.c
+++ b/drivers/issi/is31fl3731.c
@@ -15,18 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef __AVR__
-# include <avr/interrupt.h>
-# include <avr/io.h>
-# include <util/delay.h>
-#else
-# include "wait.h"
-#endif
-
#include "is31fl3731.h"
-#include <string.h>
#include "i2c_master.h"
-#include "progmem.h"
+#include "wait.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)
@@ -141,12 +132,9 @@ void IS31FL3731_init(uint8_t addr) {
// enable software shutdown
IS31FL3731_write_register(addr, ISSI_REG_SHUTDOWN, 0x00);
-// this delay was copied from other drivers, might not be needed
-#ifdef __AVR__
- _delay_ms(10);
-#else
+
+ // this delay was copied from other drivers, might not be needed
wait_ms(10);
-#endif
// picture mode
IS31FL3731_write_register(addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE);
diff --git a/drivers/issi/is31fl3731.h b/drivers/issi/is31fl3731.h
index 6a7a45d8ff..19e8e6251f 100644
--- a/drivers/issi/is31fl3731.h
+++ b/drivers/issi/is31fl3731.h
@@ -15,8 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef IS31FL3731_DRIVER_H
-#define IS31FL3731_DRIVER_H
+#pragma once
#include <stdint.h>
#include <stdbool.h>
@@ -207,5 +206,3 @@ void IS31FL3731_update_led_control_registers(uint8_t addr, uint8_t index);
#define C9_14 0xB1
#define C9_15 0xB2
#define C9_16 0xB3
-
-#endif // IS31FL3731_DRIVER_H
diff --git a/drivers/issi/is31fl3733.c b/drivers/issi/is31fl3733.c
index cc2d895efd..b913922b07 100644
--- a/drivers/issi/is31fl3733.c
+++ b/drivers/issi/is31fl3733.c
@@ -16,18 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef __AVR__
-# include <avr/interrupt.h>
-# include <avr/io.h>
-# include <util/delay.h>
-#else
-# include "wait.h"
-#endif
-
#include "is31fl3733.h"
-#include <string.h>
#include "i2c_master.h"
-#include "progmem.h"
+#include "wait.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)
@@ -80,43 +71,54 @@ bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
uint8_t g_led_control_registers[DRIVER_COUNT][24] = {{0}, {0}};
bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
-void IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ // If the transaction fails function returns false.
g_twi_transfer_buffer[0] = reg;
g_twi_transfer_buffer[1] = data;
#if ISSI_PERSISTENCE > 0
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
#endif
+ return true;
}
-void IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
- // assumes PG1 is already selected
-
- // transmit PWM registers in 12 transfers of 16 bytes
+bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // Assumes PG1 is already selected.
+ // If any of the transactions fails function returns false.
+ // Transmit PWM registers in 12 transfers of 16 bytes.
// g_twi_transfer_buffer[] is 20 bytes
- // iterate over the pwm_buffer contents at 16 byte intervals
+ // Iterate over the pwm_buffer contents at 16 byte intervals.
for (int i = 0; i < 192; i += 16) {
g_twi_transfer_buffer[0] = i;
- // copy the data from i to i+15
- // device will auto-increment register for data after the first byte
- // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
+ // Copy the data from i to i+15.
+ // Device will auto-increment register for data after the first byte
+ // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
for (int j = 0; j < 16; j++) {
g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
}
#if ISSI_PERSISTENCE > 0
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
- if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
}
#else
- i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
#endif
}
+ return true;
}
void IS31FL3733_init(uint8_t addr, uint8_t sync) {
@@ -157,12 +159,8 @@ void IS31FL3733_init(uint8_t addr, uint8_t sync) {
// Disable software shutdown.
IS31FL3733_write_register(addr, ISSI_REG_CONFIGURATION, (sync << 6) | 0x01);
-// Wait 10ms to ensure the device has woken up.
-#ifdef __AVR__
- _delay_ms(10);
-#else
+ // Wait 10ms to ensure the device has woken up.
wait_ms(10);
-#endif
}
void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
@@ -213,11 +211,15 @@ void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bo
void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
if (g_pwm_buffer_update_required[index]) {
- // Firstly we need to unlock the command register and select PG1
+ // Firstly we need to unlock the command register and select PG1.
IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
- IS31FL3733_write_pwm_buffer(addr, g_pwm_buffer[index]);
+ // If any of the transactions fail we risk writing dirty PG0,
+ // refresh page 0 just in case.
+ if (!IS31FL3733_write_pwm_buffer(addr, g_pwm_buffer[index])){
+ g_led_control_registers_update_required[index] = true;
+ }
}
g_pwm_buffer_update_required[index] = false;
}
@@ -231,6 +233,5 @@ void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index) {
IS31FL3733_write_register(addr, i, g_led_control_registers[index][i]);
}
}
- // This seems counter intuitive but sometimes this page can get corrupted. So update it every time.
- // g_led_control_registers_update_required[index] = false;
+ g_led_control_registers_update_required[index] = false;
}
diff --git a/drivers/issi/is31fl3733.h b/drivers/issi/is31fl3733.h
index 5b3283e035..603d505a13 100644
--- a/drivers/issi/is31fl3733.h
+++ b/drivers/issi/is31fl3733.h
@@ -16,8 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef IS31FL3733_DRIVER_H
-#define IS31FL3733_DRIVER_H
+#pragma once
#include <stdint.h>
#include <stdbool.h>
@@ -32,8 +31,8 @@ typedef struct is31_led {
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
void IS31FL3733_init(uint8_t addr, uint8_t sync);
-void IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
-void IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
@@ -250,5 +249,3 @@ void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index);
#define L_14 0xBD
#define L_15 0xBE
#define L_16 0xBF
-
-#endif // IS31FL3733_DRIVER_H
diff --git a/drivers/issi/is31fl3736.c b/drivers/issi/is31fl3736.c
index 754292425e..9bd8fecfb2 100644
--- a/drivers/issi/is31fl3736.c
+++ b/drivers/issi/is31fl3736.c
@@ -14,18 +14,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef __AVR__
-# include <avr/interrupt.h>
-# include <avr/io.h>
-# include <util/delay.h>
-#else
-# include "wait.h"
-#endif
-
#include "is31fl3736.h"
-#include <string.h>
#include "i2c_master.h"
-#include "progmem.h"
+#include "wait.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)
@@ -154,12 +145,8 @@ void IS31FL3736_init(uint8_t addr) {
// Disable software shutdown.
IS31FL3736_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
-// Wait 10ms to ensure the device has woken up.
-#ifdef __AVR__
- _delay_ms(10);
-#else
+ // Wait 10ms to ensure the device has woken up.
wait_ms(10);
-#endif
}
void IS31FL3736_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
@@ -263,7 +250,7 @@ void IS31FL3736_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
IS31FL3736_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
IS31FL3736_write_pwm_buffer(addr1, g_pwm_buffer[0]);
- // IS31FL3736_write_pwm_buffer( addr2, g_pwm_buffer[1] );
+ // IS31FL3736_write_pwm_buffer(addr2, g_pwm_buffer[1]);
}
g_pwm_buffer_update_required = false;
}
@@ -275,7 +262,7 @@ void IS31FL3736_update_led_control_registers(uint8_t addr1, uint8_t addr2) {
IS31FL3736_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
for (int i = 0; i < 24; i++) {
IS31FL3736_write_register(addr1, i, g_led_control_registers[0][i]);
- // IS31FL3736_write_register(addr2, i, g_led_control_registers[1][i] );
+ // IS31FL3736_write_register(addr2, i, g_led_control_registers[1][i]);
}
}
}
diff --git a/drivers/issi/is31fl3737.c b/drivers/issi/is31fl3737.c
index 4cc46272e2..37c5c58e42 100644
--- a/drivers/issi/is31fl3737.c
+++ b/drivers/issi/is31fl3737.c
@@ -16,18 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef __AVR__
-# include <avr/interrupt.h>
-# include <avr/io.h>
-# include <util/delay.h>
-#else
-# include "wait.h"
-#endif
-
-#include <string.h>
+#include "is31fl3737.h"
#include "i2c_master.h"
-#include "progmem.h"
-#include "rgb_matrix.h"
+#include "wait.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)
@@ -156,12 +147,8 @@ void IS31FL3737_init(uint8_t addr) {
// Disable software shutdown.
IS31FL3737_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
-// Wait 10ms to ensure the device has woken up.
-#ifdef __AVR__
- _delay_ms(10);
-#else
+ // Wait 10ms to ensure the device has woken up.
wait_ms(10);
-#endif
}
void IS31FL3737_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
@@ -217,7 +204,7 @@ void IS31FL3737_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
IS31FL3737_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
IS31FL3737_write_pwm_buffer(addr1, g_pwm_buffer[0]);
- // IS31FL3737_write_pwm_buffer( addr2, g_pwm_buffer[1] );
+ // IS31FL3737_write_pwm_buffer(addr2, g_pwm_buffer[1]);
}
g_pwm_buffer_update_required = false;
}
@@ -229,7 +216,7 @@ void IS31FL3737_update_led_control_registers(uint8_t addr1, uint8_t addr2) {
IS31FL3737_write_register(addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL);
for (int i = 0; i < 24; i++) {
IS31FL3737_write_register(addr1, i, g_led_control_registers[0][i]);
- // IS31FL3737_write_register(addr2, i, g_led_control_registers[1][i] );
+ // IS31FL3737_write_register(addr2, i, g_led_control_registers[1][i]);
}
}
}
diff --git a/drivers/issi/is31fl3737.h b/drivers/issi/is31fl3737.h
index 2c2fb19641..a1d2281778 100644
--- a/drivers/issi/is31fl3737.h
+++ b/drivers/issi/is31fl3737.h
@@ -16,8 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef IS31FL3737_DRIVER_H
-#define IS31FL3737_DRIVER_H
+#pragma once
#include <stdint.h>
#include <stdbool.h>
@@ -202,5 +201,3 @@ void IS31FL3737_update_led_control_registers(uint8_t addr1, uint8_t addr2);
#define L_10 0xBB
#define L_11 0xBC
#define L_12 0xBD
-
-#endif // IS31FL3737_DRIVER_H
diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h
index bba6a7a129..f490f367ae 100644
--- a/drivers/oled/oled_driver.h
+++ b/drivers/oled/oled_driver.h
@@ -224,6 +224,8 @@ void oled_write_raw_P(const char *data, uint16_t size);
// Advances the cursor while writing, inverts the pixels if true
// Advances the cursor to the next page, wiring ' ' to the remainder of the current page
# define oled_write_ln_P(data, invert) oled_write(data, invert)
+
+# define oled_write_raw_P(data, size) oled_write_raw(data, size)
#endif // defined(__AVR__)
// Can be used to manually turn on the screen if it is off
diff --git a/keyboards/30wer/config.h b/keyboards/30wer/config.h
index cf1bd72e56..5a89a35f0d 100644
--- a/keyboards/30wer/config.h
+++ b/keyboards/30wer/config.h
@@ -21,6 +21,3 @@
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/40percentclub/nori/keymaps/default/keymap.c b/keyboards/40percentclub/nori/keymaps/default/keymap.c
index 3c225a0d9c..6ed8567e73 100644
--- a/keyboards/40percentclub/nori/keymaps/default/keymap.c
+++ b/keyboards/40percentclub/nori/keymaps/default/keymap.c
@@ -133,7 +133,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/7skb/7skb.c b/keyboards/7skb/7skb.c
new file mode 100644
index 0000000000..3044e02233
--- /dev/null
+++ b/keyboards/7skb/7skb.c
@@ -0,0 +1 @@
+#include "7skb.h"
diff --git a/keyboards/7skb/7skb.h b/keyboards/7skb/7skb.h
new file mode 100644
index 0000000000..9e23d0ad3c
--- /dev/null
+++ b/keyboards/7skb/7skb.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_7skb_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/handwired/co60/rev7/led_custom.h b/keyboards/7skb/config.h
index 56e723db8f..cfb6bf4ffc 100644
--- a/keyboards/handwired/co60/rev7/led_custom.h
+++ b/keyboards/7skb/config.h
@@ -1,5 +1,6 @@
/*
-Copyright 2019 John M Daly <jmdaly@gmail.com>
+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
@@ -17,6 +18,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-void backlight_task(void);
-void breathing_interrupt_disable(void);
-void breathing_interrupt_enable(void);
+#include "config_common.h"
diff --git a/keyboards/7skb/info.json b/keyboards/7skb/info.json
new file mode 100644
index 0000000000..c737af4fc9
--- /dev/null
+++ b/keyboards/7skb/info.json
@@ -0,0 +1,76 @@
+{
+ "keyboard_name": "7skb",
+ "url": "https://salicylic-acid3.hatenablog.com/",
+ "maintainer": "Salicylic_acid3",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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":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":"-", "x":12, "y":0},
+ {"label":"=", "x":13, "y":0},
+ {"label":"\\", "x":14, "y":0},
+ {"label":"`", "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":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":"Delete", "x":14.5, "y":1, "w":1.5},
+ {"label":"Control", "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":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},
+ {"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":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":1.75},
+ {"label":"Fn", "x":15, "y":3},
+ {"label":"Alt", "x":1.5, "y":4},
+ {"label":"GUI", "x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":1.5},
+ {"x":5.5, "y":4, "w":1.25},
+ {"x":7.75, "y":4, "w":1.25},
+ {"x":9, "y":4, "w":2},
+ {"label":"GUI", "x":11, "y":4, "w":1.5},
+ {"label":"Alt", "x":12.5, "y":4}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/handwired/co60/rev6/led_custom.h b/keyboards/7skb/keymaps/default/config.h
index 96c4d0c2ba..4b3496d856 100644
--- a/keyboards/handwired/co60/rev6/led_custom.h
+++ b/keyboards/7skb/keymaps/default/config.h
@@ -1,5 +1,4 @@
-/*
- * Copyright 2019 John M Daly <jmdaly@gmail.com>
+/* Copyright 2018 Salicylic_acid3
*
* 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
@@ -17,6 +16,7 @@
#pragma once
-void backlight_task(void);
-void breathing_interrupt_disable(void);
-void breathing_interrupt_enable(void);
+/* Select hand configuration */
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
diff --git a/keyboards/7skb/keymaps/default/keymap.c b/keyboards/7skb/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9f114eebae
--- /dev/null
+++ b/keyboards/7skb/keymaps/default/keymap.c
@@ -0,0 +1,115 @@
+#include QMK_KEYBOARD_H
+
+
+#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.
+enum layer_number {
+ _QWERTY = 0,
+ _FN,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ RGB_RST = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = 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_GRAVE,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LCBR, KC_RCBR,KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_LCTRL, 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(_FN),
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_FN] = LAYOUT(
+ //,-----------------------------------------------------| |--------------------------------------------------------------------------------.
+ TG(_ADJUST), 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_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK,KC_PAUSE, KC_UP, _______, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT,KC_RIGHT, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, KC_STOP, _______
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT( /* Base */
+ //,-----------------------------------------------------| |--------------------------------------------------------------------------------.
+ TG(_ADJUST), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_STOP, XXXXXXX
+ //`---------------------------------------------| |--------------------------------------------'
+ )
+};
+
+
+//A description for expressing the layer position in LED mode.
+layer_state_t layer_state_set_user(layer_state_t state) {
+#ifdef RGBLIGHT_ENABLE
+ switch (get_highest_layer(state)) {
+ case _FN:
+ rgblight_sethsv_at(HSV_BLUE, 0);
+ break;
+ case _ADJUST:
+ rgblight_sethsv_at(HSV_PURPLE, 0);
+ break;
+ default: // for any other layers, or the default layer
+ rgblight_sethsv_at( 0, 0, 0, 0);
+ break;
+ }
+ rgblight_set_effect_range( 1, 4);
+#endif
+return state;
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ bool result = false;
+ switch (keycode) {
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGB_RST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
diff --git a/keyboards/7skb/keymaps/salicylic/config.h b/keyboards/7skb/keymaps/salicylic/config.h
new file mode 100644
index 0000000000..cc4a3d4426
--- /dev/null
+++ b/keyboards/7skb/keymaps/salicylic/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * 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
+
+/* Select hand configuration */
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+//#define MASTER_RIGHT
diff --git a/keyboards/7skb/keymaps/salicylic/keymap.c b/keyboards/7skb/keymaps/salicylic/keymap.c
new file mode 100644
index 0000000000..522d4c1382
--- /dev/null
+++ b/keyboards/7skb/keymaps/salicylic/keymap.c
@@ -0,0 +1,181 @@
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+
+
+#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.
+enum layer_number {
+ _QWERTY = 0,
+ _FLOCK,
+ _FN,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ RGB_RST = SAFE_RANGE
+};
+
+enum tapdances{
+ TD_ESFL = 0,
+ TD_ESQW,
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
+ [TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,-----------------------------------------------------| |--------------------------------------------------------------------------------.
+ TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_MINS, JP_EQL, JP_BSLS, KC_ZKHK,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, JP_RBRC,KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_BSLS, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, JP_SLSH, KC_RSFT, MO(_FN),
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_ZKHK,LGUI_T(KC_MHEN),LT(_LOWER,KC_ENT), KC_BSPC, KC_DEL, LT(_RAISE,KC_SPC),ALT_T(KC_HENK), KC_APP
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_FLOCK] = LAYOUT(
+ //,-----------------------------------------------------| |--------------------------------------------------------------------------------.
+ TD(TD_ESQW), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_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_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK,KC_PAUSE, KC_UP, _______, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT,KC_RIGHT, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, KC_STOP, _______
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_LOWER] = 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_INS, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ JP_QUOT, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_P6, KC_P7, KC_P8, KC_P9, JP_ASTR, JP_SLSH, _______, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXXXX, KC_P4, KC_P5, KC_P6, JP_MINS, JP_EQL, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_P0, KC_P1, KC_P2, KC_P3, JP_PLUS, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______,MO(_LOWER), _______, _______, MO(_RAISE), JP_DOT, _______
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_RAISE] = 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_INS, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, XXXXXXX, _______, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+LCTL_T(KC_F11),XXXXXXX, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, XXXXXXX, XXXXXXX, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+SFT_T(KC_F12), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______
+ //`---------------------------------------------| |--------------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT( /* Base */
+ //,-----------------------------------------------------| |--------------------------------------------------------------------------------.
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, LCA(KC_DEL), LALT(KC_PSCR),KC_PSCR, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, _______, RESET, RESET, _______, KC_STOP, XXXXXXX
+ //`---------------------------------------------| |--------------------------------------------'
+ )
+};
+
+
+//A description for expressing the layer position in LED mode.
+layer_state_t layer_state_set_user(layer_state_t state) {
+ state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+#ifdef RGBLIGHT_ENABLE
+ switch (get_highest_layer(state)) {
+ case _FLOCK:
+ rgblight_sethsv_at(HSV_YELLOW, 0);
+ break;
+ case _FN:
+ rgblight_sethsv_at(HSV_GREEN, 0);
+ break;
+ case _LOWER:
+ rgblight_sethsv_at(HSV_BLUE, 0);
+ break;
+ case _RAISE:
+ rgblight_sethsv_at(HSV_RED, 0);
+ break;
+ case _ADJUST:
+ rgblight_sethsv_at(HSV_PURPLE, 0);
+ break;
+ default: // for any other layers, or the default layer
+ rgblight_sethsv_at( 0, 0, 0, 0);
+ break;
+ }
+ rgblight_set_effect_range( 1, 4);
+#endif
+return state;
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ bool result = false;
+ switch (keycode) {
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGB_RST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
diff --git a/keyboards/7skb/keymaps/salicylic/rules.mk b/keyboards/7skb/keymaps/salicylic/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/7skb/keymaps/salicylic/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/7skb/readme.md b/keyboards/7skb/readme.md
new file mode 100644
index 0000000000..18e4eef3ea
--- /dev/null
+++ b/keyboards/7skb/readme.md
@@ -0,0 +1,17 @@
+# 7skb
+
+![7skb](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20191124/20191124025208.png)
+
+This is 63 keys Custom keyboard.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: 7skb PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1673395)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 7skb: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).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/7skb-mx-build-guide)
diff --git a/keyboards/7skb/rev1/config.h b/keyboards/7skb/rev1/config.h
new file mode 100644
index 0000000000..01b1ef4a1c
--- /dev/null
+++ b/keyboards/7skb/rev1/config.h
@@ -0,0 +1,82 @@
+/*
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0007
+#define MANUFACTURER Salicylic_Acid
+#define PRODUCT 7skb
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B5 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D2
+#define SPLIT_HAND_PIN B6
+
+/* 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
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#ifndef RGBLED_NUM
+ #define RGBLED_NUM 10
+ #define RGBLIGHT_SPLIT
+ #define RGBLED_SPLIT { 5, 5 }
+#endif
+
+#define RGBLIGHT_ANIMATIONS
+
+#ifndef IOS_DEVICE_ENABLE
+ #define RGBLIGHT_LIMIT_VAL 180
+ #define RGBLIGHT_VAL_STEP 17
+#else
+ #define RGBLIGHT_LIMIT_VAL 50
+ #define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
+// 120 RGBoff, OLEDoff
+// 120 OLED
+// 330 RGB 6
+// 300 RGB 32
+// 310 OLED & RGB 32
+ #define USB_MAX_POWER_CONSUMPTION 400
+#else
+ // fix iPhone and iPad power adapter issue
+ // iOS device need lessthan 100
+ #define USB_MAX_POWER_CONSUMPTION 100
+#endif
diff --git a/keyboards/7skb/rev1/rev1.c b/keyboards/7skb/rev1/rev1.c
new file mode 100644
index 0000000000..520a869e57
--- /dev/null
+++ b/keyboards/7skb/rev1/rev1.c
@@ -0,0 +1 @@
+#include "rev1.h"
diff --git a/keyboards/7skb/rev1/rev1.h b/keyboards/7skb/rev1/rev1.h
new file mode 100644
index 0000000000..8ab845240d
--- /dev/null
+++ b/keyboards/7skb/rev1/rev1.h
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "7skb.h"
+
+#include "quantum.h"
+
+//////////////////////////////////////////////////////////////////////////////
+// When only use 7skb.
+//////////////////////////////////////////////////////////////////////////////
+/*
+ * ,------------------------------------ ------------------------------------------------------.
+ * | L00 | L01 | L02 | L03 | L04 | L05 | | R00 | R01 | R02 | R03 | R04 | R05 | R06 | R07 | R17 |
+ * |---------------------------------------------------------------------------------------------+
+ * | L10 | L11 | L12 | L13 | L14 | L15 | | R10 | R11 | R12 | R13 | R14 | R15 | R16 | R27 |
+ * |---------------------------------------- ---------------------------------------------------+
+ * | L20 | L21 | L22 | L23 | L24 | L25 | | R20 | R21 | R22 | R23 | R24 | R25 | R26 |
+ * |---------------------------------------------------------------------------------------------+
+ * | L30 | L31 | L32 | L33 | L34 | L35 | | R30 | R31 | R32 | R33 | R34 | R35 | R36 |
+ * |------------------------------------------- -----------------------------------------------'
+ * | L41 | L42 | L43 | L44 | | R40 | R41 | R43 | R44 |
+ * |------------------------------ ---------------------------------'
+ */
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, R06, R07, R17, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R27, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, R36, \
+ L41, L42, L43, L44, R40, R41, R43, R44 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, KC_NO, KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, KC_NO, KC_NO }, \
+ {KC_NO, L41, L42, L43, L44, KC_NO, KC_NO, KC_NO }, \
+ { R00, R01, R02, R03, R04, R05, R06, R07 }, \
+ { R10, R11, R12, R13, R14, R15, R16, R17 }, \
+ { R20, R21, R22, R23, R24, R25, R26, R27 }, \
+ { R30, R31, R32, R33, R34, R35, R36, KC_NO }, \
+ { R40, R41, KC_NO, R43, R44, KC_NO, KC_NO, KC_NO } \
+ }
diff --git a/keyboards/pico/rev1/rules.mk b/keyboards/7skb/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/pico/rev1/rules.mk
+++ b/keyboards/7skb/rev1/rules.mk
diff --git a/keyboards/handwired/minorca/keymaps/default/rules.mk b/keyboards/7skb/rules.mk
index 584798d1a1..d663af19f8 100644
--- a/keyboards/handwired/minorca/keymaps/default/rules.mk
+++ b/keyboards/7skb/rules.mk
@@ -1,21 +1,35 @@
+# MCU name
+MCU = atmega32u4
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
+# 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 = 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)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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
+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.
-
+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 = 7skb/rev1
diff --git a/keyboards/aeboards/aegis/config.h b/keyboards/aeboards/aegis/config.h
index 2a35897300..5836f02bc0 100644
--- a/keyboards/aeboards/aegis/config.h
+++ b/keyboards/aeboards/aegis/config.h
@@ -46,23 +46,3 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*12*9*2)) = (37+864)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 901
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 123
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/aeboards/aegis/keymaps/via/rules.mk b/keyboards/aeboards/aegis/keymaps/via/rules.mk
index 70258b9ead..1e5b99807c 100644
--- a/keyboards/aeboards/aegis/keymaps/via/rules.mk
+++ b/keyboards/aeboards/aegis/keymaps/via/rules.mk
@@ -1,68 +1 @@
-# project specific files
-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
-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 = 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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/aeboards/aegis/rules.mk b/keyboards/aeboards/aegis/rules.mk
index 602da86786..2e39dae173 100644
--- a/keyboards/aeboards/aegis/rules.mk
+++ b/keyboards/aeboards/aegis/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -30,5 +30,3 @@ 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
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c
diff --git a/keyboards/aeboards/ext65/config.h b/keyboards/aeboards/ext65/config.h
index 7255b463fc..c6e6ac8900 100644
--- a/keyboards/aeboards/ext65/config.h
+++ b/keyboards/aeboards/ext65/config.h
@@ -46,24 +46,3 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*10*2)) = (37+800)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 837
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 187
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
-
diff --git a/keyboards/aeboards/ext65/keymaps/default/keymap.c b/keyboards/aeboards/ext65/keymaps/default/keymap.c
index efa11cd0fd..54eab23aec 100644
--- a/keyboards/aeboards/ext65/keymaps/default/keymap.c
+++ b/keyboards/aeboards/ext65/keymaps/default/keymap.c
@@ -38,9 +38,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[1] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
@@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[2] = LAYOUT_ext65(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
@@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[3] = LAYOUT_ext65(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
@@ -90,8 +90,8 @@ void led_set_user(uint8_t usb_led) {
}
}
-uint32_t layer_state_set_user(uint32_t state) {
- switch (biton32(state)) {
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
case 1:
writePinHigh(D1);
break;
diff --git a/keyboards/aeboards/ext65/keymaps/via/keymap.c b/keyboards/aeboards/ext65/keymaps/via/keymap.c
index efa11cd0fd..ab6a93043a 100644
--- a/keyboards/aeboards/ext65/keymaps/via/keymap.c
+++ b/keyboards/aeboards/ext65/keymaps/via/keymap.c
@@ -38,9 +38,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[1] = LAYOUT_ext65(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
@@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[2] = LAYOUT_ext65(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
@@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[3] = LAYOUT_ext65(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, 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/aeboards/ext65/keymaps/via/rules.mk b/keyboards/aeboards/ext65/keymaps/via/rules.mk
index 70258b9ead..1e5b99807c 100644
--- a/keyboards/aeboards/ext65/keymaps/via/rules.mk
+++ b/keyboards/aeboards/ext65/keymaps/via/rules.mk
@@ -1,68 +1 @@
-# project specific files
-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
-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 = 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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/aeboards/ext65/rules.mk b/keyboards/aeboards/ext65/rules.mk
index bac979ad0c..a5c98a1c60 100644
--- a/keyboards/aeboards/ext65/rules.mk
+++ b/keyboards/aeboards/ext65/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -29,6 +29,3 @@ 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
-
-# project specific files
-SRC += keyboards/wilba_tech/wt_main.c
diff --git a/keyboards/ai03/lunar/config.h b/keyboards/ai03/lunar/config.h
index f7f3262ac7..5bc0a0c49b 100644
--- a/keyboards/ai03/lunar/config.h
+++ b/keyboards/ai03/lunar/config.h
@@ -242,25 +242,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Bootmagic Lite key configuration */
// #define BOOTMAGIC_LITE_ROW 0
// #define BOOTMAGIC_LITE_COLUMN 0
-
-/* VIA Configurator Compatibility */
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR = DYNAMIC_KEYMAP_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 637
-// DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE = 1024 - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 387
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/ai03/lunar/keymaps/via/rules.mk b/keyboards/ai03/lunar/keymaps/via/rules.mk
index 01fcd55e8d..1e5b99807c 100644
--- a/keyboards/ai03/lunar/keymaps/via/rules.mk
+++ b/keyboards/ai03/lunar/keymaps/via/rules.mk
@@ -1,85 +1 @@
-# 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 = 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 = yes # 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)
-
-SRC += keyboards/wilba_tech/wt_main.c
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/ai03/orbit/keymaps/default/keymap.c b/keyboards/ai03/orbit/keymaps/default/keymap.c
index 4c8c39fb0f..d0c80d9282 100644
--- a/keyboards/ai03/orbit/keymaps/default/keymap.c
+++ b/keyboards/ai03/orbit/keymaps/default/keymap.c
@@ -85,7 +85,7 @@ void led_set_user(uint8_t usb_led) {
}
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return state;
}
diff --git a/keyboards/ai03/orbit/split_util.c b/keyboards/ai03/orbit/split_util.c
index 5095cb8fdc..a83ff5bc67 100644
--- a/keyboards/ai03/orbit/split_util.c
+++ b/keyboards/ai03/orbit/split_util.c
@@ -54,7 +54,7 @@ bool is_keyboard_master(void)
}
static void keyboard_master_setup(void) {
-#if defined(USE_I2C) || defined(EH)
+#if defined(USE_I2C)
#ifdef SSD1306OLED
matrix_master_OLED_init ();
#endif
diff --git a/keyboards/ai03/orbit/transport.c b/keyboards/ai03/orbit/transport.c
index adedf24322..447fafed14 100644
--- a/keyboards/ai03/orbit/transport.c
+++ b/keyboards/ai03/orbit/transport.c
@@ -18,7 +18,7 @@
extern backlight_config_t backlight_config;
#endif
-#if defined(USE_I2C) || defined(EH)
+#if defined(USE_I2C)
#include "i2c.h"
diff --git a/keyboards/allison/allison.c b/keyboards/allison/allison.c
new file mode 100644
index 0000000000..4ca8bd07de
--- /dev/null
+++ b/keyboards/allison/allison.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 "allison.h"
diff --git a/keyboards/allison/allison.h b/keyboards/allison/allison.h
new file mode 100644
index 0000000000..e9078a82a1
--- /dev/null
+++ b/keyboards/allison/allison.h
@@ -0,0 +1,44 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 is 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_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K0E, \
+ 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, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \
+ K50, K51, K52, K53, K58, K5C, K5D, K5E \
+) \
+{ \
+ { 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, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \
+ { K50, K51, K52, K53, KC_NO, KC_NO, KC_NO, KC_NO, K58, KC_NO, KC_NO, KC_NO, K5C, K5D, K5E } \
+}
diff --git a/keyboards/allison/config.h b/keyboards/allison/config.h
new file mode 100644
index 0000000000..8a310d0a20
--- /dev/null
+++ b/keyboards/allison/config.h
@@ -0,0 +1,252 @@
+/*
+Copyright 2020 Yiancar
+
+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 0x8968
+#define PRODUCT_ID 0x414D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER protoTypist
+#define PRODUCT Allison
+#define DESCRIPTION A custom luxurious 60 with F-row and Macro
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#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 { D2, D1, D0, B1, B2, D3}
+#define MATRIX_COL_PINS { F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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 4
+
+// #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/allison/info.json b/keyboards/allison/info.json
new file mode 100644
index 0000000000..1c435a2d22
--- /dev/null
+++ b/keyboards/allison/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "allison",
+ "url": "www.yiancar-designs.com",
+ "maintainer": "Yiancar",
+ "width": 16.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"0,0", "x":1.25, "y":0}, {"label":"0,1", "x":2.5, "y":0}, {"label":"0,2", "x":3.5, "y":0}, {"label":"0,3", "x":4.5, "y":0}, {"label":"0,4", "x":5.5, "y":0}, {"label":"0,5", "x":6.75, "y":0}, {"label":"0,6", "x":7.75, "y":0}, {"label":"0,7", "x":8.75, "y":0}, {"label":"0,8", "x":9.75, "y":0}, {"label":"0,9", "x":11, "y":0}, {"label":"0,10", "x":12, "y":0}, {"label":"0,11", "x":13, "y":0}, {"label":"0,12", "x":14, "y":0}, {"label":"0,13", "x":15.25, "y":0}, {"label":"1,0", "x":0, "y":1.25}, {"label":"1,1", "x":1.25, "y":1.25}, {"label":"1,2", "x":2.25, "y":1.25}, {"label":"1,3", "x":3.25, "y":1.25}, {"label":"1,4", "x":4.25, "y":1.25}, {"label":"1,5", "x":5.25, "y":1.25}, {"label":"1,6", "x":6.25, "y":1.25}, {"label":"1,7", "x":7.25, "y":1.25}, {"label":"1,8", "x":8.25, "y":1.25}, {"label":"1,9", "x":9.25, "y":1.25}, {"label":"1,10", "x":10.25, "y":1.25}, {"label":"1,11", "x":11.25, "y":1.25}, {"label":"1,12", "x":12.25, "y":1.25}, {"label":"1,13", "x":13.25, "y":1.25}, {"label":"1,14", "x":14.25, "y":1.25}, {"label":"0,14", "x":15.25, "y":1.25}, {"label":"2,0", "x":0, "y":2.25}, {"label":"2,1", "x":1.25, "y":2.25, "w":1.5}, {"label":"2,2", "x":2.75, "y":2.25}, {"label":"2,3", "x":3.75, "y":2.25}, {"label":"2,4", "x":4.75, "y":2.25}, {"label":"2,5", "x":5.75, "y":2.25}, {"label":"2,6", "x":6.75, "y":2.25}, {"label":"2,7", "x":7.75, "y":2.25}, {"label":"2,8", "x":8.75, "y":2.25}, {"label":"2,9", "x":9.75, "y":2.25}, {"label":"2,10", "x":10.75, "y":2.25}, {"label":"2,11", "x":11.75, "y":2.25}, {"label":"2,12", "x":12.75, "y":2.25}, {"label":"2,13", "x":13.75, "y":2.25}, {"label":"2,14", "x":14.75, "y":2.25, "w":1.5}, {"label":"3,0", "x":0, "y":3.25}, {"label":"3,1", "x":1.25, "y":3.25, "w":1.75}, {"label":"3,2", "x":3, "y":3.25}, {"label":"3,3", "x":4, "y":3.25}, {"label":"3,4", "x":5, "y":3.25}, {"label":"3,5", "x":6, "y":3.25}, {"label":"3,6", "x":7, "y":3.25}, {"label":"3,7", "x":8, "y":3.25}, {"label":"3,8", "x":9, "y":3.25}, {"label":"3,9", "x":10, "y":3.25}, {"label":"3,10", "x":11, "y":3.25}, {"label":"3,11", "x":12, "y":3.25}, {"label":"3,12", "x":13, "y":3.25}, {"label":"3,13", "x":14, "y":3.25}, {"label":"3,14", "x":15, "y":3.25, "w":1.25}, {"label":"4,0", "x":0, "y":4.25}, {"label":"4,1", "x":1.25, "y":4.25, "w":1.25}, {"label":"4,2", "x":2.5, "y":4.25}, {"label":"4,3", "x":3.5, "y":4.25}, {"label":"4,4", "x":4.5, "y":4.25}, {"label":"4,5", "x":5.5, "y":4.25}, {"label":"4,6", "x":6.5, "y":4.25}, {"label":"4,7", "x":7.5, "y":4.25}, {"label":"4,8", "x":8.5, "y":4.25}, {"label":"4,9", "x":9.5, "y":4.25}, {"label":"4,10", "x":10.5, "y":4.25}, {"label":"4,11", "x":11.5, "y":4.25}, {"label":"4,12", "x":12.5, "y":4.25}, {"label":"4,13", "x":13.5, "y":4.25, "w":1.75}, {"label":"4,14", "x":15.25, "y":4.25}, {"label":"5,0", "x":0, "y":5.25}, {"label":"5,1", "x":1.25, "y":5.25, "w":1.5}, {"label":"5,2", "x":2.75, "y":5.25}, {"label":"5,3", "x":3.75, "y":5.25, "w":1.5}, {"label":"5,8", "x":5.25, "y":5.25, "w":7}, {"label":"5,12", "x":12.25, "y":5.25, "w":1.5}, {"label":"5,13", "x":13.75, "y":5.25}, {"label":"5,14", "x":14.75, "y":5.25, "w":1.5}]
+ }
+ }
+}
diff --git a/keyboards/allison/keymaps/default/keymap.c b/keyboards/allison/keymaps/default/keymap.c
new file mode 100644
index 0000000000..30fed354a4
--- /dev/null
+++ b/keyboards/allison/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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_all( /* Base */
+ 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_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_DEL,
+ 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_BSPC,
+ 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_NUHS, KC_ENT,
+ KC_END, 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(1),
+ KC_LGUI, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL),
+
+ [1] = LAYOUT_all( /* FN1 */
+ 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_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_RGHT, KC_TRNS, 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_INC, BL_DEC, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all( /* 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all( /* 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/allison/keymaps/default/readme.md b/keyboards/allison/keymaps/default/readme.md
new file mode 100644
index 0000000000..13f200dad3
--- /dev/null
+++ b/keyboards/allison/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+# The default keymaps for Allison
+
+![ANSI](https://i.imgur.com/L4MpWy7.png)
+
+![ISO](https://i.imgur.com/pvb3Gd7.png)
+
+![ANSI FN1](https://i.imgur.com/pEVv5q6.png)
diff --git a/keyboards/allison/keymaps/via/keymap.c b/keyboards/allison/keymaps/via/keymap.c
new file mode 100644
index 0000000000..30fed354a4
--- /dev/null
+++ b/keyboards/allison/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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_all( /* Base */
+ 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_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_DEL,
+ 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_BSPC,
+ 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_NUHS, KC_ENT,
+ KC_END, 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(1),
+ KC_LGUI, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL),
+
+ [1] = LAYOUT_all( /* FN1 */
+ 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_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_RGHT, KC_TRNS, 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_INC, BL_DEC, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all( /* 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all( /* 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/allison/keymaps/via/readme.md b/keyboards/allison/keymaps/via/readme.md
new file mode 100644
index 0000000000..b82bc8e79f
--- /dev/null
+++ b/keyboards/allison/keymaps/via/readme.md
@@ -0,0 +1 @@
+# Compile with this keymap to use VIA
diff --git a/keyboards/allison/keymaps/via/rules.mk b/keyboards/allison/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/allison/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/allison/readme.md b/keyboards/allison/readme.md
new file mode 100644
index 0000000000..343ff2325d
--- /dev/null
+++ b/keyboards/allison/readme.md
@@ -0,0 +1,15 @@
+# Allison
+
+![Allison](https://i.imgur.com/tvLtu4K.jpg)
+
+A custom luxurious 60 with F-row and Macro
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make allison: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/allison/rules.mk b/keyboards/allison/rules.mk
new file mode 100644
index 0000000000..3d524e478f
--- /dev/null
+++ b/keyboards/allison/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/allison_numpad/allison_numpad.c b/keyboards/allison_numpad/allison_numpad.c
new file mode 100644
index 0000000000..16f36e3140
--- /dev/null
+++ b/keyboards/allison_numpad/allison_numpad.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 "allison_numpad.h"
diff --git a/keyboards/allison_numpad/allison_numpad.h b/keyboards/allison_numpad/allison_numpad.h
new file mode 100644
index 0000000000..9295e68668
--- /dev/null
+++ b/keyboards/allison_numpad/allison_numpad.h
@@ -0,0 +1,61 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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 is 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_ortho_6x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33, \
+ K40, K41, K42, K43, \
+ K50, K51, K52, K53 \
+) \
+{ \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 }, \
+ { K30, K31, K32, K33 }, \
+ { K40, K41, K42, K43 }, \
+ { K50, K51, K52, K53 } \
+}
+
+#define LAYOUT_numpad_6x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, \
+ K30, K31, K32, K33, \
+ K40, K41, K42, \
+ K50, K52, K53 \
+) \
+{ \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, KC_NO }, \
+ { K30, K31, K32, K33 }, \
+ { K40, K41, K42, KC_NO }, \
+ { K50, KC_NO, K52, K53 } \
+}
diff --git a/keyboards/allison_numpad/config.h b/keyboards/allison_numpad/config.h
new file mode 100644
index 0000000000..c8b8189071
--- /dev/null
+++ b/keyboards/allison_numpad/config.h
@@ -0,0 +1,252 @@
+/*
+Copyright 2020 Yiancar
+
+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 0x8968
+#define PRODUCT_ID 0x414E
+#define DEVICE_VER 0x0001
+#define MANUFACTURER protoTypist
+#define PRODUCT Allison Numpad
+#define DESCRIPTION A custom luxurious numpad to match Allison
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#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, C7, C6, B6, B5, B4 }
+#define MATRIX_COL_PINS { F6, F5, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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 4
+
+// #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/allison_numpad/info.json b/keyboards/allison_numpad/info.json
new file mode 100644
index 0000000000..8b4258bd1a
--- /dev/null
+++ b/keyboards/allison_numpad/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "allison_numpad",
+ "url": "www.yiancar-designs.com",
+ "maintainer": "Yiancar",
+ "width": 4,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_ortho_6x4": {
+ "layout": [{"label":"0,0", "x":0, "y":0}, {"label":"0,1", "x":1, "y":0}, {"label":"0,2", "x":2, "y":0}, {"label":"0,3", "x":3, "y":0}, {"label":"1,0", "x":0, "y":1.25}, {"label":"1,1", "x":1, "y":1.25}, {"label":"1,2", "x":2, "y":1.25}, {"label":"1,3", "x":3, "y":1.25}, {"label":"2,0", "x":0, "y":2.25}, {"label":"2,1", "x":1, "y":2.25}, {"label":"2,2", "x":2, "y":2.25}, {"label":"2,3", "x":3, "y":2.25}, {"label":"3,0", "x":0, "y":3.25}, {"label":"3,1", "x":1, "y":3.25}, {"label":"3,2", "x":2, "y":3.25}, {"label":"3,3", "x":3, "y":3.25}, {"label":"4,0", "x":0, "y":4.25}, {"label":"4,1", "x":1, "y":4.25}, {"label":"4,2", "x":2, "y":4.25}, {"label":"4,3", "x":3, "y":4.25}, {"label":"5,0", "x":0, "y":5.25}, {"label":"5,1", "x":1, "y":5.25}, {"label":"5,2", "x":2, "y":5.25}, {"label":"5,3", "x":3, "y":5.25}]
+ },
+ "LAYOUT_numpad_6x4": {
+ "layout": [{"label":"0,0", "x":0, "y":0}, {"label":"0,1", "x":1, "y":0}, {"label":"0,2", "x":2, "y":0}, {"label":"0,3", "x":3, "y":0}, {"label":"1,0", "x":0, "y":1.25}, {"label":"1,1", "x":1, "y":1.25}, {"label":"1,2", "x":2, "y":1.25}, {"label":"1,3", "x":3, "y":1.25}, {"label":"2,0", "x":0, "y":2.25}, {"label":"2,1", "x":1, "y":2.25}, {"label":"2,2", "x":2, "y":2.25}, {"label":"3,3", "x":3, "y":2.25, "h":2}, {"label":"3,0", "x":0, "y":3.25}, {"label":"3,1", "x":1, "y":3.25}, {"label":"3,2", "x":2, "y":3.25}, {"label":"4,0", "x":0, "y":4.25}, {"label":"4,1", "x":1, "y":4.25}, {"label":"4,2", "x":2, "y":4.25}, {"label":"5,3", "x":3, "y":4.25, "h":2}, {"label":"5,0", "x":0, "y":5.25, "w":2}, {"label":"5,2", "x":2, "y":5.25}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/allison_numpad/keymaps/default/keymap.c b/keyboards/allison_numpad/keymaps/default/keymap.c
new file mode 100644
index 0000000000..74310885c5
--- /dev/null
+++ b/keyboards/allison_numpad/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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_ortho_6x4( /* Base */
+ KC_PSCR, KC_SLCK, KC_PAUS, TG(1),
+ 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),
+
+ [1] = LAYOUT_ortho_6x4( /* FN1 */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_INC, BL_DEC, BL_BRTG,
+ KC_TRNS, KC_UP, 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),
+
+ [2] = LAYOUT_ortho_6x4( /* 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),
+
+ [3] = LAYOUT_ortho_6x4( /* 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),
+};
diff --git a/keyboards/allison_numpad/keymaps/default/readme.md b/keyboards/allison_numpad/keymaps/default/readme.md
new file mode 100644
index 0000000000..b6b98a1815
--- /dev/null
+++ b/keyboards/allison_numpad/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# The default keymap for Allison Numpad
+
+![NUMPAD](https://i.imgur.com/1n2pl5p.png)
+
+![NUMPAD FN1](https://i.imgur.com/1n2pl5p.png) \ No newline at end of file
diff --git a/keyboards/allison_numpad/keymaps/via/keymap.c b/keyboards/allison_numpad/keymaps/via/keymap.c
new file mode 100644
index 0000000000..74310885c5
--- /dev/null
+++ b/keyboards/allison_numpad/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2020 Yiancar
+ *
+ * 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_ortho_6x4( /* Base */
+ KC_PSCR, KC_SLCK, KC_PAUS, TG(1),
+ 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),
+
+ [1] = LAYOUT_ortho_6x4( /* FN1 */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_INC, BL_DEC, BL_BRTG,
+ KC_TRNS, KC_UP, 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),
+
+ [2] = LAYOUT_ortho_6x4( /* 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),
+
+ [3] = LAYOUT_ortho_6x4( /* 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),
+};
diff --git a/keyboards/allison_numpad/keymaps/via/readme.md b/keyboards/allison_numpad/keymaps/via/readme.md
new file mode 100644
index 0000000000..b82bc8e79f
--- /dev/null
+++ b/keyboards/allison_numpad/keymaps/via/readme.md
@@ -0,0 +1 @@
+# Compile with this keymap to use VIA
diff --git a/keyboards/allison_numpad/keymaps/via/rules.mk b/keyboards/allison_numpad/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/allison_numpad/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/allison_numpad/readme.md b/keyboards/allison_numpad/readme.md
new file mode 100644
index 0000000000..0226c44f68
--- /dev/null
+++ b/keyboards/allison_numpad/readme.md
@@ -0,0 +1,15 @@
+# Allison Numpad
+
+![Allison Numpad](https://i.imgur.com/tvLtu4K.jpg)
+
+A custom luxurious numpad to match Allison
+
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+* Hardware Supported: ATmega32U4
+* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make allison_numpad: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/allison_numpad/rules.mk b/keyboards/allison_numpad/rules.mk
new file mode 100644
index 0000000000..19e21ec9ec
--- /dev/null
+++ b/keyboards/allison_numpad/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+
+LAYOUTS = ortho_6x4 numpad_6x4
diff --git a/keyboards/angel64/angel64.c b/keyboards/angel64/alpha/alpha.c
index d26c3608bc..3d2d1de779 100644
--- a/keyboards/angel64/angel64.c
+++ b/keyboards/angel64/alpha/alpha.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 "angel64.h"
+#include "alpha.h"
// Optional override functions below.
// You can leave any or all of these undefined.
diff --git a/keyboards/angel64/angel64.h b/keyboards/angel64/alpha/alpha.h
index 6c0898a56a..6c0898a56a 100644
--- a/keyboards/angel64/angel64.h
+++ b/keyboards/angel64/alpha/alpha.h
diff --git a/keyboards/angel64/config.h b/keyboards/angel64/alpha/config.h
index fb683bc153..f10f9b0910 100644
--- a/keyboards/angel64/config.h
+++ b/keyboards/angel64/alpha/config.h
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
+#define PRODUCT_ID 0x0A64
#define DEVICE_VER 0x0001
#define MANUFACTURER kakunpc
#define PRODUCT angel64
diff --git a/keyboards/angel64/info.json b/keyboards/angel64/alpha/info.json
index 2bcd0c9ea1..3d1d85b364 100644
--- a/keyboards/angel64/info.json
+++ b/keyboards/angel64/alpha/info.json
@@ -1,5 +1,5 @@
{
- "keyboard_name": "angel64",
+ "keyboard_name": "angel64_alpha",
"url": "https://kakunpc.booth.pm/",
"maintainer": "kakunpc",
"width": 14,
diff --git a/keyboards/angel64/keymaps/default/config.h b/keyboards/angel64/alpha/keymaps/default/config.h
index bf1149ebc6..bf1149ebc6 100644
--- a/keyboards/angel64/keymaps/default/config.h
+++ b/keyboards/angel64/alpha/keymaps/default/config.h
diff --git a/keyboards/angel64/alpha/keymaps/default/keymap.c b/keyboards/angel64/alpha/keymaps/default/keymap.c
new file mode 100644
index 0000000000..7e880e18c6
--- /dev/null
+++ b/keyboards/angel64/alpha/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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{
+ BASE = 0,
+ COMMAND
+};
+
+#define KC_COMMAND LT(COMMAND,KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = 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_BSPC,
+ 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,
+ LCTL_T(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_ENT,
+ 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_RSFT,
+ KC_TAB, KC_LALT, KC_LGUI, KC_COMMAND, KC_SPC, KC_COMMAND, KC_APP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL),
+ [COMMAND] = 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_BSPC,
+ KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_LSFT, 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),
+};
+
+#ifdef OLED_DRIVER_ENABLE
+void oled_task_user(void) {
+ oled_write_P(PSTR("Layer: "), false);
+ switch (biton32(layer_state)) {
+ case BASE:
+ oled_write_P(PSTR("Default\n"), false);
+ break;
+ case COMMAND:
+ oled_write_P(PSTR("COMMAND\n"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding 'n' to the end of your string
+ oled_write_ln_P(PSTR("Undefined"), false);
+ }
+
+ // Host Keyboard LED Status
+ oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
+ oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
+ oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
+}
+#endif
diff --git a/keyboards/angel64/keymaps/default/readme.md b/keyboards/angel64/alpha/keymaps/default/readme.md
index f4cd48f2ef..f4cd48f2ef 100644
--- a/keyboards/angel64/keymaps/default/readme.md
+++ b/keyboards/angel64/alpha/keymaps/default/readme.md
diff --git a/keyboards/angel64/matrix.c b/keyboards/angel64/alpha/matrix.c
index e06fc15dc4..e06fc15dc4 100644
--- a/keyboards/angel64/matrix.c
+++ b/keyboards/angel64/alpha/matrix.c
diff --git a/keyboards/angel64/alpha/readme.md b/keyboards/angel64/alpha/readme.md
new file mode 100644
index 0000000000..d646edeb7e
--- /dev/null
+++ b/keyboards/angel64/alpha/readme.md
@@ -0,0 +1,15 @@
+# angel64
+
+![angel64](https://i.gyazo.com/6e2ea6c58d3253c496dc0518f2641ff9.jpg)
+
+Keyboard for tablets.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: angel64_alpha, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make angel64/alpha: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/preonic/keymaps/juno/rules.mk b/keyboards/angel64/alpha/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/preonic/keymaps/juno/rules.mk
+++ b/keyboards/angel64/alpha/rules.mk
diff --git a/keyboards/angel64/keymaps/default/keymap.c b/keyboards/angel64/keymaps/default/keymap.c
deleted file mode 100644
index 50ca64fdec..0000000000
--- a/keyboards/angel64/keymaps/default/keymap.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright 2019 kakunpc
- *
- * 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{
- BASE = 0,
- COMMAND
-};
-
-#define KC_COMMAND LT(COMMAND,KC_SPC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = 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_BSPC ,
- 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_TAB, 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_UP, KC_RSFT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_COMMAND, KC_SPC, KC_COMMAND, KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL
- ),
- [COMMAND] = 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_BSPC ,
- KC_NO, KC_UP, 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_LEFT, KC_DOWN, KC_RIGHT, 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_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void matrix_init_user(void) {
-}
-
-void matrix_scan_user(void) {
-
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
-
-void keyboard_post_init_user(void) {
-}
diff --git a/keyboards/angel64/readme.md b/keyboards/angel64/readme.md
index b56592cbbc..791620144e 100644
--- a/keyboards/angel64/readme.md
+++ b/keyboards/angel64/readme.md
@@ -1,12 +1,12 @@
# angel64
-![angel64](https://i.gyazo.com/6e2ea6c58d3253c496dc0518f2641ff9.jpg)
+![angel64](https://i.gyazo.com/d114d4b1789009dbe8c910eaeb3295c5.jpg)
Keyboard for tablets.
-Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
-Hardware Supported: angel64_alpha, promicro
-Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: angel64_alpha, angel64_rev1, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/angel64/rev1/config.h b/keyboards/angel64/rev1/config.h
new file mode 100644
index 0000000000..f10f9b0910
--- /dev/null
+++ b/keyboards/angel64/rev1/config.h
@@ -0,0 +1,242 @@
+/*
+Copyright 2019 kakunpc
+
+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 0x0A64
+#define DEVICE_VER 0x0001
+#define MANUFACTURER kakunpc
+#define PRODUCT angel64
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+#define UNUSED_PINS
+
+/*
+ * 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 D3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 64
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 25 /* 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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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/angel64/rev1/info.json b/keyboards/angel64/rev1/info.json
new file mode 100644
index 0000000000..7006c0c7a9
--- /dev/null
+++ b/keyboards/angel64/rev1/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "angel64_rev1",
+ "url": "https://kakunpc.booth.pm/",
+ "maintainer": "kakunpc",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "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":2}, {"label":"A", "x":2, "y":2}, {"label":"S", "x":3, "y":2}, {"label":"D", "x":4, "y":2}, {"label":"F", "x":5, "y":2}, {"label":"G", "x":6, "y":2}, {"label":"H", "x":7, "y":2}, {"label":"J", "x":8, "y":2}, {"label":"K", "x":9, "y":2}, {"label":"L", "x":10, "y":2}, {"label":":", "x":11, "y":2}, {"label":"\"", "x":12, "y":2}, {"label":"Enter", "x":13, "y":2, "w":2}, {"label":"Shift", "x":0, "y":3, "w":2.5}, {"label":"Z", "x":2.5, "y":3}, {"label":"X", "x":3.5, "y":3}, {"label":"C", "x":4.5, "y":3}, {"label":"V", "x":5.5, "y":3}, {"label":"B", "x":6.5, "y":3}, {"label":"N", "x":7.5, "y":3}, {"label":"M", "x":8.5, "y":3}, {"label":"<", "x":9.5, "y":3}, {"label":">", "x":10.5, "y":3}, {"label":"?", "x":11.5, "y":3}, {"label":"Shift", "x":12.5, "y":3, "w":2.5}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Alt", "x":1.25, "y":4, "w":1.5}, {"label":"Win", "x":2.75, "y":4, "w":1.5}, {"x":4.25, "y":4}, {"x":5.25, "y":4, "w":1.5}, {"x":6.75, "y":4, "w":1.5}, {"x":8.25, "y":4, "w":1.5}, {"x":9.75, "y":4}, {"label":"Alt", "x":10.75, "y":4, "w":1.5}, {"label":"Menu", "x":12.25, "y":4, "w":1.5}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/handwired/aranck/keymaps/default/config.h b/keyboards/angel64/rev1/keymaps/default/config.h
index cf888b0adc..bf1149ebc6 100644
--- a/keyboards/handwired/aranck/keymaps/default/config.h
+++ b/keyboards/angel64/rev1/keymaps/default/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2019 Arda Kilicdagi
+/* Copyright 2019 kakunpc
*
* 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
@@ -17,6 +17,3 @@
#pragma once
// place overrides here
-
-// #define RETRO_TAPPING
-// #define PERMISSIVE_HOLD \ No newline at end of file
diff --git a/keyboards/angel64/rev1/keymaps/default/keymap.c b/keyboards/angel64/rev1/keymaps/default/keymap.c
new file mode 100644
index 0000000000..905387ac9b
--- /dev/null
+++ b/keyboards/angel64/rev1/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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_all(
+ 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_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_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_APP, KC_RCTL),
+};
+
+#ifdef OLED_DRIVER_ENABLE
+void oled_task_user(void) {
+ // Host Keyboard LED Status
+ oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
+ oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
+ oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
+}
+#endif
diff --git a/keyboards/angel64/rev1/keymaps/default/readme.md b/keyboards/angel64/rev1/keymaps/default/readme.md
new file mode 100644
index 0000000000..f4cd48f2ef
--- /dev/null
+++ b/keyboards/angel64/rev1/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for angel64 \ No newline at end of file
diff --git a/keyboards/angel64/rev1/keymaps/kakunpc/config.h b/keyboards/angel64/rev1/keymaps/kakunpc/config.h
new file mode 100644
index 0000000000..bf1149ebc6
--- /dev/null
+++ b/keyboards/angel64/rev1/keymaps/kakunpc/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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/angel64/rev1/keymaps/kakunpc/keymap.c b/keyboards/angel64/rev1/keymaps/kakunpc/keymap.c
new file mode 100644
index 0000000000..6f70dd72c3
--- /dev/null
+++ b/keyboards/angel64/rev1/keymaps/kakunpc/keymap.c
@@ -0,0 +1,195 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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/>.
+ */
+#define USE_LED_RIPPLE_EFFECT
+// #define RANDOM_RIPPLE_EFFECT
+
+#include QMK_KEYBOARD_H
+#include "lufa.h"
+
+#ifdef USE_LED_RIPPLE_EFFECT
+struct keybuf {
+ char col, row;
+ char frame;
+};
+struct keybuf keybufs[256];
+unsigned char keybuf_begin, keybuf_end;
+
+unsigned char r = 0;
+unsigned char g = 112;
+unsigned char b = 255;
+int col, row;
+#endif
+
+
+enum layers{
+ BASE = 0,
+ COMMAND
+};
+
+#define KC_COMMAND_NUM LT(COMMAND,KC_F13)
+#define KC_COMMAND_KANA LT(COMMAND,KC_F14)
+#define KC_COMMAND LT(COMMAND,KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_all(
+ 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_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_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,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_COMMAND_NUM, KC_SPC, KC_SPC, KC_SPC, KC_COMMAND_KANA, KC_RALT, MO(COMMAND),KC_RCTL),
+ [COMMAND] = 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_BSPC,
+ KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_LCTL, KC_NO, KC_NO, _______, KC_NO, RGB_MOD, KC_NO, _______, KC_NO, _______, KC_NO),
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+#ifdef USE_LED_RIPPLE_EFFECT
+ col = record->event.key.col;
+ row = record->event.key.row;
+ if (record->event.pressed) {
+ int end = keybuf_end;
+ keybufs[end].col = col;
+ keybufs[end].row = row;
+ keybufs[end].frame = 0;
+ keybuf_end ++;
+ }
+#endif
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+#ifdef USE_LED_RIPPLE_EFFECT
+ rgblight_enable_noeeprom();
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+#endif
+}
+
+#ifdef USE_LED_RIPPLE_EFFECT
+int scan_count = -10;
+int keys[] = { 14, 14, 13, 12, 11 };
+int keys_sum[] = { 0, 14, 28, 41, 53 };
+unsigned char rgb[14][5][3];
+int row_max = 12;
+int ToIndex(char _col, char _row) {
+ return (_col * row_max) + _row;
+}
+
+void led_ripple_effect(void){
+ if (scan_count == -1) {
+ rgblight_enable_noeeprom();
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ } else if (scan_count >= 0 && scan_count < 5) {
+ for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
+ int i = c;
+ // FIXME:
+
+ int index = ToIndex(keybufs[i].col,keybufs[i].row);
+ int coll = 0;
+ for(int s = 4; s >= 0; --s){
+ if( index >= keys_sum[s]){
+ coll = s;
+ break;
+ }
+ }
+ int roww = MAX(0,index - keys_sum[coll]);
+
+ int y = scan_count;
+ int dist_y = abs(y - coll);
+ for (int x=0; x<keys[y]; x++) {
+ int dist = abs(x - roww) + dist_y;
+ if (dist <= keybufs[i].frame) {
+ int elevation = MAX(0, (8 + dist - keybufs[i].frame)) << 2;
+ if (elevation) {
+ if ((rgb[x][y][0] != 255) && r) { rgb[x][y][0] = MIN(255, elevation + rgb[x][y][0]); }
+ if ((rgb[x][y][1] != 255) && g) { rgb[x][y][1] = MIN(255, elevation + rgb[x][y][1]); }
+ if ((rgb[x][y][2] != 255) && b) { rgb[x][y][2] = MIN(255, elevation + rgb[x][y][2]); }
+ }
+ }
+ }
+ }
+ } else if (scan_count == 5) {
+ for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
+ int i = c;
+ if (keybufs[i].frame < 64) {
+ keybufs[i].frame ++;
+ } else {
+ keybuf_begin ++;
+ }
+ }
+ } else if (scan_count >= 6 && scan_count <= 10) {
+ int y = scan_count - 6;
+ for (int x=0; x<keys[y]; x++) {
+ int at = keys_sum[y] + x;
+ led[at].r = rgb[x][y][0];
+ led[at].g = rgb[x][y][1];
+ led[at].b = rgb[x][y][2];
+ }
+ rgblight_set();
+ } else if (scan_count == 11) {
+ memset(rgb, 0, sizeof(rgb));
+ }
+ scan_count++;
+ if (scan_count >= 12) { scan_count = 0; }
+}
+
+#endif
+
+void matrix_scan_user(void) {
+#ifdef USE_LED_RIPPLE_EFFECT
+#ifdef RANDOM_RIPPLE_EFFECT
+ static int timer = 0;
+ static int timeout = 300;
+ timer++;
+ if(timer > timeout){
+ int end = keybuf_end;
+ col = rand() % 6;
+ row = rand() % 12;
+ keybufs[end].col = col;
+ keybufs[end].row = row;
+ keybufs[end].frame = 0;
+ keybuf_end ++;
+ timer = rand() % timeout;
+ }
+#endif
+ led_ripple_effect();
+#endif
+}
+
+#ifdef OLED_DRIVER_ENABLE
+void oled_task_user(void) {
+ oled_write_P(PSTR("Layer: "), false);
+ switch (biton32(layer_state)) {
+ case BASE:
+ oled_write_P(PSTR("Default\n"), false);
+ break;
+ case COMMAND:
+ oled_write_P(PSTR("COMMAND\n"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding 'n' to the end of your string
+ oled_write_ln_P(PSTR("Undefined"), false);
+ }
+
+ // Host Keyboard LED Status
+ oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
+ oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
+ oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
+}
+#endif
diff --git a/keyboards/angel64/rev1/keymaps/kakunpc/readme.md b/keyboards/angel64/rev1/keymaps/kakunpc/readme.md
new file mode 100644
index 0000000000..ca7d7961fc
--- /dev/null
+++ b/keyboards/angel64/rev1/keymaps/kakunpc/readme.md
@@ -0,0 +1 @@
+# The kakunpc keymap for angel64
diff --git a/keyboards/angel64/rev1/matrix.c b/keyboards/angel64/rev1/matrix.c
new file mode 100644
index 0000000000..e06fc15dc4
--- /dev/null
+++ b/keyboards/angel64/rev1/matrix.c
@@ -0,0 +1,287 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+
+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 <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.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)
+#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
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__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;
+}
+
+//Deprecated.
+bool matrix_is_modified(void)
+{
+ if (debounce_active()) 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)
+{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+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;
+}
+
+static void select_row(uint8_t row)
+{
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row)
+{
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_col(uint8_t col)
+{
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col)
+{
+ setPinInputHigh(col_pins[col]);
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+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_state = readPin(col_pins[col_index]);
+
+ // 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 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 < MATRIX_ROWS/2; row_index++)
+ {
+ uint8_t tmp = row_index + MATRIX_ROWS/2;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[tmp];
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[tmp] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+void matrix_init(void) {
+
+ // initialize key pins
+ init_pins();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+ //else
+ // 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);
+ }
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return (uint8_t)changed;
+}
diff --git a/keyboards/angel64/rev1/readme.md b/keyboards/angel64/rev1/readme.md
new file mode 100644
index 0000000000..4ce77807c9
--- /dev/null
+++ b/keyboards/angel64/rev1/readme.md
@@ -0,0 +1,15 @@
+# angel64
+
+![angel64](https://i.gyazo.com/d114d4b1789009dbe8c910eaeb3295c5.jpg)
+
+Keyboard for tablets.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: angel64_rev1, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make angel64/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/angel64/rev1/rev1.c b/keyboards/angel64/rev1/rev1.c
new file mode 100644
index 0000000000..f97e6caed4
--- /dev/null
+++ b/keyboards/angel64/rev1/rev1.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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 "rev1.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+
+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/angel64/rev1/rev1.h b/keyboards/angel64/rev1/rev1.h
new file mode 100644
index 0000000000..f4335601a9
--- /dev/null
+++ b/keyboards/angel64/rev1/rev1.h
@@ -0,0 +1,48 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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_all( \
+ 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\
+) \
+{ \
+ { k01, k13, k25, k37, k49, k61 }, \
+ { k02, k14, k26, k38, k50, k62 }, \
+ { k03, k15, k27, k39, k51, k63 }, \
+ { k04, k16, k28, k40, k52, k64 }, \
+ { k05, k17, k29, k41, k53, KC_NO }, \
+ { k06, k18, k30, k42, k54, KC_NO }, \
+ { k07, k19, k31, k43, k55, KC_NO }, \
+ { k08, k20, k32, k44, k56, KC_NO }, \
+ { k09, k21, k33, k45, k57, KC_NO }, \
+ { k10, k22, k34, k46, k58, KC_NO }, \
+ { k11, k23, k35, k47, k59, KC_NO }, \
+ { k12, k24, k36, k48, k60, KC_NO } \
+}
diff --git a/keyboards/pico/rev1/rev1.c b/keyboards/angel64/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/pico/rev1/rev1.c
+++ b/keyboards/angel64/rev1/rules.mk
diff --git a/keyboards/angel64/rules.mk b/keyboards/angel64/rules.mk
index 4242ac2eee..0f2b29096d 100644
--- a/keyboards/angel64/rules.mk
+++ b/keyboards/angel64/rules.mk
@@ -31,6 +31,9 @@ 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)
+OLED_DRIVER_ENABLE = yes
CUSTOM_MATRIX = yes
SRC += matrix.c
+
+DEFAULT_FOLDER = angel64/rev1
diff --git a/keyboards/ares/readme.md b/keyboards/ares/readme.md
index 338113a13a..376cee437f 100644
--- a/keyboards/ares/readme.md
+++ b/keyboards/ares/readme.md
@@ -1,42 +1,17 @@
-lSJ Ares
-========
+# lSJ Ares
-Keyboard Maintainer: QMK Community
-Hardware Supported: LSJ Ares PCB
-Hardware Availability: https://geekhack.org/index.php?topic=93146.0
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: LSJ Ares PCB
+* Hardware Availability: <https://geekhack.org/index.php?topic=93146.0>
Make example for this keyboard (after setting up your build environment):
make ares:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make ares:default:flash
-Windows:
-1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
-2. Place your keyboard into reset by holding the left control key and plugging the cable in.
-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.
+**Reset Key**: Hold down the *left control* key while plugging in the keyboard.
-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 [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.
+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/at_at/660m/rules.mk b/keyboards/at_at/660m/rules.mk
index 245cf23d57..b893d8031b 100644
--- a/keyboards/at_at/660m/rules.mk
+++ b/keyboards/at_at/660m/rules.mk
@@ -1,39 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p df11 -v 0483
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
diff --git a/keyboards/atreus62/keymaps/d4mation/keymap.c b/keyboards/atreus62/keymaps/d4mation/keymap.c
new file mode 100644
index 0000000000..63b9d6142d
--- /dev/null
+++ b/keyboards/atreus62/keymaps/d4mation/keymap.c
@@ -0,0 +1,196 @@
+#include QMK_KEYBOARD_H
+#include "d4mation.h"
+
+enum layer_names {
+ _DVR,
+ _QWR,
+ _LOWER,
+ _RAISE,
+ _NUM,
+ _ADJUST
+};
+
+enum keymap_custom_keycodes {
+ LOWER = NEW_SAFE_RANGE,
+ RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Default/Dvorak layer
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | / |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | ' | , | . | P | Y | | F | G | C | R | L | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I |,------.,------.| D | H | T | N | S | - |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * |Shift | ; | Q | J | K | X ||Super ||Enter || B | M | W | V | Z | \ |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | NUM | Alt | Home | End |Lower | Bksp |`------'`------'|Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_DVR] = LAYOUT(
+ _GRAVE_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLSH,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_EQL,
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ TD(SHIFT_CAPS), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSLS,
+ TG(_NUM), KC_RALT, KC_HOME, KC_END, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ /* Qwerty layer, more "standard" for other people who may need to use my keyboard or for games where using Qwerty is just easier
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G |,------.,------.| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * |Shift | Z | X | C | V | B ||Super ||Enter || N | M | , | . | / | = |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | NUM | Alt | Home | End |Lower | Bksp |`------'`------'|Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_QWR] = LAYOUT(
+ _GRAVE_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ TD(SHIFT_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_EQL,
+ TG(_NUM), KC_RALT, KC_HOME, KC_END, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ /* "Lower" layer
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |SLEEP | | | | | SCRGB| | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |,------.,------.| | | | { | } | |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | | | | | | || || || | Mute | VolD | VolU | | |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | | |PageUp|PgDown| | Del |`------'`------'| Ins | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_LOWER] = LAYOUT(
+ KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
+ _______, _______, _______, _______, SLEEP, _______, _______, _______, SCRGB, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ _______, _______, KC_PGUP, KC_PGDN, _______, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______, _______
+ ),
+
+ /* "Raise" layer
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | |<?php>| ?> | | | |ZALGO | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Shrug|Lenny |Magic |Disfac| |,------.,------.| | | | [ | ] | |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | | Ameno| Tflip| Tput | | || || || | Prev | Play | Next | | |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | | |PageUp|PgDown| | Del |`------'`------'| Ins | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_RAISE] = LAYOUT(
+ KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
+ _______, _______, PHPOPEN, PHPCLSE, _______, _______, ZALGO, _______, _______, _______, _______, _______,
+ _______, SHRUG, LENNY, MAGIC, DISFACE, _______, _______, _______, _______, KC_LBRC, KC_RBRC,_______,
+ _______, AMENO, TFLIP, TPUT, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
+ _______, _______, KC_PGUP, KC_PGDN, _______, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______, _______
+ ),
+
+ /* "Numpad" layer
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | / | * | - | | | | | / | * | - | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | 7 | 8 | 9 | + | | | | 7 | 8 | 9 | + | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | 4 | 5 | 6 | + | |,------.,------.| | 4 | 5 | 6 | + | |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | | 1 | 2 | 3 | Enter| || || || | 1 | 2 | 3 | Enter| |
+ * |------+------+------+------+------+------|| || ||------+------+------+------+------+------|
+ * | | 0 | 0 | . | Enter| |`------'`------'| | 0 | 0 | . | Enter| |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_NUM] = LAYOUT(
+ _______, _______, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, KC_PSLS, KC_PAST, KC_PMNS, _______,
+ _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______,
+ _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
+ _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______,
+ _______, KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, _______, _______, _______, _______, KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, _______
+ ),
+
+ /* "Adjust" layer, only active if both "Lower" and "Raise" are active at the same time
+ * All unused keys are blanked out for this layer
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | NO | NO | NO | NO | NO | NO | | NO | NO | NO | NO | NO | NO |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | NO |RESET | NO | NO | NO | NO | | NO | NO | NO | NO | NO | NO |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | NO | NO | NO |UC WIN|UC OSX| NO |,------.,------.| NO |Dvorak|Qwerty| NO | NO | NO |
+ * |------+------+------+------+------+------|| Swap || ||------+------+------+------+------+------|
+ * | NO | NO | NO | NO | NO | NO || to || Swap || NO | NO | NO | NO | NO | NO |
+ * |------+------+------+------+------+------|| Ctrl || Back ||------+------+------+------+------+------|
+ * | NO | NO | NO | NO | | NO |`------'`------'| NO | | NO | NO | NO | NO |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_ADJUST] = LAYOUT(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, UC_M_WI, UC_M_OS, XXXXXXX, XXXXXXX, DF(_DVR),DF(_QWR),XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, CG_SWAP, CG_NORM, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+};
+
+/* Runs just one time when the keyboard initializes. */
+void eeconfig_init_keymap( void ) {
+ set_unicode_input_mode( UC_OSX );
+};
+
+bool process_record_keymap( uint16_t keycode, keyrecord_t *record ) {
+
+ switch ( keycode ) {
+
+ 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;
+
+}; \ No newline at end of file
diff --git a/keyboards/atreus62/keymaps/d4mation/readme.md b/keyboards/atreus62/keymaps/d4mation/readme.md
new file mode 100644
index 0000000000..5642e8e432
--- /dev/null
+++ b/keyboards/atreus62/keymaps/d4mation/readme.md
@@ -0,0 +1,40 @@
+# d4mation's keymap for the Atreus62
+
+This is a bit of a work in-progress, but for the most part I like what I have done here.
+
+I switched to Dvorak some time ago and software-based support in most OS's for Dvorak isn't very great, so this keymap by default is set to Dvorak.
+
+## Table of Contents
+
+* [Layers](#layers)
+ - [Base layer](#base)
+ - [Num](#num)
+ - [Lower](#lower)
+ - [Raise](#raise)
+ - [Adjust](#adjust)
+
+# Layers
+
+## Base
+
+* By default, this layer is Dvorak. But using the Adjust layer you can switch to Qwerty
+* Double-tapping Shift enables and disables Caps Lock
+* Quickly tapping the Grave accent key will output a Grave Accent, but holding it for 200ms will output the ESC key instead
+
+## Num
+
+This layer gets toggled off and on to place a numpad on both the left and right sides of the keyboard.
+
+## Lower
+
+This layer holds some handy shortcuts that I use often, like the screen grab shortcut and sleep shortcut in OS X.
+
+It also has quick access to {} as they are inaccessible in the base layer
+
+## Raise
+
+Aside from quick access to [] and Play/Pause/Next/Previous, this layer is mostly just goofy things I decided to program into the keyboard because I could. There's a bunch of [kaomoji](https://en.wikipedia.org/wiki/Emoticon#Japanese_style_(kaomoji))/"unicode smileys" and I added a toggle switch to enable a [Zalgo Text](https://zalgo.org/) mode.
+
+## Adjust
+
+This layer is a "here be dragons" layer. It can only be accessed by holding down the keys for Lower and Raise at the same time. I added exclusively keys that drastically transformed the keyboard's layout or function on this layer. The ability to switch to Qwerty is on this layer, a way to switch CTRL and CMD back and forth is on this layer, and a hotkey to enter bootloader mode also exists.
diff --git a/keyboards/atreus62/keymaps/d4mation/rules.mk b/keyboards/atreus62/keymaps/d4mation/rules.mk
new file mode 100644
index 0000000000..517f2700e1
--- /dev/null
+++ b/keyboards/atreus62/keymaps/d4mation/rules.mk
@@ -0,0 +1,2 @@
+UNICODE_ENABLE = yes
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/atreus62/keymaps/hvp/config.h b/keyboards/atreus62/keymaps/hvp/config.h
new file mode 100644
index 0000000000..e1222e21f5
--- /dev/null
+++ b/keyboards/atreus62/keymaps/hvp/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define TAPPING_TERM 150
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
diff --git a/keyboards/atreus62/keymaps/hvp/keymap.c b/keyboards/atreus62/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..9873897a5a
--- /dev/null
+++ b/keyboards/atreus62/keymaps/hvp/keymap.c
@@ -0,0 +1,67 @@
+
+#include QMK_KEYBOARD_H
+#include "hvp.c"
+
+// 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 LT3_ESC LT(3, KC_ESC)
+#define LT4_TAB LT(4, KC_TAB)
+#define LT1_ENT LT(1, KC_ENTER)
+#define LT2_BSP LT(2, KC_BSPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT( /* qwerty */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
+ LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
+ LT3_ESC, KC_A, KC_S, KC_D, LT(3,KC_F), LT(4,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2) ,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT ,
+ KC_LCTL, KC_APP, _______, KC_LGUI, KC_LALT,SFT_T(KC_SPC), LT2_BSP, LT1_ENT, SFT_T(KC_SPC), KC_LSFT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ LAYOUT( /* Right */
+ 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_DEL, 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_LEFT_PAREN, KC_RIGHT_PAREN, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+ ),
+
+ LAYOUT(/* Left */
+ 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_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_BSPC,
+ KC_DELETE, _______, _______, _______, _______, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS,
+ _______ , _______ , _______ , _______ , _______ , KC_LEFT_CURLY_BRACE , KC_RIGHT_CURLY_BRACE ,KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TILD,
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_HOME, KC_PGDN, KC_PGUP, KC_END
+ ),
+
+
+ LAYOUT(/* 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_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, D_NAVI, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO ,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO, KC_NO ,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MSTP, KC_MPLY, KC_NO, KC_MUTE, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+ ),
+
+
+
+ LAYOUT(/* Tab */
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______ ,
+ KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ /*
+ [_TRNS] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ */
+};
diff --git a/keyboards/atreus62/keymaps/hvp/readme.md b/keyboards/atreus62/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..766533d3be
--- /dev/null
+++ b/keyboards/atreus62/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: Atreus62
+Keys: 62 keyed ortho staggered keyboard with a split layout and num row.
+Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
+Flash instructions: Flash using avrdude, will req the hvp user space to compile.
+
+> make make atreus62:hvp:avrdude
+
+Links:
+Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/atreus62
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/atreus62/keymaps/hvp/rules.mk b/keyboards/atreus62/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..1ba2fa8fbe
--- /dev/null
+++ b/keyboards/atreus62/keymaps/hvp/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/bfake/bfake.c b/keyboards/bfake/bfake.c
index f7d006576c..9039fe5465 100644
--- a/keyboards/bfake/bfake.c
+++ b/keyboards/bfake/bfake.c
@@ -17,9 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "bfake.h"
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
void backlight_init_ports(void) {
setPinOutput(D0);
setPinOutput(D1);
diff --git a/keyboards/bfake/config.h b/keyboards/bfake/config.h
index 0a8911b09a..65f1f3a759 100644
--- a/keyboards/bfake/config.h
+++ b/keyboards/bfake/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COLS 11
#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
-#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6}
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5 }
#define UNUSED_PINS
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/bfake/matrix.c b/keyboards/bfake/matrix.c
deleted file mode 100644
index 57aa36b5ff..0000000000
--- a/keyboards/bfake/matrix.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-#define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_user();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/bfake/readme.md b/keyboards/bfake/readme.md
index 1ccc25f2dc..df319cd7c5 100644
--- a/keyboards/bfake/readme.md
+++ b/keyboards/bfake/readme.md
@@ -1,44 +1,17 @@
-B.fake
-========
+# B.fake
-A 60% keyboard with RGB. The B.fake pcb is a copy of the B.face PCB sold by [winkeyless](https://winkeyless.kr/). However, the switch matrix is actually the same as the [FaceW](https://github.com/qmk/qmk_firmware/tree/master/keyboards/facew), a ps2avr PCB sold on [mechanicalkeyboards.com](https://mechanicalkeyboards.com/).
+A 60% keyboard with RGB. The B.fake pcb is a copy of the B.face PCB sold by [winkeyless](https://winkeyless.kr/). However, the switch matrix is actually the same as the [FaceW](https://github.com/qmk/qmk_firmware/tree/master/keyboards/facew), a ps2avr PCB sold on [mechanicalkeyboards.com](https://mechanicalkeyboards.com/).
-Keyboard Maintainer: QMK Community
-Hardware Supported: B.fake PCB
-Hardware Availability: https://www.aliexpress.com/store/product/bface-60-RGB-underground-copy-pcb-from-china-gh60-pcb-Customize-keyboard-PCB/2230037_32731084597.html
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: B.fake PCB
+* Hardware Availability: <https://www.aliexpress.com/store/product/bface-60-RGB-underground-copy-pcb-from-china-gh60-pcb-Customize-keyboard-PCB/2230037_32731084597.html>
Make example for this keyboard (after setting up your build environment):
make bfake:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make bfake:default:flash
-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 [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.
+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/bfake/rules.mk b/keyboards/bfake/rules.mk
index 5963c9810a..107bb4fa90 100644
--- a/keyboards/bfake/rules.mk
+++ b/keyboards/bfake/rules.mk
@@ -22,7 +22,3 @@ RGBLIGHT_ENABLE = no
WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
diff --git a/keyboards/bm60rgb/bm60rgb.c b/keyboards/bm60rgb/bm60rgb.c
new file mode 100644
index 0000000000..3f301d1d47
--- /dev/null
+++ b/keyboards/bm60rgb/bm60rgb.c
@@ -0,0 +1,73 @@
+/* Copyright 2020 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 "bm60rgb.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);
+}
+
+led_config_t g_led_config = { {
+ { 0, 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, 40, 41, 42 },
+ { NO_LED, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56 },
+ { 57, 58, 59, NO_LED, NO_LED, NO_LED, NO_LED, 60, NO_LED, NO_LED, 61, 62, 63, 64}
+}, {
+ // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
+ { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 },
+ // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], ,
+ { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 },
+ // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
+ { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 },
+ // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
+ { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 },
+ // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
+ { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 }
+}, {
+ // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], ,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right
+ 1, 1, 1, 4, 1, 1, 1, 1, 1
+} };
diff --git a/keyboards/bm60rgb/bm60rgb.h b/keyboards/bm60rgb/bm60rgb.h
new file mode 100644
index 0000000000..705539fc95
--- /dev/null
+++ b/keyboards/bm60rgb/bm60rgb.h
@@ -0,0 +1,36 @@
+/* Copyright 2020 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"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { KC_NO, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D }, \
+}
+
+// generated by KBFirmware JSON to QMK Parser
+// https://noroadsleft.github.io/kbf_qmk_converter/
+
diff --git a/keyboards/bm60rgb/config.h b/keyboards/bm60rgb/config.h
new file mode 100644
index 0000000000..fc550b21b3
--- /dev/null
+++ b/keyboards/bm60rgb/config.h
@@ -0,0 +1,59 @@
+/*
+Copyright 2020 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 0xEF8C
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KP Republic
+#define PRODUCT BM60 RGB
+#define DESCRIPTION A 60% hotswap inswitch rgb board
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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)
+ *
+ */
+
+// 0 1 2 3 4 5 6 7 8 9 A B C D
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, E6 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, F7 }
+
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN E2
+#define DRIVER_LED_TOTAL 69
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 69
+ #define RGB_MATRIX_KEYPRESSES
+#endif
+
+// generated by KBFirmware JSON to QMK Parser
+// https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/bm60rgb/info.json b/keyboards/bm60rgb/info.json
new file mode 100644
index 0000000000..30d55f9a03
--- /dev/null
+++ b/keyboards/bm60rgb/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "BM60 RGB",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 63,
+ "layout": [
+ {"label":"K00 (B0,D0)", "x":0, "y":0},
+ {"label":"K01 (B0,D1)", "x":1, "y":0},
+ {"label":"K02 (B0,D2)", "x":2, "y":0},
+ {"label":"K03 (B0,D3)", "x":3, "y":0},
+ {"label":"K04 (B0,D5)", "x":4, "y":0},
+ {"label":"K05 (B0,D4)", "x":5, "y":0},
+ {"label":"K06 (B0,D6)", "x":6, "y":0},
+ {"label":"K07 (B0,D7)", "x":7, "y":0},
+ {"label":"K08 (B0,B4)", "x":8, "y":0},
+ {"label":"K09 (B0,B5)", "x":9, "y":0},
+ {"label":"K0A (B0,B6)", "x":10, "y":0},
+ {"label":"K0B (B0,C6)", "x":11, "y":0},
+ {"label":"K0C (B0,C7)", "x":12, "y":0},
+ {"label":"K0D (B0,F7)", "x":13, "y":0, "w":2},
+ {"label":"K10 (B1,D0)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (B1,D1)", "x":1.5, "y":1},
+ {"label":"K12 (B1,D2)", "x":2.5, "y":1},
+ {"label":"K13 (B1,D3)", "x":3.5, "y":1},
+ {"label":"K14 (B1,D5)", "x":4.5, "y":1},
+ {"label":"K15 (B1,D4)", "x":5.5, "y":1},
+ {"label":"K16 (B1,D6)", "x":6.5, "y":1},
+ {"label":"K17 (B1,D7)", "x":7.5, "y":1},
+ {"label":"K18 (B1,B4)", "x":8.5, "y":1},
+ {"label":"K19 (B1,B5)", "x":9.5, "y":1},
+ {"label":"K1A (B1,B6)", "x":10.5, "y":1},
+ {"label":"K1B (B1,C6)", "x":11.5, "y":1},
+ {"label":"K1C (B1,C7)", "x":12.5, "y":1},
+ {"label":"K1D (B1,F7)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K20 (B2,D0)", "x":0, "y":2, "w":1.75},
+ {"label":"K22 (B2,D2)", "x":1.75, "y":2},
+ {"label":"K23 (B2,D3)", "x":2.75, "y":2},
+ {"label":"K24 (B2,D5)", "x":3.75, "y":2},
+ {"label":"K25 (B2,D4)", "x":4.75, "y":2},
+ {"label":"K26 (B2,D6)", "x":5.75, "y":2},
+ {"label":"K27 (B2,D7)", "x":6.75, "y":2},
+ {"label":"K28 (B2,B4)", "x":7.75, "y":2},
+ {"label":"K29 (B2,B5)", "x":8.75, "y":2},
+ {"label":"K2A (B2,B6)", "x":9.75, "y":2},
+ {"label":"K2B (B2,C6)", "x":10.75, "y":2},
+ {"label":"K2C (B2,C7)", "x":11.75, "y":2},
+ {"label":"K2D (B2,F7)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K31 (B3,D1)", "x":0, "y":3, "w":2.25},
+ {"label":"K32 (B3,D2)", "x":2.25, "y":3},
+ {"label":"K33 (B3,D3)", "x":3.25, "y":3},
+ {"label":"K34 (B3,D5)", "x":4.25, "y":3},
+ {"label":"K35 (B3,D4)", "x":5.25, "y":3},
+ {"label":"K36 (B3,D6)", "x":6.25, "y":3},
+ {"label":"K37 (B3,D7)", "x":7.25, "y":3},
+ {"label":"K38 (B3,B4)", "x":8.25, "y":3},
+ {"label":"K39 (B3,B5)", "x":9.25, "y":3},
+ {"label":"K3A (B3,B6)", "x":10.25, "y":3},
+ {"label":"K3B (B3,C6)", "x":11.25, "y":3, "w":1.75},
+ {"label":"K3C (B3,C7)", "x":13, "y":3},
+ {"label":"K3D (B3,F7)", "x":14, "y":3},
+ {"label":"K40 (E6,D0)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (E6,D1)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (E6,D2)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K46 (E6,D6)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K49 (E6,B5)", "x":10, "y":4},
+ {"label":"K4A (E6,B6)", "x":11, "y":4},
+ {"label":"K4B (E6,C6)", "x":12, "y":4},
+ {"label":"K4C (E6,C7)", "x":13, "y":4},
+ {"label":"K4D (E6,F7)", "x":14, "y":4}
+ ]
+ }
+ }
+ ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
+}
+
diff --git a/keyboards/bm60rgb/keymaps/default/keymap.c b/keyboards/bm60rgb/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9099a04073
--- /dev/null
+++ b/keyboards/bm60rgb/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 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
+
+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_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_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = 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, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/bm60rgb/keymaps/default/readme.md b/keyboards/bm60rgb/keymaps/default/readme.md
new file mode 100644
index 0000000000..d45609f3d7
--- /dev/null
+++ b/keyboards/bm60rgb/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for bm60rgb
diff --git a/keyboards/bm60rgb/readme.md b/keyboards/bm60rgb/readme.md
new file mode 100644
index 0000000000..dc093c7b40
--- /dev/null
+++ b/keyboards/bm60rgb/readme.md
@@ -0,0 +1,13 @@
+# BM60 RGB
+
+A 60% hotswap inswitch RGB keyboard from KP Republic.
+
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: BM60 RGB
+* Hardware Availability: [KP Republic](https://kprepublic.com/products/bm60-rgb-60-gh60-hot-swappable-pcb-programmed-qmk-firmware-type-c)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bm60rgb: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/bm60rgb/rules.mk b/keyboards/bm60rgb/rules.mk
new file mode 100644
index 0000000000..4372a63068
--- /dev/null
+++ b/keyboards/bm60rgb/rules.mk
@@ -0,0 +1,38 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = WS2812
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+
+# partially generated by KBFirmware JSON to QMK Parser
+# https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/boston_meetup/2019/keymaps/default/keymap.c b/keyboards/boston_meetup/2019/keymaps/default/keymap.c
index 52d67273e3..8e729ca714 100644
--- a/keyboards/boston_meetup/2019/keymaps/default/keymap.c
+++ b/keyboards/boston_meetup/2019/keymaps/default/keymap.c
@@ -108,7 +108,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
@@ -163,4 +163,3 @@ void matrix_init_user(void) {
void matrix_scan_user(void) {
}
-
diff --git a/keyboards/bpiphany/pegasushoof/2015/2015.h b/keyboards/bpiphany/pegasushoof/2015/2015.h
index 18bfc46b81..8a0084d405 100644
--- a/keyboards/bpiphany/pegasushoof/2015/2015.h
+++ b/keyboards/bpiphany/pegasushoof/2015/2015.h
@@ -56,6 +56,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
)
+#define LAYOUT_tkl_iso( \
+ KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
+ KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
+ KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KK4, KO7, KQ7, \
+ KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB3, KB1, \
+ KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
+ KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
+ ) LAYOUT( \
+ KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
+ KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
+ KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
+ KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
+ KN2, KI6 ,KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
+ KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
+ )
+
#define LAYOUT_tkl_jis( \
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB5, KB2, KL4, KO4, KQ4, \
diff --git a/keyboards/bpiphany/pegasushoof/info.json b/keyboards/bpiphany/pegasushoof/info.json
index 0fb9f4a746..9243e0c083 100644
--- a/keyboards/bpiphany/pegasushoof/info.json
+++ b/keyboards/bpiphany/pegasushoof/info.json
@@ -188,6 +188,98 @@
{"label":"Right", "x":17.25, "y":5.5}
]
},
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "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":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "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":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "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":"#", "x":12.75, "y":3.5},
+ {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"\\", "x":1.25, "y":4.5},
+ {"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":2.75},
+ {"label":"↑", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"x":3.75, "y":5.5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"App", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"â†", "x":15.25, "y":5.5},
+ {"label":"↓", "x":16.25, "y":5.5},
+ {"label":"→", "x":17.25, "y":5.5}
+ ]
+ },
"LAYOUT_tkl_jis": {
"layout": [
{"label":"Esc", "x":0, "y":0},
diff --git a/keyboards/c39/keymaps/drashna/config.h b/keyboards/c39/keymaps/drashna/config.h
index 5d53fe54bb..789b7cc140 100644
--- a/keyboards/c39/keymaps/drashna/config.h
+++ b/keyboards/c39/keymaps/drashna/config.h
@@ -10,3 +10,5 @@
#define RGB_DI_PIN B10
#define RGBLED_NUM 15
+
+#define SOLENOID_PIN B11
diff --git a/keyboards/c39/keymaps/drashna/rules.mk b/keyboards/c39/keymaps/drashna/rules.mk
index d216f6abe6..6ebd15a180 100644
--- a/keyboards/c39/keymaps/drashna/rules.mk
+++ b/keyboards/c39/keymaps/drashna/rules.mk
@@ -18,3 +18,5 @@ AUDIO_ENABLE = yes # Audio output on port C6
RGBLIGHT_ENABLE = yes # RGB Enable / Disable
RGBLIGHT_STARTUP_ANIMATION = yes
+
+HAPTIC_ENABLE = SOLENOID
diff --git a/keyboards/candybar/candybar.h b/keyboards/candybar/candybar.h
index 262edf3bbb..b7a9ef4565 100644
--- a/keyboards/candybar/candybar.h
+++ b/keyboards/candybar/candybar.h
@@ -19,12 +19,26 @@
#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 \
+ 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 } \
+ { 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 } \
}
+
+#define LAYOUT_lefty( \
+ k0d, k0e, k0f, k0g, k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
+ k1d, k1e, k1f, k1g, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1c, \
+ k2d, k2e, k2f, k2g, k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+ k3d, k3e, k3f, k3g, k30, k31, k32, k35, k37, k38, k39, k3a, k3b, k3c \
+) { \
+ { 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 } \
+}
+
+#define LAYOUT_righty LAYOUT
diff --git a/keyboards/candybar/info.json b/keyboards/candybar/info.json
index 442324ece2..9cf4216aa1 100644
--- a/keyboards/candybar/info.json
+++ b/keyboards/candybar/info.json
@@ -1,210 +1,24 @@
{
- "keyboard_name": "TKC Candybar",
- "url": "",
- "maintainer": "terrymathews",
- "width": 17,
- "height": 4,
+ "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}]
+ {"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}]
+ },
+ "LAYOUT_lefty": {
+ "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":"Esc", "x":4, "y":0}, {"label":"Q", "x":5, "y":0}, {"label":"W", "x":6, "y":0}, {"label":"E", "x":7, "y":0}, {"label":"R", "x":8, "y":0}, {"label":"T", "x":9, "y":0}, {"label":"Y", "x":10, "y":0}, {"label":"U", "x":11, "y":0}, {"label":"I", "x":12, "y":0}, {"label":"O", "x":13, "y":0}, {"label":"P", "x":14, "y":0}, {"label":"{", "x":15, "y":0}, {"label":"}", "x":16, "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":"Tab", "x":4, "y":1, "w":1.25}, {"label":"A", "x":5.25, "y":1}, {"label":"S", "x":6.25, "y":1}, {"label":"D", "x":7.25, "y":1}, {"label":"F", "x":8.25, "y":1}, {"label":"G", "x":9.25, "y":1}, {"label":"H", "x":10.25, "y":1}, {"label":"J", "x":11.25, "y":1}, {"label":"K", "x":12.25, "y":1}, {"label":"L", "x":13.25, "y":1}, {"label":":", "x":14.25, "y":1}, {"label":"Enter", "x":15.25, "y":1, "w":1.75},
+ {"label":"1", "x":0, "y":2}, {"label":"2", "x":1, "y":2}, {"label":"3", "x":2, "y":2}, {"x":3, "y":2}, {"label":"Shift", "x":4, "y":2, "w":1.75}, {"label":"Z", "x":5.75, "y":2}, {"label":"X", "x":6.75, "y":2}, {"label":"C", "x":7.75, "y":2}, {"label":"V", "x":8.75, "y":2}, {"label":"B", "x":9.75, "y":2}, {"label":"N", "x":10.75, "y":2}, {"label":"M", "x":11.75, "y":2}, {"label":"<", "x":12.75, "y":2}, {"label":">", "x":13.75, "y":2}, {"label":"\u2191", "x":14.75, "y":2}, {"label":"Shift", "x":15.75, "y":2, "w":1.25},
+ {"label":"Fn", "x":0, "y":3}, {"label":"0", "x":1, "y":3}, {"label":".", "x":2, "y":3}, {"label":"Enter", "x":3, "y":3}, {"label":"Ctrl", "x":4, "y":3, "w":1.25}, {"label":"Win", "x":5.25, "y":3, "w":1.25}, {"label":"Alt", "x":6.5, "y":3, "w":1.25}, {"x":7.75, "y":3, "w":1.75}, {"x":9.5, "y":3}, {"x":10.5, "y":3, "w":2.25}, {"label":"Win", "x":12.75, "y":3, "w":1.25}, {"label":"\u2190", "x":14, "y":3}, {"label":"\u2193", "x":15, "y":3}, {"label":"\u2192", "x":16, "y":3}
+ ]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/candybar/keymaps/lefty/keymap.c b/keyboards/candybar/keymaps/lefty/keymap.c
new file mode 100644
index 0000000000..34cb55be35
--- /dev/null
+++ b/keyboards/candybar/keymaps/lefty/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 QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = LAYOUT_lefty(
+ KC_P7 , KC_P8, KC_P9 , KC_PAST, 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_P4 , KC_P5, KC_P6 , KC_PMNS, 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_P1 , KC_P2, KC_P3 , KC_PPLS, KC_LSFT, KC_Z , KC_X, KC_C , KC_V , KC_B, KC_N , KC_M , KC_COMM, KC_DOT , KC_UP ,KC_RSFT , \
+ MO(_FL), KC_P0, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC , KC_BSPC, KC_APP , KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+ [_FL] = LAYOUT_lefty(
+ KC_P7 , KC_P8, KC_P9 , KC_VOLU, 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_P4 , KC_P5, KC_P6 , KC_VOLD, 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_P1 , KC_P2, KC_P3 , KC_PEQL, 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_END, KC_P0, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC , KC_BSPC, KC_APP , MO(_FL), KC_HOME, KC_PGDN),
+};
diff --git a/keyboards/candybar/rules.mk b/keyboards/candybar/rules.mk
index a0365a20b5..0e1a8517fa 100644
--- a/keyboards/candybar/rules.mk
+++ b/keyboards/candybar/rules.mk
@@ -1,37 +1,5 @@
-## 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
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
diff --git a/keyboards/cannonkeys/an_c/config.h b/keyboards/cannonkeys/an_c/config.h
index ef480521bc..55414ba509 100644
--- a/keyboards/cannonkeys/an_c/config.h
+++ b/keyboards/cannonkeys/an_c/config.h
@@ -58,26 +58,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PIN_WS2812 15
#define WS2812_SPI SPID2
-
-// EEPROM usage
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 40
-// 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 0x03
-#define EEPROM_VERSION_ADDR 42
-
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600) = 635
-// start + layer * rows * col * 2
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 43
-#define EEPROM_CUSTOM_BACKLIGHT 644
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 645
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 192
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
/*
* Feature disable options
diff --git a/keyboards/cannonkeys/an_c/keymaps/via/rules.mk b/keyboards/cannonkeys/an_c/keymaps/via/rules.mk
index d12497792d..1e5b99807c 100644
--- a/keyboards/cannonkeys/an_c/keymaps/via/rules.mk
+++ b/keyboards/cannonkeys/an_c/keymaps/via/rules.mk
@@ -1,5 +1 @@
-# rules.mk overrides to enable VIA
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/an_c/rules.mk b/keyboards/cannonkeys/an_c/rules.mk
index 2f30956e7d..151f72fd0f 100644
--- a/keyboards/cannonkeys/an_c/rules.mk
+++ b/keyboards/cannonkeys/an_c/rules.mk
@@ -1,35 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -40,8 +10,6 @@ VPATH += keyboards/cannonkeys/stm32f072
SRC = keyboard.c \
led.c
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
@@ -53,7 +21,4 @@ CUSTOM_MATRIX = no # Custom matrix file
# BACKLIGHT_ENABLE = yes # This is broken on 072 for some reason
RGBLIGHT_ENABLE = yes
-# RAW_ENABLE = yes
-# DYNAMIC_KEYMAP_ENABLE = yes
-
LAYOUTS = 60_ansi 60_tsangan_hhkb
diff --git a/keyboards/cannonkeys/chimera65/config.h b/keyboards/cannonkeys/chimera65/config.h
index ace3565bea..c76fd6c1c5 100644
--- a/keyboards/cannonkeys/chimera65/config.h
+++ b/keyboards/cannonkeys/chimera65/config.h
@@ -50,26 +50,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-// EEPROM usage
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 34
-// 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 0x02
-#define EEPROM_VERSION_ADDR 36
-
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600) = 635
-// start + layer * rows * col * 2
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-#define EEPROM_CUSTOM_BACKLIGHT 678
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 679
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 202
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
-
/*
* Feature disable options
* These options are also useful to firmware size reduction.
diff --git a/keyboards/cannonkeys/chimera65/keymaps/via/rules.mk b/keyboards/cannonkeys/chimera65/keymaps/via/rules.mk
index d12497792d..1e5b99807c 100644
--- a/keyboards/cannonkeys/chimera65/keymaps/via/rules.mk
+++ b/keyboards/cannonkeys/chimera65/keymaps/via/rules.mk
@@ -1,5 +1 @@
-# rules.mk overrides to enable VIA
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/chimera65/rules.mk b/keyboards/cannonkeys/chimera65/rules.mk
index 580a7712c6..1e300a99c7 100644
--- a/keyboards/cannonkeys/chimera65/rules.mk
+++ b/keyboards/cannonkeys/chimera65/rules.mk
@@ -1,35 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -40,8 +10,6 @@ VPATH += keyboards/cannonkeys/stm32f072
SRC = keyboard.c \
led.c
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
@@ -52,6 +20,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover
CUSTOM_MATRIX = no # Custom matrix file
# BACKLIGHT_ENABLE = yes # This is broken on 072 for some reason
RGBLIGHT_ENABLE = no
-
-# RAW_ENABLE = yes
-# DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/cannonkeys/instant60/config.h b/keyboards/cannonkeys/instant60/config.h
index 9da2043d2f..2d23d5f83c 100644
--- a/keyboards/cannonkeys/instant60/config.h
+++ b/keyboards/cannonkeys/instant60/config.h
@@ -58,26 +58,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PIN_WS2812 15
#define WS2812_SPI SPID2
-
-// EEPROM usage
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 40
-// 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 0x03
-#define EEPROM_VERSION_ADDR 42
-
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600) = 635
-// start + layer * rows * col * 2
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 43
-#define EEPROM_CUSTOM_BACKLIGHT 644
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 645
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 192
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
/*
* Feature disable options
diff --git a/keyboards/cannonkeys/instant60/keymaps/via/rules.mk b/keyboards/cannonkeys/instant60/keymaps/via/rules.mk
index d12497792d..1e5b99807c 100644
--- a/keyboards/cannonkeys/instant60/keymaps/via/rules.mk
+++ b/keyboards/cannonkeys/instant60/keymaps/via/rules.mk
@@ -1,5 +1 @@
-# rules.mk overrides to enable VIA
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/instant60/keymaps/via_standard/rules.mk b/keyboards/cannonkeys/instant60/keymaps/via_standard/rules.mk
index d12497792d..1e5b99807c 100644
--- a/keyboards/cannonkeys/instant60/keymaps/via_standard/rules.mk
+++ b/keyboards/cannonkeys/instant60/keymaps/via_standard/rules.mk
@@ -1,5 +1 @@
-# rules.mk overrides to enable VIA
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/instant60/rules.mk b/keyboards/cannonkeys/instant60/rules.mk
index c0a62e9433..db753884da 100644
--- a/keyboards/cannonkeys/instant60/rules.mk
+++ b/keyboards/cannonkeys/instant60/rules.mk
@@ -1,39 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -44,7 +10,7 @@ VPATH += keyboards/cannonkeys/stm32f072
SRC = keyboard.c \
led.c
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
@@ -55,7 +21,4 @@ CUSTOM_MATRIX = no # Custom matrix file
# BACKLIGHT_ENABLE = yes # This is broken on 072 for some reason
RGBLIGHT_ENABLE = yes
-# RAW_ENABLE = yes
-# DYNAMIC_KEYMAP_ENABLE = yes
-
LAYOUTS = 60_ansi 60_tsangan_hhkb
diff --git a/keyboards/cannonkeys/iron165/config.h b/keyboards/cannonkeys/iron165/config.h
index c5fcd4518a..640f6fb659 100644
--- a/keyboards/cannonkeys/iron165/config.h
+++ b/keyboards/cannonkeys/iron165/config.h
@@ -50,25 +50,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-// EEPROM usage
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 40
-// 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 0x02
-#define EEPROM_VERSION_ADDR 42
-
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600) = 635
-// start + layer * rows * col * 2
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 43
-#define EEPROM_CUSTOM_BACKLIGHT 684
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 685
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 192
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
/*
* Feature disable options
diff --git a/keyboards/cannonkeys/iron165/rules.mk b/keyboards/cannonkeys/iron165/rules.mk
index 5480987a33..edc84edd51 100644
--- a/keyboards/cannonkeys/iron165/rules.mk
+++ b/keyboards/cannonkeys/iron165/rules.mk
@@ -1,35 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -40,9 +10,6 @@ VPATH += keyboards/cannonkeys/stm32f072
SRC = keyboard.c \
led.c
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p DF11
-
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/cannonkeys/ortho48/rules.mk b/keyboards/cannonkeys/ortho48/rules.mk
index 2e483a8c2c..4bca8fde05 100644
--- a/keyboards/cannonkeys/ortho48/rules.mk
+++ b/keyboards/cannonkeys/ortho48/rules.mk
@@ -1,46 +1,18 @@
-# project specific files
-VPATH += keyboards/cannonkeys/bluepill
-SRC = led.c \
- keyboard.c
+# MCU name
+MCU = STM32F103
# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = GENERIC_STM32_F103
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+DFU_ARGS = -d 1eaf:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
+# project specific files
+VPATH += keyboards/cannonkeys/bluepill
+SRC = led.c \
+ keyboard.c
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/cannonkeys/ortho60/rules.mk b/keyboards/cannonkeys/ortho60/rules.mk
index 359f447a9c..d2fa535f41 100644
--- a/keyboards/cannonkeys/ortho60/rules.mk
+++ b/keyboards/cannonkeys/ortho60/rules.mk
@@ -1,46 +1,18 @@
-# project specific files
-VPATH += keyboards/cannonkeys/bluepill
-SRC = led.c \
- keyboard.c
+# MCU name
+MCU = STM32F103
# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = GENERIC_STM32_F103
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+DFU_ARGS = -d 1eaf:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
+# project specific files
+VPATH += keyboards/cannonkeys/bluepill
+SRC = led.c \
+ keyboard.c
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/cannonkeys/ortho75/rules.mk b/keyboards/cannonkeys/ortho75/rules.mk
index 113fff5554..5b90e87fd7 100644
--- a/keyboards/cannonkeys/ortho75/rules.mk
+++ b/keyboards/cannonkeys/ortho75/rules.mk
@@ -1,47 +1,18 @@
-# project specific files
-VPATH += keyboards/cannonkeys/bluepill
-SRC = led.c \
- keyboard.c
+# MCU name
+MCU = STM32F103
# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = GENERIC_STM32_F103
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+DFU_ARGS = -d 1eaf:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
-DFU_ARGS = -d 1eaf:0003 -a 2 -R
+# project specific files
+VPATH += keyboards/cannonkeys/bluepill
+SRC = led.c \
+ keyboard.c
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/cannonkeys/practice60/rules.mk b/keyboards/cannonkeys/practice60/rules.mk
index cf8554c0c6..7c3fec31e6 100644
--- a/keyboards/cannonkeys/practice60/rules.mk
+++ b/keyboards/cannonkeys/practice60/rules.mk
@@ -1,46 +1,18 @@
-# project specific files
-VPATH += keyboards/cannonkeys/bluepill
-SRC = led.c \
- keyboard.c
+# MCU name
+MCU = STM32F103
# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = GENERIC_STM32_F103
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+DFU_ARGS = -d 1eaf:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
+# project specific files
+VPATH += keyboards/cannonkeys/bluepill
+SRC = led.c \
+ keyboard.c
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/cannonkeys/practice65/rules.mk b/keyboards/cannonkeys/practice65/rules.mk
index 8bbc910aad..b43e591aeb 100644
--- a/keyboards/cannonkeys/practice65/rules.mk
+++ b/keyboards/cannonkeys/practice65/rules.mk
@@ -1,46 +1,18 @@
-# project specific files
-VPATH += keyboards/cannonkeys/bluepill
-SRC = led.c \
- keyboard.c
+# MCU name
+MCU = STM32F103
# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = GENERIC_STM32_F103
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+DFU_ARGS = -d 1eaf:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
+# project specific files
+VPATH += keyboards/cannonkeys/bluepill
+SRC = led.c \
+ keyboard.c
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/cannonkeys/satisfaction75/config.h b/keyboards/cannonkeys/satisfaction75/config.h
index 8387289d87..7a4354c8a7 100644
--- a/keyboards/cannonkeys/satisfaction75/config.h
+++ b/keyboards/cannonkeys/satisfaction75/config.h
@@ -64,41 +64,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
-
-#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 40
-// 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 0x01
-#define EEPROM_VERSION_ADDR 42
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 43
-
-// Dynamic macro starts after dynamic keymaps (35+(4*6*16*2)) = (35+768) = 803
-
-// I'm also putting my custom stuff after that
-// 1 for enabled encoder modes
-// 1 for custom backlighting controls
-// 1 for OLED default mode
-// 6 for 3x custom encoder settings, left, right, and press (18 total)
-
-#define DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES 811
-#define DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT 812
-#define DYNAMIC_KEYMAP_DEFAULT_OLED 813
-#define DYNAMIC_KEYMAP_CUSTOM_ENCODER 814
-
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 832
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 192
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
-
-
+// Custom config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+// Custom config Usage:
+// 1 for enabled encoder modes (1 byte)
+// 1 for custom backlighting controls (1 byte)
+// 1 for OLED default mode (1 byte)
+// 6 for 3x custom encoder settings, left, right, and press (18 bytes)
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 21
/*
* Feature disable options
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h
new file mode 100644
index 0000000000..4af97ded2b
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define ENCODER_RESOLUTION 2
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c
new file mode 100644
index 0000000000..1680f90dc9
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2019 Boy_314
+
+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 keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_2x2(
+ 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_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_NO, ENC_PRESS,
+ 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_HOME,
+ 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_ENTER, KC_END,
+ 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_DEL,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_2x2(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ NK_TOGG, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, OLED_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, RESET, CLOCK_SET,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md
new file mode 100644
index 0000000000..65984873c4
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/readme.md
@@ -0,0 +1,3 @@
+# Boy_314's Satisfaction75 Layout
+
+This is Boy_314's Satisfaction75 Layout. It can be used on VIA. It features a QWERTY layout on the base, along with missing TKL keys on layer 1. Right side 3 keys from top down are: Home, End, Delete. The encoder resolution has been reduced from the default of 4 down to 2 so that it no longer needs to click twice, but now only once, before triggering an action.
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk
new file mode 100644
index 0000000000..6f45dc73ed
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk
@@ -0,0 +1,3 @@
+# rules.mk overrides to enable VIA
+
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c
index 5e87c73dcc..61a9d097a3 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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_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, ENC_PRESS,
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c
index 3595c107b9..c648333c3d 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, ENC_PRESS,
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c
index 296fd7da6a..ce97d7554f 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c
@@ -17,8 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, ENC_PRESS,
@@ -36,16 +35,3 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
-
-
-void matrix_init_user(void) {
- //user initialization
-}
-
-void matrix_scan_user(void) {
- //user matrix
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/via/rules.mk b/keyboards/cannonkeys/satisfaction75/keymaps/via/rules.mk
index d12497792d..1e5b99807c 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/via/rules.mk
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/via/rules.mk
@@ -1,5 +1 @@
-# rules.mk overrides to enable VIA
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/satisfaction75/prototype/prototype.h b/keyboards/cannonkeys/satisfaction75/prototype/prototype.h
index 42e574f3ea..ed4c7d793d 100644
--- a/keyboards/cannonkeys/satisfaction75/prototype/prototype.h
+++ b/keyboards/cannonkeys/satisfaction75/prototype/prototype.h
@@ -17,3 +17,20 @@
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, KC_NO, K415 }, \
{ K500, K501, K502, KC_NO, KC_NO, K505, KC_NO, KC_NO, KC_NO, K509, K510, K511, K512, K513, KC_NO, K515 } \
}
+
+// Expose All Keys - Split backspace - ISO Extra keys - Split space bottom row
+#define LAYOUT_all( \
+ K000, 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, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \
+ K500, K501, K502, K503, K505, K507, K509, K510, K511, K512, K513, K515 \
+) { \
+ { K000, KC_NO, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, KC_NO, KC_NO }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K200, K201, 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, K312, K313, KC_NO, K315 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, KC_NO, K415 }, \
+ { K500, K501, K502, K503, KC_NO, K505, KC_NO, K507, KC_NO, K509, K510, K511, K512, K513, KC_NO, K515 } \
+}
diff --git a/keyboards/cannonkeys/satisfaction75/rules.mk b/keyboards/cannonkeys/satisfaction75/rules.mk
index 3e2877200e..7e0b15b92b 100644
--- a/keyboards/cannonkeys/satisfaction75/rules.mk
+++ b/keyboards/cannonkeys/satisfaction75/rules.mk
@@ -1,35 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -51,7 +21,4 @@ ENCODER_ENABLE = yes
QWIIC_ENABLE += MICRO_OLED
#BACKLIGHT_ENABLE = yes
-# RAW_ENABLE = yes
-# DYNAMIC_KEYMAP_ENABLE = yes
-
DEFAULT_FOLDER = cannonkeys/satisfaction75/rev1
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction75.c b/keyboards/cannonkeys/satisfaction75/satisfaction75.c
index 12d3660dae..0fe09c384f 100644
--- a/keyboards/cannonkeys/satisfaction75/satisfaction75.c
+++ b/keyboards/cannonkeys/satisfaction75/satisfaction75.c
@@ -15,11 +15,7 @@
#include "raw_hid.h"
#include "dynamic_keymap.h"
#include "tmk_core/common/eeprom.h"
-
-// HACK
-#include "keyboards/wilba_tech/via_api.h" // Temporary hack
-#include "keyboards/wilba_tech/via_keycodes.h" // Temporary hack
-
+#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
/* Artificial delay added to get media keys to work in the encoder*/
#define MEDIA_KEY_DELAY 10
@@ -58,56 +54,20 @@ backlight_config_t kb_backlight_config = {
.level = BACKLIGHT_LEVELS
};
-bool eeprom_is_valid(void)
-{
- return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
- eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
-}
-
-void eeprom_set_valid(bool valid)
+#ifdef VIA_ENABLE
+void raw_hid_receive_kb( uint8_t *data, uint8_t length )
{
- eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
- eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
-}
-
-void eeprom_reset(void)
-{
- // Set the VIA specific EEPROM state as invalid.
- eeprom_set_valid(false);
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
-}
-
-#ifdef RAW_ENABLE
-
-void raw_hid_receive( uint8_t *data, uint8_t length )
-{
- uint8_t *command_id = &(data[0]);
- uint8_t *command_data = &(data[1]);
- switch ( *command_id )
- {
- case id_get_protocol_version:
- {
- command_data[0] = PROTOCOL_VERSION >> 8;
- command_data[1] = PROTOCOL_VERSION & 0xFF;
- break;
- }
- case id_get_keyboard_value:
- {
+ uint8_t *command_id = &(data[0]);
+ uint8_t *command_data = &(data[1]);
+ switch ( *command_id )
+ {
+ case id_get_keyboard_value:
+ {
switch( command_data[0])
{
- case id_uptime:
- {
- uint32_t value = timer_read32();
- command_data[1] = (value >> 24 ) & 0xFF;
- command_data[2] = (value >> 16 ) & 0xFF;
- command_data[3] = (value >> 8 ) & 0xFF;
- command_data[4] = value & 0xFF;
- break;
- }
case id_oled_default_mode:
{
- uint8_t default_oled = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED);
+ uint8_t default_oled = eeprom_read_byte((uint8_t*)EEPROM_DEFAULT_OLED);
command_data[1] = default_oled;
break;
}
@@ -141,15 +101,14 @@ void raw_hid_receive( uint8_t *data, uint8_t length )
break;
}
}
- break;
+ break;
}
-#ifdef DYNAMIC_KEYMAP_ENABLE
case id_set_keyboard_value:
{
switch(command_data[0]){
case id_oled_default_mode:
{
- eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED, command_data[1]);
+ eeprom_update_byte((uint8_t*)EEPROM_DEFAULT_OLED, command_data[1]);
break;
}
case id_oled_mode:
@@ -161,7 +120,7 @@ void raw_hid_receive( uint8_t *data, uint8_t length )
case id_encoder_modes:
{
enabled_encoder_modes = command_data[1];
- eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES, enabled_encoder_modes);
+ eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, enabled_encoder_modes);
break;
}
case id_encoder_custom:
@@ -180,95 +139,15 @@ void raw_hid_receive( uint8_t *data, uint8_t length )
}
break;
}
- case id_dynamic_keymap_get_keycode:
- {
- uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
- command_data[3] = keycode >> 8;
- command_data[4] = keycode & 0xFF;
- break;
- }
- case id_dynamic_keymap_set_keycode:
- {
- dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] );
- break;
- }
- case id_dynamic_keymap_reset:
- {
- dynamic_keymap_reset();
- break;
- }
- case id_dynamic_keymap_macro_get_count:
- {
- command_data[0] = dynamic_keymap_macro_get_count();
- break;
- }
- case id_dynamic_keymap_macro_get_buffer_size:
- {
- uint16_t size = dynamic_keymap_macro_get_buffer_size();
- command_data[0] = size >> 8;
- command_data[1] = size & 0xFF;
- break;
- }
- case id_dynamic_keymap_macro_get_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_macro_set_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_macro_reset:
- {
- dynamic_keymap_macro_reset();
- break;
- }
- case id_dynamic_keymap_get_layer_count:
- {
- command_data[0] = dynamic_keymap_get_layer_count();
- break;
- }
- case id_dynamic_keymap_get_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_get_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_set_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_set_buffer( offset, size, &command_data[3] );
- break;
- }
-#endif // DYNAMIC_KEYMAP_ENABLE
- case id_eeprom_reset:
- {
- eeprom_reset();
- break;
- }
- case id_bootloader_jump:
- {
- // Need to send data back before the jump
- // Informs host that the command is handled
- raw_hid_send( data, length );
- // Give host time to read it
- wait_ms(100);
- bootloader_jump();
- break;
- }
- default:
- {
- // Unhandled message.
- *command_id = id_unhandled;
- break;
- }
- }
-
- // Return same buffer with values changed
- raw_hid_send( data, length );
-
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ // DO NOT call raw_hid_send(data,length) here, let caller do this
}
-
#endif
@@ -349,18 +228,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
break;
}
-#ifdef DYNAMIC_KEYMAP_ENABLE
- // Handle macros
- if (record->event.pressed) {
- if ( keycode >= MACRO00 && keycode <= MACRO15 )
- {
- uint8_t id = keycode - MACRO00;
- dynamic_keymap_macro_send(id);
- return false;
- }
- }
-#endif //DYNAMIC_KEYMAP_ENABLE
-
return process_record_user(keycode, record);
}
@@ -392,59 +259,56 @@ void encoder_update_kb(uint8_t index, bool clockwise) {
}
}
-void dynamic_keymap_custom_reset(void){
- void *p = (void*)(DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT);
- void *end = (void*)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
- while ( p != end ) {
- eeprom_update_byte(p, 0);
- ++p;
- }
- eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES, 0x1F);
+void custom_config_reset(void){
+ void *p = (void*)(VIA_EEPROM_CUSTOM_CONFIG_ADDR);
+ void *end = (void*)(VIA_EEPROM_CUSTOM_CONFIG_ADDR+VIA_EEPROM_CUSTOM_CONFIG_SIZE);
+ while ( p != end ) {
+ eeprom_update_byte(p, 0);
+ ++p;
+ }
+ eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, 0x1F);
}
-void save_backlight_config_to_eeprom(){
- eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
+void backlight_config_save(){
+ eeprom_update_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
}
-void load_custom_config(){
- kb_backlight_config.raw = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT);
+void custom_config_load(){
+ kb_backlight_config.raw = eeprom_read_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT);
#ifdef DYNAMIC_KEYMAP_ENABLE
- oled_mode = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED);
- enabled_encoder_modes = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES);
+ oled_mode = eeprom_read_byte((uint8_t*)EEPROM_DEFAULT_OLED);
+ enabled_encoder_modes = eeprom_read_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES);
#endif
}
-void eeprom_init_kb(void)
+// Called from via_init() if VIA_ENABLE
+// Called from matrix_init_kb() if not VIA_ENABLE
+void via_init_kb(void)
{
- // If the EEPROM has the magic, the data is good.
- // OK to load from EEPROM.
- if (eeprom_is_valid()) {
- load_custom_config();
- } 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();
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM.
+ if (via_eeprom_is_valid()) {
+ custom_config_load();
+ } else {
#ifdef DYNAMIC_KEYMAP_ENABLE
- // This resets the keymaps in EEPROM to what is in flash.
- dynamic_keymap_reset();
- // This resets the macros in EEPROM to nothing.
- dynamic_keymap_macro_reset();
// Reset the custom stuff
- dynamic_keymap_custom_reset();
+ custom_config_reset();
#endif
- // Save the magic number last, in case saving was interrupted
- eeprom_set_valid(true);
- }
+ // DO NOT set EEPROM valid here, let caller do this
+ }
}
void matrix_init_kb(void)
{
- eeprom_init_kb();
+#ifndef VIA_ENABLE
+ via_init_kb();
+ via_eeprom_set_valid(true);
+#endif // VIA_ENABLE
+
rtcGetTime(&RTCD1, &last_timespec);
queue_for_send = true;
backlight_init_ports();
- matrix_init_user();
+ matrix_init_user();
}
@@ -472,3 +336,51 @@ void matrix_scan_kb(void) {
#endif
}
+//
+// In the case of VIA being disabled, we still need to check if
+// keyboard level EEPROM memory is valid before loading.
+// Thus these are copies of the same functions in VIA, since
+// the backlight settings reuse VIA's EEPROM magic/version,
+// and the ones in via.c won't be compiled in.
+//
+// Yes, this is sub-optimal, and is only here for completeness
+// (i.e. catering to the 1% of people that want wilba.tech LED bling
+// AND want persistent settings BUT DON'T want to use dynamic keymaps/VIA).
+//
+#ifndef VIA_ENABLE
+
+bool via_eeprom_is_valid(void)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
+}
+
+// Sets VIA/keyboard level usage of EEPROM to valid/invalid
+// Keyboard level code (eg. via_init_kb()) should not call this
+void via_eeprom_set_valid(bool valid)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
+}
+
+void via_eeprom_reset(void)
+{
+ // Set the VIA specific EEPROM state as invalid.
+ via_eeprom_set_valid(false);
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+}
+
+#endif // VIA_ENABLE \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction75.h b/keyboards/cannonkeys/satisfaction75/satisfaction75.h
index 188a1d4970..13aaf68882 100644
--- a/keyboards/cannonkeys/satisfaction75/satisfaction75.h
+++ b/keyboards/cannonkeys/satisfaction75/satisfaction75.h
@@ -8,6 +8,12 @@
#include "rev1.h"
#endif
+#include "via.h" // only for EEPROM address
+#define EEPROM_ENABLED_ENCODER_MODES (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
+#define EEPROM_CUSTOM_BACKLIGHT (VIA_EEPROM_CUSTOM_CONFIG_ADDR+1)
+#define EEPROM_DEFAULT_OLED (VIA_EEPROM_CUSTOM_CONFIG_ADDR+2)
+#define EEPROM_CUSTOM_ENCODER (VIA_EEPROM_CUSTOM_CONFIG_ADDR+3)
+
/* screen off after this many milliseconds */
#define ScreenOffInterval 60000 /* milliseconds */
@@ -117,5 +123,5 @@ void backlight_set(uint8_t level);
bool is_breathing(void);
void breathing_enable(void);
void breathing_disable(void);
-void load_custom_config(void);
-void save_backlight_config_to_eeprom(void);
+void custom_config_load(void);
+void backlight_config_save(void);
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
index e866d897c7..8fcd720e2f 100644
--- a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
+++ b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
@@ -12,7 +12,7 @@ void pre_encoder_mode_change(){
timespec.millisecond = (hour_config * 60 + minute_config) * 60 * 1000;
rtcSetTime(&RTCD1, &timespec);
} else if (encoder_mode == ENC_MODE_BACKLIGHT){
- save_backlight_config_to_eeprom();
+ backlight_config_save();
}
}
@@ -221,7 +221,7 @@ uint16_t handle_encoder_press(){
uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior){
#ifdef DYNAMIC_KEYMAP_ENABLE
- void* addr = (void*)(DYNAMIC_KEYMAP_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
+ void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
//big endian
uint16_t keycode = eeprom_read_byte(addr) << 8;
keycode |= eeprom_read_byte(addr + 1);
@@ -233,7 +233,7 @@ uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior){
void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code){
#ifdef DYNAMIC_KEYMAP_ENABLE
- void* addr = (void*)(DYNAMIC_KEYMAP_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
+ void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
eeprom_update_byte(addr, (uint8_t)(new_code >> 8));
eeprom_update_byte(addr + 1, (uint8_t)(new_code & 0xFF));
#endif
diff --git a/keyboards/cannonkeys/savage65/config.h b/keyboards/cannonkeys/savage65/config.h
index 996b939515..b69aba39eb 100644
--- a/keyboards/cannonkeys/savage65/config.h
+++ b/keyboards/cannonkeys/savage65/config.h
@@ -58,25 +58,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PIN_WS2812 15
#define WS2812_SPI SPID2
-// EEPROM usage
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 40
-// 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 0x02
-#define EEPROM_VERSION_ADDR 42
-
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600) = 635
-// start + layer * rows * col * 2
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 43
-#define EEPROM_CUSTOM_BACKLIGHT 684
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 685
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 192
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
/*
* Feature disable options
diff --git a/keyboards/cannonkeys/savage65/rules.mk b/keyboards/cannonkeys/savage65/rules.mk
index c6789d6c3a..199dd10780 100644
--- a/keyboards/cannonkeys/savage65/rules.mk
+++ b/keyboards/cannonkeys/savage65/rules.mk
@@ -1,35 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -40,9 +10,6 @@ VPATH += keyboards/cannonkeys/stm32f072
SRC = keyboard.c \
led.c
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p DF11
-
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/cannonkeys/stm32f072/keyboard.c b/keyboards/cannonkeys/stm32f072/keyboard.c
index 5a9ccafff7..bf35a76c18 100644
--- a/keyboards/cannonkeys/stm32f072/keyboard.c
+++ b/keyboards/cannonkeys/stm32f072/keyboard.c
@@ -10,11 +10,10 @@
#include "raw_hid.h"
#include "dynamic_keymap.h"
#include "tmk_core/common/eeprom.h"
+#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
-// HACK
-#include "keyboards/wilba_tech/via_api.h" // Temporary hack
-#include "keyboards/wilba_tech/via_keycodes.h" // Temporary hack
-
+#include "via.h"
+#define EEPROM_CUSTOM_BACKLIGHT (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
backlight_config_t kb_backlight_config = {
.enable = true,
@@ -22,61 +21,29 @@ backlight_config_t kb_backlight_config = {
.level = BACKLIGHT_LEVELS
};
-bool eeprom_is_valid(void)
-{
- return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
- eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
-}
-
-void eeprom_set_valid(bool valid)
-{
- eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
- eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
-}
-
-void eeprom_reset(void)
-{
- eeprom_set_valid(false);
- eeconfig_disable();
-}
-
-void save_backlight_config_to_eeprom(){
+void backlight_config_save(){
eeprom_update_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
}
-void load_custom_config(){
+void backlight_config_load(){
kb_backlight_config.raw = eeprom_read_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT);
}
-#ifdef DYNAMIC_KEYMAP_ENABLE
-void dynamic_keymap_custom_reset(void){
- void *p = (void*)(EEPROM_CUSTOM_BACKLIGHT);
- void *end = (void*)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
- while ( p != end ) {
- eeprom_update_byte(p, 0);
- ++p;
- }
-}
-#endif
-
-void eeprom_init_kb(void)
+// Called from via_init() if VIA_ENABLE
+// Called from matrix_init_kb() if not VIA_ENABLE
+void via_init_kb(void)
{
// If the EEPROM has the magic, the data is good.
// OK to load from EEPROM.
- if (eeprom_is_valid()) {
- load_custom_config();
+ if (via_eeprom_is_valid()) {
+ backlight_config_load();
} else {
-#ifdef DYNAMIC_KEYMAP_ENABLE
- // This resets the keymaps in EEPROM to what is in flash.
- dynamic_keymap_reset();
- // This resets the macros in EEPROM to nothing.
- dynamic_keymap_macro_reset();
- // Reset the custom stuff
- dynamic_keymap_custom_reset();
-#endif
- // Save the magic number last, in case saving was interrupted
- save_backlight_config_to_eeprom();
- eeprom_set_valid(true);
+ // 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 backlight_config instance.
+ backlight_config_save();
+
+ // DO NOT set EEPROM valid here, let caller do this
}
}
@@ -84,7 +51,13 @@ __attribute__ ((weak))
void matrix_init_board(void);
void matrix_init_kb(void){
- eeprom_init_kb();
+ // If VIA is disabled, we still need to load backlight settings.
+ // Call via_init_kb() the same way as via_init(), with setting
+ // EEPROM valid afterwards.
+#ifndef VIA_ENABLE
+ via_init_kb();
+ via_eeprom_set_valid(true);
+#endif // VIA_ENABLE
/* MOSI pin*/
#ifdef RGBLIGHT_ENABLE
palSetPadMode(PORT_WS2812, PIN_WS2812, PAL_MODE_ALTERNATE(0));
@@ -101,6 +74,7 @@ void matrix_scan_kb(void)
#ifdef RGBLIGHT_ENABLE
rgblight_task();
#endif
+ matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
@@ -112,7 +86,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
kb_backlight_config.level = BACKLIGHT_LEVELS;
}
backlight_set(kb_backlight_config.level);
- save_backlight_config_to_eeprom();
+ backlight_config_save();
}
return false;
case BL_TOGG:
@@ -123,7 +97,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
} else {
backlight_set(0);
}
- save_backlight_config_to_eeprom();
+ backlight_config_save();
}
return false;
@@ -135,168 +109,71 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
kb_backlight_config.level = kb_backlight_config.level - 1;
}
backlight_set(kb_backlight_config.level);
- save_backlight_config_to_eeprom();
+ backlight_config_save();
}
return false;
case BL_BRTG:
if (record->event.pressed) {
kb_backlight_config.breathing = !kb_backlight_config.breathing;
breathing_toggle();
- save_backlight_config_to_eeprom();
+ backlight_config_save();
}
return false;
default:
break;
}
- #ifdef DYNAMIC_KEYMAP_ENABLE
- // Handle macros
- if (record->event.pressed) {
- if ( keycode >= MACRO00 && keycode <= MACRO15 )
- {
- uint8_t id = keycode - MACRO00;
- dynamic_keymap_macro_send(id);
- return false;
- }
- }
- #endif //DYNAMIC_KEYMAP_ENABLE
-
return process_record_user(keycode, record);;
}
-// Start Dynamic Keymap code
-#ifdef RAW_ENABLE
-void raw_hid_receive( uint8_t *data, uint8_t length )
-{
- uint8_t *command_id = &(data[0]);
- uint8_t *command_data = &(data[1]);
- switch ( *command_id )
- {
- case id_get_protocol_version:
- {
- command_data[0] = PROTOCOL_VERSION >> 8;
- command_data[1] = PROTOCOL_VERSION & 0xFF;
- break;
- }
- case id_get_keyboard_value:
- {
- switch( command_data[0])
- {
- case id_uptime:
- {
- uint32_t value = timer_read32();
- command_data[1] = (value >> 24 ) & 0xFF;
- command_data[2] = (value >> 16 ) & 0xFF;
- command_data[3] = (value >> 8 ) & 0xFF;
- command_data[4] = value & 0xFF;
- break;
- }
- default:
- {
- *command_id = id_unhandled;
- break;
- }
- }
- break;
- }
-#ifdef DYNAMIC_KEYMAP_ENABLE
- case id_dynamic_keymap_get_keycode:
- {
- uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
- command_data[3] = keycode >> 8;
- command_data[4] = keycode & 0xFF;
- break;
- }
- case id_dynamic_keymap_set_keycode:
- {
- dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] );
- break;
- }
- case id_dynamic_keymap_reset:
- {
- dynamic_keymap_reset();
- break;
- }
- case id_dynamic_keymap_macro_get_count:
- {
- command_data[0] = dynamic_keymap_macro_get_count();
- break;
- }
- case id_dynamic_keymap_macro_get_buffer_size:
- {
- uint16_t size = dynamic_keymap_macro_get_buffer_size();
- command_data[0] = size >> 8;
- command_data[1] = size & 0xFF;
- break;
- }
- case id_dynamic_keymap_macro_get_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_macro_get_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_macro_set_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_macro_set_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_macro_reset:
- {
- dynamic_keymap_macro_reset();
- break;
- }
- case id_dynamic_keymap_get_layer_count:
- {
- command_data[0] = dynamic_keymap_get_layer_count();
- break;
- }
- case id_dynamic_keymap_get_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_get_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_set_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_set_buffer( offset, size, &command_data[3] );
- break;
- }
-#endif // DYNAMIC_KEYMAP_ENABLE
- case id_eeprom_reset:
- {
- eeprom_reset();
- break;
- }
- case id_bootloader_jump:
- {
- // Need to send data back before the jump
- // Informs host that the command is handled
- raw_hid_send( data, length );
- // Give host time to read it
- wait_ms(100);
- bootloader_jump();
- break;
- }
- default:
- {
- // Unhandled message.
- *command_id = id_unhandled;
- break;
- }
- }
+//
+// In the case of VIA being disabled, we still need to check if
+// keyboard level EEPROM memory is valid before loading.
+// Thus these are copies of the same functions in VIA, since
+// the backlight settings reuse VIA's EEPROM magic/version,
+// and the ones in via.c won't be compiled in.
+//
+// Yes, this is sub-optimal, and is only here for completeness
+// (i.e. catering to the 1% of people that want wilba.tech LED bling
+// AND want persistent settings BUT DON'T want to use dynamic keymaps/VIA).
+//
+#ifndef VIA_ENABLE
- // Return same buffer with values changed
- raw_hid_send( data, length );
+bool via_eeprom_is_valid(void)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
+}
+// Sets VIA/keyboard level usage of EEPROM to valid/invalid
+// Keyboard level code (eg. via_init_kb()) should not call this
+void via_eeprom_set_valid(bool valid)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
}
-#endif
+void via_eeprom_reset(void)
+{
+ // Set the VIA specific EEPROM state as invalid.
+ via_eeprom_set_valid(false);
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+}
+
+#endif // VIA_ENABLE
diff --git a/keyboards/cannonkeys/stm32f072/keyboard.h b/keyboards/cannonkeys/stm32f072/keyboard.h
index 94c973d615..81dd1b704e 100644
--- a/keyboards/cannonkeys/stm32f072/keyboard.h
+++ b/keyboards/cannonkeys/stm32f072/keyboard.h
@@ -19,5 +19,5 @@ void backlight_set(uint8_t level);
bool is_breathing(void);
void breathing_enable(void);
void breathing_disable(void);
-void load_custom_config(void);
-void save_backlight_config_to_eeprom(void);
+void backlight_config_load(void);
+void backlight_config_save(void);
diff --git a/keyboards/cannonkeys/tmov2/config.h b/keyboards/cannonkeys/tmov2/config.h
index 0c586de9e5..d5f1d07884 100644
--- a/keyboards/cannonkeys/tmov2/config.h
+++ b/keyboards/cannonkeys/tmov2/config.h
@@ -58,25 +58,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PIN_WS2812 15
#define WS2812_SPI SPID2
-// EEPROM usage
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 40
-// 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 0x02
-#define EEPROM_VERSION_ADDR 42
-
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (43+(4*4*15*2)) = (43+480) = 523
-// start + layer * rows * col * 2c
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 43
-#define EEPROM_CUSTOM_BACKLIGHT 523
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 524
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 200
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
/*
* Feature disable options
diff --git a/keyboards/cannonkeys/tmov2/rules.mk b/keyboards/cannonkeys/tmov2/rules.mk
index 828fa8ff80..e6f0ce30a1 100644
--- a/keyboards/cannonkeys/tmov2/rules.mk
+++ b/keyboards/cannonkeys/tmov2/rules.mk
@@ -1,43 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Build Options
-# comment out to disable the options.
-#
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -48,9 +10,6 @@ VPATH += keyboards/cannonkeys/stm32f072
SRC = keyboard.c \
led.c
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p DF11
-
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/cheshire/curiosity/chconf.h b/keyboards/cheshire/curiosity/chconf.h
new file mode 100644
index 0000000000..99fa8ce398
--- /dev/null
+++ b/keyboards/cheshire/curiosity/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/cheshire/curiosity/config.h b/keyboards/cheshire/curiosity/config.h
new file mode 100644
index 0000000000..7dca470c51
--- /dev/null
+++ b/keyboards/cheshire/curiosity/config.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2019 zvecr<git@zvecr.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 0xCAFE
+#define PRODUCT_ID 0x0FAD
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Nightingale Studios/Cheshire Designs
+#define PRODUCT Curiosity
+#define DESCRIPTION Curiosity
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+#define MATRIX_ROW_PINS { B13, B14, A4, A2, A1 }
+#define MATRIX_COL_PINS { B11, B10, B2, B1, B0, A7, A6, A5, B9, B8, B7, B6, B5, B4, B3, A15 }
+#define UNUSED_PINS
+
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B15
+#define RGBLED_NUM 14
+
+#define RGBLIGHT_ANIMATIONS
+
+#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
diff --git a/keyboards/cheshire/curiosity/curiosity.c b/keyboards/cheshire/curiosity/curiosity.c
new file mode 100644
index 0000000000..e52499b352
--- /dev/null
+++ b/keyboards/cheshire/curiosity/curiosity.c
@@ -0,0 +1,17 @@
+#include "curiosity.h"
+
+void matrix_init_board(void){
+ setPinOutput(A8);
+ setPinOutput(A9);
+ setPinOutput(A10);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool runDefault = led_update_user(led_state);
+ if (runDefault) {
+ writePin(A8, !led_state.num_lock);
+ writePin(A9, !led_state.caps_lock);
+ writePin(A10, !led_state.scroll_lock);
+ }
+ return runDefault;
+}
diff --git a/keyboards/cheshire/curiosity/curiosity.h b/keyboards/cheshire/curiosity/curiosity.h
new file mode 100644
index 0000000000..e250eda8f0
--- /dev/null
+++ b/keyboards/cheshire/curiosity/curiosity.h
@@ -0,0 +1,42 @@
+/* Copyright 2019 zvecr<git@zvecr.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 ____ KC_NO
+
+/* 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_default( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K108, K109, K110, K111, K112, K113, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K208, K209, K210, K211, K212, K213, K215, \
+ K301, K302, K303, K304, K305, K306, K308, K309, K310, K311, K312, K313, K314, K315, \
+ K401, K403, K405, K406, K409, K411, K414 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015}, \
+ { K100, K101, K102, K103, K104, K105, K106, ____, K108, K109, K110, K111, K112, K113, K114, K115}, \
+ { K200, K201, K202, K203, K204, K205, K206, ____, K208, K209, K210, K211, K212, K213, ____, K215}, \
+ { ____, K301, K302, K303, K304, K305, K306, ____, K308, K309, K310, K311, K312, K313, K314, K315}, \
+ { ____, K401, ____, K403, ____, K405, K406, ____, ____, K409, ____, K411, ____, ____, K414, ____}, \
+}
diff --git a/keyboards/cheshire/curiosity/halconf.h b/keyboards/cheshire/curiosity/halconf.h
new file mode 100644
index 0000000000..8b9724b1a3
--- /dev/null
+++ b/keyboards/cheshire/curiosity/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/cheshire/curiosity/info.json b/keyboards/cheshire/curiosity/info.json
new file mode 100644
index 0000000000..f989546584
--- /dev/null
+++ b/keyboards/cheshire/curiosity/info.json
@@ -0,0 +1,82 @@
+{
+ "keyboard_name": "Curiosity",
+ "maintainer": "zvecr",
+ "width": 19.75,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_default": {
+ "layout": [
+ {"label":"Esc", "x":0.5, "y":0},
+ {"label":"`", "x":1.75, "y":0.25},
+ {"label":"1", "x":2.75, "y":0.25},
+ {"label":"2", "x":3.75, "y":0},
+ {"label":"3", "x":4.75, "y":0.25},
+ {"label":"4", "x":5.75, "y":0.25},
+ {"label":"5", "x":6.75, "y":0.25},
+ {"label":"6", "x":7.75, "y":0.25},
+ {"label":"7", "x":11, "y":0.25},
+ {"label":"8", "x":12, "y":0.25},
+ {"label":"9", "x":13, "y":0.25},
+ {"label":"0", "x":14, "y":0.25},
+ {"label":"-", "x":15, "y":0},
+ {"label":"=", "x":16, "y":0.25},
+ {"label":"Del", "x":17, "y":0.25},
+ {"label":"Backspace", "x":18, "y":0.25},
+
+ {"label":"PgUp", "x":0.25, "y":1},
+ {"label":"Tab", "x":1.5, "y":1.25, "w":1.5},
+ {"label":"Q", "x":3, "y":1.25},
+ {"label":"W", "x":4.25, "y":1.25},
+ {"label":"E", "x":5.25, "y":1.25},
+ {"label":"R", "x":6.25, "y":1.25},
+ {"label":"T", "x":7.25, "y":1.25},
+ {"label":"Y", "x":10.5, "y":1.25},
+ {"label":"U", "x":11.5, "y":1.25},
+ {"label":"I", "x":12.5, "y":1.25},
+ {"label":"O", "x":13.5, "y":1.25},
+ {"label":"P", "x":14.75, "y":1.25},
+ {"label":"{", "x":15.75, "y":1.25},
+ {"label":"}", "x":16.75, "y":1.25},
+ {"label":"|", "x":17.75, "y":1.25, "w":1.5},
+
+ {"label":"PgDn", "x":0, "y":2},
+ {"label":"Caps Lock", "x":1.5, "y":2.25, "w":1.75},
+ {"label":"A", "x":3.25, "y":2.25},
+ {"label":"S", "x":4.5, "y":2.25},
+ {"label":"D", "x":5.5, "y":2.25},
+ {"label":"F", "x":6.5, "y":2.25},
+ {"label":"G", "x":7.5, "y":2.25},
+ {"label":"H", "x":10.75, "y":2.25},
+ {"label":"J", "x":11.75, "y":2.25},
+ {"label":"K", "x":12.75, "y":2.25},
+ {"label":"L", "x":13.75, "y":2.25},
+ {"label":":", "x":15.25, "y":2.25},
+ {"label":"\"", "x":16.25, "y":2.25},
+ {"label":"Enter", "x":17.25, "y":2.25, "w":2.25},
+
+ {"label":"Shift", "x":1.5, "y":3.25, "w":2.25},
+ {"label":"Z", "x":3.75, "y":3.25},
+ {"label":"X", "x":5, "y":3.25},
+ {"label":"C", "x":6, "y":3.25},
+ {"label":"V", "x":7, "y":3.25},
+ {"label":"B", "x":8, "y":3.25},
+ {"label":"Fn", "x":10.25, "y":3.25},
+ {"label":"N", "x":11.25, "y":3.25},
+ {"label":"M", "x":12.25, "y":3.25},
+ {"label":"<", "x":13.25, "y":3.25},
+ {"label":">", "x":15, "y":3.25},
+ {"label":"?", "x":16, "y":3.25},
+ {"label":"Shift", "x":17, "y":3.25, "w":1.75},
+ {"label":"Fn", "x":18.75, "y":3.25},
+
+ {"label":"Ctrl", "x":1.5, "y":4.25, "w":1.5},
+ {"label":"Alt", "x":5, "y":4.25, "w":1.5},
+ {"label":"Space", "x":6.5, "y":4.25, "w":2},
+ {"label":"Menu", "x":8.5, "y":4.25},
+ {"label":"Space", "x":10.25, "y":4.25, "w":2.75},
+ {"label":"Alt", "x":13, "y":4.25, "w":1.5},
+ {"label":"Ctrl", "x":18, "y":4.25, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cheshire/curiosity/keymaps/crd/keymap.c b/keyboards/cheshire/curiosity/keymaps/crd/keymap.c
new file mode 100644
index 0000000000..5ccaafec3c
--- /dev/null
+++ b/keyboards/cheshire/curiosity/keymaps/crd/keymap.c
@@ -0,0 +1,51 @@
+/*
+Copyright 2012,2013 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/>.
+*/
+#include QMK_KEYBOARD_H
+
+
+enum keyboard_layers {
+ _BL, // Base Layer
+ _FL, // Function Layer
+ _CL // Control Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_default(
+ KC_NO, 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_GRV,
+ 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_BSPC,
+ KC_NO, 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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL),
+ KC_LCTL, KC_LGUI, KC_SPC, MO(_FL), KC_SPC, KC_RALT, MO(_CL)
+ ),
+ [_FL] = LAYOUT_default(
+ KC_PGUP, 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_INS, KC_DEL,
+ KC_PGDN, KC_CAPS, _______, _______, EEP_RST, RESET, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ KC_ESC, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_CL] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, _______, _______,
+ _______, _______, RGB_VAD, RGB_VAI, RGB_TOG, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_HUI, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_RMOD,RGB_SAD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cheshire/curiosity/keymaps/default/keymap.c b/keyboards/cheshire/curiosity/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5b0f176ea4
--- /dev/null
+++ b/keyboards/cheshire/curiosity/keymaps/default/keymap.c
@@ -0,0 +1,53 @@
+/*
+Copyright 2019 Khader Syed
+
+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 my_layers {
+ _QWERTY,
+ _FNMS,
+ _NAVMED
+};
+
+#define FNMS MO(_FNMS)
+#define NAVMED MO(_NAVMED)
+#define CAP_CTL CTL_T(KC_CAPS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_default(
+ KC_GESC, 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_DEL,
+ 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_BSPC,
+ KC_PGDN, CAP_CTL, 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, FNMS,
+ KC_LCTL, KC_LALT, KC_LCMD, NAVMED, KC_SPC, KC_RALT, KC_RCTL
+ ),
+
+ [_FNMS] = LAYOUT_default(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______,
+ _______, _______, _______, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______,
+ AG_TOGG, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_NAVMED] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_HOME, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, RESET,
+ KC_END, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, EEP_RST,
+ _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cheshire/curiosity/keymaps/default/readme.md b/keyboards/cheshire/curiosity/keymaps/default/readme.md
new file mode 100644
index 0000000000..c56b768141
--- /dev/null
+++ b/keyboards/cheshire/curiosity/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+# Curiosity default keymap
+
+- A layer for all functions and mouse keys
+- A layer for arrows and media
+- Arrows on IJKL
+- Caps and control on caps lock - wonderful
+
diff --git a/keyboards/cheshire/curiosity/keymaps/madhatter/keymap.c b/keyboards/cheshire/curiosity/keymaps/madhatter/keymap.c
new file mode 100644
index 0000000000..b0649d37ab
--- /dev/null
+++ b/keyboards/cheshire/curiosity/keymaps/madhatter/keymap.c
@@ -0,0 +1,79 @@
+/*
+Copyright 2019 Khader Syed
+
+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 my_layers {
+ _QWERTY,
+ _FNMS,
+ _NAVMED
+};
+
+#define FNMS MO(_FNMS)
+#define NAVMED MO(_NAVMED)
+#define CAP_CTL CTL_T(KC_CAPS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_default(
+ KC_GESC, 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_DEL,
+ 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_BSPC,
+ KC_PGDN, CAP_CTL, 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, FNMS,
+ KC_LCTL, KC_LALT, KC_LCMD, NAVMED, KC_SPC, KC_RALT, KC_RCTL
+ ),
+
+ [_FNMS] = LAYOUT_default(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, RESET,
+ VLK_TOG, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______,
+ _______, _______, _______, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______,
+ AG_TOGG, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_NAVMED] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_HOME, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, RESET,
+ KC_END, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, EEP_RST,
+ _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+static uint8_t top = 0;
+static uint8_t middle = 0;
+static uint8_t bottom = 1;
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ top = middle = bottom = 0;
+ switch (get_highest_layer(state)) {
+ case _NAVMED:
+ top = 1;
+ break;
+ case _FNMS:
+ middle = 1;
+ break;
+ default:
+ break;
+ }
+ return state;
+}
+
+bool led_update_user(led_t usb_led) {
+ writePin(A8, !top);
+ writePin(A9, !middle);
+ writePin(A10, !bottom);
+ return false;
+}
diff --git a/keyboards/cheshire/curiosity/keymaps/madhatter/readme.md b/keyboards/cheshire/curiosity/keymaps/madhatter/readme.md
new file mode 100644
index 0000000000..a0e4c42c13
--- /dev/null
+++ b/keyboards/cheshire/curiosity/keymaps/madhatter/readme.md
@@ -0,0 +1,7 @@
+# Curiosity default keymap
+
+- A layer for all functions and mouse keys
+- A layer for arrows and media
+- Arrows on IJKL
+- Caps and control on caps lock - wonderful
+- Layer indicator LEDs
diff --git a/keyboards/cheshire/curiosity/keymaps/madhatter/rules.mk b/keyboards/cheshire/curiosity/keymaps/madhatter/rules.mk
new file mode 100644
index 0000000000..1b0f198d06
--- /dev/null
+++ b/keyboards/cheshire/curiosity/keymaps/madhatter/rules.mk
@@ -0,0 +1 @@
+VELOCIKEY_ENABLE = yes
diff --git a/keyboards/cheshire/curiosity/mcuconf.h b/keyboards/cheshire/curiosity/mcuconf.h
new file mode 100644
index 0000000000..faca3defdf
--- /dev/null
+++ b/keyboards/cheshire/curiosity/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/cheshire/curiosity/readme.md b/keyboards/cheshire/curiosity/readme.md
new file mode 100644
index 0000000000..dbde94130b
--- /dev/null
+++ b/keyboards/cheshire/curiosity/readme.md
@@ -0,0 +1,20 @@
+# Cheshire Curiosity PCB
+
+Cheshire Alice Keyboard Replacement PCB
+
+* Keyboard Maintainer: [sidcarter](https://github.com/sidcarter)
+* Hardware Supported: Cheshire Curiosity PCB, STM32F072CBT6
+* Designed By: Nightingale Studios/PhoenixStarr
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cheshire/curiosity:default:flash
+
+If you are flashing this keyboard/pcb for the first time:
+
+ * Set the dip switch on the reverse of the PCB to 1
+ * Hit the reset button and then do
+ * make cheshire/curiosity:default
+ * After flashing the keyboard successfully, you can reset the dip switch back to 0
+
+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/cheshire/curiosity/rules.mk b/keyboards/cheshire/curiosity/rules.mk
new file mode 100644
index 0000000000..354465a084
--- /dev/null
+++ b/keyboards/cheshire/curiosity/rules.mk
@@ -0,0 +1,17 @@
+# MCU name
+MCU = STM32F072
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
diff --git a/keyboards/ckeys/readme.md b/keyboards/ckeys/readme.md
index f04626cd33..1f55f058d2 100644
--- a/keyboards/ckeys/readme.md
+++ b/keyboards/ckeys/readme.md
@@ -9,3 +9,4 @@ In addition to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.o
* naKey - Through hole numpad
* Handwire 101 - Handwired 4x4 (Proton C or Pro Micro)
* The Dora Board - 4x5 with rotary encoder and Proton C pinouts
+ * Washington Macropad - Macropad shaped like Washington State with rotary encoder and OLED
diff --git a/keyboards/ckeys/washington/config.h b/keyboards/ckeys/washington/config.h
new file mode 100644
index 0000000000..419e35e3be
--- /dev/null
+++ b/keyboards/ckeys/washington/config.h
@@ -0,0 +1,253 @@
+/*
+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 0x002A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER merlin04
+#define PRODUCT Washington Macropad
+#define DESCRIPTION Washington State shaped macropad
+
+/* 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 { F7, B1, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define ENCODERS_PAD_A { D4 }
+#define ENCODERS_PAD_B { C6 }
+
+/*
+ * 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 B6
+#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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/ckeys/washington/info.json b/keyboards/ckeys/washington/info.json
new file mode 100644
index 0000000000..a956d957e9
--- /dev/null
+++ b/keyboards/ckeys/washington/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "washington",
+ "url": "https://keypcb.xyz/ViewPage/Washington",
+ "maintainer": "merlin04",
+ "width": 4.5,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":0, "y":0.75}, {"x":0.5, "y":1.75}, {"x":1.5, "y":2}]
+ }
+ }
+}
diff --git a/keyboards/ckeys/washington/keymaps/default/keymap.c b/keyboards/ckeys/washington/keymaps/default/keymap.c
new file mode 100644
index 0000000000..bfe2963831
--- /dev/null
+++ b/keyboards/ckeys/washington/keymaps/default/keymap.c
@@ -0,0 +1,82 @@
+/* Copyright 2019 merlin04
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+/*enum custom_keycodes {
+};*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ KC_PGUP, KC_UP, KC_PGDN,
+ KC_LEFT, KC_DOWN, KC_RIGHT,
+ MO(_FN), KC_MUTE, BL_TOGG
+ ),
+ [_FN] = LAYOUT(
+ KC_HOME, KC_CALC, KC_END,
+ BL_STEP, KC_ESC, KC_SLEP,
+ KC_TRNS, KC_MPLY, RESET
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ switch (biton32(layer_state)) {
+ case _BASE:
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ break;
+ case _FN:
+ if (clockwise) {
+ tap_code(KC_MNXT);
+ } else {
+ tap_code(KC_MPRV);
+ }
+ }
+}
+
+#ifdef OLED_DRIVER_ENABLE
+void oled_task_user(void) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+ switch (biton32(layer_state)) {
+ case _BASE:
+ oled_write_P(PSTR("Default\n"), false);
+ break;
+ case _FN:
+ oled_write_P(PSTR("FN\n"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("Undefined"), false);
+ }
+
+ // Host Keyboard LED Status
+ uint8_t usb_led = host_keyboard_leds();
+ oled_write_P(IS_LED_ON(usb_led, USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
+ oled_write_P(IS_LED_ON(usb_led, USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
+ oled_write_P(IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
+}
+#endif \ No newline at end of file
diff --git a/keyboards/ckeys/washington/keymaps/default/readme.md b/keyboards/ckeys/washington/keymaps/default/readme.md
new file mode 100644
index 0000000000..bc0b52d231
--- /dev/null
+++ b/keyboards/ckeys/washington/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for washington
diff --git a/keyboards/ckeys/washington/readme.md b/keyboards/ckeys/washington/readme.md
new file mode 100644
index 0000000000..a74934b3c8
--- /dev/null
+++ b/keyboards/ckeys/washington/readme.md
@@ -0,0 +1,23 @@
+# Washington Macropad
+
+![Washington board](https://keypcb.xyz/Content/resources/washington-done.png)
+
+A macropad shaped like Washington State that supports a rotary encoder and an OLED display.
+
+* Keyboard Maintainer: [merlin04/KeyPCB](https://github.com/merlin04)
+* Hardware Supported: Washington Macropad
+* Hardware Availability: [cKeys.org](https://ckeys.org)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ckeys/washington: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).
+
+## PCB Design
+
+Download the files for the PCB [here.](https://keypcb.xyz/ViewPage/Washington#files)
+
+## Default Layout
+
+You can find the default layout in `washington/keymaps/default/keymap.c`
diff --git a/keyboards/ckeys/washington/rules.mk b/keyboards/ckeys/washington/rules.mk
new file mode 100644
index 0000000000..aa2dfb328c
--- /dev/null
+++ b/keyboards/ckeys/washington/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+ENCODER_ENABLE = yes # Enable support for encoders
+OLED_DRIVER_ENABLE = yes # Enable support for OLED displays
diff --git a/keyboards/ckeys/washington/washington.c b/keyboards/ckeys/washington/washington.c
new file mode 100644
index 0000000000..58089caac4
--- /dev/null
+++ b/keyboards/ckeys/washington/washington.c
@@ -0,0 +1,17 @@
+/* Copyright 2019 merlin04
+ *
+ * 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 "washington.h"
diff --git a/keyboards/ckeys/washington/washington.h b/keyboards/ckeys/washington/washington.h
new file mode 100644
index 0000000000..6fba7b3281
--- /dev/null
+++ b/keyboards/ckeys/washington/washington.h
@@ -0,0 +1,38 @@
+/* Copyright 2019 merlin04
+ *
+ * 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 is 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 } \
+}
diff --git a/keyboards/clueboard/60/config.h b/keyboards/clueboard/60/config.h
index aa544c70bb..f0e157ff14 100644
--- a/keyboards/clueboard/60/config.h
+++ b/keyboards/clueboard/60/config.h
@@ -47,7 +47,7 @@
*
*/
#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 MATRIX_COL_PINS { A2, A3, A6, B14, B15, A8, A9, A7, B3, B4, C15, C14, C13, B5, B6 }
#define UNUSED_PINS { A0, A1, A9, B7, B8, B9, B10, B11, B12, B13 }
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/comet46/keymaps/default/keymap.c b/keyboards/comet46/keymaps/default/keymap.c
index 9ef9676465..7a8c29dcb9 100644
--- a/keyboards/comet46/keymaps/default/keymap.c
+++ b/keyboards/comet46/keymaps/default/keymap.c
@@ -144,7 +144,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
}
diff --git a/keyboards/preonic/keymaps/juno/config.h b/keyboards/contra/keymaps/alper/config.h
index 6387debbb1..d61ee2938e 100644
--- a/keyboards/preonic/keymaps/juno/config.h
+++ b/keyboards/contra/keymaps/alper/config.h
@@ -1,7 +1,8 @@
#pragma once
+
#ifdef AUDIO_ENABLE
- #define STARTUP_SONG SONG(PREONIC_SOUND)
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
// #define STARTUP_SONG SONG(NO_SOUND)
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
@@ -34,4 +35,4 @@
//#define MIDI_ADVANCED
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 2 \ No newline at end of file
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/contra/keymaps/alper/keymap.c b/keyboards/contra/keymaps/alper/keymap.c
new file mode 100644
index 0000000000..8be7513556
--- /dev/null
+++ b/keyboards/contra/keymaps/alper/keymap.c
@@ -0,0 +1,191 @@
+/* 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 planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,---------------------------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |-----------+------+------+------+------+-------------+------+----------+------+------+-------------|
+ * | Ctrl/Tab | A | S | D | F | G | H | J | K | L | ; | " |
+ * |-----------+------+------+------+------+------|------+------+----------+------+------+-------------|
+ * | Shift/Esc | Z | X | C | V | B | N | M | , | . | / | Shift/Enter |
+ * |-----------+------+------+------+------+------+------+------+----------+------+------+-------------|
+ * | Tab | Ctrl | Alt | GUI |Lower | Space |Raise | GUI/Left | Down | Up | Right |
+ * `---------------------------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_planck_mit(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ MT(MOD_LCTL, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MT(MOD_LSFT, KC_ESC), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT),
+ KC_TAB, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, MT(MOD_RGUI, KC_LEFT), KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Colemak
+ * ,---------------------------------------------------------------------------------------------------.
+ * | Esc | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |-----------+------+------+------+------+-------------+------+----------+------+------+-------------|
+ * | Ctrl/Tab | A | R | S | T | D | H | N | E | I | O | " |
+ * |-----------+------+------+------+------+------|------+------+----------+------+------+-------------|
+ * | Shift/Esc | Z | X | C | V | B | K | M | , | . | / | Shift/Enter |
+ * |-----------+------+------+------+------+-------------+------+----------+------+------+------+------|
+ * | Tab | Ctrl | Alt | GUI |Lower | Space |Raise | GUI/Left | Down | Up | Right |
+ * `---------------------------------------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT_planck_mit(
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ MT(MOD_LCTL, KC_TAB), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ MT(MOD_LSFT, KC_ESC), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT),
+ KC_TAB, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, MT(MOD_RGUI, KC_LEFT), KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Dvorak
+ * ,---------------------------------------------------------------------------------------------------.
+ * | Esc | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |-----------+------+------+------+------+-------------+------+----------+------+------+-------------|
+ * | Ctrl/Tab | A | O | E | U | I | D | H | T | N | S | / |
+ * |-----------+------+------+------+------+------|------+------+----------+------+------+-------------|
+ * | Shift/Esc | ; | Q | J | K | X | B | M | W | V | Z | Shift/Enter |
+ * |-----------+------+------+------+------+------+------+------+----------+------+------+-------------|
+ * | Tab | Ctrl | Alt | GUI |Lower | Space |Raise | GUI/Left | Down | Up | Right |
+ * `---------------------------------------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT_planck_mit(
+ KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ MT(MOD_LCTL, KC_TAB), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ MT(MOD_LSFT, KC_ESC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MT(MOD_RSFT, KC_ENT),
+ KC_TAB, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, MT(MOD_RGUI, 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_mit(
+ 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_MFFD, 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 | |
+ * |-----------+---------+---------+------+------+------+------+------+------+------+------+------|
+ * | AppSwitch | PrevTab | NextTab | | | | | Next | Vol- | Vol+ | Play |
+ * `----------------------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_planck_mit(
+ 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, _______,
+ LGUI(KC_GRAVE), LGUI(LSFT(KC_LBRACKET)), LGUI(LSFT(KC_RBRACKET)), _______, _______, _______, _______, KC_MFFD, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_planck_mit(
+ _______, 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, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+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 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/contra/keymaps/alper/readme.md b/keyboards/contra/keymaps/alper/readme.md
new file mode 100644
index 0000000000..0b9cab507f
--- /dev/null
+++ b/keyboards/contra/keymaps/alper/readme.md
@@ -0,0 +1,22 @@
+# Alper's Contra Layout
+
+![Dvorak Layout](https://i.imgur.com/BvBYgpz.png)
+
+## Rationale
+
+I based this off the default and changed some stuff because I'm a macOS user who types in Dvorak:
+
+* Ctrl/Tab: It is normal to remap Caps Lock to control there and having a press button there for Tab would solve a lot of problems. BUT on my Contra this button is broken, so I've mapped 0,0 to Tab as well.
+* Shift/Esc: A standard left shift with an Escape that I have not been utilizing much in favor of the top corner button.
+* Tab: The replacement tab.
+* Overloaded the Left arrow with another GUI (Command) button because that is essential on macOS.
+* Overloaded the Enter button with a Shift because like Command, it is essential for me to have these on both sides of the keyboard.
+* Raise-0,0: Switches between windows of an application.
+* Raise-0,1-2: Dedicated next and previous tab buttons since these key combinations caused a finger twister.
+
+
+## TODO
+
+* Try out tapdance for brackets (see ryanm101/keymap.c)
+* REMAP ESC To LT() so I can use it to select numbers (_NUMB) and functions more easily? (see msiu/keymap.c) https://docs.qmk.fm/#/feature_advanced_keycodes?id=switching-and-toggling-layers
+* Wipe everything except Dvorak and Qwerty (see deastiny/keymap.c) \ No newline at end of file
diff --git a/keyboards/contra/readme.md b/keyboards/contra/readme.md
index f16598581e..2bf1d4de35 100644
--- a/keyboards/contra/readme.md
+++ b/keyboards/contra/readme.md
@@ -1,5 +1,5 @@
CONTRA
-===
+======
![CONTRA](https://cartel.ltd/wp-content/uploads/2018/01/img_3209.jpg)
diff --git a/keyboards/converter/siemens_tastatur/rules.mk b/keyboards/converter/siemens_tastatur/rules.mk
index 75b3d7b361..d89f7f5f60 100644
--- a/keyboards/converter/siemens_tastatur/rules.mk
+++ b/keyboards/converter/siemens_tastatur/rules.mk
@@ -1,43 +1,15 @@
-SRC = matrix.c
+# MCU name
+MCU = STM32F103
+
# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
BOARD = GENERIC_STM32_F103
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
+DFU_ARGS = -d 1eaf:0003 -a2 -R
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-DFU_ARGS = -d 1eaf:0003 -a 2
+SRC = matrix.c
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/converter/usb_usb/keymaps/ble/keymap.c b/keyboards/converter/usb_usb/keymaps/ble/keymap.c
index 190b3319fe..75c49f0067 100644
--- a/keyboards/converter/usb_usb/keymaps/ble/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/ble/keymap.c
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: plain Qwerty without layer switching
* ,---------------. ,---------------. ,---------------.
* |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
@@ -46,19 +46,3 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT
),
};
-
-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/converter/usb_usb/keymaps/default/keymap.c b/keyboards/converter/usb_usb/keymaps/default/keymap.c
index 170ed31ef8..c7d91fa5b2 100644
--- a/keyboards/converter/usb_usb/keymaps/default/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/default/keymap.c
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: plain Qwerty without layer switching
* ,---------------. ,---------------. ,---------------.
* |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
@@ -55,19 +55,3 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______, ______,______, ______,______
),
};
-
-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/coseyfannitutti/discipad/discipad.c b/keyboards/coseyfannitutti/discipad/discipad.c
index c8f6e0a178..4bdb1c6c20 100644
--- a/keyboards/coseyfannitutti/discipad/discipad.c
+++ b/keyboards/coseyfannitutti/discipad/discipad.c
@@ -14,11 +14,3 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "discipad.h"
-
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
diff --git a/keyboards/coseyfannitutti/discipad/rules.mk b/keyboards/coseyfannitutti/discipad/rules.mk
index a9d06d608c..52e06f6e76 100644
--- a/keyboards/coseyfannitutti/discipad/rules.mk
+++ b/keyboards/coseyfannitutti/discipad/rules.mk
@@ -11,14 +11,9 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# Flash program via avrdude, but default command is not suitable.
-# You can use coseyfannitutti/discipad:default:program
-PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
-
# disable debug code
OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/coseyfannitutti/discipline/discipline.c b/keyboards/coseyfannitutti/discipline/discipline.c
index 6a788ce0e8..50ba0bae54 100644
--- a/keyboards/coseyfannitutti/discipline/discipline.c
+++ b/keyboards/coseyfannitutti/discipline/discipline.c
@@ -14,11 +14,3 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "discipline.h"
-
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
diff --git a/keyboards/coseyfannitutti/discipline/readme.md b/keyboards/coseyfannitutti/discipline/readme.md
index d11f1724f6..27a1790998 100644
--- a/keyboards/coseyfannitutti/discipline/readme.md
+++ b/keyboards/coseyfannitutti/discipline/readme.md
@@ -4,12 +4,16 @@
A 65% keyboard that can be assembled with only through hole components, including usb type-c
-Keyboard Maintainer: [coseyfannitutti](https://github.com/coseyfannitutti)
-Hardware Supported: DISCIPLINE, atmega32a
-Hardware Availability: [cftkb.com](http://www.cftkb.com), [GitHub](https://github.com/coseyfannitutti/discipline)
+* Keyboard Maintainer: [coseyfannitutti](https://github.com/coseyfannitutti)
+* Hardware Supported: DISCIPLINE, atmega32a
+* Hardware Availability: [cftkb.com](http://www.cftkb.com), [GitHub](https://github.com/coseyfannitutti/discipline)
Make example for this keyboard (after setting up your build environment):
make coseyfannitutti/discipline:default
+Flashing example for this keyboard:
+
+ make coseyfannitutti/discipline:default:flash
+
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/coseyfannitutti/discipline/rules.mk b/keyboards/coseyfannitutti/discipline/rules.mk
index 24b5969b74..5666501ef5 100644
--- a/keyboards/coseyfannitutti/discipline/rules.mk
+++ b/keyboards/coseyfannitutti/discipline/rules.mk
@@ -14,10 +14,6 @@ F_CPU = 16000000
# ATmega328P USBasp
BOOTLOADER = USBasp
-# Flash program via avrdude, but default command is not suitable.
-# You can use plaid:default:program
-PROGRAM_CMD = avrdude -c usbasp -p m32 -U flash:w:$(BUILD_DIR)/$(TARGET).hex
-
# disable debug code
OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/coseyfannitutti/mysterium/config.h b/keyboards/coseyfannitutti/mysterium/config.h
new file mode 100644
index 0000000000..6357926483
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/config.h
@@ -0,0 +1,242 @@
+/*Copyright 2019 coseyfannitutti
+
+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"
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x8769
+#define DEVICE_VER 0x0001
+#define MANUFACTURER coseyfannitutti
+#define PRODUCT MYSTERIUM
+#define DESCRIPTION TKL keyboard that can be assembled with only through hole components
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 18
+
+/*
+ * 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)
+ *
+ */
+/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17*/
+#define MATRIX_ROW_PINS { C2, C3, C7, C4, C6, C5 }
+#define MATRIX_COL_PINS { A0, B0, A1, B1, A2, B2, A3, B3, A4, B4, A5, A6, A7, D6, D5, D1, D0, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define NO_UART 1
+
+/*
+ * 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 DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+*/ \ No newline at end of file
diff --git a/keyboards/coseyfannitutti/mysterium/info.json b/keyboards/coseyfannitutti/mysterium/info.json
new file mode 100644
index 0000000000..1b993a2edc
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "MYSTERIUM",
+ "url": "https://github.com/coseyfannitutti/mysterium",
+ "maintainer": "coseyfannitutti",
+ "width": 18.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Insert", "x":15.25, "y":1.25}, {"label":"Home", "x":16.25, "y":1.25}, {"label":"PgUp", "x":17.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.25}, {"label":"End", "x":16.25, "y":2.25}, {"label":"PgDn", "x":17.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Alt", "x":10, "y":5.25, "w":1.25}, {"label":"Menu", "x":11.25, "y":5.25, "w":1.25}, {"label":"Fn", "x":12.5, "y":5.25, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.25}, {"label":"\u2193", "x":16.25, "y":5.25}, {"label":"\u2192", "x":17.25, "y":5.25}]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Insert", "x":15.25, "y":1.25}, {"label":"Home", "x":16.25, "y":1.25}, {"label":"PgUp", "x":17.25, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.25}, {"label":"End", "x":16.25, "y":2.25}, {"label":"PgDn", "x":17.25, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Win", "x":1.5, "y":5.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":7}, {"label":"Alt", "x":11, "y":5.25, "w":1.5}, {"label":"Fn", "x":12.5, "y":5.25}, {"label":"Ctrl", "x":13.5, "y":5.25, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.25}, {"label":"\u2193", "x":16.25, "y":5.25}, {"label":"\u2192", "x":17.25, "y":5.25}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/coseyfannitutti/mysterium/keymaps/default/keymap.c b/keyboards/coseyfannitutti/mysterium/keymaps/default/keymap.c
new file mode 100644
index 0000000000..b9df25f347
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2019 COSEYFANNITUTTI
+ *
+ * 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_tkl_ansi(
+ KC_GESC, 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, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS)
+};
diff --git a/keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c b/keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c
new file mode 100644
index 0000000000..883de97ffb
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/keymaps/tsangan/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2019 COSEYFANNITUTTI
+ *
+ * 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_tkl_ansi_tsangan(
+ KC_GESC, 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_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS)
+};
diff --git a/keyboards/coseyfannitutti/mysterium/mysterium.c b/keyboards/coseyfannitutti/mysterium/mysterium.c
new file mode 100644
index 0000000000..4bfbd844c1
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/mysterium.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 coseyfannitutti
+ *
+ * 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 "mysterium.h" \ No newline at end of file
diff --git a/keyboards/coseyfannitutti/mysterium/mysterium.h b/keyboards/coseyfannitutti/mysterium/mysterium.h
new file mode 100644
index 0000000000..c5deacd833
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/mysterium.h
@@ -0,0 +1,55 @@
+/* Copyright 2019 coseyfannitutti
+ *
+ * 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 _x_ KC_NO
+
+#include "quantum.h"
+
+#define LAYOUT_tkl_ansi( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, K2G, K2H, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4G, \
+ K50, K51, K52, K56, K59, K5A, K5C, K5E, K5F, K5G, K5H \
+) \
+{ \
+ { K00, _x_, K02, K03, K04, K05, K06, K07, K08, K09, _x_, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, _x_, K1F, K1G, K1H }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, _x_, K2F, K2G, K2H }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, _x_, K3D, _x_, _x_, _x_, _x_ }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, _x_, _x_, K4D, _x_, _x_, K4G, _x_ }, \
+ { K50, K51, K52, _x_, _x_, _x_, K56, _x_, _x_, K59, K5A, _x_, K5C, _x_, K5E, K5F, K5G, K5H } \
+}
+
+#define LAYOUT_tkl_ansi_tsangan( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, K2G, K2H, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4G, \
+ K50, K51, K52, K56, K5A, K5C, K5E, K5F, K5G, K5H \
+) \
+{ \
+ { K00, _x_, K02, K03, K04, K05, K06, K07, K08, K09, _x_, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, _x_, K1F, K1G, K1H }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, _x_, K2F, K2G, K2H }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, _x_, K3D, _x_, _x_, _x_, _x_ }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, _x_, _x_, K4D, _x_, _x_, K4G, _x_ }, \
+ { K50, K51, K52, _x_, _x_, _x_, K56, _x_, _x_, _x_, K5A, _x_, K5C, _x_, K5E, K5F, K5G, K5H } \
+}
diff --git a/keyboards/coseyfannitutti/mysterium/readme.md b/keyboards/coseyfannitutti/mysterium/readme.md
new file mode 100644
index 0000000000..c6be89d679
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/readme.md
@@ -0,0 +1,15 @@
+# MYSTERIUM
+
+![mysterium](https://github.com/coseyfannitutti/mysterium/blob/master/doc/images/mysterium.png)
+
+A TKL keyboard that can be assembled with only through hole components, including usb type-c
+
+* Keyboard Maintainer: [coseyfannitutti](https://github.com/coseyfannitutti)
+* Hardware Supported: MYSTERIUM, atmega32a
+* Hardware Availability: [cftkb.com](http://www.cftkb.com), [GitHub](https://github.com/coseyfannitutti/mysterium)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make coseyfannitutti/mysterium: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/coseyfannitutti/mysterium/rules.mk b/keyboards/coseyfannitutti/mysterium/rules.mk
new file mode 100644
index 0000000000..4147cfec96
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/rules.mk
@@ -0,0 +1,39 @@
+# MCU name
+MCU = atmega32a
+
+# Processor frequency
+F_USB = 16000000
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = USBasp
+
+# disable debug code
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+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
diff --git a/keyboards/coseyfannitutti/mysterium/usbconfig.h b/keyboards/coseyfannitutti/mysterium/usbconfig.h
new file mode 100644
index 0000000000..809b912456
--- /dev/null
+++ b/keyboards/coseyfannitutti/mysterium/usbconfig.h
@@ -0,0 +1,384 @@
+/* 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 $
+ */
+
+#pragma once
+
+#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_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.
+ */
+// max power draw with maxed white underglow measured at 120 mA (peaks)
+#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 0
+/* 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 (DEVICE_VER & 0xFF), ((DEVICE_VER >> 8) & 0xFF)
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'c','o','s','e','y','f','a','n','n','i','t','u','t','t','i'
+#define USB_CFG_VENDOR_NAME_LEN 15
+/* 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 'M','Y','S','T','E','R','I','U','M'
+#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 '0'
+#define USB_CFG_SERIAL_NUMBER_LEN 1
+/* 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
diff --git a/keyboards/crkbd/keymaps/bcat/config.h b/keyboards/crkbd/keymaps/bcat/config.h
new file mode 100644
index 0000000000..fd5fce5421
--- /dev/null
+++ b/keyboards/crkbd/keymaps/bcat/config.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#define EE_HANDS
+
+/* Limit max RGB LED current to avoid tripping controller fuse. */
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
diff --git a/keyboards/crkbd/keymaps/bcat/keymap.c b/keyboards/crkbd/keymaps/bcat/keymap.c
new file mode 100644
index 0000000000..c9df7a1e31
--- /dev/null
+++ b/keyboards/crkbd/keymaps/bcat/keymap.c
@@ -0,0 +1,51 @@
+#include QMK_KEYBOARD_H
+
+enum layer {
+ LAYER_DEFAULT,
+ LAYER_LOWER,
+ LAYER_RAISE,
+ LAYER_ADJUST,
+};
+
+#define LY_LWR MO(LAYER_LOWER)
+#define LY_RSE MO(LAYER_RAISE)
+
+#define KY_CESC LCTL_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Default layer: http://www.keyboard-layout-editor.com/#/gists/08d9827d916662a9414f48805aa895a5 */
+ [LAYER_DEFAULT] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KY_CESC, 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,
+ KC_LALT, LY_LWR, KC_SPC, KC_ENT, LY_RSE, KC_RGUI
+ ),
+
+ /* Lower layer: http://www.keyboard-layout-editor.com/#/gists/c3fba5eaa2cd70fdfbdbc0f9e34d3bc0 */
+ [LAYER_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_PSCR, KC_SLCK, KC_PAUS, KC_INS, KC_DEL, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
+ _______, _______, _______, _______, _______, KC_APP, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Raise layer: http://www.keyboard-layout-editor.com/#/gists/08b44355d4ca85d294bad9e2821f91d7 */
+ [LAYER_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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F11, _______,
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Adjust layer: http://www.keyboard-layout-editor.com/#/gists/77e7572e077b36a23eb2086017e16fee */
+ [LAYER_ADJUST] = LAYOUT(
+ KC_CAPS, _______, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, _______, _______, _______, _______,
+ _______, _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, RGB_RMOD, RGB_VAD, RGB_VAI, RGB_MOD, RGB_SPI, _______,
+ _______, _______, _______, KC_MUTE, _______, _______, RGB_HUI, RGB_SAD, RGB_SAI, RGB_HUD, RGB_SPD, _______,
+ _______, _______, _______, RGB_TOG, _______, _______
+ ),
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
+}
diff --git a/keyboards/crkbd/keymaps/bcat/readme.md b/keyboards/crkbd/keymaps/bcat/readme.md
new file mode 100644
index 0000000000..e378f64cdd
--- /dev/null
+++ b/keyboards/crkbd/keymaps/bcat/readme.md
@@ -0,0 +1,30 @@
+# bcat's Corne layout
+
+This split ergo layout mirrors
+[my Lily58 layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/lily58/keymaps/bcat)
+with the number row removed and RGB controls added. See that layout's docs for
+more details on the principles that went into the layout.
+
+## Default layer
+
+![Default layer layout](https://i.imgur.com/s1LDlSQ.png)
+
+([KLE](http://www.keyboard-layout-editor.com/#/gists/08d9827d916662a9414f48805aa895a5))
+
+## Lower layer
+
+![Lower layer layout](https://i.imgur.com/v4DjXM6.png)
+
+([KLE](http://www.keyboard-layout-editor.com/#/gists/c3fba5eaa2cd70fdfbdbc0f9e34d3bc0))
+
+## Raise layer
+
+![Raise layer layout](https://i.imgur.com/Wr6Ptyy.png)
+
+([KLE](http://www.keyboard-layout-editor.com/#/gists/08b44355d4ca85d294bad9e2821f91d7))
+
+## Adjust layer
+
+![Adjust layer layout](https://i.imgur.com/9OtGLCT.png)
+
+([KLE](http://www.keyboard-layout-editor.com/#/gists/77e7572e077b36a23eb2086017e16fee))
diff --git a/keyboards/crkbd/keymaps/bcat/rules.mk b/keyboards/crkbd/keymaps/bcat/rules.mk
new file mode 100644
index 0000000000..cd3418dab8
--- /dev/null
+++ b/keyboards/crkbd/keymaps/bcat/rules.mk
@@ -0,0 +1,3 @@
+BOOTLOADER = atmel-dfu # Elite-C
+
+RGB_MATRIX_ENABLE = WS2812 # per-key RGB and underglow
diff --git a/keyboards/crkbd/keymaps/curry/config.h b/keyboards/crkbd/keymaps/curry/config.h
new file mode 100644
index 0000000000..a7c4ed7403
--- /dev/null
+++ b/keyboards/crkbd/keymaps/curry/config.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#define EE_HANDS
+#define USE_SERIAL_PD2
+
+#define OLED_DISABLE_TIMEOUT
+#define TAPPING_TERM_PER_KEY
+
+#if defined(RGB_MATRIX_ENABLE)
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
+# define RGB_MATRIX_HUE_STEP 8
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 5
+# define RGB_MATRIX_SPD_STEP 10
+#endif
diff --git a/keyboards/crkbd/keymaps/curry/keymap.c b/keyboards/crkbd/keymaps/curry/keymap.c
new file mode 100644
index 0000000000..1ad628c920
--- /dev/null
+++ b/keyboards/crkbd/keymaps/curry/keymap.c
@@ -0,0 +1,68 @@
+#include "curry.h"
+
+#define LAYOUT_crkbd_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
+ ) \
+ LAYOUT_wrapper( \
+ KC_TAB, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
+ MT_ESC, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \
+ OS_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, OS_RSFT, \
+ KC_LEAD,OS_LALT, SP_LWER, ET_RAIS, KC_BSPC, KC_RGUI \
+ )
+#define LAYOUT_crkbd_base_wrapper(...) LAYOUT_crkbd_base(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_crkbd_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
+ ),
+
+ [_COLEMAK] = LAYOUT_crkbd_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
+ ),
+
+ [_DVORAK] = LAYOUT_crkbd_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
+ ),
+
+ [_WORKMAN] = LAYOUT_crkbd_base_wrapper(
+ _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
+ _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
+ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
+ ),
+
+ [_MODS] = LAYOUT_wrapper(
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_LOWER] = LAYOUT_wrapper(
+ KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F12,
+ KC_GRV, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
+ _______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_RAISE] = LAYOUT_wrapper( \
+ _______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
+ _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
+ _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT_wrapper( \
+ KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST,
+ VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
+ MG_NKRO, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL,
+ _______, _______, _______, _______, TG_MODS, _______
+ )
+};
diff --git a/keyboards/crkbd/keymaps/curry/rules.mk b/keyboards/crkbd/keymaps/curry/rules.mk
new file mode 100644
index 0000000000..7d35d5f0f9
--- /dev/null
+++ b/keyboards/crkbd/keymaps/curry/rules.mk
@@ -0,0 +1,16 @@
+# 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
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = WS2812
+
+OLED_DRIVER_ENABLE = yes
+
+BOOTLOADER = atmel-dfu
+SPLIT_TRANSPORT = mirror
diff --git a/keyboards/crkbd/keymaps/dsanchezseco/config.h b/keyboards/crkbd/keymaps/dsanchezseco/config.h
index 14efb7d4ec..033173defb 100644
--- a/keyboards/crkbd/keymaps/dsanchezseco/config.h
+++ b/keyboards/crkbd/keymaps/dsanchezseco/config.h
@@ -36,6 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//disable effects
#define DISABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue speed is hue for secondary hue
#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom speed controls how much gradient changes
+#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Static gradient left to right speed controls how much gradient changes
#define DISABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
#define DISABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
diff --git a/keyboards/crkbd/keymaps/hvp/keymap.c b/keyboards/crkbd/keymaps/hvp/keymap.c
index b66c360e18..9e1cd5f01c 100644
--- a/keyboards/crkbd/keymaps/hvp/keymap.c
+++ b/keyboards/crkbd/keymaps/hvp/keymap.c
@@ -25,56 +25,56 @@ enum custom_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT( \
+ [_QWERTY] = LAYOUT(
//,-----------------------------------------. ,-----------------------------------------.
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_BSPC,\
+ LT(_ADJUST,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_BSPC,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- LT(_ADJUST, KC_ESC), KC_A, KC_S, KC_D, LT(_RAISE,KC_F), MT(MOD_LCTL,KC_G), KC_H, KC_J, KC_K, KC_L,TD(TD1),TD(TD2),\
+ LSFT_T(KC_ESC), KC_A, KC_S, KC_D, LT(3,KC_F), KC_G, KC_H, KC_J, KC_K, KC_L,TD(TD1),TD(TD2),
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM,KC_DOT,TD(TD3),KC_SFTENT,\
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM,KC_DOT,TD(TD3),KC_SFTENT,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- KC_LGUI, LOWER,MT(MOD_LSFT, KC_SPC), LT(_RAISE,KC_ENT), RAISE,KC_LALT \
+ KC_LGUI, LT(1,KC_SPC),MT(MOD_LSFT, KC_SPC), MT(MOD_LSFT,KC_ENT), LT(2,KC_SPC),KC_LALT
//`--------------------' `--------------------'
),
- [_RAISE] = LAYOUT( \
+ [_RAISE] = LAYOUT(
//,-----------------------------------------. ,-----------------------------------------.
- KC_TAB, 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_BSPC,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,KC_NO, KC_DEL,\
+ KC_DEL, _______, _______, _______, _______, _______, _______,KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO, KC_NO,\
+ KC_LCTL, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- KC_LGUI, LOWER,MT(MOD_LSFT, KC_SPC), LT(_RAISE,KC_ENT), RAISE,KC_LALT \
+ _______, _______, _______, _______, _______, _______
//`--------------------' `--------------------'
),
- [_LOWER] = LAYOUT( \
+ [_LOWER] = LAYOUT(
//,-----------------------------------------. ,-----------------------------------------.
- KC_TAB,KC_EXLM,KC_AT,KC_HASH,KC_DLR,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSPC,\
+ KC_TAB,KC_EXLM,KC_AT,KC_HASH,KC_DLR,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSPC,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS,KC_EQL,KC_LCBR,KC_RCBR,KC_PIPE,KC_GRV,\
+ KC_DEL, _______, _______, _______, _______, _______, _______,KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS,KC_TILD,\
+ KC_LCTL, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TILD,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- KC_LGUI, LOWER,MT(MOD_LSFT, KC_SPC), LT(_RAISE,KC_ENT), RAISE,KC_LALT \
+ _______, _______, _______, _______, _______, _______
//`--------------------' `--------------------'
),
- [_ADJUST] = LAYOUT( \
+ [_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_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_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
+ KC_F1,_______,_______,D_NAVI,_______,_______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- RESET,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_MPLY, KC_MNXT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,\
+ RESET,KC_PSCR,_______,_______,_______,_______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- KC_LGUI, LOWER,MT(MOD_LSFT, KC_SPC), LT(_RAISE,KC_ENT), RAISE,KC_LALT \
+ _______, KC_VOLD,KC_MPLY, KC_MNXT, KC_VOLU,_______
//`--------------------' `--------------------'
)
};
-int RGB_current_mode;
+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) {
diff --git a/keyboards/crkbd/keymaps/hvp/readme.md b/keyboards/crkbd/keymaps/hvp/readme.md
index 33bb83b83f..3ccdc12193 100644
--- a/keyboards/crkbd/keymaps/hvp/readme.md
+++ b/keyboards/crkbd/keymaps/hvp/readme.md
@@ -1,5 +1,10 @@
-Keymap to be used with Eurkey for easy access to swedish characters on first layer.
+Keyboard: Corne Keyboard (CRKBD)
+Keys: A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
+Layout: Swedish characters on main layer using tapdance. Built for eurkey keyboard layout.
+Flash instructions: Flash using avrdude, will req the hvp user space to compile.
-Links:
+> make crkbd:hvp:avrdude
-- https://eurkey.steffen.bruentjen.eu/ \ No newline at end of file
+Links:
+Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/crkbd
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/crkbd/keymaps/hvp/rules.mk b/keyboards/crkbd/keymaps/hvp/rules.mk
index a651e528cf..03859ab633 100644
--- a/keyboards/crkbd/keymaps/hvp/rules.mk
+++ b/keyboards/crkbd/keymaps/hvp/rules.mk
@@ -10,5 +10,5 @@ SRC += ./lib/glcdfont.c \
# ./lib/timelogger.c \
TAP_DANCE_ENABLE = yes
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+EXTRAKEY_ENABLE = yes # Audio control and System control
# LOCAL_GLCDFONT = yes \ No newline at end of file
diff --git a/keyboards/crkbd/keymaps/kidbrazil/README.md b/keyboards/crkbd/keymaps/kidbrazil/README.md
new file mode 100644
index 0000000000..a7995a4f65
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/README.md
@@ -0,0 +1,63 @@
+# KidBrazil's custom CRKBD Layout
+
+![Loose Transistor Crkbd](https://user-images.githubusercontent.com/4823043/71268460-0862c000-231b-11ea-8f32-2fe8da4d348a.jpg)
+
+This is a simple layout that I use for both programming and gaming. It is very
+closely based on the original CRKBD layout with some modifications to the
+position of CTRL and SHIFT.
+
+## Layers
+This keymap includes a total of 4 Layers:
+- QWERTY
+- NUMBERS
+- SYMBOLS
+- GAMING
+- WEAPONS
+
+The first three layers are pretty self explanatory and follow closely the
+default keymap for this keyboard. The magic really starts to happen with the
+gaming layer.
+
+### Gaming Layer
+The gaming layer can be toggled on/off from the SYMBOLS layer. Once on the
+gaming layer it will stay there until you toggle it off again. The gaming layer
+includes normal WASD and most of the keys FPS games use on the left hand. On the
+right hand we have F1-F12 and a few other special keys for games that require
+it.
+
+### Weapon
+The weapon layer is a momentary layer that can only be reached from the gaming
+layer. This layer preserves the left hand almost unchanged, except for when the
+layer is activated the top row becomes NUM 1 - 6 for wepon selection. The right
+hand is KC_TRNS the whole way so basically it is still the gaming layer.
+
+## Custom Font
+This keymap includes a custom font for my LooseTransistor logo. It is fine if
+you want to use it I certainly don't mind but if you want your own, just replace
+the glcdfont file here and you should be fine.
+
+Alternatively you could remove the font config line from the config.h file so it
+will use the default QMK one.
+
+## OLED
+This Keymap is setup to use the newer OLED API. Some work has been done to
+customize this with showing layer and USB information. I also tried my best to
+get a dormant / sleep state going but it is hit or miss and often only works on
+the master hand.
+
+## OLED & RGB Matrix timeout
+This keymap will set a automated timeout system for the OLED screen and the RGB
+matrix. After 3 minutes or so the LED screen will display the logo on both
+halves and 5 minutes after that both the LED and the Matrix will be switched
+off.
+
+Once a user hits the keys again, the LED matrix will turn back on unless the
+user has disabled it via RGB_TOG.
+
+## Flashing
+To flash this on your CRKBD simply use the `make crkbd:kidbrazil:flash`
+command.
+
+### TODO
+- Wait for Spit_common to be implemented in CRKBD and revisit the special color
+ layers and animations
diff --git a/keyboards/crkbd/keymaps/kidbrazil/config.h b/keyboards/crkbd/keymaps/kidbrazil/config.h
new file mode 100644
index 0000000000..dd3f1a0307
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/config.h
@@ -0,0 +1,100 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2019 Lucas Moreira
+
+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 150
+#undef PRODUCT
+#define PRODUCT CRKBD Loose Transistor Ed.
+
+#ifdef RGBLIGHT_ENABLE
+ //#undef RGBLED_NUM
+ //#define RGBLIGHT_ANIMATIONS
+ #define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLED_NUM 27
+ #define RGBLIGHT_LIMIT_VAL 120
+ #define RGBLIGHT_HUE_STEP 10
+ #define RGBLIGHT_SAT_STEP 17
+ #define RGBLIGHT_VAL_STEP 17
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+//# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+# define RGB_MATRIX_HUE_STEP 8
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 8
+# define RGB_MATRIX_SPD_STEP 10
+
+/* Disable the animations you don&#39;t want/need. You will need to disable a good number of these *
+ * because they take up a lot of space. Disable until you can successfully compile your firmware. */
+# define DISABLE_RGB_MATRIX_ALPHAS_MODS
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// # define DISABLE_RGB_MATRIX_BREATHING
+# define DISABLE_RGB_MATRIX_CYCLE_ALL
+# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define DISABLE_RGB_MATRIX_DUAL_BEACON
+# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define DISABLE_RGB_MATRIX_RAINDROPS
+# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif
+#define OLED_FONT_H "keyboards/crkbd/keymaps/kidbrazil/glcdfont.c"
+#define OLED_DISABLE_TIMEOUT
diff --git a/keyboards/crkbd/keymaps/kidbrazil/glcdfont.c b/keyboards/crkbd/keymaps/kidbrazil/glcdfont.c
new file mode 100644
index 0000000000..a67c329242
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/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, 0x00,
+ 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8,
+ 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00,
+ 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0x02, 0xF9, 0x01, 0x01, 0x05, 0x09,
+ 0x11, 0x22, 0x06, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0x46, 0x46,
+ 0x44, 0x44, 0x45, 0x44, 0x29, 0x28,
+ 0x2A, 0x28, 0x11, 0x13, 0x05, 0x07,
+ 0x05, 0x07, 0x05, 0x07, 0x05, 0x07,
+ 0xE5, 0xE7, 0xE5, 0x07, 0x05, 0x07,
+ 0x05, 0x07, 0x05, 0x07, 0x05, 0x07,
+ 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7,
+ 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07,
+ 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7,
+ 0xE5, 0xE7, 0xE5, 0xC7, 0x85, 0x07,
+ 0x85, 0xC7, 0xE5, 0xE7, 0xE5, 0xE7,
+ 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x07,
+ 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0xE7,
+ 0xE5, 0xE7, 0xE5, 0xE7, 0xE5, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFF, 0x00, 0x00, 0x80, 0x00,
+ 0x1C, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x08, 0x08, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xBE,
+ 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xBD,
+ 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x8F, 0x9F, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0xFC, 0xF8, 0x00,
+ 0xFF, 0xFF, 0xFF, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x80, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F,
+ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00,
+ 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x20, 0x47, 0x48, 0x50, 0x40, 0x41,
+ 0x42, 0x24, 0x30, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x31, 0x31,
+ 0x11, 0x51, 0x11, 0x11, 0x4A, 0x0A,
+ 0x2A, 0x0A, 0x44, 0x64, 0x50, 0x70,
+ 0x50, 0x70, 0x50, 0x70, 0x50, 0x70,
+ 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x53, 0x73, 0x53, 0x70,
+ 0x50, 0x71, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x53, 0x71, 0x50, 0x70,
+ 0x50, 0x71, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x53, 0x71, 0x50, 0x70,
+ 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x53, 0x73, 0x51, 0x70,
+ 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+ 0x53, 0x73, 0x53, 0x73, 0x53, 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, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#endif // FONT5X7_H
diff --git a/keyboards/crkbd/keymaps/kidbrazil/keymap.c b/keyboards/crkbd/keymaps/kidbrazil/keymap.c
new file mode 100644
index 0000000000..44142d4f2f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/keymap.c
@@ -0,0 +1,248 @@
+#include QMK_KEYBOARD_H
+
+// [Init Variables] ----------------------------------------------------------//
+extern uint8_t is_master;
+// Oled timer similar to Drashna's
+static uint32_t oled_timer = 0;
+// Boolean to store LED state
+bool user_led_enabled = true;
+// Boolean to store the master LED clear so it only runs once.
+bool master_oled_cleared = false;
+
+// [CRKBD layers Init] -------------------------------------------------------//
+enum crkbd_layers {
+ _QWERTY,
+ _NUM,
+ _SYM,
+ _GAME,
+ _WEAPON
+};
+
+// [Keymaps] -----------------------------------------------------------------//
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_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_BSPC,
+ LSFT_T(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_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ LGUI_T(KC_PGUP), MO(_NUM), KC_SPC, KC_ENT, MO(_SYM), LALT_T(KC_PGDN)
+ ),
+
+ [_NUM] = 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,
+ LSFT_T(KC_TAB), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F12, KC_NO,
+ KC_LCTL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PGUP, KC_PGDN, KC_HOME, KC_END, KC_F11, KC_NO,
+ LGUI_T(KC_PGUP), KC_TRNS, KC_SPC, KC_ENT, KC_TRNS, LALT_T(KC_PGDN)
+ ),
+
+ [_SYM] = LAYOUT(
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ LSFT_T(KC_TAB), RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+ KC_LCTL, RGB_VAD, RGB_RMOD, RGB_HUD, RGB_SAD, TG(_GAME), KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+ LGUI_T(KC_PGUP), KC_TRNS, KC_SPC, KC_ENT, KC_TRNS, LALT_T(KC_PGDN)
+ ),
+
+ [_GAME] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO, KC_NO,
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_TRNS, KC_PGUP, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TAB, MO(_WEAPON), KC_SPC, KC_ENT, KC_TRNS, KC_NO
+ ),
+
+ [_WEAPON] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_7, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TAB, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+// [Post Init] --------------------------------------------------------------//
+void keyboard_post_init_user(void) {
+ // Set RGB to known state
+ rgb_matrix_enable_noeeprom();
+ rgb_matrix_set_color_all(RGB_GREEN);
+ user_led_enabled = true;
+
+}
+// [Process User Input] ------------------------------------------------------//
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_TOG:
+ if (record->event.pressed) {
+ // Toggle matrix on key press
+ user_led_enabled ? rgb_matrix_disable_noeeprom() : rgb_matrix_enable_noeeprom();
+ } else {
+ // Flip User_led_enabled variable on key release
+ user_led_enabled = !user_led_enabled;
+ }
+ return false; // Skip all further processing of this key
+ default:
+ // Use process_record_keymap to reset timer on all other keypresses
+ if (record->event.pressed) {
+ #ifdef OLED_DRIVER_ENABLE
+ oled_timer = timer_read32();
+ #endif
+ // Restore LEDs if they are enabled by user
+ if (user_led_enabled) {
+ rgb_matrix_enable_noeeprom();
+ }
+ }
+ return true;
+ }
+}
+
+// [OLED Configuration] ------------------------------------------------------//
+#ifdef OLED_DRIVER_ENABLE
+
+// Init Oled and Rotate....
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (!has_usb())
+ return OLED_ROTATION_180; // flips the display 180 to see it from my side
+ return rotation;
+}
+
+// Read logo from font file
+const char *read_logo(void);
+
+// {OLED helpers} -----------------------------------------------//
+
+// Render Blank Space
+void render_space(void) {
+ oled_write_ln_P(PSTR(" "), false);
+}
+
+// Render separator lines for oled display
+void render_separator(void) {
+ switch (get_highest_layer(layer_state)){
+ case _GAME:
+ case _WEAPON:
+ oled_write_ln_P(PSTR("===================="), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("++++++++++++++++++++"), false);
+ }
+}
+
+// Render current layer state
+void render_layer_state(void){
+ // If you want to change the display of OLED, you need to change here
+ switch (get_highest_layer(layer_state)){
+ case _QWERTY:
+ oled_write_ln_P(PSTR("| MODE | QWRTY ]"), false);
+ break;
+ case _NUM:
+ oled_write_ln_P(PSTR("| MODE | NUMBERS ]"), false);
+ break;
+ case _SYM:
+ oled_write_ln_P(PSTR("| MODE | SYMBOLS ]"), false);
+ break;
+ case _GAME:
+ oled_write_ln_P(PSTR("| G A M E ]"), false);
+ break;
+ case _WEAPON:
+ oled_write_ln_P(PSTR("| W E A P O N ]"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("| MODE | UNDEF ]"), false);
+ }
+}
+
+// Render USB State
+void render_usb_state(void) {
+ switch (USB_DeviceState) {
+ case DEVICE_STATE_Unattached:
+ oled_write_ln_P(PSTR("| USB | FREE ]"), false);
+ break;
+ case DEVICE_STATE_Suspended:
+ oled_write_ln_P(PSTR("| USB | SLEEP ]"), false);
+ break;
+ case DEVICE_STATE_Configured:
+ oled_write_ln_P(PSTR("| USB | READY ]"), false);
+ break;
+ case DEVICE_STATE_Powered:
+ oled_write_ln_P(PSTR("| USB | PWRD ]"), false);
+ break;
+ case DEVICE_STATE_Default:
+ oled_write_ln_P(PSTR("| USB | DFLT ]"), false);
+ break;
+ case DEVICE_STATE_Addressed:
+ oled_write_ln_P(PSTR("| USB | ADDRS ]"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("| USB | INVALID ]"), false);
+ }
+}
+
+// Render Logo
+void render_logo(void) {
+ oled_write(read_logo(), false);
+}
+
+// Master OLED Screen (Left Hand )
+void render_master_oled(void) {
+ // Switch display based on Layer
+ switch (get_highest_layer(layer_state)){
+ case _GAME:
+ render_separator();
+ render_layer_state();
+ render_separator();
+ render_separator();
+ break;
+ case _WEAPON:
+ render_separator();
+ render_separator();
+ render_layer_state();
+ render_separator();
+ break;
+ default:
+ render_separator();
+ render_layer_state();
+ render_separator();
+ render_usb_state();
+ }
+}
+
+// Slave OLED scren (Right Hand)
+void render_slave_oled(void) {
+ render_logo();
+}
+
+// {OLED Task} -----------------------------------------------//
+void oled_task_user(void) {
+ if (timer_elapsed32(oled_timer) > 80000 && timer_elapsed32(oled_timer) < 479999) {
+ // Render logo on both halves before full timeout
+ if (is_master && !master_oled_cleared) {
+ // Clear master OLED once so the logo renders properly
+ oled_clear();
+ master_oled_cleared = true;
+ }
+ render_logo();
+ return;
+ }
+ // Drashna style timeout for LED and OLED Roughly 8mins
+ else if (timer_elapsed32(oled_timer) > 480000) {
+ oled_off();
+ rgb_matrix_disable_noeeprom();
+ return;
+ }
+ else {
+ oled_on();
+ // Reset OLED Clear flag
+ master_oled_cleared = false;
+ // Show logo when USB dormant
+ switch (USB_DeviceState) {
+ case DEVICE_STATE_Unattached:
+ case DEVICE_STATE_Powered:
+ case DEVICE_STATE_Suspended:
+ render_logo();
+ break;
+ default:
+ if (is_master) {
+ render_master_oled();
+ } else {
+ render_slave_oled();
+ }
+ }
+ }
+}
+#endif
diff --git a/keyboards/crkbd/keymaps/kidbrazil/kidbrazil.json b/keyboards/crkbd/keymaps/kidbrazil/kidbrazil.json
new file mode 100644
index 0000000000..dd9895cce9
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/kidbrazil.json
@@ -0,0 +1 @@
+{"keyboard":"crkbd/rev1","keymap":"kidbrazil","layout":"LAYOUT","layers":[["KC_ESC","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_BSPC","LCTL_T(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_RSFT","LGUI_T(KC_PGUP)","MO(1)","KC_SPC","KC_ENT","MO(2)","LALT_T(KC_PGDN)"],["KC_ESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_DEL","LCTL_T(KC_TAB)","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_LEFT","KC_UP","KC_DOWN","KC_RGHT","KC_F12","KC_NO","KC_LSFT","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_PGUP","KC_PGDN","KC_HOME","KC_END","KC_F11","KC_NO","LGUI_T(KC_PGUP)","KC_TRNS","KC_SPC","KC_ENT","KC_TRNS","LALT_T(KC_PGDN)"],["KC_ESC","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_BSPC","LCTL_T(KC_TAB)","RGB_TOG","RGB_MOD","RGB_HUI","RGB_SAI","RGB_VAI","KC_MINS","KC_EQL","KC_LCBR","KC_RCBR","KC_PIPE","KC_GRV","KC_LSFT","RGB_VAD","RGB_RMOD","RGB_HUD","RGB_SAD","TG(3)","KC_UNDS","KC_PLUS","KC_LBRC","KC_RBRC","KC_BSLS","KC_TILD","LGUI_T(KC_PGUP)","KC_TRNS","KC_SPC","KC_ENT","KC_TRNS","LALT_T(KC_PGDN)"],["KC_ESC","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_LSFT","KC_A","KC_S","KC_D","KC_F","KC_G","KC_F7","KC_F8","KC_F9","KC_F10","KC_NO","KC_NO","KC_LCTL","KC_Z","KC_X","KC_C","KC_V","KC_TRNS","KC_PGUP","KC_PGDN","KC_NO","KC_NO","KC_NO","KC_NO","KC_TAB","MO(4)","KC_SPC","KC_ENT","KC_TRNS","KC_NO"],["KC_ESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LSFT","KC_A","KC_S","KC_D","KC_F","KC_6","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LCTL","KC_Z","KC_X","KC_C","KC_V","KC_7","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TAB","KC_TRNS","KC_SPC","KC_TRNS","KC_TRNS","KC_TRNS"]],"author":"","notes":""} \ No newline at end of file
diff --git a/keyboards/crkbd/keymaps/kidbrazil/logo_reader.c b/keyboards/crkbd/keymaps/kidbrazil/logo_reader.c
new file mode 100644
index 0000000000..1bc1503a60
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/logo_reader.c
@@ -0,0 +1,11 @@
+#include "crkbd.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/crkbd/keymaps/kidbrazil/rules.mk b/keyboards/crkbd/keymaps/kidbrazil/rules.mk
new file mode 100644
index 0000000000..ad03b86bfc
--- /dev/null
+++ b/keyboards/crkbd/keymaps/kidbrazil/rules.mk
@@ -0,0 +1,17 @@
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+MOUSEKEY_ENABLE = no
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = WS2812
+OLED_DRIVER_ENABLE = yes
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./keyboards/crkbd/keymaps/kidbrazil/logo_reader.c \
+ #./lib/rgb_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/crkbd/keymaps/manna-harbour_miryoku/config.h b/keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h
new file mode 100644
index 0000000000..e2fe1824da
--- /dev/null
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h
@@ -0,0 +1,18 @@
+// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
+
+#pragma once
+
+#define EE_HANDS
+
+#ifdef RGB_MATRIX_ENABLE
+#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+#define RGB_MATRIX_HUE_STEP 8
+#define RGB_MATRIX_SAT_STEP 8
+#define RGB_MATRIX_VAL_STEP 8
+#define RGB_MATRIX_SPD_STEP 10
+#endif
+
+#define SSD1306OLED // old oled driver
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
index 56d4de25ac..f5be6844f8 100644
--- a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
@@ -1,5 +1,4 @@
-
-// generated from users/manna-harbour_miryoku/miryoku.org
+// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
#define LAYOUT_miryoku( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
@@ -15,3 +14,41 @@ KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_
)
#include "manna-harbour_miryoku.c"
+
+
+#ifdef SSD1306OLED
+
+#include "ssd1306.h"
+
+void matrix_init_user(void) {
+ iota_gfx_init(!has_usb()); // turns on the display
+}
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_logo(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+ 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
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk b/keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk
new file mode 100644
index 0000000000..c4fb15f342
--- /dev/null
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk
@@ -0,0 +1,7 @@
+# generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
+
+RGB_MATRIX_ENABLE = WS2812
+
+# old oled driver
+SRC += ./lib/glcdfont.c \
+ ./lib/logo_reader.c
diff --git a/keyboards/crkbd/rev1/split_util.c b/keyboards/crkbd/rev1/split_util.c
index c0d44af294..35aa54d780 100644
--- a/keyboards/crkbd/rev1/split_util.c
+++ b/keyboards/crkbd/rev1/split_util.c
@@ -48,13 +48,13 @@ __attribute__((weak)) bool is_keyboard_left(void) {
#elif defined(EE_HANDS)
return eeconfig_read_handedness();
#elif defined(MASTER_RIGHT)
- return !is_keyboard_master();
+ return !has_usb();
#endif
- return is_keyboard_master();
+ return has_usb();
}
-__attribute__((weak)) bool is_keyboard_master(void) {
+__attribute__((weak)) bool has_usb(void) {
static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
// only check once, as this is called often
@@ -103,8 +103,3 @@ void split_keyboard_setup(void) {
}
sei();
}
-
-// backwards compat
-bool has_usb(void) {
- return is_keyboard_master();
-}
diff --git a/keyboards/db/db63/README.md b/keyboards/db/db63/README.md
new file mode 100644
index 0000000000..e886bed0a1
--- /dev/null
+++ b/keyboards/db/db63/README.md
@@ -0,0 +1,21 @@
+# DB63
+
+A 65% keyboard hotswap with RGB that runs ps2avrgb natively, with USB C, RGB underglow and backlight.
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: DB63 (ATmega32A)
+* [Keyboard layout](http://www.keyboard-layout-editor.com/#/gists/dadea703fc8bfc87dc7c480de9f3ef38)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make db/db63:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make db/db63:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Escape* while plugging in the keyboard. (*All backlight LEDs will flash which indicate the board is in bootloader mode.*)
+
+**Tips**: Another trick to enable the board in reset mode is using BootMapper Client->Options->Set Bootloader. (*This is only available for the first time, before flashing QMK Firmware.*)
+
+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/db/db63/config.h b/keyboards/db/db63/config.h
new file mode 100644
index 0000000000..468e0f8a97
--- /dev/null
+++ b/keyboards/db/db63/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Hung DO <hungdohuy@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 0xFAAD
+#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
+// You can edit those at usbconfig.h about line 250. These values will
+// unforunatly be ignored so far
+#define MANUFACTURER HNB
+#define PRODUCT DB63v1 Hotswap
+
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 14
+
+#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 }
+#define UNUSED_PINS
+
+#define RGBLED_NUM 18
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+
+#define BACKLIGHT_PIN D4
+#define BACKLIGHT_LEVELS 3
+
diff --git a/keyboards/db/db63/db63.c b/keyboards/db/db63/db63.c
new file mode 100644
index 0000000000..62ebb2cc69
--- /dev/null
+++ b/keyboards/db/db63/db63.c
@@ -0,0 +1,17 @@
+/* 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 "db63.h"
diff --git a/keyboards/db/db63/db63.h b/keyboards/db/db63/db63.h
new file mode 100644
index 0000000000..d9a4d1e6d2
--- /dev/null
+++ b/keyboards/db/db63/db63.h
@@ -0,0 +1,49 @@
+/*
+Copyright 2020 Hung DO <hungdohuy@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 _x_ KC_NO
+
+/* 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.
+ * MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5 }
+ * MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2 }
+ *
+ */
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ 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, \
+ k30 , k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
+ k40 , k41 , k42 , k43 , k44, k45, k46, k47 , k48 \
+) { \
+ { k00, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_ }, \
+ { _x_, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d }, \
+ { 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, k46 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3c, k3a, k47, _x_ }, \
+ { k40, k41, k42, k43, k45, _x_, _x_, k44, _x_, _x_, _x_, k3b, _x_, k48 } \
+}
+
diff --git a/keyboards/db/db63/info.json b/keyboards/db/db63/info.json
new file mode 100644
index 0000000000..b8ec10539e
--- /dev/null
+++ b/keyboards/db/db63/info.json
@@ -0,0 +1,18 @@
+{
+ "keyboard_name": "db63",
+ "url": "http://www.keyboard-layout-editor.com/#/gists/dadea703fc8bfc87dc7c480de9f3ef38",
+ "maintainer": "QMK Community",
+ "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 }, { "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": "Fn3", "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": "Shift", "x": 11.25, "y": 3, "w": 1.75 }, { "label": "Up", "x": 13, "y": 3 }, { "label": "Fn2", "x": 14, "y": 3 },
+ { "label": "Ctrl", "x": 0, "y": 4, "w": 1.25 }, { "label": "Alt", "x": 1.25, "y": 4, "w": 1.25 }, { "label": "Win", "x": 2.5, "y": 4, "w": 1.25 }, { "label": "Space", "x": 3.75, "y": 4, "w": 6.25 }, { "label": "?", "x": 10, "y": 4 }, { "label": "Fn1", "x": 11, "y": 4 }, { "label": "Left", "x": 12, "y": 4 }, { "label": "Down", "x": 13, "y": 4 }, { "label": "Right", "x": 14, "y": 4 }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/db/db63/keymaps/default/keymap.c b/keyboards/db/db63/keymaps/default/keymap.c
new file mode 100644
index 0000000000..800ff960b1
--- /dev/null
+++ b/keyboards/db/db63/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2020 Hung DO <hungdohuy@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_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,
+ MO(3), 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_RSFT, KC_UP, MO(2),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SLSH, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, XXXXXXX,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, _______, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [2] = LAYOUT(
+ KC_GESC, 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_M_T, RGB_TOG, RGB_VAD, RGB_VAI, 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,
+ XXXXXXX, 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_RSFT, KC_UP, MO(2),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, BL_TOGG, BL_DEC, BL_INC, _______,
+ 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,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, RESET,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, XXXXXXX,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+};
+
+bool led_update_user(led_t led_state) {
+ if (led_state.caps_lock) {
+ rgblight_sethsv(HSV_CYAN);
+ writePinHigh(D1);
+ } else {
+ rgblight_sethsv(HSV_GREEN);
+ writePinLow(D1);
+ }
+ return false;
+}
diff --git a/keyboards/db/db63/rules.mk b/keyboards/db/db63/rules.mk
new file mode 100644
index 0000000000..84eace5ed6
--- /dev/null
+++ b/keyboards/db/db63/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32a
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+WS2812_DRIVER = i2c
+
+OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/db/db63/usbconfig.h b/keyboards/db/db63/usbconfig.h
new file mode 100644
index 0000000000..0dfe8b3baf
--- /dev/null
+++ b/keyboards/db/db63/usbconfig.h
@@ -0,0 +1,383 @@
+/* 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 $
+ */
+
+#pragma once
+
+#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_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_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 (DEVICE_VER & 0xFF), ((DEVICE_VER >> 8) & 0xFF)
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'H', 'N', 'B'
+#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 'D', 'B', '6', '3', 'H', 'S'
+#define USB_CFG_DEVICE_NAME_LEN 6
+/* 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
diff --git a/keyboards/divergetm2/keymaps/default/keymap.c b/keyboards/divergetm2/keymaps/default/keymap.c
index f620cc2371..cc098a91a5 100644
--- a/keyboards/divergetm2/keymaps/default/keymap.c
+++ b/keyboards/divergetm2/keymaps/default/keymap.c
@@ -194,6 +194,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
}
diff --git a/keyboards/donutcables/budget96/readme.md b/keyboards/donutcables/budget96/readme.md
index c83040360a..11c49b9834 100644
--- a/keyboards/donutcables/budget96/readme.md
+++ b/keyboards/donutcables/budget96/readme.md
@@ -2,44 +2,18 @@
96 key atmega32a keyboard.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: Budget96 PCB
-Hardware Availability: [DonutCables](https://donutcables.com/)
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: Budget96 PCB
+* Hardware Availability: [DonutCables](https://donutcables.com/)
Make example for this keyboard (after setting up your build environment):
make donutcables/budget96:default
-Flashing
-
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as left control while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make donutcables/budget96:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *left control* while plugging in the keyboard.
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/doppelganger/config.h b/keyboards/doppelganger/config.h
new file mode 100644
index 0000000000..c19fa51790
--- /dev/null
+++ b/keyboards/doppelganger/config.h
@@ -0,0 +1,229 @@
+/*
+Copyright 2019 Yiancar-Designs
+
+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 0x8968
+#define PRODUCT_ID 0x4447
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Yiancar-Designs
+#define PRODUCT Doppelganger
+#define DESCRIPTION A custom split keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 9
+
+/*
+ * 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 SPLIT_HAND_PIN D4
+
+#define MATRIX_ROW_PINS { E6, F1, C7, F7, F6 }
+#define MATRIX_COL_PINS { F4, F0, B7, B3, B2, B1, D5, D3, D2 }
+#define UNUSED_PINS
+
+#define MATRIX_ROW_PINS_RIGHT { D7, D6, D4, E6, B5 }
+#define MATRIX_COL_PINS_RIGHT { F1, F0, F4, F5, F6, F7, C7, C6, B6 }
+
+/* COL2ROW, ROW2COL*/
+#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 USE_I2C
+#define SOFT_SERIAL_PIN D1 // 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 2
+#define RGBLIGHT_SPLIT
+#define RGBLED_SPLIT { 1, 1 }
+// #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 2
diff --git a/keyboards/doppelganger/doppelganger.c b/keyboards/doppelganger/doppelganger.c
new file mode 100644
index 0000000000..04d19480da
--- /dev/null
+++ b/keyboards/doppelganger/doppelganger.c
@@ -0,0 +1,39 @@
+/* Copyright 2019 Yiancar-Designs
+ *
+ * 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 "doppelganger.h"
+
+void keyboard_pre_init_kb (void) {
+ setPinOutput(C6);
+ setPinOutput(B0);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ // writePin sets the pin high for 1 and low for 0.
+ // In this example the pins are inverted, setting
+ // it low/0 turns it on, and high/1 turns the LED off.
+ // This behavior depends on whether the LED is between the pin
+ // and VCC or the pin and GND.
+ writePin(C6, !led_state.caps_lock);
+ }
+ return res;
+}
+
+__attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
+ writePin(B0, !(state & (1UL << 1)));
+ return state;
+}
diff --git a/keyboards/doppelganger/doppelganger.h b/keyboards/doppelganger/doppelganger.h
new file mode 100644
index 0000000000..c065c28c46
--- /dev/null
+++ b/keyboards/doppelganger/doppelganger.h
@@ -0,0 +1,46 @@
+/* Copyright 2019 Yiancar-Designs
+ *
+ * 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( \
+ L01, L02, L03, L04, L05, L06, L07, L08, R00, R01, R02, R03, R04, R05, R06, R07, \
+ L10, L11, L12, L13, L14, L15, L16, L17, R10, R11, R12, R13, R14, R15, R16, R17, R18, \
+ L20, L21, L22, L23, L24, L25, L26, L27, R20, R21, R22, R23, R24, R25, R26, R27, R28, \
+ L30, L31, L32, L33, L34, L35, L36, L37, L38, R31, R32, R33, R34, R35, R36, R37, R38, \
+ L40, L41, L42, L43, L44, L45, L46, R42, R43, R44, R45, R46, R47, R48 \
+) \
+{ \
+ { KC_NO, L01, L02, L03, L04, L05, L06, L07, L08 }, \
+ { L10, L11, L12, L13, L14, L15, L16, L17, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, L26, L27, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36, L37, L38 }, \
+ { L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO }, \
+ { R00, R01, R02, R03, R04, R05, R06, R07, KC_NO }, \
+ { R10, R11, R12, R13, R14, R15, R16, R17, R18 }, \
+ { R20, R21, R22, R23, R24, R25, R26, R27, R28 }, \
+ { KC_NO, R31, R32, R33, R34, R35, R36, R37, R38 }, \
+ { KC_NO, KC_NO, R42, R43, R44, R45, R46, R47, R48 }, \
+}
diff --git a/keyboards/doppelganger/info.json b/keyboards/doppelganger/info.json
new file mode 100644
index 0000000000..4de98961a4
--- /dev/null
+++ b/keyboards/doppelganger/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Doppelganger",
+ "url": "",
+ "maintainer": "yiancar",
+ "width": 20,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"F1", "x":1, "y":0}, {"label":"Esc", "x":2.5, "y":0}, {"label":"1", "x":3.5, "y":0}, {"label":"2", "x":4.5, "y":0}, {"label":"3", "x":5.5, "y":0}, {"label":"4", "x":6.5, "y":0}, {"label":"5", "x":7.5, "y":0}, {"label":"6", "x":8.5, "y":0}, {"label":"7", "x":10.5, "y":0}, {"label":"8", "x":11.5, "y":0}, {"label":"9", "x":12.5, "y":0}, {"label":"0", "x":13.5, "y":0}, {"label":"_", "x":14.5, "y":0}, {"label":"+", "x":15.5, "y":0}, {"x":16.5, "y":0}, {"x":17.5, "y":0}, {"label":"F2", "x":0, "y":1}, {"label":"F3", "x":1, "y":1}, {"label":"Tab", "x":2.5, "y":1, "w":1.5}, {"label":"Q", "x":4, "y":1}, {"label":"W", "x":5, "y":1}, {"label":"E", "x":6, "y":1}, {"label":"R", "x":7, "y":1}, {"label":"T", "x":8, "y":1}, {"label":"Y", "x":10, "y":1}, {"label":"U", "x":11, "y":1}, {"label":"I", "x":12, "y":1}, {"label":"O", "x":13, "y":1}, {"label":"P", "x":14, "y":1}, {"label":"{", "x":15, "y":1}, {"label":"}", "x":16, "y":1}, {"label":"|", "x":17, "y":1, "w":1.5}, {"label":"Pg Up", "x":19, "y":1}, {"label":"F4", "x":0, "y":2}, {"label":"F5", "x":1, "y":2}, {"label":"Caps Lock", "x":2.5, "y":2, "w":1.75}, {"label":"A", "x":4.25, "y":2}, {"label":"S", "x":5.25, "y":2}, {"label":"D", "x":6.25, "y":2}, {"label":"F", "x":7.25, "y":2}, {"label":"G", "x":8.25, "y":2}, {"label":"H", "x":10.25, "y":2}, {"label":"J", "x":11.25, "y":2}, {"label":"K", "x":12.25, "y":2}, {"label":"L", "x":13.25, "y":2}, {"label":":", "x":14.25, "y":2}, {"label":"\"", "x":15.25, "y":2}, {"label":"~", "x":16.25, "y":2}, {"label":"Enter", "x":17.25, "y":2, "w":1.25}, {"label":"Pg Dn", "x":19, "y":2}, {"label":"F6", "x":0, "y":3}, {"label":"F7", "x":1, "y":3}, {"label":"Shift", "x":2.5, "y":3, "w":1.25}, {"label":"|", "x":3.75, "y":3}, {"label":"Z", "x":4.75, "y":3}, {"label":"X", "x":5.75, "y":3}, {"label":"C", "x":6.75, "y":3}, {"label":"V", "x":7.75, "y":3}, {"label":"B", "x":8.75, "y":3}, {"label":"N", "x":10.75, "y":3}, {"label":"M", "x":11.75, "y":3}, {"label":"<", "x":12.75, "y":3}, {"label":">", "x":13.75, "y":3}, {"label":"?", "x":14.75, "y":3}, {"label":"Shift", "x":15.75, "y":3, "w":1.75}, {"label":"Up", "x":17.75, "y":3.25}, {"label":"Fn", "x":19, "y":3}, {"label":"F8", "x":0, "y":4}, {"label":"F9", "x":1, "y":4}, {"label":"Ctrl", "x":2.5, "y":4, "w":1.25}, {"label":"Win", "x":3.75, "y":4}, {"label":"Alt", "x":4.75, "y":4, "w":1.25}, {"x":6, "y":4, "w":2.25}, {"x":8.25, "y":4}, {"x":10.25, "y":4, "w":2.75}, {"label":"Alt", "x":13, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"label":"Win", "x":15.25, "y":4, "w":1.25}, {"label":"Left", "x":16.75, "y":4.25}, {"label":"Down", "x":17.75, "y":4.25}, {"label":"Right", "x":18.75, "y":4.25}]
+ }
+ }
+}
diff --git a/keyboards/doppelganger/keymaps/default/keymap.c b/keyboards/doppelganger/keymaps/default/keymap.c
new file mode 100644
index 0000000000..dedbd23940
--- /dev/null
+++ b/keyboards/doppelganger/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2019 Yiancar-Designs
+ *
+ * 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_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_F2, KC_F3, 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_F4, KC_F5, 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_F6, KC_F7, 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_F8, KC_F9, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT( /* FN1 */
+ RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, 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_MOD, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, 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_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, 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_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
+ ),
+};
diff --git a/keyboards/doppelganger/keymaps/default/readme.md b/keyboards/doppelganger/keymaps/default/readme.md
new file mode 100644
index 0000000000..9e9824f4d4
--- /dev/null
+++ b/keyboards/doppelganger/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for doppelganger
diff --git a/keyboards/doppelganger/readme.md b/keyboards/doppelganger/readme.md
new file mode 100644
index 0000000000..52a12942c2
--- /dev/null
+++ b/keyboards/doppelganger/readme.md
@@ -0,0 +1,15 @@
+# Doppelganger
+
+![doppelganger](https://i.imgur.com/5eALJBf.png)
+
+A Split keyboard co-designed with Cable Car designs
+
+* Keyboard Maintainer: [Yiancar-Designs](https://github.com/yiancar)
+* Hardware Supported: The specific set of pcbs which use 2 ATMEGA-32u4
+* Hardware Availability: Contact Noahf#2971 on discord!
+
+Make example for this keyboard (after setting up your build environment):
+
+ make doppelganger: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/doppelganger/rules.mk b/keyboards/doppelganger/rules.mk
new file mode 100644
index 0000000000..9e1bd63ab0
--- /dev/null
+++ b/keyboards/doppelganger/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/dozen0/config.h b/keyboards/dozen0/config.h
index 9ea2c1795f..af6972e27b 100644
--- a/keyboards/dozen0/config.h
+++ b/keyboards/dozen0/config.h
@@ -52,14 +52,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #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
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 2
+#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 DEBOUNCE 5
diff --git a/keyboards/dozen0/keymaps/default/keymap.c b/keyboards/dozen0/keymaps/default/keymap.c
index da0aae0b02..fdc344f660 100644
--- a/keyboards/dozen0/keymaps/default/keymap.c
+++ b/keyboards/dozen0/keymaps/default/keymap.c
@@ -15,20 +15,110 @@
*/
#include QMK_KEYBOARD_H
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+enum layer_number {
+ _BASE = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ BASE = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_UP, KC_DEL, KC_BSPC, \
- KC_LCTRL, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT \
+ /* Base
+ * ,-----------------------------------------.
+ * | Cut | Copy |Paste | Up |Delete| Bksp |
+ * | | | | | |Raise |
+ * |------+------+------+------+------+------|
+ * | Ctrl |Shift | Left | Down |Right |Enter |
+ * | | | | | |Lower |
+ * `-----------------------------------------'
+ */
+ [_BASE] = LAYOUT(
+ LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_UP, KC_DEL, LT(_RAISE,KC_BSPC),
+ KC_LCTL, KC_LSFT, KC_LEFT, KC_DOWN, KC_RGHT, LT(_LOWER,KC_ENT)
+ ),
+
+ /* Lower
+ * ,-----------------------------------------.
+ * | | | | Page | | |
+ * | | | | Up | | |
+ * |------+------+------+------+------+------|
+ * | | | Home | Page | End | |
+ * | | | | Down | | |
+ * `-----------------------------------------'
+ */
+ [_LOWER] = LAYOUT(
+ _______, _______, _______, KC_PGUP, _______, _______,
+ _______, _______, KC_HOME, KC_PGDN, KC_END, _______
+ ),
+
+ /* Raise
+ * ,-----------------------------------------.
+ * | | | | | | |
+ * | | | | | | |
+ * |------+------+------+------+------+------|
+ * | | | | | | |
+ * | | | | | | |
+ * `-----------------------------------------'
+ */
+ [_RAISE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
),
+
+ /* Adjust
+ * ,-----------------------------------------.
+ * | RGB | RGB | RGB | RGB | RGB | |
+ * |Toggle|Mode+ | Hue+ | Sat+ | Val+ | |
+ * |------+------+------+------+------+------|
+ * | RGB | RGB | RGB | RGB | RGB | |
+ * |Reset |Mode- | Hue- | Sat- | Val- | |
+ * `-----------------------------------------'
+ */
+ [_ADJUST] = LAYOUT(
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______,
+ RGBRST, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, _______
+ )
};
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
+int RGB_current_mode;
+
void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ 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;
}
void matrix_scan_user(void) {
diff --git a/keyboards/dozen0/keymaps/default/readme.md b/keyboards/dozen0/keymaps/default/readme.md
index bf63c1f1ae..832c720751 100644
--- a/keyboards/dozen0/keymaps/default/readme.md
+++ b/keyboards/dozen0/keymaps/default/readme.md
@@ -1,8 +1,45 @@
# The default keymap for Dozen0
+## Base
```
- ,-------------------------------------------------.
-| Ctrl+X | Ctrl+C | Ctrl+V | Up | Delete | Bksp |
-| Ctrl | Shift | Left | Down | Right | Enter |
-`--------------------------------------------------'
+,-----------------------------------------.
+| Cut | Copy |Paste | Up |Delete| Bksp |
+| | | | | |Raise |
+|------+------+------+------+------+------|
+| Ctrl |Shift | Left | Down |Right |Enter |
+| | | | | |Lower |
+`-----------------------------------------'
+```
+
+## Lower
+```
+,-----------------------------------------.
+| | | | Page | | |
+| | | | Up | | |
+|------+------+------+------+------+------|
+| | | Home | Page | End | |
+| | | | Down | | |
+`-----------------------------------------'
+```
+
+## Raise
+```
+,-----------------------------------------.
+| | | | | | |
+| | | | | | |
+|------+------+------+------+------+------|
+| | | | | | |
+| | | | | | |
+`-----------------------------------------'
+```
+
+## Adjust
+```
+,-----------------------------------------.
+| RGB | RGB | RGB | RGB | RGB | |
+|Toggle|Mode+ | Hue+ | Sat+ | Val+ | |
+|------+------+------+------+------+------|
+| RGB | RGB | RGB | RGB | RGB | |
+|Reset |Mode- | Hue- | Sat- | Val- | |
+`-----------------------------------------'
```
diff --git a/keyboards/dozen0/keymaps/f12/keymap.c b/keyboards/dozen0/keymaps/f12/keymap.c
index bc8cd4123d..167e29e106 100644
--- a/keyboards/dozen0/keymaps/f12/keymap.c
+++ b/keyboards/dozen0/keymaps/f12/keymap.c
@@ -18,8 +18,8 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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_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/dozen0/rules.mk b/keyboards/dozen0/rules.mk
index 7218e1e1bf..ffeffc7fe0 100644
--- a/keyboards/dozen0/rules.mk
+++ b/keyboards/dozen0/rules.mk
@@ -9,25 +9,25 @@ MCU = atmega32u4
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
-BOOTLOADER = atmel-dfu
+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 = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+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
# 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)
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
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)
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
diff --git a/keyboards/dp60/config.h b/keyboards/dp60/config.h
index 7303631115..29d5e3c2a4 100644
--- a/keyboards/dp60/config.h
+++ b/keyboards/dp60/config.h
@@ -13,7 +13,6 @@
#define MANUFACTURER astro
#define PRODUCT Dumplings
#define DESCRIPTION 60% rgb keyboard with ble extension
-#define LANDING_PAGE yulei.github.io/qmk_webusb_tool/60_wkl.json
/* key matrix size */
#define MATRIX_ROWS 5
@@ -35,13 +34,6 @@
/* 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
-
//rgb light setting
#define RGBLED_NUM 18
#define RGB_DI_PIN D7
@@ -56,33 +48,8 @@
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 36
#define DRIVER_2_LED_TOTAL 36
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL
-
-// tapping setting
-//#define TAPPING_TERM 200
-//#define RETRO_TAPPING
-//#define PERMISSIVE_HOLD
-
-#if defined(WEBUSB_ENABLE) || defined(RAW_ENABLE)
-#define WEBUSB_KEYCOUNT 61
-#define WEBUSB_LAYERCOUNT 2
-//VIA
-#define DYNAMIC_KEYMAP_LAYER_COUNT 2
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (35+(4*10*6*2)) = (35+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 637
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 391 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+#if defined(VIA_ENABLE)
+# define DYNAMIC_KEYMAP_LAYER_COUNT 2
#endif
diff --git a/keyboards/dp60/dp60.c b/keyboards/dp60/dp60.c
index b4a07bf1cd..3e47802463 100644
--- a/keyboards/dp60/dp60.c
+++ b/keyboards/dp60/dp60.c
@@ -159,4 +159,28 @@ webusb_pos_t webusb_keymap[] = {
{4, 0}, {4, 1}, {4, 2}, {4, 6}, {4, 10}, {4, 11}, {4, 12}, {4, 13},
};
-#endif \ No newline at end of file
+#endif
+
+#ifndef RAW_ENABLE
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+#else
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+#endif
+ if (record->event.pressed) {
+ switch(keycode) {
+ #ifdef RGBLIGHT_ENABLE
+ #ifdef RGB_MATRIX_ENABLE
+ case KC_F13: // toggle rgb matrix
+ rgb_matrix_toggle();
+ return false;
+ case KC_F14:
+ rgb_matrix_step();
+ return false;
+ #endif
+ #endif
+ default:
+ break;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/dp60/keymaps/allleds/keymap.c b/keyboards/dp60/keymaps/allleds/keymap.c
new file mode 100644
index 0000000000..f3862c38fb
--- /dev/null
+++ b/keyboards/dp60/keymaps/allleds/keymap.c
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ 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_DEL, 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, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL),
+
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
+ _______, 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,
+ RESET, RGB_TOG,RGB_MOD,_______,KC_F13,KC_F14,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______,TG(0),_______),
+};
diff --git a/keyboards/dp60/keymaps/allleds/rules.mk b/keyboards/dp60/keymaps/allleds/rules.mk
new file mode 100644
index 0000000000..746d0bcb64
--- /dev/null
+++ b/keyboards/dp60/keymaps/allleds/rules.mk
@@ -0,0 +1,38 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+MIDI_ENABLE = no # MIDI support
+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
+RGBLIGHT_ENABLE = yes # Use RGB underglow light
+RGB_MATRIX_ENABLE = yes # Use RGB matrix
+
+LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
+
+CUSTOM_MATRIX = yes
+SRC += matrix.c
diff --git a/keyboards/dp60/keymaps/default/keymap.c b/keyboards/dp60/keymaps/default/keymap.c
index 2e2694326c..f3862c38fb 100644
--- a/keyboards/dp60/keymaps/default/keymap.c
+++ b/keyboards/dp60/keymaps/default/keymap.c
@@ -2,16 +2,16 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_split_bs_rshift(
- 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_DEL, 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_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_DEL, 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, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL),
-
+
[1] = LAYOUT_60_ansi_split_bs_rshift(
_______, 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,
- RESET, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
+ RESET, RGB_TOG,RGB_MOD,_______,KC_F13,KC_F14,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
_______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______, _______, _______,_______,TG(0),_______),
-}; \ No newline at end of file
+};
diff --git a/keyboards/dp60/keymaps/via/readme.md b/keyboards/dp60/keymaps/via/readme.md
deleted file mode 100644
index 88851fb13c..0000000000
--- a/keyboards/dp60/keymaps/via/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-At this point, September 2019, this requires a custom version of VIA in order for VIA enabled keymaps to work. \ No newline at end of file
diff --git a/keyboards/dp60/keymaps/via/rules.mk b/keyboards/dp60/keymaps/via/rules.mk
index 27d6223bae..036bd6d1c3 100644
--- a/keyboards/dp60/keymaps/via/rules.mk
+++ b/keyboards/dp60/keymaps/via/rules.mk
@@ -1,47 +1 @@
-# MCU name
-MCU = atmega32u4
-
-# 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 = atmel-dfu
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-#OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# 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
-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
-#RGBLIGHT_ENABLE = yes # Use RGB bottom light
-RGB_MATRIX_ENABLE = yes # Use RGB matrix
-
-RAW_ENABLE = yes
-#WEBUSB_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
-CUSTOM_MATRIX = yes
-SRC += matrix.c keyboards/wilba_tech/wt_main.c
-#keyboards/stm60/webusb.c
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/dp60/rules.mk b/keyboards/dp60/rules.mk
index 0f998746fb..015e4fddb9 100644
--- a/keyboards/dp60/rules.mk
+++ b/keyboards/dp60/rules.mk
@@ -11,33 +11,28 @@ MCU = atmega32u4
# ATmega328P USBasp
BOOTLOADER = atmel-dfu
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-#OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = lite # 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)
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+MIDI_ENABLE = no # MIDI support
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
-#RGBLIGHT_ENABLE = yes # Use RGB bottom light
+#RGBLIGHT_ENABLE = yes # Use RGB underglow light
RGB_MATRIX_ENABLE = yes # Use RGB matrix
LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
CUSTOM_MATRIX = yes
-SRC += matrix.c
+SRC += matrix.c
diff --git a/keyboards/duck/orion/v3/config.h b/keyboards/duck/orion/v3/config.h
index 3a17d59416..b04729712e 100644
--- a/keyboards/duck/orion/v3/config.h
+++ b/keyboards/duck/orion/v3/config.h
@@ -37,11 +37,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5
/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
+// #define BACKLIGHT_LEVELS 3
+
+#undef BACKLIGHT_PIN
+#define BACKLIGHT_PINS { B1, B2, B3, E6 }
+#define BACKLIGHT_LED_COUNT 4
+#define BACKLIGHT_LEVELS 10
+#define BACKLIGHT_ON_STATE 1
#define RGBLIGHT_ANIMATIONS
#define RGB_DI_PIN D6
-#define RGBLED_NUM 17
+#define RGBLED_NUM 18
/* Set to top left most key */
#define BOOTMAGIC_LITE_ROW 4
diff --git a/keyboards/duck/orion/v3/keymaps/default/keymap.c b/keyboards/duck/orion/v3/keymaps/default/keymap.c
index 83fa4f9a8e..0da0cdaeb3 100644
--- a/keyboards/duck/orion/v3/keymaps/default/keymap.c
+++ b/keyboards/duck/orion/v3/keymaps/default/keymap.c
@@ -16,11 +16,19 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_tkl_ansi(\
- 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,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT) \
+[0] = LAYOUT_tkl_ansi(
+ 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,KC_RGUI, MO(1),KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+[1] = LAYOUT_tkl_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, BL_INC, BL_DEC, 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,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/duck/orion/v3/matrix.c b/keyboards/duck/orion/v3/matrix.c
index 3c3240b9f4..84673bd44f 100644
--- a/keyboards/duck/orion/v3/matrix.c
+++ b/keyboards/duck/orion/v3/matrix.c
@@ -14,13 +14,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 <util/delay.h>
-#include <avr/io.h>
-#include <stdio.h>
-#include "matrix.h"
-#include "util.h"
-#include "print.h"
-#include "debug.h"
+#include "quantum.h"
static uint8_t debouncing = DEBOUNCE;
@@ -52,20 +46,20 @@ __attribute__ ((weak))
void matrix_scan_user(void) {
}
-void backlight_init_ports(void)
-{
- DDRD |= 0b11010000;
- PORTD &= ~0b01010000;
- PORTD |= 0b10000000;
- DDRB |= 0b00011111;
- PORTB &= ~0b00001110;
- PORTB |= 0b00010001;
- DDRE |= 0b01000000;
- PORTE &= ~0b01000000;
+void indicator_init_ports(void) {
+
+ // Num LED
+ setPinOutput(B4);
+
+ // Caps Lock
+ setPinOutput(B0);
+
+ // Scroll Lock
+ setPinOutput(D7);
}
void matrix_init(void) {
- backlight_init_ports();
+ indicator_init_ports();
unselect_cols();
init_rows();
diff --git a/keyboards/duck/orion/v3/readme.md b/keyboards/duck/orion/v3/readme.md
index 50032e93ee..8d1b83401e 100644
--- a/keyboards/duck/orion/v3/readme.md
+++ b/keyboards/duck/orion/v3/readme.md
@@ -3,9 +3,9 @@
Non official firmware for custom TKL Korean keyboard made by Duck.
Group buy was run December 2018 via [geekhack](https://geekhack.org/index.php?topic=98581.0) with 100 keyboards total.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: Duck Eagle/Viper PCB Ver 2.0, Atmega32u4
-Hardware Availability: Wait until GB of the next revision
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: Duck Orion V3 PCB Ver 2.1
+* Hardware Availability: Wait until GB of the next revision
Make example for this keyboard (after setting up your build environment):
@@ -13,7 +13,7 @@ Make example for this keyboard (after setting up your build environment):
**Reset Key:** To put the Orion V3 into reset, hold Backspace key (`K4N`) while plugging in.
-**CAUTION:** At this time 10/03/19 lighting has not been tested fully and may not properly work.
+**CAUTION:** At this time 12/19/19 layer indicator lighting has not been implemented by 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).
@@ -22,9 +22,9 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
The Orion V3 PCB consists of:
### Microchips
-2 74HC237D 3-to-8 line decoders
+2 74HC237D 3-to-8 line decoders U1, U2
1 Atmega32u4 microcontroller
-2 WS2811 LED controller
+2 WS2811 LED controller U5, U6
## Notes
-Special thanks to Marcus aka Keebology for doing this remotely and mapping the matrix. \ No newline at end of file
+Special thanks to Marcus aka Keebology for doing this remotely and mapping the matrix, indicator LEDs, and backlight LEDs.
diff --git a/keyboards/duck/orion/v3/v3.c b/keyboards/duck/orion/v3/v3.c
index 95da4b45b6..ca5c512cee 100644
--- a/keyboards/duck/orion/v3/v3.c
+++ b/keyboards/duck/orion/v3/v3.c
@@ -16,48 +16,26 @@
#include "v3.h"
#include "indicator_leds.h"
-enum BACKLIGHT_AREAS {
- BACKLIGHT_ALPHAS = 0b00000010,
- BACKLIGHT_MODNUM = 0b00001000
-};
+// Alphas PB1
+// Navigation Cluster: PB2
+// Number Row, Mods: PB3
+// Function Row: PE6
-void backlight_set(uint8_t level) {
- switch(level) {
- case 0:
- PORTB |= BACKLIGHT_ALPHAS;
- PORTB |= BACKLIGHT_MODNUM;
- break;
- case 1:
- PORTB &= ~BACKLIGHT_ALPHAS;
- PORTB |= BACKLIGHT_MODNUM;
- break;
- case 2:
- PORTB |= BACKLIGHT_ALPHAS;
- PORTB &= ~BACKLIGHT_MODNUM;
- break;
- case 3:
- PORTB &= ~BACKLIGHT_ALPHAS;
- PORTB &= ~BACKLIGHT_MODNUM;
- break;
- }
-}
-
-// Port from backlight_update_state
-void led_set_kb(uint8_t usb_led) {
- bool status[8] = {
- IS_HOST_LED_ON(USB_LED_SCROLL_LOCK), /* LED 3 */
- IS_HOST_LED_ON(USB_LED_CAPS_LOCK), /* LED 2 */
- IS_HOST_LED_ON(USB_LED_NUM_LOCK), /* LED 1 */
-
- layer_state & (1<<2), /* LED 6 */
- layer_state & (1<<1), /* LED 5 */
- layer_state & (1<<0) ? 0: 1, /* LED 4 */
-
- layer_state & (1<<5), /* LED 8 */
- layer_state & (1<<4) /* LED 7 */
- };
+// Other than using RGB or LED matrix, QMK cannot turn on specific zones
+// of backlight LEDs. Unfortunately, Duck PCBs do not follow this design
+// and instead use multiple pins connected to each of these zones. QMK is
+// only able to control them ALL with the current default mechanisms.
- indicator_leds_set(status);
+// Locking indicator LEDs
+// The Duck Orion V3 has 3 locking indicator LEDs and are located to the right
+// of the Escape key.
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(B0, !led_state.caps_lock);
+ writePin(B4, !led_state.num_lock);
+ writePin(D7, !led_state.scroll_lock);
+ }
+ return true;
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/duck/readme.md b/keyboards/duck/readme.md
index caf7e156d1..32076da7da 100644
--- a/keyboards/duck/readme.md
+++ b/keyboards/duck/readme.md
@@ -13,4 +13,5 @@ Jetfire V1
Lightsaver V3
Octagon V1
Octagon V2
+Orion V3
Viper V2 \ No newline at end of file
diff --git a/keyboards/dz60/keymaps/_bonfire/README.md b/keyboards/dz60/keymaps/_bonfire/README.md
new file mode 100644
index 0000000000..9fe4c5a2da
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/README.md
@@ -0,0 +1,16 @@
+# Docs
+
+1. https://docs.qmk.fm/#/
+2. To build, run: `make dz60:_bonfire`
+
+## Map of Layers
+
+http://www.keyboard-layout-editor.com/#/gists/b19ee1c251c908d9b5ef76965d588937
+
+![Visual Keymap](https://i.imgur.com/DuiUo0W.jpg)
+
+### Todo
+- lighting effects based on layer in use
+ - https://github.com/DanDobrick/qmk_firmware/blob/danDobrick-v60r-layout/keyboards/v60_type_r/keymaps/danDobrick/keymap.c#L140
+
+- rewrite the mod-tap functions to use the non-deprecated way of instancing them
diff --git a/keyboards/dz60/keymaps/_bonfire/dz60-v6-1-0.json b/keyboards/dz60/keymaps/_bonfire/dz60-v6-1-0.json
new file mode 100644
index 0000000000..42625f7e2c
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/dz60-v6-1-0.json
@@ -0,0 +1,1160 @@
+[
+ {
+ "name": "DZ60 v6.1.0",
+ "author": "Bonf1re"
+ },
+ [
+ {
+ "c": "#454545",
+ "a": 7,
+ "f": 2,
+ "w": 1.75
+ },
+ "NOTHING",
+ {
+ "c": "#fc8e28",
+ "w": 1.25
+ },
+ "HELD",
+ {
+ "c": "#7afff6",
+ "w2": 2
+ },
+ "Function Layer",
+ {
+ "x": 1,
+ "c": "#c47aff",
+ "w2": 2
+ },
+ "Keyboard Layer"
+ ],
+ [
+ {
+ "y": 0.75,
+ "c": "#cccccc",
+ "f": 3,
+ "w": 3
+ },
+ "[BASE]"
+ ],
+ [
+ {
+ "a": 5
+ },
+ "~\n`",
+ "!\n1",
+ "@\n2",
+ "#\n3",
+ "$\n4",
+ "%\n5",
+ "^\n6",
+ "&\n7",
+ "*\n8",
+ "(\n9",
+ ")\n0",
+ "_\n-",
+ "+\n=",
+ {
+ "a": 7,
+ "w": 2
+ },
+ "Backspace"
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "Tab",
+ "Q",
+ "W",
+ "E",
+ "R",
+ "T",
+ "Y",
+ "U",
+ "I",
+ "O",
+ "P",
+ {
+ "a": 5
+ },
+ "{\n[",
+ "}\n]",
+ {
+ "w": 1.5
+ },
+ "|\n\\"
+ ],
+ [
+ {
+ "a": 7,
+ "w": 1.75
+ },
+ "Escape",
+ "A",
+ "S",
+ "D",
+ {
+ "n": true
+ },
+ "F",
+ "G",
+ "H",
+ {
+ "n": true
+ },
+ "J",
+ "K",
+ "L",
+ {
+ "a": 5
+ },
+ ":\n;",
+ "\"\n'",
+ {
+ "a": 7,
+ "w": 2.25
+ },
+ "Enter"
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "Shift",
+ "Z",
+ "X",
+ "C",
+ "V",
+ "B",
+ "N",
+ "M",
+ {
+ "a": 5
+ },
+ "<\n,",
+ ">\n.",
+ "?\n/",
+ {
+ "w": 1.75
+ },
+ "Up\nShift",
+ {
+ "c": "#7afff6",
+ "a": 7,
+ "fa": [
+ 2
+ ]
+ },
+ "HACK"
+ ],
+ [
+ {
+ "c": "#cccccc",
+ "f": 3,
+ "w": 1.25
+ },
+ "Ctrl",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Sys",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Alt",
+ {
+ "w": 6.25
+ },
+ "",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Alt",
+ {
+ "a": 5,
+ "f": 3,
+ "w": 1.25
+ },
+ "Left\nSys",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Down\nCtrl",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Right\nHYPER"
+ ],
+ [
+ {
+ "y": 0.25,
+ "a": 7,
+ "f": 3,
+ "w": 3
+ },
+ "[NRMN]"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 5,
+ "f": 3
+ },
+ "~\n`",
+ {
+ "f": 3
+ },
+ "!\n1",
+ {
+ "f": 3
+ },
+ "@\n2",
+ {
+ "f": 3
+ },
+ "#\n3",
+ {
+ "f": 3
+ },
+ "$\n4",
+ {
+ "f": 3
+ },
+ "%\n5",
+ {
+ "f": 3
+ },
+ "^\n6",
+ {
+ "f": 3
+ },
+ "&\n7",
+ {
+ "f": 3
+ },
+ "*\n8",
+ {
+ "f": 3
+ },
+ "(\n9",
+ {
+ "f": 3
+ },
+ ")\n0",
+ {
+ "f": 3
+ },
+ "_\n-",
+ {
+ "f": 3
+ },
+ "+\n=",
+ {
+ "a": 7,
+ "f": 3,
+ "w": 2
+ },
+ "Backspace"
+ ],
+ [
+ {
+ "f": 3,
+ "w": 1.5
+ },
+ "Tab",
+ {
+ "c": "#cccccc",
+ "g": false,
+ "f": 3
+ },
+ "Q",
+ {
+ "f": 3
+ },
+ "W",
+ {
+ "f": 3
+ },
+ "D",
+ {
+ "f": 3
+ },
+ "F",
+ {
+ "f": 3
+ },
+ "K",
+ {
+ "f": 3
+ },
+ "J",
+ {
+ "f": 3
+ },
+ "U",
+ {
+ "f": 3
+ },
+ "R",
+ {
+ "f": 3
+ },
+ "L",
+ {
+ "a": 5,
+ "f": 3
+ },
+ ":\n;",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "f": 3
+ },
+ "{\n[",
+ {
+ "f": 3
+ },
+ "}\n]",
+ {
+ "f": 3,
+ "w": 1.5
+ },
+ "|\n\\"
+ ],
+ [
+ {
+ "a": 7,
+ "f": 3,
+ "w": 1.75
+ },
+ "Escape",
+ {
+ "c": "#cccccc",
+ "g": false,
+ "f": 3
+ },
+ "A",
+ {
+ "f": 3
+ },
+ "S",
+ {
+ "f": 3
+ },
+ "E",
+ {
+ "f": 3,
+ "n": true
+ },
+ "T",
+ {
+ "f": 3
+ },
+ "G",
+ {
+ "f": 3
+ },
+ "Y",
+ {
+ "f": 3,
+ "n": true
+ },
+ "N",
+ {
+ "f": 3
+ },
+ "I",
+ {
+ "f": 3
+ },
+ "O",
+ {
+ "f": 3
+ },
+ "H",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 5
+ },
+ "\n'\n\n\n\n\n\"",
+ {
+ "a": 7,
+ "f": 3,
+ "w": 2.25
+ },
+ "Enter"
+ ],
+ [
+ {
+ "f": 3,
+ "w": 2.25
+ },
+ "Shift",
+ {
+ "c": "#cccccc",
+ "g": false,
+ "f": 3
+ },
+ "Z",
+ {
+ "f": 3
+ },
+ "X",
+ {
+ "f": 3
+ },
+ "C",
+ {
+ "f": 3
+ },
+ "V",
+ {
+ "f": 3
+ },
+ "B",
+ {
+ "f": 3
+ },
+ "P",
+ {
+ "f": 3
+ },
+ "M",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 5,
+ "f": 3
+ },
+ "<\n,",
+ {
+ "f": 3
+ },
+ ">\n.",
+ {
+ "f": 3
+ },
+ "?\n/",
+ {
+ "f": 3,
+ "w": 1.75
+ },
+ "Up\nShift",
+ {
+ "a": 7,
+ "f": 3
+ },
+ "HACK"
+ ],
+ [
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Ctrl",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Sys",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Alt",
+ {
+ "w": 6.25
+ },
+ "",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Alt",
+ {
+ "a": 5,
+ "f": 3,
+ "w": 1.25
+ },
+ "Left\nSys",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Down\nCtrl",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Right\nHYPER"
+ ],
+ [
+ {
+ "y": 0.25,
+ "c": "#cccccc",
+ "g": false,
+ "a": 7,
+ "f": 3,
+ "w": 3
+ },
+ "[GAME]"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "g": true
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 2
+ },
+ ""
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 1.5
+ },
+ ""
+ ],
+ [
+ {
+ "c": "#cccccc",
+ "g": false,
+ "f": 3,
+ "w": 1.75
+ },
+ "Held Esc",
+ {
+ "c": "#aaaaaa",
+ "g": true
+ },
+ "",
+ "",
+ "",
+ {
+ "n": true
+ },
+ "",
+ "",
+ "",
+ {
+ "n": true
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 2.25
+ },
+ ""
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 1.75
+ },
+ "",
+ ""
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 6.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ ""
+ ],
+ [
+ {
+ "y": 0.25,
+ "c": "#cccccc",
+ "g": false,
+ "a": 5,
+ "fa": [
+ 2,
+ 1
+ ],
+ "w": 3
+ },
+ "\nHACK is held\n\n\n\n\n[FCTN]"
+ ],
+ [
+ {
+ "c": "#7afff6",
+ "a": 7,
+ "f": 3
+ },
+ "ESC",
+ {
+ "f": 3
+ },
+ "F1",
+ {
+ "f": 3
+ },
+ "F2",
+ {
+ "f": 3
+ },
+ "F3",
+ {
+ "f": 3
+ },
+ "F4",
+ {
+ "f": 3
+ },
+ "F5",
+ {
+ "f": 3
+ },
+ "F6",
+ {
+ "f": 3
+ },
+ "F7",
+ {
+ "f": 3
+ },
+ "F8",
+ {
+ "f": 3
+ },
+ "F9",
+ {
+ "f": 3
+ },
+ "F10",
+ {
+ "f": 3
+ },
+ "F11",
+ {
+ "f": 3
+ },
+ "F12",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "f": 3,
+ "w": 2
+ },
+ "Backspace"
+ ],
+ [
+ {
+ "f": 3,
+ "w": 1.5
+ },
+ "Tab",
+ {
+ "c": "#7afff6",
+ "g": false,
+ "f": 3
+ },
+ "Mute",
+ {
+ "a": 5,
+ "f": 3
+ },
+ "\nDown\n\n\n\n\nVolume",
+ {
+ "f": 3
+ },
+ "\nUp\n\n\n\n\nVolume",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 7,
+ "f": 3
+ },
+ "R",
+ {
+ "f": 3
+ },
+ "T",
+ {
+ "f": 3
+ },
+ "Y",
+ {
+ "f": 3
+ },
+ "U",
+ {
+ "f": 3
+ },
+ "I",
+ {
+ "f": 3
+ },
+ "O",
+ {
+ "c": "#7afff6",
+ "g": false,
+ "a": 5,
+ "f": 3
+ },
+ "\nScreen\n\n\n\n\nPrint",
+ {
+ "f": 3
+ },
+ "\nLock\n\n\n\n\nScroll",
+ {
+ "a": 7,
+ "f": 3
+ },
+ "Pause",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 5,
+ "f": 3,
+ "w": 1.5
+ },
+ "|\n\\"
+ ],
+ [
+ {
+ "c": "#7afff6",
+ "g": false,
+ "a": 7,
+ "f": 3,
+ "w": 1.75
+ },
+ "Caps Lock",
+ {
+ "a": 5,
+ "f": 3
+ },
+ "\nPrev\n\n\n\n\nMedia",
+ {
+ "f": 3
+ },
+ "\nPlay\n\n\n\n\nMedia",
+ {
+ "f": 3
+ },
+ "\nNext\n\n\n\n\nMedia",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 7,
+ "f": 3,
+ "n": true
+ },
+ "F",
+ {
+ "f": 3
+ },
+ "G",
+ {
+ "f": 3
+ },
+ "H",
+ {
+ "f": 3,
+ "n": true
+ },
+ "J",
+ {
+ "f": 3
+ },
+ "K",
+ {
+ "c": "#7afff6",
+ "g": false,
+ "f": 3
+ },
+ "Insert",
+ {
+ "f": 3
+ },
+ "Home",
+ {
+ "a": 5,
+ "f": 3
+ },
+ "\nUp\n\n\n\n\nPage",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "a": 7,
+ "f": 3,
+ "w": 2.25
+ },
+ "Enter"
+ ],
+ [
+ {
+ "f": 3,
+ "w": 2.25
+ },
+ "Shift",
+ {
+ "c": "#7afff6",
+ "g": false,
+ "f": 3
+ },
+ "Sleep",
+ {
+ "f": 3
+ },
+ "Wake",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "f": 3
+ },
+ "C",
+ {
+ "f": 3
+ },
+ "V",
+ {
+ "f": 3
+ },
+ "B",
+ {
+ "f": 3
+ },
+ "N",
+ {
+ "f": 3
+ },
+ "M",
+ {
+ "c": "#7afff6",
+ "g": false,
+ "f": 3
+ },
+ "Delete",
+ {
+ "f": 3
+ },
+ "End",
+ {
+ "a": 5,
+ "f": 3
+ },
+ "\nDown\n\n\n\n\nPage",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "f": 3,
+ "w": 1.75
+ },
+ "Up\nShift",
+ {
+ "c": "#fc8e28",
+ "g": false,
+ "a": 7,
+ "f": 3
+ },
+ "HACK"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "f": 3,
+ "w": 1.25
+ },
+ "Ctrl",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Sys",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Alt",
+ {
+ "w": 6.25
+ },
+ "",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Alt",
+ {
+ "c": "#c47aff",
+ "g": false,
+ "a": 5,
+ "f": 3,
+ "w": 1.25
+ },
+ "\n[KEYB]\n\n\n\n\nTo",
+ {
+ "c": "#aaaaaa",
+ "g": true,
+ "f": 3,
+ "w": 1.25
+ },
+ "Down\nCtrl",
+ {
+ "f": 3,
+ "w": 1.25
+ },
+ "Right\nHYPER"
+ ],
+ [
+ {
+ "y": 0.25,
+ "c": "#cccccc",
+ "g": false,
+ "f": 3,
+ "w": 3
+ },
+ "\nHACK + SYS Held\n\n\n\n\n[KEYB]"
+ ],
+ [
+ {
+ "c": "#c47aff",
+ "f": 2
+ },
+ "\n[BASE]\n\n\n\n\nReset",
+ {
+ "a": 7
+ },
+ "[NRMN]",
+ "[GAME]",
+ {
+ "c": "#454545",
+ "f": 3
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "c": "#c47aff",
+ "f": 2,
+ "w": 2
+ },
+ "QMK FLASH"
+ ],
+ [
+ {
+ "c": "#454545",
+ "f": 3,
+ "w": 1.5
+ },
+ "",
+ {
+ "c": "#c47aff",
+ "a": 5,
+ "f": 2
+ },
+ "\nToggle\n\n\n\n\nRGB",
+ "\nMode\n\n\n\n\nRGB",
+ "RGB\nUp\n\n\n\n\nHue",
+ "RGB\nDown\n\n\n\n\nHue",
+ "RGB\nDown\n\n\n\n\nSat",
+ "RGB\nUp\n\n\n\n\nSat",
+ "RGB\nDown\n\n\n\n\nValue",
+ "RGB\nUp\n\n\n\n\nValue",
+ {
+ "c": "#454545",
+ "a": 7,
+ "f": 3
+ },
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 1.5
+ },
+ ""
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "",
+ {
+ "c": "#c47aff",
+ "a": 5,
+ "f": 2
+ },
+ "\nDown\n\n\n\n\nBacklight",
+ "\nToggle\n\n\n\n\nBacklight",
+ "\nUp\n\n\n\n\nBacklight",
+ {
+ "n": true
+ },
+ "\nStep\n\n\n\n\nBacklight",
+ {
+ "c": "#454545",
+ "a": 7,
+ "f": 3
+ },
+ "",
+ "",
+ {
+ "n": true
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 2.25
+ },
+ ""
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 1.75
+ },
+ "",
+ {
+ "c": "#fc8e28",
+ "fa": [
+ 2
+ ]
+ },
+ "HACK"
+ ],
+ [
+ {
+ "c": "#454545",
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 6.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "c": "#fc8e28",
+ "a": 5,
+ "w": 1.25
+ },
+ "\n[KEYB]\n\n\n\n\nTo",
+ {
+ "c": "#454545",
+ "a": 7,
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ ""
+ ]
+]
diff --git a/keyboards/dz60/keymaps/_bonfire/keymap-parts/defs.c b/keyboards/dz60/keymaps/_bonfire/keymap-parts/defs.c
new file mode 100644
index 0000000000..95351b43ba
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/keymap-parts/defs.c
@@ -0,0 +1,29 @@
+/**
+ * Variables
+ *
+ */
+int held_esc_threshold = 230;
+bool is_esc_held = false;
+uint16_t held_esc_timer = 0;
+
+/**
+ * Define Layers
+ */
+enum layers {
+ BASE = 0,
+ NRMN,
+ GAME,
+ FCTN,
+ KEYB
+};
+
+/**
+ * Define Custom Keycodes
+ */
+enum custom_keycodes {
+ HLD_ESC = SAFE_RANGE,
+ MOD_UP = MT(MOD_RSFT, KC_UP),
+ MOD_RT = MT(MOD_HYPR, KC_RIGHT),
+ MOD_DN = MT(MOD_RCTL, KC_DOWN),
+ MOD_LT = MT(MOD_RGUI, KC_LEFT)
+};
diff --git a/keyboards/dz60/keymaps/_bonfire/keymap-parts/functions.c b/keyboards/dz60/keymaps/_bonfire/keymap-parts/functions.c
new file mode 100644
index 0000000000..fd4d168227
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/keymap-parts/functions.c
@@ -0,0 +1,34 @@
+/**
+ * Custom Keycodes
+ * https://beta.docs.qmk.fm/detailed-guides/custom_quantum_functions#custom-keycodes
+ *
+ */
+
+// Called on every keyup and keydown
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ switch (keycode) {
+ case HLD_ESC:
+ if(record->event.pressed) {
+ is_esc_held = true;
+ held_esc_timer = timer_read();
+ } else {
+ is_esc_held = false;
+ unregister_code(KC_ESC);
+ }
+ return true;
+ break;
+
+ default:
+ return true;
+ break;
+ }
+}
+
+// checking the held escape timer
+void matrix_scan_user(void)
+{
+ if(is_esc_held && timer_elapsed(held_esc_timer) > held_esc_threshold) {
+ register_code(KC_ESC);
+ }
+}
diff --git a/keyboards/dz60/keymaps/_bonfire/keymap-parts/layers.c b/keyboards/dz60/keymaps/_bonfire/keymap-parts/layers.c
new file mode 100644
index 0000000000..9a44730b14
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/keymap-parts/layers.c
@@ -0,0 +1,115 @@
+#pragma once
+#include "quantum.h"
+
+/*
+ * LAYOUT_bonfire Row Keys
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │ 0e │ 14
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │ 14
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │ 13
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │ 13
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │40 │41 │43 │ 46 │4a │4b │4d │4e │ 8
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ *
+*/
+#define LAYOUT_bonfire( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ 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, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
+ k40, k41, k43, k46, k4a, k4b, k4d, k4e \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { 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, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
+}
+
+/**
+ * XXXXXXX = Key does nothing.
+ * _______ = Key that allows the uppermost exposed key in a layer below it.
+ *
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /**
+ * Layer 0
+ *
+ * QWERTY and basic modifiers.
+ * Upper layers are toggled or accessed through the "HACK" key: last key on fourth row.
+ */
+ [BASE] = LAYOUT_bonfire(
+ 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_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_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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOD_UP, MO(FCTN),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MOD_LT, MOD_DN, MOD_RT
+ ),
+
+ /**
+ * Layer 1
+ *
+ * NORMAN Key layout.
+ * All that's changed is the position of A-Z and a few punctuation keys.
+ */
+ [NRMN] = LAYOUT_bonfire(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN, _______, _______, _______,
+ _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______, _______,
+ _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /**
+ * Layer 2
+ *
+ * Moves the escape key from the left to the right side of the keyboard for gaming.
+ */
+ [GAME] = LAYOUT_bonfire(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ HLD_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /**
+ * Layer 3
+ *
+ * Function layer.
+ * This layer is accessed when "HACK" is held down.
+ * Modifiers and such to basic keys, but with basic key functions.
+ */
+ [FCTN] = LAYOUT_bonfire(
+ 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_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+ KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______,
+ _______, KC_SLEP, KC_WAKE, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______,
+ _______, _______, _______, _______, _______, MO(KEYB), _______, _______
+ ),
+
+ /**
+ * Layer 4
+ *
+ * This is the KEYB/System layer.
+ * Other keymaps call this a NAV layer, but it's more than just NAV-ing the board's layers.
+ * This Layer currently handles RGB and puts the board into RESET for flashing.
+ *
+ * ~ key resets board to [BASE].
+ * 1 key toggles [NRMN].
+ * 2 key toggles [GAME].
+ * BACKSPACE puts board into reset.
+ */
+ [KEYB] = LAYOUT_bonfire(
+ TO(BASE), TG(NRMN), TO(GAME), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, 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
+ )
+};
diff --git a/keyboards/dz60/keymaps/_bonfire/keymap.c b/keyboards/dz60/keymaps/_bonfire/keymap.c
new file mode 100644
index 0000000000..a6b55105c2
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/keymap.c
@@ -0,0 +1,12 @@
+#include QMK_KEYBOARD_H
+
+/**
+ * Bonfire Layout
+ * v6.1.0
+ *
+ * @author Ethan Beyer
+ *
+ */
+#include "keymap-parts/defs.c"
+#include "keymap-parts/layers.c"
+#include "keymap-parts/functions.c"
diff --git a/keyboards/dz60/keymaps/_bonfire/not-in-use/super-alt-tab.c b/keyboards/dz60/keymaps/_bonfire/not-in-use/super-alt-tab.c
new file mode 100644
index 0000000000..1d951b1bcf
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/not-in-use/super-alt-tab.c
@@ -0,0 +1,37 @@
+/**
+ * Cool Function where a single key does ALT+TAB
+ * From: https://beta.docs.qmk.fm/features/feature_macros#super-alt-tab
+ */
+bool is_alt_tab_active = false; // ADD this near the begining of keymap.c
+uint16_t alt_tab_timer = 0; // we will be using them soon.
+
+enum custom_keycodes { // Make sure have the awesome keycode ready
+ ALT_TAB = SAFE_RANGE,
+};
+
+// key processing
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) { // This will do most of the grunt work with the keycodes.
+ case ALT_TAB:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+}
+
+// The very important timer.
+void matrix_scan_user(void) {
+ if (is_alt_tab_active && timer_elapsed(alt_tab_timer) > 1000) {
+ unregister_code(KC_LALT);
+ is_alt_tab_active = false;
+ }
+} \ No newline at end of file
diff --git a/keyboards/dz60/keymaps/_bonfire/rules.mk b/keyboards/dz60/keymaps/_bonfire/rules.mk
new file mode 100644
index 0000000000..84550c22bf
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/rules.mk
@@ -0,0 +1,3 @@
+MOUSEKEY_ENABLE = no
+
+# CONSOLE_ENABLE = yes
diff --git a/keyboards/dz60/keymaps/_bonfire/scratchpad.txt b/keyboards/dz60/keymaps/_bonfire/scratchpad.txt
new file mode 100644
index 0000000000..48ed72c550
--- /dev/null
+++ b/keyboards/dz60/keymaps/_bonfire/scratchpad.txt
@@ -0,0 +1,7 @@
+[NAME] = LAYOUT_bonfire(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+)
diff --git a/keyboards/dz60/keymaps/split_space_arrows/keymap.c b/keyboards/dz60/keymaps/split_space_arrows/keymap.c
new file mode 100644
index 0000000000..6dbfaa9375
--- /dev/null
+++ b/keyboards/dz60/keymaps/split_space_arrows/keymap.c
@@ -0,0 +1,67 @@
+#include QMK_KEYBOARD_H
+
+/* DZ60 layout using following options (from layouts diagram on KBDfans):
+ * - plate B (2.25u lshift)
+ * - opt 4 (1.75, 1, 1 on rshift)
+ * - opt 10 (2.75, 1.25, 2.25 on space, 5x1u bottom right keys)
+ * http://www.keyboard-layout-editor.com/#/gists/225f0f4dcf6671405f744fabe314627c
+ */
+
+#define LAYOUT_b_4_10( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \
+ K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
+ ) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, KC_NO, K312, K313, K314 }, \
+ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: basic qwerty */
+ LAYOUT_b_4_10(
+ // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||------2.0-------|
+ 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,
+ // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----------------|
+ //
+ // |----1.5-----||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|----1.5-----|
+ 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,
+ // |------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------|
+ //
+ // |----1.75------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------2.25--------||
+ 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,
+ // |--------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------------||
+ //
+ // |------2.25--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----1.75------|--------|--------||
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), KC_UP, KC_HYPR,
+ // |------------------|--------|--------|--------|--------|--------|--------|--------|--------|--------||--------------|--------|--------||
+ //
+ // |---1.25---|---1.25---||---1.25---||--------2.75----------||---1.25---|------2.25--------||--------|--------|--------|--------|--------|
+ KC_MEH, KC_LALT, KC_LGUI, KC_SPC, TT(1), MO(1), TG(1), TT(2), KC_LEFT, KC_DOWN, KC_RGHT
+ // |----------|----------||----------||----------------------||----------|------------------||--------|--------|--------|--------|--------|
+ ),
+
+ /* Layer 1: primary fn layer */
+ LAYOUT_b_4_10(
+ 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_TAB, KC_NO, KC_HOME, KC_UP, KC_END, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_NO, KC_ENT,
+ KC_LSFT, KC_MPRV, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_LOCK, KC_PGUP, KC_INS,
+ KC_MEH, KC_LALT, KC_LGUI, KC_MEDIA_PLAY_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ /* Layer 2: mouse navigation */
+ /* Layer 3: numpad */
+ /* Layer 4: RGB lighting controls and keyboard config, reset */
+ LAYOUT_b_4_10(
+ 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, TO(5),
+ KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUD,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_MODE_PLAIN, RGB_MODE_FORWARD, KC_RSHIFT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_VAI, RGB_HUI,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, RGB_SAD, RGB_VAD, RGB_SAI
+ ),
+};
diff --git a/keyboards/dz60/keymaps/split_space_arrows/rules.mk b/keyboards/dz60/keymaps/split_space_arrows/rules.mk
new file mode 100644
index 0000000000..5d38b9d367
--- /dev/null
+++ b/keyboards/dz60/keymaps/split_space_arrows/rules.mk
@@ -0,0 +1,7 @@
+# Build Options
+# override the options specified in dz60/rules.mk
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+KEY_LOCK_ENABLE = yes # Enables use of KC_LOCK
diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/config.h b/keyboards/dz60/keymaps/twschum_b_4_10/config.h
new file mode 100644
index 0000000000..15cabda364
--- /dev/null
+++ b/keyboards/dz60/keymaps/twschum_b_4_10/config.h
@@ -0,0 +1,24 @@
+#pragma once
+
+// number of taps for TT Tap-Toggle keys to toggle
+#ifdef TAPPING_TOGGLE
+#undef TAPPING_TOGGLE
+#endif
+#define TAPPING_TOGGLE 2
+
+// time in ms that counts as a "tap" for various features
+#ifdef TAPPING_TERM
+#undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 100
+
+// https://docs.qmk.fm/features/mouse-keys#configuring-the-behavior-of-mousekeys
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 10
+#define MOUSEKEY_TIME_TO_MAX 15
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 255
+
+// flags from user/twschum/
+#define TWSCHUM_TAPPING_CTRL_PREFIX 1
diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/keymap.c b/keyboards/dz60/keymaps/twschum_b_4_10/keymap.c
new file mode 100644
index 0000000000..6efb567133
--- /dev/null
+++ b/keyboards/dz60/keymaps/twschum_b_4_10/keymap.c
@@ -0,0 +1,123 @@
+#include QMK_KEYBOARD_H
+#include "twschum.h"
+
+/* DZ60 layout using following options (from layouts diagram on KBDfans):
+ * - plate B (2.25u lshift)
+ * - opt 4 (1.75, 1, 1 on rshift)
+ * - opt 10 (2.75, 1.25, 2.25 on space, 5x1u bottom right keys)
+ * http://www.keyboard-layout-editor.com/#/gists/225f0f4dcf6671405f744fabe314627c
+ */
+
+
+#define LAYOUT_b_4_10( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \
+ K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
+ ) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, XXXXXXX, K014 }, \
+ { K100, XXXXXXX, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, XXXXXXX, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, XXXXXXX }, \
+ { K300, XXXXXXX, K302, K303, K304, K305, K306, K307, K308, K309, K310, XXXXXXX, K312, K313, K314 }, \
+ { K400, K401, XXXXXXX, K403, K404, XXXXXXX, K406, XXXXXXX, K408, XXXXXXX, K410, K411, K412, K413, K414 } \
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* base 60% qwerty */
+ LAYOUT_b_4_10(
+ // |--------|----1---|----2---|----3---|---4----|---5----|---6----|---7----|---8----|---9----|---0----|-- - ---|-- = ---||------2.0-------|
+ 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,
+ // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----------------|
+ //
+ // |----1.5-----||---Q----|---W----|---E----|---R----|---T----|---Y----|---U----|---I----|---O----|---P----|---[----|---]----|----1.5-----|
+ 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,
+ // |------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------|
+ //
+ // |----1.75------||---A----|---S----|---D----|---F----|---G----|---H----|---J----|---K----|---L----|---;----|---'----|------2.25--------||
+ 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,
+ // |--------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------------||
+ //
+ // |------2.25--------|---Z----|---X----|---C----|---V----|---B----|---N----|---M----|---,----|---.----||----1.75------|--------|--------||
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, /*SFT_T*/KC_SLSH, KC_UP, VIM_START,
+ // |------------------|--------|--------|--------|--------|--------|--------|--------|--------|--------||--------------|--------|--------||
+ //
+ // |---1.25---|---1.25---||---1.25---||--------2.75----------||---1.25---|------2.25--------||--------|--------|--------|--------|--------|
+ MO(_Fn), KC_LALT, KC_LGUI, KC_SPC, TT(_Nav), MO(_Fn), TG(_Num), TT(_Cfg), KC_LEFT, KC_DOWN, KC_RGHT
+ // |----------|----------||----------||----------------------||----------|------------------||--------|--------|--------|--------|--------|
+ ),
+
+ /* vim mode */
+ LAYOUT_b_4_10(
+ VIM_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, VIM_W, VIM_E, KC_R, _______, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, _______, _______, _______,
+ _______, VIM_A, VIM_S, VIM_D, _______, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, _______, _______, _______,
+ VIM_SHIFT, _______, VIM_X, VIM_C, VIM_V, VIM_B, _______, _______, VIM_COMMA, VIM_PERIOD, _______, _______, VIM_ESC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* primary fn layer */
+ LAYOUT_b_4_10(
+ // |--------|----1---|----2---|----3---|---4----|---5----|---6----|---7----|---8----|---9----|---0----|-- - ---|-- = ---||------2.0-------|
+ 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,
+ // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----------------|
+ //
+ // |----1.5-----||---Q----|---W----|---E----|---R----|---T----|---Y----|---U----|---I----|---O----|---P----|---[----|---]----|----1.5-----|
+ KC_TAB, CODE_PASTE, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, LESS_PD, XXXXXXX, XXXXXXX, CODE_PASTE,
+ // |------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------|
+ //
+ // |----1.75------||---A----|---S----|---D----|---F----|---G----|---H----|---J----|---K----|---L----|---;----|---'----|------2.25--------||
+ KC_CAPS, SALT_CMD, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, KC_ENT,
+ // |--------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------------||
+ //
+ // |------2.25--------|---Z----|---X----|---C----|---V----|---B----|---N----|---M----|---,----|---.----||----1.75------|--------|--------||
+ KC_LSHIFT, KC_MPRV, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, XXXXXXX, XXXXXXX, KC_LOCK, KC_PGUP, KC_INS,
+ // |------------------|--------|--------|--------|--------|--------|--------|--------|--------|--------||--------------|--------|--------||
+ //
+ // |---1.25---|---1.25---||---1.25---||--------2.75----------||---1.25---|------2.25--------||--------|--------|--------|--------|--------|
+ KC_MEH, KC_LALT, KC_LGUI, KC_MEDIA_PLAY_PAUSE, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ // |----------|----------||----------||----------------------||----------|------------------||--------|--------|--------|--------|--------|
+ ),
+
+ /* mouse navigation */
+ LAYOUT_b_4_10(
+ TO(_Base), KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, XXXXXXX, XXXXXXX, KC_SLEP, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_MS_BTN3, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, XXXXXXX, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LSHIFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN1, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* numpad layer */
+ LAYOUT_b_4_10(
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_KP_PLUS, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_KP_ASTERISK, XXXXXXX, KC_ENT,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT, KC_KP_ENTER, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_0, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+
+ /* RGB lighting controls and keyboard config, reset */
+ LAYOUT_b_4_10(
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG_L0_RGB, XXXXXXX, XXXXXXX, TO(_None),
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUD,
+ EN_CTRL_SHORTCUTS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG_LAYER_RGB, RGB_MODE_PLAIN, RGB_MODE_FORWARD, KC_RSHIFT,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MAKE, XXXXXXX, XXXXXXX, RGB_TOG, RGB_VAI, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_VAD, RGB_SAI
+ ),
+
+ /* soft "off" state where none of the keystroke register */
+ LAYOUT_b_4_10(
+ 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, TO(_Base),
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+};
+
+uint8_t vim_cmd_layer(void) {
+ return _Vim;
+}
diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/layout.json b/keyboards/dz60/keymaps/twschum_b_4_10/layout.json
new file mode 100644
index 0000000000..cd484f9d89
--- /dev/null
+++ b/keyboards/dz60/keymaps/twschum_b_4_10/layout.json
@@ -0,0 +1,4877 @@
+{
+ "configKeymap":{
+ "keys":[
+ "K00",
+ "K01",
+ "K02",
+ "K03",
+ "K04",
+ "K05",
+ "K06",
+ "K07",
+ "K08",
+ "K09",
+ "K0A",
+ "K0B",
+ "K0C",
+ "K0D",
+ "K2D",
+ "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",
+ "K30",
+ "K31",
+ "K32",
+ "K33",
+ "K34",
+ "K35",
+ "K36",
+ "K37",
+ "K38",
+ "K39",
+ "K3A",
+ "K3B",
+ "K3C",
+ "K3D",
+ "K40",
+ "K41",
+ "K42",
+ "K44",
+ "K45",
+ "K46",
+ "K48",
+ "K49",
+ "K4A",
+ "K4B",
+ "K4C"
+ ],
+ "positions":[
+ [
+ "K00",
+ "K01",
+ "K02",
+ "K03",
+ "K04",
+ "K05",
+ "K06",
+ "K07",
+ "K08",
+ "K09",
+ "K0A",
+ "K0B",
+ "K0C",
+ "K0D"
+ ],
+ [
+ "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",
+ "KC_NO",
+ "K44",
+ "K45",
+ "K46",
+ "KC_NO",
+ "K48",
+ "K49",
+ "K4A",
+ "K4B",
+ "K4C",
+ "KC_NO"
+ ]
+ ]
+ },
+ "keySections":[
+ {
+ "row1":[
+ {
+ "id":"k00",
+ "value":"ESC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k01",
+ "value":"1",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k02",
+ "value":"2",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k03",
+ "value":"3",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k04",
+ "value":"4",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k05",
+ "value":"5",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k06",
+ "value":"6",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k07",
+ "value":"7",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k08",
+ "value":"8",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k09",
+ "value":"9",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0A",
+ "value":"0",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0B",
+ "value":"MINS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0C",
+ "value":"EQL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "backspace":[
+ [
+ {
+ "id":"k0D",
+ "value":"BSPC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k200",
+ "zone":"Backspace"
+ },
+ {
+ "id":"k2D",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k0D",
+ "value":"PSCR",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Backspace"
+ },
+ {
+ "id":"k2D",
+ "value":"PAUS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Backspace"
+ }
+ ]
+ ],
+ "row2":[
+ {
+ "id":"k10",
+ "value":"TAB",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k11",
+ "value":"Q",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k12",
+ "value":"W",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k13",
+ "value":"E",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k14",
+ "value":"R",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k15",
+ "value":"T",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k16",
+ "value":"Y",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k17",
+ "value":"U",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k18",
+ "value":"I",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k19",
+ "value":"O",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1A",
+ "value":"P",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1B",
+ "value":"LBRC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1C",
+ "value":"RBRC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "row2pipe":[
+ [
+ {
+ "id":"k1D",
+ "value":"BSLS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150",
+ "zone":"Enter"
+ }
+ ],
+ [
+ {
+ "id":"k1D",
+ "value":"ENT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"kISO",
+ "zone":"Enter"
+ }
+ ]
+ ],
+ "caps":[
+ [
+ {
+ "id":"k20",
+ "value":"LCTL",
+ "type":"normal",
+ "secondary":"LCTL",
+ "showMenu":false,
+ "shape":"k175",
+ "zone":"Caps Lock"
+ }
+ ],
+ [
+ {
+ "id":"k20",
+ "value":"CAPS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175stepped",
+ "zone":"Caps Lock"
+ }
+ ]
+ ],
+ "row3":[
+ {
+ "id":"k21",
+ "value":"A",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k22",
+ "value":"S",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k23",
+ "value":"D",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k24",
+ "value":"F",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k25",
+ "value":"G",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k26",
+ "value":"H",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k27",
+ "value":"J",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k28",
+ "value":"K",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k29",
+ "value":"L",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2A",
+ "value":"SCLN",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2B",
+ "value":"QUOT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "enter":[
+ [
+ {
+ "id":"k2C",
+ "value":"ENT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225",
+ "zone":"Enter"
+ }
+ ],
+ [
+ {
+ "id":"k2C",
+ "value":"NUHS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Enter"
+ }
+ ]
+ ],
+ "leftShift":[
+ [
+ {
+ "id":"k30",
+ "value":"LSFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225",
+ "zone":"Left Shift"
+ },
+ {
+ "id":"k31",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k30",
+ "value":"LSFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Left Shift"
+ },
+ {
+ "id":"k31",
+ "value":"NUBS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Left Shift"
+ }
+ ]
+ ],
+ "row4":[
+ {
+ "id":"k32",
+ "value":"Z",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k33",
+ "value":"X",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k34",
+ "value":"C",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k35",
+ "value":"V",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k36",
+ "value":"B",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k37",
+ "value":"N",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k38",
+ "value":"M",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k39",
+ "value":"COMM",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3A",
+ "value":"DOT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "rightShift":[
+ [
+ {
+ "id":"k3B",
+ "value":"SLSH",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Right Shift"
+ },
+ {
+ "id":"k3C",
+ "value":"RSFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275",
+ "zone":"Right Shift"
+ },
+ {
+ "id":"k3D",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"SLSH",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Right Shift"
+ },
+ {
+ "id":"k3C",
+ "value":"RSFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175",
+ "zone":"Right Shift"
+ },
+ {
+ "id":"k3D",
+ "value":"L1",
+ "type":"momentary",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Right Shift"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"SLSH",
+ "type":"tapkey",
+ "secondary":"RSFT",
+ "showMenu":false,
+ "shape":"k175",
+ "zone":"Right Shift"
+ },
+ {
+ "id":"k3C",
+ "value":"UP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Right Shift"
+ },
+ {
+ "id":"k3D",
+ "value":"HYPR",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Right Shift"
+ }
+ ]
+ ],
+ "row5":[
+ [
+ {
+ "id":"k40",
+ "value":"MEH",
+ "type":"normal",
+ "secondary":"MEH",
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Row"
+ },
+ {
+ "id":"k41",
+ "value":"LALT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Row"
+ },
+ {
+ "id":"k42",
+ "value":"LGUI",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Row"
+ }
+ ],
+ [
+ {
+ "id":"k40",
+ "value":"LCTL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150",
+ "zone":"Bottom Row"
+ },
+ {
+ "id":"k41",
+ "value":"LGUI",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Row"
+ },
+ {
+ "id":"k42",
+ "value":"LALT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150",
+ "zone":"Bottom Row"
+ }
+ ]
+ ],
+ "space":[
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"SPC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k625",
+ "zone":"Space"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"SPC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275",
+ "zone":"Space"
+ },
+ {
+ "id":"k45",
+ "value":"L2",
+ "type":"taptoggle",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Space"
+ },
+ {
+ "id":"k46",
+ "value":"L1",
+ "type":"momentary",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225",
+ "zone":"Space"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"ENT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225",
+ "zone":"Space"
+ },
+ {
+ "id":"k45",
+ "value":"BL_STEP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Space"
+ },
+ {
+ "id":"k46",
+ "value":"SPC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275",
+ "zone":"Space"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"SPC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k700",
+ "zone":"Space"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"ENT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275",
+ "zone":"Space"
+ },
+ {
+ "id":"k45",
+ "value":"BL_STEP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150",
+ "zone":"Space"
+ },
+ {
+ "id":"k46",
+ "value":"SPC",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275",
+ "zone":"Space"
+ }
+ ]
+ ]
+ ],
+ "bottomRight":[
+ [
+ [
+ {
+ "id":"k48",
+ "value":"RGUI",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k49",
+ "value":"RALT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"APP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4C",
+ "value":"RCTL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125",
+ "zone":"Bottom Right"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"L3",
+ "type":"taptoggle",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k49",
+ "value":"L4",
+ "type":"direct",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4A",
+ "value":"LEFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4B",
+ "value":"DOWN",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4C",
+ "value":"RIGHT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"RALT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"APP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4C",
+ "value":"RCTL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150",
+ "zone":"Bottom Right"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"RALT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4A",
+ "value":"LEFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4B",
+ "value":"DOWN",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ },
+ {
+ "id":"k4C",
+ "value":"RIGHT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100",
+ "zone":"Bottom Right"
+ }
+ ]
+ ]
+ ]
+ },
+ {
+ "row1":[
+ {
+ "id":"k00",
+ "value":"GRV",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k01",
+ "value":"F1",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k02",
+ "value":"F2",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k03",
+ "value":"F3",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k04",
+ "value":"F4",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k05",
+ "value":"F5",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k06",
+ "value":"F6",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k07",
+ "value":"F7",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k08",
+ "value":"F8",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k09",
+ "value":"F9",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0A",
+ "value":"F10",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0B",
+ "value":"F11",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0C",
+ "value":"F12",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "backspace":[
+ [
+ {
+ "id":"k0D",
+ "value":"DEL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k200"
+ },
+ {
+ "id":"k2D",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row2":[
+ {
+ "id":"k10",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k11",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k12",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k13",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k14",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k15",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k16",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k17",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k18",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k19",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "row2pipe":[
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"kISO"
+ }
+ ]
+ ],
+ "caps":[
+ [
+ {
+ "id":"k20",
+ "value":"CAPS",
+ "type":"normal",
+ "secondary":"LCTL",
+ "showMenu":false,
+ "shape":"k175"
+ }
+ ],
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175stepped"
+ }
+ ]
+ ],
+ "row3":[
+ {
+ "id":"k21",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k22",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k23",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k24",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k25",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k26",
+ "value":"LEFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k27",
+ "value":"DOWN",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k28",
+ "value":"UP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k29",
+ "value":"RIGHT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "enter":[
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "leftShift":[
+ [
+ {
+ "id":"k30",
+ "value":"LSFT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k31",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k31",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row4":[
+ {
+ "id":"k32",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k33",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k34",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k35",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k36",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k37",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k38",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k39",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "rightShift":[
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k3D",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"RSFT",
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row5":[
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"MEH",
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ]
+ ],
+ "space":[
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k625"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k700"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ]
+ ],
+ "bottomRight":[
+ [
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ]
+ ]
+ },
+ {
+ "row1":[
+ {
+ "id":"k00",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k01",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k02",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k03",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k04",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k05",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k06",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k07",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k08",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k09",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "backspace":[
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k200"
+ },
+ {
+ "id":"k2D",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row2":[
+ {
+ "id":"k10",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k11",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k12",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k13",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k14",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k15",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k16",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k17",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k18",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k19",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "row2pipe":[
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"kISO"
+ }
+ ]
+ ],
+ "caps":[
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"LCTL",
+ "showMenu":false,
+ "shape":"k175"
+ }
+ ],
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175stepped"
+ }
+ ]
+ ],
+ "row3":[
+ {
+ "id":"k21",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k22",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k23",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k24",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k25",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k26",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k27",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k28",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k29",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "enter":[
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "leftShift":[
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k31",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k31",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row4":[
+ {
+ "id":"k32",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k33",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k34",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k35",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k36",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k37",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k38",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k39",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "rightShift":[
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k3D",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"RSFT",
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row5":[
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"MEH",
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ]
+ ],
+ "space":[
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k625"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k700"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ]
+ ],
+ "bottomRight":[
+ [
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ]
+ ]
+ },
+ {
+ "row1":[
+ {
+ "id":"k00",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k01",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k02",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k03",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k04",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k05",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k06",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k07",
+ "value":"PSLS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k08",
+ "value":"PAST",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k09",
+ "value":"PEQL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "backspace":[
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k200"
+ },
+ {
+ "id":"k2D",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row2":[
+ {
+ "id":"k10",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k11",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k12",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k13",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k14",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k15",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k16",
+ "value":"P7",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k17",
+ "value":"P8",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k18",
+ "value":"P8",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k19",
+ "value":"PMNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "row2pipe":[
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"kISO"
+ }
+ ]
+ ],
+ "caps":[
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"LCTL",
+ "showMenu":false,
+ "shape":"k175"
+ }
+ ],
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175stepped"
+ }
+ ]
+ ],
+ "row3":[
+ {
+ "id":"k21",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k22",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k23",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k24",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k25",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k26",
+ "value":"P4",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k27",
+ "value":"P5",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k28",
+ "value":"P6",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k29",
+ "value":"PPLS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "enter":[
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "leftShift":[
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k31",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k31",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row4":[
+ {
+ "id":"k32",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k33",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k34",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k35",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k36",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k37",
+ "value":"P1",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k38",
+ "value":"P2",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k39",
+ "value":"P3",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3A",
+ "value":"PDOT",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "rightShift":[
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k3D",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"PENT",
+ "type":"normal",
+ "secondary":"RSFT",
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row5":[
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"MEH",
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ]
+ ],
+ "space":[
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k625"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"P0",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k700"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ]
+ ],
+ "bottomRight":[
+ [
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ]
+ ]
+ },
+ {
+ "row1":[
+ {
+ "id":"k00",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k01",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k02",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k03",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k04",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k05",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k06",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k07",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k08",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k09",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k0C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "backspace":[
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k200"
+ },
+ {
+ "id":"k2D",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k0D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row2":[
+ {
+ "id":"k10",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k11",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k12",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k13",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k14",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k15",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k16",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k17",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k18",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k19",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k1C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "row2pipe":[
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k1D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"kISO"
+ }
+ ]
+ ],
+ "caps":[
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"LCTL",
+ "showMenu":false,
+ "shape":"k175"
+ }
+ ],
+ [
+ {
+ "id":"k20",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175stepped"
+ }
+ ]
+ ],
+ "row3":[
+ {
+ "id":"k21",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k22",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k23",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k24",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k25",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k26",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k27",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k28",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k29",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k2B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "enter":[
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k2C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "leftShift":[
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k31",
+ "value":"NO",
+ "type":"nodisplay",
+ "showMenu":false
+ }
+ ],
+ [
+ {
+ "id":"k30",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k31",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row4":[
+ {
+ "id":"k32",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k33",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k34",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k35",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k36",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k37",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k38",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k39",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ "rightShift":[
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k3D",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3D",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ],
+ [
+ {
+ "id":"k3B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"RSFT",
+ "showMenu":false,
+ "shape":"k175"
+ },
+ {
+ "id":"k3C",
+ "value":"HOME",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k3D",
+ "value":"PGUP",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ "row5":[
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":"MEH",
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k40",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k41",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k42",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ]
+ ],
+ "space":[
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k625"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k225"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k44",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k700"
+ },
+ {
+ "id":"k46",
+ "value":"NO",
+ "type":"nodisplay"
+ }
+ ],
+ [
+ {
+ "id":"k44",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ },
+ {
+ "id":"k45",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k46",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k275"
+ }
+ ]
+ ]
+ ],
+ "bottomRight":[
+ [
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k125"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"DEL",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"HOME",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"PGDN",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ],
+ [
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ },
+ {
+ "id":"k4A",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k150"
+ }
+ ],
+ [
+ {
+ "id":"k48",
+ "value":"NO",
+ "type":"nodisplay"
+ },
+ {
+ "id":"k49",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4A",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4B",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ },
+ {
+ "id":"k4C",
+ "value":"TRNS",
+ "type":"normal",
+ "secondary":null,
+ "showMenu":false,
+ "shape":"k100"
+ }
+ ]
+ ]
+ ]
+ }
+ ],
+ "layoutName":"twschum_DZ60_b_4_10_v1.2",
+ "timestamp":1525116588644
+}
diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/rules.mk b/keyboards/dz60/keymaps/twschum_b_4_10/rules.mk
new file mode 100644
index 0000000000..1610eace74
--- /dev/null
+++ b/keyboards/dz60/keymaps/twschum_b_4_10/rules.mk
@@ -0,0 +1,15 @@
+# Build Options
+# override the options specified in dz60/rules.mk
+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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+KEY_LOCK_ENABLE = yes # Enables use of KC_LOCK
+
+# Enables including users/twschum/twschum.h
+USER_NAME := twschum
diff --git a/keyboards/dz60/rules.mk b/keyboards/dz60/rules.mk
index 556d9e55c7..7ed2571da0 100644
--- a/keyboards/dz60/rules.mk
+++ b/keyboards/dz60/rules.mk
@@ -21,8 +21,8 @@ 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 = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes # Enable per-key backlight LEDs
+AUDIO_ENABLE = no # There is no speaker on this PCB
+RGBLIGHT_ENABLE = yes # Enable the RGB underglow LEDs
LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_iso 60_abnt2
diff --git a/keyboards/dztech/dz60rgb/config.h b/keyboards/dztech/dz60rgb/config.h
index c9f6937eea..b8c5759db6 100644
--- a/keyboards/dztech/dz60rgb/config.h
+++ b/keyboards/dztech/dz60rgb/config.h
@@ -1,39 +1,3 @@
#pragma once
#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1219
-#define DEVICE_VER 0x0001
-#define MANUFACTURER DZTECH
-
-#define PRODUCT DZ60RGB
-#define DESCRIPTION DZ60 ARM RGB keyboard
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-#define MATRIX_ROW_PINS { B1, B10, B11, B14, B12 }
-#define MATRIX_COL_PINS {A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14 }
-
-/* #define UNUSED_PINS {A0,A1,A2, A3,A4,A9,A10,C15,A13,A14,B2}*/
-
-#define DIODE_DIRECTION COL2ROW
-
-#define DEBOUNCE 3
-#ifdef RGB_MATRIX_ENABLE
-#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
-#define RGB_MATRIX_KEYPRESSES
-#define RGB_MATRIX_LED_PROCESS_LIMIT 4
-#define RGB_MATRIX_LED_FLUSH_LIMIT 26
-#define DISABLE_RGB_MATRIX_SPLASH
-#define DISABLE_RGB_MATRIX_MULTISPLASH
-#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
-#define DRIVER_COUNT 2
-#define DRIVER_1_LED_TOTAL 63
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
-#endif \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb/dz60rgb.c b/keyboards/dztech/dz60rgb/dz60rgb.c
index a8217480d0..747b8854d4 100644
--- a/keyboards/dztech/dz60rgb/dz60rgb.c
+++ b/keyboards/dztech/dz60rgb/dz60rgb.c
@@ -1,120 +1,112 @@
#include "dz60rgb.h"
+
#ifdef RGB_MATRIX_ENABLE
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
- {0, K_14, J_14, L_14},
- {0, K_13, J_13, L_13},
- {0, K_12, J_12, L_12},
- {0, K_11, J_11, L_11},
- {0, K_10, J_10, L_10},
- {0, K_9, J_9, L_9},
- {0, K_8, J_8, L_8},
- {0, K_7, J_7, L_7},
- {0, K_6, J_6, L_6},
- {0, K_5, J_5, L_5},
- {0, K_4, J_4, L_4},
- {0, K_3, J_3, L_3},
- {0, K_2, J_2, L_2},
- {0, K_1, J_1, L_1},
- {0, H_14, G_14, I_14},
- {0, H_13, G_13, I_13},
- {0, H_12, G_12, I_12},
- {0, H_11, G_11, I_11},
- {0, H_10, G_10, I_10},
- {0, H_9, G_9, I_9},
- {0, H_8, G_8, I_8},
- {0, H_7, G_7, I_7},
- {0, H_6, G_6, I_6},
- {0, H_5, G_5, I_5},
- {0, H_4, G_4, I_4},
- {0, H_3, G_3, I_3},
- {0, H_2, G_2, I_2},
- {0, H_1, G_1, I_1},
- {0, E_14, D_14, F_14},
- {0, E_12, D_12, F_12},
- {0, E_11, D_11, F_11},
- {0, E_10, D_10, F_10},
- {0, E_9, D_9, F_9},
- {0, E_8, D_8, F_8},
- {0, E_7, D_7, F_7},
- {0, E_6, D_6, F_6},
- {0, E_5, D_5, F_5},
- {0, E_4, D_4, F_4},
- {0, E_3, D_3, F_3},
- {0, E_2, D_2, F_2},
- {0, E_1, D_1, F_1},
- {0, B_14, A_14, C_14},
- {0, B_13, A_13, C_13},
- {0, B_11, A_11, C_11},
- {0, B_10, A_10, C_10},
- {0, B_9, A_9, C_9},
- {0, B_8, A_8, C_8},
- {0, B_7, A_7, C_7},
- {0, B_6, A_6, C_6},
- {0, B_5, A_5, C_5},
- {0, B_4, A_4, C_4},
- {0, B_3, A_3, C_3},
- {0, B_2, A_2, C_2},
- {0, B_1, A_1, C_1},
- {0, B_15, A_15, C_15},
- {0, E_13, D_13, F_13},
- {0, B_12, A_12, C_12},
- {0, E_15, D_15, F_15},
- {0, H_15, G_15, I_15},
- {0, B_16, A_16, C_16},
- {0, E_16, D_16, F_16},
- {0, H_16, G_16, I_16},
- {0, K_16, J_16, L_16},
-};
+ { 0, K_14, J_14, L_14 },
+ { 0, K_13, J_13, L_13 },
+ { 0, K_12, J_12, L_12 },
+ { 0, K_11, J_11, L_11 },
+ { 0, K_10, J_10, L_10 },
+ { 0, K_9, J_9, L_9 },
+ { 0, K_8, J_8, L_8 },
+ { 0, K_7, J_7, L_7 },
+ { 0, K_6, J_6, L_6 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_2, J_2, L_2 },
+ { 0, K_1, J_1, L_1 },
-led_config_t g_led_config = { {
- { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },
- { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 },
- { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 },
- { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, NO_LED, 41 },
- { 62, 61, 60, NO_LED, NO_LED, 59, NO_LED, NO_LED, 58, 57, 56, 55, NO_LED, 54 }
-}, {
- { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 },
- { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 },
- { 214, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, { 224, 48 },
- { 208, 48 }, { 186, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 36, 48 }, { 9, 48 }, { 224, 64 }, { 208, 64 },
- { 192, 64 }, { 176, 64 }, { 160, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 }
-}, {
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
- 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
- 1, 1, 1, 4, 1, 1, 1
-} };
+ { 0, H_14, G_14, I_14 },
+ { 0, H_13, G_13, I_13 },
+ { 0, H_12, G_12, I_12 },
+ { 0, H_11, G_11, I_11 },
+ { 0, H_10, G_10, I_10 },
+ { 0, H_9, G_9, I_9 },
+ { 0, H_8, G_8, I_8 },
+ { 0, H_7, G_7, I_7 },
+ { 0, H_6, G_6, I_6 },
+ { 0, H_5, G_5, I_5 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_1, G_1, I_1 },
+ { 0, E_14, D_14, F_14 },
+ { 0, E_12, D_12, F_12 },
+ { 0, E_11, D_11, F_11 },
+ { 0, E_10, D_10, F_10 },
+ { 0, E_9, D_9, F_9 },
+ { 0, E_8, D_8, F_8 },
+ { 0, E_7, D_7, F_7 },
+ { 0, E_6, D_6, F_6 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_1, D_1, F_1 },
+ { 0, B_14, A_14, C_14 },
+ { 0, B_13, A_13, C_13 },
+ { 0, B_11, A_11, C_11 },
+ { 0, B_10, A_10, C_10 },
+ { 0, B_9, A_9, C_9 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_7, A_7, C_7 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_4, A_4, C_4 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_1, A_1, C_1 },
+
+ { 0, B_15, A_15, C_15 },
+ { 0, E_13, D_13, F_13 },
+ { 0, B_12, A_12, C_12 },
+ { 0, E_15, D_15, F_15 },
+ { 0, H_15, G_15, I_15 },
+ { 0, B_16, A_16, C_16 },
+ { 0, E_16, D_16, F_16 },
+ { 0, H_16, G_16, I_16 },
+ { 0, K_16, J_16, L_16 }
+};
+
+led_config_t g_led_config = {
+ {
+ { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },
+ { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 },
+ { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 },
+ { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, NO_LED, 41 },
+ { 62, 61, 60, NO_LED, NO_LED, 59, NO_LED, NO_LED, 58, 57, 56, 55, NO_LED, 54 }
+ }, {
+ { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 },
+ { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 },
+ { 214, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 },
+ { 224, 48 }, { 208, 48 }, { 186, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 36, 48 }, { 9, 48 },
+ { 224, 64 }, { 208, 64 }, { 192, 64 }, { 176, 64 }, { 160, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 }
+ }, {
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1, 4, 1, 1, 1
+ }
+};
#endif
-void matrix_init_kb(void) {
- 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 suspend_power_down_kb(void)
-{
+void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true);
suspend_power_down_user();
}
-void suspend_wakeup_init_kb(void)
-{
+void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user();
}
+
__attribute__ ((weak))
-void rgb_matrix_indicators_user(void)
-{
- if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK))
- {
+void rgb_matrix_indicators_user(void) {
+ if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
}
}
-
diff --git a/keyboards/dztech/dz60rgb/dz60rgb.h b/keyboards/dztech/dz60rgb/dz60rgb.h
index a029933f1f..872be7e1b3 100644
--- a/keyboards/dztech/dz60rgb/dz60rgb.h
+++ b/keyboards/dztech/dz60rgb/dz60rgb.h
@@ -1,12 +1,15 @@
#pragma once
-#define XXX KC_NO
+
#include "quantum.h"
+
+#define XXX KC_NO
+
#define LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
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, K2D, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
- K40, K41, K42, K45, K48, K49, K4A, K4B, K4D \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K48, K49, K4A, K4B, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
diff --git a/keyboards/dztech/dz60rgb/info.json b/keyboards/dztech/dz60rgb/info.json
index b82ba5d4c8..0f03fa9f7e 100644
--- a/keyboards/dztech/dz60rgb/info.json
+++ b/keyboards/dztech/dz60rgb/info.json
@@ -6,8 +6,75 @@
"height": 5,
"layouts": {
"LAYOUT": {
- "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}, {"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":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"\u2191", "x":13, "y":3},{"label":"?", "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}, {"label":"Ctrl", "x":11, "y":4}, {"label":"\u2190", "x":12, "y":4}, {"label":"\u2193", "x":13, "y":4}, {"label":"\u2192", "x":14, "y":4}]
+ "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, "w":2},
+
+ {"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, "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, "w":1.75},
+ {"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":6.25},
+ {"x":10, "y":4},
+ {"x":11, "y":4},
+ {"x":12, "y":4},
+ {"x":13, "y":4},
+ {"x":14, "y":4}
+ ]
}
}
}
diff --git a/keyboards/dztech/dz60rgb/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb/keymaps/default/keymap.c
index b82433bd9d..4bffe50db8 100644
--- a/keyboards/dztech/dz60rgb/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz60rgb/keymaps/default/keymap.c
@@ -1,49 +1,39 @@
#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
-#define _LAYER2 2
-#define _LAYER3 3
-#define _LAYER4 4
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT( /* Base */
- 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_BSLASH,\
- CTL_T(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, RSFT_T(KC_SLSH), KC_UP, LT(2, KC_DEL),\
- KC_LCTL, KC_LGUI, LM(1, MOD_LALT), KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
- [_LAYER1] = LAYOUT( /* FN */
- TO(3), 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_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET ,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, EEP_RST,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_VOLU, KC_MUTE,\
- KC_TRNS, KC_TRNS, KC_TRNS, TO(4), KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
- [_LAYER2] = LAYOUT( /* LIGHT */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, RESET ,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, EEP_RST,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [_LAYER3] = LAYOUT( /* NUMPAD */
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_TRNS,\
- KC_TRNS, KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, TO(0),\
- KC_TRNS, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_TRNS, KC_PENT,\
- KC_TRNS, KC_P1, KC_P2, KC_P3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_TRNS, KC_TRNS,\
- KC_TRNS, KC_P0, KC_PDOT, KC_PENT, KC_P0, KC_PDOT, KC_TRNS, KC_TRNS, KC_TRNS),
- [_LAYER4] = LAYOUT( /* SWITCH LALT AND LGUI */
- 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_BSLASH,\
- CTL_T(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, RSFT_T(KC_SLSH), KC_UP, LT(2, KC_DEL),\
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, TO(0), KC_LEFT, KC_DOWN, KC_RIGHT),
- };
-void matrix_init_user(void) {
- //user initialization
-}
-
-void matrix_scan_user(void) {
- //user matrix
-}
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
- }
+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_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,
+ CTL_T(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, RSFT_T(KC_SLSH), KC_UP, LT(2, KC_DEL),
+ KC_LCTL, KC_LGUI, LM(1, MOD_LALT), KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ TO(3), 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_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, EEP_RST,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_VOLU, KC_MUTE,
+ _______, _______, _______, TO(4), _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+ [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_DEL,
+ _______, RGB_TOG, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, EEP_RST,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, _______, _______, _______, _______, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, _______,
+ _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, TO(0),
+ _______, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, KC_PENT,
+ _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______,
+ _______, KC_P0, KC_PDOT, KC_PENT, KC_P0, KC_PDOT, _______, _______, _______
+ ),
+ [4] = 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_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,
+ CTL_T(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, RSFT_T(KC_SLSH), KC_UP, LT(2, KC_DEL),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, TO(0), KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h b/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h
new file mode 100644
index 0000000000..3c88721777
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/keymaps/kgreulich/config.h
@@ -0,0 +1,70 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define PERMISSIVE_HOLD
+
+#define TAP_HOLD_CAPS_DELAY 0
+#define USB_POLLING_INTERVAL_MS 1
+
+#define QMK_KEYS_PER_SCAN 4
+
+// some speed shit
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+#ifndef NO_DEBUG
+#define NO_DEBUG
+#endif // !NO_DEBUG
+#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
+#define NO_PRINT
+#endif // !NO_PRINT
+
+#define NO_ACTION_ONESHOT
+#define TAPPING_FORCE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// #include "config_led.h"
+// #include "dz60rgb.h"
+#undef DISABLE_RGB_MATRIX_SPLASH
+#undef DISABLE_RGB_MATRIX_MULTISPLASH
+#undef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#undef RGB_MATRIX_STARTUP_MODE
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define DISABLE_RGB_MATRIX_SOLID_COLOR
+#define DISABLE_RGB_MATRIX_ALPHAS_MODS
+#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define DISABLE_RGB_MATRIX_BREATHING
+#define DISABLE_RGB_MATRIX_BAND_SAT
+#define DISABLE_RGB_MATRIX_BAND_VAL
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define DISABLE_RGB_MATRIX_CYCLE_ALL
+#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define DISABLE_RGB_MATRIX_DUAL_BEACON
+#define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define DISABLE_RGB_MATRIX_RAINDROPS
+#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+#define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+//#define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define DISABLE_RGB_MATRIX_SPLASH
+#define DISABLE_RGB_MATRIX_MULTISPLASH
+#define DISABLE_RGB_MATRIX_SOLID_SPLASH
+#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/dztech/dz60rgb/keymaps/kgreulich/keymap.c b/keyboards/dztech/dz60rgb/keymaps/kgreulich/keymap.c
new file mode 100644
index 0000000000..cf067bdeb2
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/keymaps/kgreulich/keymap.c
@@ -0,0 +1,25 @@
+#include QMK_KEYBOARD_H
+
+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_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_UP, LT(2, KC_DEL),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ 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_DEL,
+ _______, _______, _______, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, EEP_RST,
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_VOLU, KC_MUTE,
+ _______, _______, _______, KC_SPC, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+ [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_DEL,
+ _______, RGB_TOG, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, EEP_RST,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/dztech/dz60rgb/keymaps/kgreulich/rules.mk b/keyboards/dztech/dz60rgb/keymaps/kgreulich/rules.mk
new file mode 100644
index 0000000000..8a502e9ee3
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/keymaps/kgreulich/rules.mk
@@ -0,0 +1 @@
+NKRO_ENABLE = yes # USB Nkey Rollover
diff --git a/keyboards/dztech/dz60rgb/readme.md b/keyboards/dztech/dz60rgb/readme.md
index 2fffa413b6..1b2eb6f85f 100644
--- a/keyboards/dztech/dz60rgb/readme.md
+++ b/keyboards/dztech/dz60rgb/readme.md
@@ -4,12 +4,18 @@
A hotswap 60% RGB keyboard.
-Keyboard Maintainer: DZtech
-Hardware Supported: DZtech dz60rgb, dz60rgb-ansi
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: DZtech DZ60RGB V1 and V2
+* Hardware Availability: [KBDfans](https://kbdfans.com/)
+
+There are two versions of the DZ60RGB. Please use the appropriate firmware for your board.
+
+* V1: STM32F303 (Arm), takes .bin files
+* V2: ATmega32U4 (AVR), takes .hex files
Make example for this keyboard (after setting up your build environment):
- make dztech/dz60rgb:default
+ make dztech/dz60rgb/v1:default # Arm (STM32F303)
+ make dztech/dz60rgb/v2:default # AVR (ATmega32U4)
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/dztech/dz60rgb/rules.mk b/keyboards/dztech/dz60rgb/rules.mk
deleted file mode 100644
index f381ca585c..0000000000
--- a/keyboards/dztech/dz60rgb/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# MCU name
-MCU = STM32F303
-
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = lite # 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
-NKRO_ENABLE = no # USB Nkey Rollover
-AUDIO_ENABLE = no
-RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
-NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/dztech/dz60rgb/v1/config.h b/keyboards/dztech/dz60rgb/v1/config.h
new file mode 100644
index 0000000000..b22b8f5dcb
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v1/config.h
@@ -0,0 +1,56 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1219
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ60RGB
+#define DESCRIPTION DZ60 ARM RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { B1, B10, B11, B14, B12 }
+#define MATRIX_COL_PINS { A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_LED_PROCESS_LIMIT 4
+# define RGB_MATRIX_LED_FLUSH_LIMIT 26
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 63
+# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif
diff --git a/keyboards/dztech/dz60rgb/v1/rules.mk b/keyboards/dztech/dz60rgb/v1/rules.mk
new file mode 100644
index 0000000000..c06ab43338
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v1/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/dztech/dz60rgb/v2/config.h b/keyboards/dztech/dz60rgb/v2/config.h
new file mode 100644
index 0000000000..c145cf03bc
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v2/config.h
@@ -0,0 +1,66 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1219
+#define DEVICE_VER 0x0002
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ60RGB
+#define DESCRIPTION DZ60 AVR RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { F5, F4, F1, B3, B2 }
+#define MATRIX_COL_PINS { C7, F7, F6, F0, B0, B1, B4, D7, D6, D4, D5, D3, D2, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BAND_SAT
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 63
+# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif
diff --git a/keyboards/dztech/dz60rgb/v2/rules.mk b/keyboards/dztech/dz60rgb/v2/rules.mk
new file mode 100644
index 0000000000..ed91876fbf
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v2/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/dztech/dz60rgb_ansi/config.h b/keyboards/dztech/dz60rgb_ansi/config.h
index 2bd40a44d0..b8c5759db6 100644
--- a/keyboards/dztech/dz60rgb_ansi/config.h
+++ b/keyboards/dztech/dz60rgb_ansi/config.h
@@ -1,39 +1,3 @@
#pragma once
#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1219
-#define DEVICE_VER 0x0001
-#define MANUFACTURER DZTECH
-
-#define PRODUCT DZ60RGB
-#define DESCRIPTION DZ60 ARM RGB keyboard
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-#define MATRIX_ROW_PINS { B1, B10, B11, B14, B12 }
-#define MATRIX_COL_PINS {A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14 }
-
-/* #define UNUSED_PINS {A0,A1,A2, A3,A4,A9,A10,C15,A13,A14,B2}*/
-
-#define DIODE_DIRECTION COL2ROW
-
-#define DEBOUNCE 3
-#ifdef RGB_MATRIX_ENABLE
-#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
-#define RGB_MATRIX_KEYPRESSES
-#define RGB_MATRIX_LED_PROCESS_LIMIT 4
-#define RGB_MATRIX_LED_FLUSH_LIMIT 26
-#define DISABLE_RGB_MATRIX_SPLASH
-#define DISABLE_RGB_MATRIX_MULTISPLASH
-#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
-#define DRIVER_COUNT 2
-#define DRIVER_1_LED_TOTAL 61
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
-#endif \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c
index 6cb82dd542..910797120b 100644
--- a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c
+++ b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c
@@ -1,118 +1,110 @@
#include "dz60rgb_ansi.h"
+
#ifdef RGB_MATRIX_ENABLE
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
- {0, K_14, J_14, L_14},
- {0, K_13, J_13, L_13},
- {0, K_12, J_12, L_12},
- {0, K_11, J_11, L_11},
- {0, K_10, J_10, L_10},
- {0, K_9, J_9, L_9},
- {0, K_8, J_8, L_8},
- {0, K_7, J_7, L_7},
- {0, K_6, J_6, L_6},
- {0, K_5, J_5, L_5},
- {0, K_4, J_4, L_4},
- {0, K_3, J_3, L_3},
- {0, K_2, J_2, L_2},
- {0, K_1, J_1, L_1},
- {0, H_14, G_14, I_14},
- {0, H_13, G_13, I_13},
- {0, H_12, G_12, I_12},
- {0, H_11, G_11, I_11},
- {0, H_10, G_10, I_10},
- {0, H_9, G_9, I_9},
- {0, H_8, G_8, I_8},
- {0, H_7, G_7, I_7},
- {0, H_6, G_6, I_6},
- {0, H_5, G_5, I_5},
- {0, H_4, G_4, I_4},
- {0, H_3, G_3, I_3},
- {0, H_2, G_2, I_2},
- {0, H_1, G_1, I_1},
- {0, E_14, D_14, F_14},
- {0, E_12, D_12, F_12},
- {0, E_11, D_11, F_11},
- {0, E_10, D_10, F_10},
- {0, E_9, D_9, F_9},
- {0, E_8, D_8, F_8},
- {0, E_7, D_7, F_7},
- {0, E_6, D_6, F_6},
- {0, E_5, D_5, F_5},
- {0, E_4, D_4, F_4},
- {0, E_3, D_3, F_3},
- {0, E_2, D_2, F_2},
- {0, E_1, D_1, F_1},
- {0, B_13, A_13, C_13},
- {0, B_11, A_11, C_11},
- {0, B_10, A_10, C_10},
- {0, B_9, A_9, C_9},
- {0, B_8, A_8, C_8},
- {0, B_7, A_7, C_7},
- {0, B_6, A_6, C_6},
- {0, B_5, A_5, C_5},
- {0, B_4, A_4, C_4},
- {0, B_3, A_3, C_3},
- {0, B_2, A_2, C_2},
- {0, B_1, A_1, C_1},
- {0, B_15, A_15, C_15},
- {0, E_13, D_13, F_13},
- {0, B_12, A_12, C_12},
- {0, E_15, D_15, F_15},
- {0, B_16, A_16, C_16},
- {0, E_16, D_16, F_16},
- {0, H_16, G_16, I_16},
- {0, K_16, J_16, L_16},
+ { 0, K_14, J_14, L_14 },
+ { 0, K_13, J_13, L_13 },
+ { 0, K_12, J_12, L_12 },
+ { 0, K_11, J_11, L_11 },
+ { 0, K_10, J_10, L_10 },
+ { 0, K_9, J_9, L_9 },
+ { 0, K_8, J_8, L_8 },
+ { 0, K_7, J_7, L_7 },
+ { 0, K_6, J_6, L_6 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_2, J_2, L_2 },
+ { 0, K_1, J_1, L_1 },
+
+ { 0, H_14, G_14, I_14 },
+ { 0, H_13, G_13, I_13 },
+ { 0, H_12, G_12, I_12 },
+ { 0, H_11, G_11, I_11 },
+ { 0, H_10, G_10, I_10 },
+ { 0, H_9, G_9, I_9 },
+ { 0, H_8, G_8, I_8 },
+ { 0, H_7, G_7, I_7 },
+ { 0, H_6, G_6, I_6 },
+ { 0, H_5, G_5, I_5 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_1, G_1, I_1 },
+
+ { 0, E_14, D_14, F_14 },
+ { 0, E_12, D_12, F_12 },
+ { 0, E_11, D_11, F_11 },
+ { 0, E_10, D_10, F_10 },
+ { 0, E_9, D_9, F_9 },
+ { 0, E_8, D_8, F_8 },
+ { 0, E_7, D_7, F_7 },
+ { 0, E_6, D_6, F_6 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_1, D_1, F_1 },
+
+ { 0, B_13, A_13, C_13 },
+ { 0, B_11, A_11, C_11 },
+ { 0, B_10, A_10, C_10 },
+ { 0, B_9, A_9, C_9 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_7, A_7, C_7 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_4, A_4, C_4 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_1, A_1, C_1 },
+
+ { 0, B_15, A_15, C_15 },
+ { 0, E_13, D_13, F_13 },
+ { 0, B_12, A_12, C_12 },
+ { 0, E_15, D_15, F_15 },
+ { 0, B_16, A_16, C_16 },
+ { 0, E_16, D_16, F_16 },
+ { 0, H_16, G_16, I_16 },
+ { 0, K_16, J_16, L_16 }
};
-led_config_t g_led_config = { {
- { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },
- { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 },
- { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 },
- { 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, NO_LED, NO_LED },
- { 60, 59, 58, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, 56, 55, 54, NO_LED, 53 }
-}, {
- { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 },
- { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 },
- { 214, 24 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, { 210, 48 },
- { 180, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 20, 48 }, { 10, 48 }, { 222, 64 }, { 202, 64 }, { 182, 64 },
- { 162, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 }
-}, {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
- 1, 4, 1, 1, 1
-} };
+led_config_t g_led_config = {
+ {
+ { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },
+ { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 },
+ { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 },
+ { 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, NO_LED, NO_LED },
+ { 60, 59, 58, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, 56, 55, 54, NO_LED, 53 }
+ }, {
+ { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 },
+ { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 },
+ { 214, 24 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 },
+ { 210, 48 }, { 180, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 20, 48 }, { 10, 48 },
+ { 222, 64 }, { 202, 64 }, { 182, 64 }, { 162, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 }
+ }, {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 4, 1, 1, 1
+ }
+};
#endif
-void matrix_init_kb(void) {
- 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 suspend_power_down_kb(void)
-{
+void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true);
suspend_power_down_user();
}
-void suspend_wakeup_init_kb(void)
-{
+void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user();
}
-
__attribute__ ((weak))
-void rgb_matrix_indicators_user(void)
-{
- if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK))
- {
+void rgb_matrix_indicators_user(void) {
+ if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
}
}
-
diff --git a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h
index de30c58a73..e522c482c2 100644
--- a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h
+++ b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h
@@ -1,12 +1,15 @@
#pragma once
-#define XXX KC_NO
+
#include "quantum.h"
+
+#define XXX KC_NO
+
#define LAYOUT_60_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
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, K2D, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
- K40, K41, K42, K45, K49, K4A, K4B, K4D \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
diff --git a/keyboards/dztech/dz60rgb_ansi/info.json b/keyboards/dztech/dz60rgb_ansi/info.json
index 8e449be1df..3e55011c1d 100644
--- a/keyboards/dztech/dz60rgb_ansi/info.json
+++ b/keyboards/dztech/dz60rgb_ansi/info.json
@@ -1,13 +1,78 @@
{
- "keyboard_name": "dz60rgb_ansi",
- "url": "",
- "maintainer": "dztch",
- "width": 14,
- "height": 5,
- "layouts": {
+ "keyboard_name": "dz60rgb_ansi",
+ "url": "",
+ "maintainer": "dztech",
+ "width": 15,
+ "height": 5,
+ "layouts": {
"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}]
+ "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, "w":2},
+
+ {"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, "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":2.75},
+
+ {"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":12.5, "y":4, "w":1.25},
+ {"x":13.75, "y":4, "w":1.25}
+ ]
}
}
}
diff --git a/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c
index ac033f308c..12a2a1a145 100644
--- a/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c
@@ -1,36 +1,25 @@
#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
-#define _LAYER2 2
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_60_ansi( /* Base */
- 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_BSLASH,\
- CTL_T(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(1), MO(2), KC_RCTL),
- [_LAYER1] = LAYOUT_60_ansi( /* FN */
- KC_GESC, 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_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET ,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [_LAYER2] = LAYOUT_60_ansi( /* FN2 */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, RESET ,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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) {
- //user initialization
-}
-void matrix_scan_user(void) {
- //user matrix
-}
-
- bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
- }
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_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_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,
+ CTL_T(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(1), MO(2), KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi(
+ KC_GESC, 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_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_MNXT,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_ansi(
+ _______, 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_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/dztech/dz60rgb_ansi/readme.md b/keyboards/dztech/dz60rgb_ansi/readme.md
index 2fffa413b6..aa15dda890 100644
--- a/keyboards/dztech/dz60rgb_ansi/readme.md
+++ b/keyboards/dztech/dz60rgb_ansi/readme.md
@@ -1,15 +1,21 @@
-# DZ60RGB
+# DZ60RGB-ANSI
![dz60rgb](https://cdn.shopify.com/s/files/1/0043/9140/3591/products/TIM_20190130170231_grande.jpg?v=1548839053)
A hotswap 60% RGB keyboard.
-Keyboard Maintainer: DZtech
-Hardware Supported: DZtech dz60rgb, dz60rgb-ansi
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: DZtech DZ60RGB-ANSI V1 and V2
+* Hardware Availability: [KBDfans](https://kbdfans.com/)
+
+There are two versions of the DZ60RGB-ANSI. Please use the appropriate firmware for your board.
+
+* V1: STM32F303 (Arm), takes .bin files
+* V2: ATmega32U4 (AVR), takes .hex files
Make example for this keyboard (after setting up your build environment):
- make dztech/dz60rgb:default
+ make dztech/dz60rgb_ansi/v1:default # Arm (STM32F303)
+ make dztech/dz60rgb_ansi/v2:default # AVR (ATmega32U4)
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/dztech/dz60rgb_ansi/rules.mk b/keyboards/dztech/dz60rgb_ansi/rules.mk
deleted file mode 100644
index 0636150529..0000000000
--- a/keyboards/dztech/dz60rgb_ansi/rules.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# MCU name
-MCU = STM32F303
-
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = lite # 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
-NKRO_ENABLE = no # USB Nkey Rollover
-AUDIO_ENABLE = no
-RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
-NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
-
-LAYOUTS = 60_ansi
diff --git a/keyboards/dztech/dz60rgb_ansi/v1/config.h b/keyboards/dztech/dz60rgb_ansi/v1/config.h
new file mode 100644
index 0000000000..050f66c6fc
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/v1/config.h
@@ -0,0 +1,56 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1220
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ60RGB_ANSI
+#define DESCRIPTION DZ60 ARM RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { B1, B10, B11, B14, B12 }
+#define MATRIX_COL_PINS { A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_LED_PROCESS_LIMIT 4
+# define RGB_MATRIX_LED_FLUSH_LIMIT 26
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 61
+# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif
diff --git a/keyboards/dztech/dz60rgb_ansi/v1/rules.mk b/keyboards/dztech/dz60rgb_ansi/v1/rules.mk
new file mode 100644
index 0000000000..c06ab43338
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/v1/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/dztech/dz60rgb_ansi/v2/config.h b/keyboards/dztech/dz60rgb_ansi/v2/config.h
new file mode 100644
index 0000000000..b357ceefe7
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/v2/config.h
@@ -0,0 +1,66 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1220
+#define DEVICE_VER 0x0002
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ60RGB_ANSI
+#define DESCRIPTION DZ60 AVR RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { F5, F4, F1, B3, B2 }
+#define MATRIX_COL_PINS { C7, F7, F6, F0, B0, B1, B4, D7, D6, D4, D5, D3, D2, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BAND_SAT
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 61
+# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif
diff --git a/keyboards/dztech/dz60rgb_ansi/v2/rules.mk b/keyboards/dztech/dz60rgb_ansi/v2/rules.mk
new file mode 100644
index 0000000000..ed91876fbf
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/v2/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/dztech/dz60rgb_wkl/config.h b/keyboards/dztech/dz60rgb_wkl/config.h
index 44ff5f1570..b8c5759db6 100644
--- a/keyboards/dztech/dz60rgb_wkl/config.h
+++ b/keyboards/dztech/dz60rgb_wkl/config.h
@@ -1,39 +1,3 @@
#pragma once
#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1219
-#define DEVICE_VER 0x0001
-#define MANUFACTURER DZTECH
-
-#define PRODUCT DZ60RGB
-#define DESCRIPTION DZ60 ARM RGB keyboard
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-#define MATRIX_ROW_PINS { B1, B10, B11, B14, B12 }
-#define MATRIX_COL_PINS {A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14 }
-
-/* #define UNUSED_PINS {A0,A1,A2, A3,A4,A9,A10,C15,A13,A14,B2}*/
-
-#define DIODE_DIRECTION COL2ROW
-
-#define DEBOUNCE 3
-#ifdef RGB_MATRIX_ENABLE
-#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
-#define RGB_MATRIX_KEYPRESSES
-#define RGB_MATRIX_LED_PROCESS_LIMIT 4
-#define RGB_MATRIX_LED_FLUSH_LIMIT 26
-#define DISABLE_RGB_MATRIX_SPLASH
-#define DISABLE_RGB_MATRIX_MULTISPLASH
-#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
-#define DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
-#define DRIVER_COUNT 2
-#define DRIVER_1_LED_TOTAL 62
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
-#endif \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c
index 1c0edb7227..482e98fa43 100644
--- a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c
+++ b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c
@@ -1,116 +1,111 @@
#include "dz60rgb_wkl.h"
+
#ifdef RGB_MATRIX_ENABLE
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
- {0, H_15, G_15, I_15},
- {0, K_14, J_14, L_14},
- {0, K_13, J_13, L_13},
- {0, K_12, J_12, L_12},
- {0, K_11, J_11, L_11},
- {0, K_10, J_10, L_10},
- {0, K_9, J_9, L_9},
- {0, K_8, J_8, L_8},
- {0, K_7, J_7, L_7},
- {0, K_6, J_6, L_6},
- {0, K_5, J_5, L_5},
- {0, K_4, J_4, L_4},
- {0, K_3, J_3, L_3},
- {0, K_2, J_2, L_2},
- {0, K_1, J_1, L_1},
- {0, H_14, G_14, I_14},
- {0, H_13, G_13, I_13},
- {0, H_12, G_12, I_12},
- {0, H_11, G_11, I_11},
- {0, H_10, G_10, I_10},
- {0, H_9, G_9, I_9},
- {0, H_8, G_8, I_8},
- {0, H_7, G_7, I_7},
- {0, H_6, G_6, I_6},
- {0, H_5, G_5, I_5},
- {0, H_4, G_4, I_4},
- {0, H_3, G_3, I_3},
- {0, H_2, G_2, I_2},
- {0, H_1, G_1, I_1},
- {0, E_14, D_14, F_14},
- {0, E_12, D_12, F_12},
- {0, E_11, D_11, F_11},
- {0, E_10, D_10, F_10},
- {0, E_9, D_9, F_9},
- {0, E_8, D_8, F_8},
- {0, E_7, D_7, F_7},
- {0, E_6, D_6, F_6},
- {0, E_5, D_5, F_5},
- {0, E_4, D_4, F_4},
- {0, E_3, D_3, F_3},
- {0, E_2, D_2, F_2},
- {0, E_1, D_1, F_1},
- {0, B_14, A_14, C_14},
- {0, B_13, A_13, C_13},
- {0, B_11, A_11, C_11},
- {0, B_10, A_10, C_10},
- {0, B_9, A_9, C_9},
- {0, B_8, A_8, C_8},
- {0, B_7, A_7, C_7},
- {0, B_6, A_6, C_6},
- {0, B_5, A_5, C_5},
- {0, B_4, A_4, C_4},
- {0, B_3, A_3, C_3},
- {0, B_2, A_2, C_2},
- {0, B_1, A_1, C_1},
- {0, B_15, A_15, C_15},
- {0, E_13, D_13, F_13},
- {0, B_12, A_12, C_12},
- {0, B_16, A_16, C_16},
- {0, E_16, D_16, F_16},
- {0, H_16, G_16, I_16},
- {0, K_16, J_16, L_16},
+ { 0, H_15, G_15, I_15 },
+ { 0, K_14, J_14, L_14 },
+ { 0, K_13, J_13, L_13 },
+ { 0, K_12, J_12, L_12 },
+ { 0, K_11, J_11, L_11 },
+ { 0, K_10, J_10, L_10 },
+ { 0, K_9, J_9, L_9 },
+ { 0, K_8, J_8, L_8 },
+ { 0, K_7, J_7, L_7 },
+ { 0, K_6, J_6, L_6 },
+ { 0, K_5, J_5, L_5 },
+ { 0, K_4, J_4, L_4 },
+ { 0, K_3, J_3, L_3 },
+ { 0, K_2, J_2, L_2 },
+ { 0, K_1, J_1, L_1 },
+
+ { 0, H_14, G_14, I_14 },
+ { 0, H_13, G_13, I_13 },
+ { 0, H_12, G_12, I_12 },
+ { 0, H_11, G_11, I_11 },
+ { 0, H_10, G_10, I_10 },
+ { 0, H_9, G_9, I_9 },
+ { 0, H_8, G_8, I_8 },
+ { 0, H_7, G_7, I_7 },
+ { 0, H_6, G_6, I_6 },
+ { 0, H_5, G_5, I_5 },
+ { 0, H_4, G_4, I_4 },
+ { 0, H_3, G_3, I_3 },
+ { 0, H_2, G_2, I_2 },
+ { 0, H_1, G_1, I_1 },
+
+ { 0, E_14, D_14, F_14 },
+ { 0, E_12, D_12, F_12 },
+ { 0, E_11, D_11, F_11 },
+ { 0, E_10, D_10, F_10 },
+ { 0, E_9, D_9, F_9 },
+ { 0, E_8, D_8, F_8 },
+ { 0, E_7, D_7, F_7 },
+ { 0, E_6, D_6, F_6 },
+ { 0, E_5, D_5, F_5 },
+ { 0, E_4, D_4, F_4 },
+ { 0, E_3, D_3, F_3 },
+ { 0, E_2, D_2, F_2 },
+ { 0, E_1, D_1, F_1 },
+
+ { 0, B_14, A_14, C_14 },
+ { 0, B_13, A_13, C_13 },
+ { 0, B_11, A_11, C_11 },
+ { 0, B_10, A_10, C_10 },
+ { 0, B_9, A_9, C_9 },
+ { 0, B_8, A_8, C_8 },
+ { 0, B_7, A_7, C_7 },
+ { 0, B_6, A_6, C_6 },
+ { 0, B_5, A_5, C_5 },
+ { 0, B_4, A_4, C_4 },
+ { 0, B_3, A_3, C_3 },
+ { 0, B_2, A_2, C_2 },
+ { 0, B_1, A_1, C_1 },
+
+ { 0, B_15, A_15, C_15 },
+ { 0, E_13, D_13, F_13 },
+ { 0, B_12, A_12, C_12 },
+ { 0, B_16, A_16, C_16 },
+ { 0, E_16, D_16, F_16 },
+ { 0, H_16, G_16, I_16 },
+ { 0, K_16, J_16, L_16 }
};
-led_config_t g_led_config = { {
- { 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 },
- { 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15 },
- { 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 0, 29 },
- { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, NO_LED, 42 },
- { 61, 60, 59, NO_LED, NO_LED, 58, NO_LED, NO_LED, NO_LED, NO_LED, 57, 56, NO_LED, 55 }
-}, {
- { 224, 0 }, { 208, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 },
- { 0, 0 }, { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 },
- { 4, 16 }, { 204, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 },
- { 224, 48 }, { 202, 48 }, { 180, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 20, 48 }, { 10, 48 }, { 218, 64 },
- { 198, 64 }, { 178, 64 }, { 112, 64 }, { 46, 64 }, { 26, 64 }, { 6, 64 }
-}, {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
- 1, 1, 4, 1, 1, 1
-} };
+led_config_t g_led_config = {
+ {
+ { 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 },
+ { 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15 },
+ { 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 0, 29 },
+ { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, NO_LED, 42 },
+ { 61, 60, 59, NO_LED, NO_LED, 58, NO_LED, NO_LED, NO_LED, NO_LED, 57, 56, NO_LED, 55 }
+ }, {
+ { 224, 0 }, { 208, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 },
+ { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 },
+ { 204, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 },
+ { 224, 48 }, { 202, 48 }, { 180, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 20, 48 }, { 10, 48 },
+ { 218, 64 }, { 198, 64 }, { 178, 64 }, { 112, 64 }, { 46, 64 }, { 26, 64 }, { 6, 64 }
+ }, {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 4, 1, 1, 1
+ }
+};
#endif
-void matrix_init_kb(void) {
- 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 suspend_power_down_kb(void)
-{
+
+void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true);
suspend_power_down_user();
}
-void suspend_wakeup_init_kb(void)
-{
+void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user();
}
__attribute__ ((weak))
-void rgb_matrix_indicators_user(void)
-{
- if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK))
- {
+void rgb_matrix_indicators_user(void) {
+ if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(41, 0xFF, 0xFF, 0xFF);
}
}
diff --git a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h
index 46b07fdb0d..5f47903fc8 100644
--- a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h
+++ b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h
@@ -1,16 +1,21 @@
#pragma once
-#define XXX KC_NO
+
#include "quantum.h"
-#define LAYOUT_HHKB( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C,\
- 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, K2D,\
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D,\
- K40, K41, K42, K45, K4A, K4B, K4D \
+
+#define XXX KC_NO
+
+#define LAYOUT_60_tsangan_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2C, \
+ 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, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D}, \
- { 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, XXX, K3D }, \
- { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, XXX, K4A, K4B, XXX, K4D } \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { 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, XXX, K3D }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, XXX, K4A, K4B, XXX, K4D } \
}
+
+#define LAYOUT_HHKB LAYOUT_60_tsangan_hhkb
diff --git a/keyboards/dztech/dz60rgb_wkl/info.json b/keyboards/dztech/dz60rgb_wkl/info.json
index 4c3c3681bc..2e4923ab05 100644
--- a/keyboards/dztech/dz60rgb_wkl/info.json
+++ b/keyboards/dztech/dz60rgb_wkl/info.json
@@ -1,12 +1,79 @@
{
- "keyboard_name": "dz60rgb_wkl",
- "url": "",
- "maintainer": "dztech",
- "width": 15,
- "height": 5,
+ "keyboard_name": "dz60rgb_wkl",
+ "url": "",
+ "maintainer": "dztech",
+ "width": 15,
+ "height": 5,
"layouts": {
- "LAYOUT_HHKB": {
- "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, "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":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+ "LAYOUT_60_tsangan_hhkb": {
+ "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, "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":0, "y":4, "w":1.5},
+ {"x":1.5, "y":4},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":12.5, "y":4},
+ {"x":13.5, "y":4, "w":1.5}
+ ]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
index c7e69a5be0..a881a23762 100644
--- a/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
@@ -1,37 +1,25 @@
#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
-#define _LAYER2 2
-#define _LAYER3 3
-#define _LAYER4 4
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_HHKB( /* Base */
- 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_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_BSPC,
- CTL_T(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, MO(2),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, MO(1), KC_RCTL),
- [_LAYER1] = LAYOUT_HHKB( /* FN */
- 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, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET ,
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [_LAYER2] = LAYOUT_HHKB( /* FN2 */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, RESET,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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) {
- //user initialization
-}
-
-void matrix_scan_user(void) {
- //user matrix
-}
- bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
- }
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_tsangan_hhkb(
+ 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_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_BSPC,
+ CTL_T(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, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
+ ),
+ [1] = LAYOUT_60_tsangan_hhkb(
+ 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_UP, _______, _______, _______, KC_CALC, _______, KC_INS, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
+ KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, NK_TOGG, _______, _______, KC_END, KC_PGDN, KC_MNXT, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_tsangan_hhkb(
+ _______, 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_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPI, RGB_SPD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/dztech/dz60rgb_wkl/readme.md b/keyboards/dztech/dz60rgb_wkl/readme.md
index 2fffa413b6..a80236437a 100644
--- a/keyboards/dztech/dz60rgb_wkl/readme.md
+++ b/keyboards/dztech/dz60rgb_wkl/readme.md
@@ -4,12 +4,18 @@
A hotswap 60% RGB keyboard.
-Keyboard Maintainer: DZtech
-Hardware Supported: DZtech dz60rgb, dz60rgb-ansi
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: DZtech DZ60RGB-WKL V1 and V2
+* Hardware Availability: [KBDfans](https://kbdfans.com/)
+
+There are two versions of the DZ60RGB-WKL. Please use the appropriate firmware for your board.
+
+* V1: STM32F303 (Arm), takes .bin files
+* V2: ATmega32U4 (AVR), takes .hex files
Make example for this keyboard (after setting up your build environment):
- make dztech/dz60rgb:default
+ make dztech/dz60rgb_wkl/v1:default # Arm (STM32F303)
+ make dztech/dz60rgb_wkl/v2:default # AVR (ATmega32U4)
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/dztech/dz60rgb_wkl/rules.mk b/keyboards/dztech/dz60rgb_wkl/rules.mk
deleted file mode 100644
index ed30bec8b6..0000000000
--- a/keyboards/dztech/dz60rgb_wkl/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-MCU = STM32F303
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = lite # 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
-NKRO_ENABLE = no # USB Nkey Rollover
-AUDIO_ENABLE = no
-RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
-NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb_wkl/v1/config.h b/keyboards/dztech/dz60rgb_wkl/v1/config.h
new file mode 100644
index 0000000000..f7195a1c7d
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v1/config.h
@@ -0,0 +1,56 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1221
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ60RGB_WKL
+#define DESCRIPTION DZ60 ARM RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { B1, B10, B11, B14, B12 }
+#define MATRIX_COL_PINS { A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_LED_PROCESS_LIMIT 4
+# define RGB_MATRIX_LED_FLUSH_LIMIT 26
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 62
+# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif
diff --git a/keyboards/dztech/dz60rgb_wkl/v1/rules.mk b/keyboards/dztech/dz60rgb_wkl/v1/rules.mk
new file mode 100644
index 0000000000..be72ca4fb6
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v1/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
+
+LAYOUTS = 60_tsangan_hhkb
diff --git a/keyboards/dztech/dz60rgb_wkl/v2/config.h b/keyboards/dztech/dz60rgb_wkl/v2/config.h
new file mode 100644
index 0000000000..7dace7b1e8
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v2/config.h
@@ -0,0 +1,66 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1221
+#define DEVICE_VER 0x0002
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ60RGB_WKL
+#define DESCRIPTION DZ60 AVR RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { F5, F4, F1, B3, B2 }
+#define MATRIX_COL_PINS { C7, F7, F6, F0, B0, B1, B4, D7, D6, D4, D5, D3, D2, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 3
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BAND_SAT
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define DRIVER_ADDR_1 0b1010000
+# define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 62
+# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif
diff --git a/keyboards/dztech/dz60rgb_wkl/v2/rules.mk b/keyboards/dztech/dz60rgb_wkl/v2/rules.mk
new file mode 100644
index 0000000000..76117e7ea9
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v2/rules.mk
@@ -0,0 +1,36 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
+
+LAYOUTS = 60_tsangan_hhkb
diff --git a/keyboards/dztech/dz65rgb/config.h b/keyboards/dztech/dz65rgb/config.h
index 611e57d586..b8c5759db6 100644
--- a/keyboards/dztech/dz65rgb/config.h
+++ b/keyboards/dztech/dz65rgb/config.h
@@ -1,46 +1,3 @@
#pragma once
-#include "config_common.h"
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1224
-#define DEVICE_VER 0x0001
-#define MANUFACTURER DZTECH
-#define PRODUCT DZ65RGB
-#define DESCRIPTION DZ65 ARM RGB keyboard
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
-#define MATRIX_ROW_PINS { B1, B10, B11, B14, B12 }
-#define MATRIX_COL_PINS {A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14, C15 }
-#define DIODE_DIRECTION COL2ROW
-#ifdef RGB_MATRIX_ENABLE
-#define RGB_MATRIX_LED_PROCESS_LIMIT 4
-#define RGB_MATRIX_LED_FLUSH_LIMIT 26
-#define DEBOUNCE 3
-#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
-#define RGB_MATRIX_KEYPRESSES
-#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-#define DISABLE_RGB_MATRIX_BAND_SAT
-#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-#define DISABLE_RGB_MATRIX_SPLASH
-#define DISABLE_RGB_MATRIX_MULTISPLASH
-#define DISABLE_RGB_MATRIX_SOLID_SPLASH
-#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define DISABLE_RGB_MATRIX_DIGITAL_RAIN
-#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
-#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
-#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_ADDR_2 0b1110111
-#define DRIVER_COUNT 2
-#define DRIVER_1_LED_TOTAL 35
-#define DRIVER_2_LED_TOTAL 33
-#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-#endif \ No newline at end of file
+#include "config_common.h"
diff --git a/keyboards/dztech/dz65rgb/dz65rgb.c b/keyboards/dztech/dz65rgb/dz65rgb.c
index 8f095960d4..5d35bc8982 100644
--- a/keyboards/dztech/dz65rgb/dz65rgb.c
+++ b/keyboards/dztech/dz65rgb/dz65rgb.c
@@ -1,129 +1,117 @@
#include "dz65rgb.h"
+
#ifdef RGB_MATRIX_ENABLE
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+ { 0, C8_8, C7_8, C6_8 },
+ { 0, C9_8, C7_7, C6_7 },
+ { 0, C9_7, C8_7, C6_6 },
+ { 0, C9_6, C8_6, C7_6 },
+ { 0, C9_5, C8_5, C7_5 },
+ { 0, C9_4, C8_4, C7_4 },
+ { 0, C9_3, C8_3, C7_3 },
+ { 0, C9_2, C8_2, C7_2 },
+ { 0, C9_1, C8_1, C7_1 },
+ { 0, C2_9, C3_9, C4_9 },
+ { 0, C1_9, C3_10, C4_10 },
+ { 0, C1_10, C2_10, C4_11 },
+ { 0, C1_11, C2_11, C3_11 },
+ { 0, C1_13, C2_13, C3_13 },
+ { 0, C1_14, C2_14, C3_14 },
- {0, C8_8, C7_8, C6_8}, // LA17
- {0, C9_8, C7_7, C6_7}, // LA16
- {0, C9_7, C8_7, C6_6}, // LA15
- {0, C9_6, C8_6, C7_6}, // LA14
- {0, C9_5, C8_5, C7_5}, // LA13
- {0, C9_4, C8_4, C7_4}, // LA12
- {0, C9_3, C8_3, C7_3}, // LA11
- {0, C9_2, C8_2, C7_2}, // LA10
- {0, C9_1, C8_1, C7_1}, // LA9
- {0, C2_9, C3_9, C4_9}, // LB0
- {0, C1_9, C3_10, C4_10}, // LB1
- {0, C1_10, C2_10, C4_11}, // LB2
- {0, C1_11, C2_11, C3_11}, // LB3
- {0, C1_13, C2_13, C3_13}, // LB5
- {0, C1_14, C2_14, C3_14}, // LB6
-
- {0, C1_7, C2_7, C3_7}, // LA7
- {0, C1_6, C2_6, C3_6}, // LA6
- {0, C1_5, C2_5, C3_5}, // LA5
- {0, C1_4, C2_4, C3_4}, // LA4
- {0, C1_3, C2_3, C3_3}, // LA3
- {0, C1_2, C2_2, C4_3}, // LA2
- {0, C1_1, C3_2, C4_2}, // LA1
- {0, C2_1, C3_1, C4_1}, // LA0
- {0, C9_9, C8_9, C7_9}, // LB9
- {0, C9_10, C8_10, C7_10}, // LB10
- {0, C9_11, C8_11, C7_11}, // LB11
- {0, C9_12, C8_12, C7_12}, // LB12
- {0, C9_13, C8_13, C7_13}, // LB13
- {0, C9_14, C8_14, C7_14}, // LB14
- {0, C1_15, C2_15, C3_15}, // LB7
-
- {0, C1_8, C2_8, C3_8}, // LA8
- {1, C9_6, C8_6, C7_6}, // LC14
- {1, C9_5, C8_5, C7_5}, // LC13
- {1, C9_4, C8_4, C7_4}, // LC12
- {1, C9_3, C8_3, C7_3}, // LC11
- {1, C9_2, C8_2, C7_2}, // LC10
- {1, C9_1, C8_1, C7_1}, // LC9
- {1, C2_9, C3_9, C4_9}, // LD0
- {1, C1_9, C3_10, C4_10}, // LD1
- {1, C1_10, C2_10, C4_11}, // LD2
- {1, C1_11, C2_11, C3_11}, // LD3
- {1, C1_12, C2_12, C3_12}, // LD4
- {1, C1_13, C2_13, C3_13}, // LD5
- {0, C1_16, C2_16, C3_16}, // LB8
+ { 0, C1_7, C2_7, C3_7 },
+ { 0, C1_6, C2_6, C3_6 },
+ { 0, C1_5, C2_5, C3_5 },
+ { 0, C1_4, C2_4, C3_4 },
+ { 0, C1_3, C2_3, C3_3 },
+ { 0, C1_2, C2_2, C4_3 },
+ { 0, C1_1, C3_2, C4_2 },
+ { 0, C2_1, C3_1, C4_1 },
+ { 0, C9_9, C8_9, C7_9 },
+ { 0, C9_10, C8_10, C7_10 },
+ { 0, C9_11, C8_11, C7_11 },
+ { 0, C9_12, C8_12, C7_12 },
+ { 0, C9_13, C8_13, C7_13 },
+ { 0, C9_14, C8_14, C7_14 },
+ { 0, C1_15, C2_15, C3_15 },
- {1, C9_8, C7_7, C6_7}, // LC16
- {1, C1_5, C2_5, C3_5}, // LC5
- {1, C1_4, C2_4, C3_4}, // LC4
- {1, C1_3, C2_3, C3_3}, // LC3
- {1, C1_2, C2_2, C4_3}, // LC2
- {1, C1_1, C3_2, C4_2}, // LC1
- {1, C9_9, C8_9, C7_9}, // LD9
- {1, C9_10, C8_10, C7_10}, // LD10
- {1, C9_11, C8_11, C7_11}, // LD11
- {1, C9_12, C8_12, C7_12}, // LD12
- {1, C1_14, C2_14, C3_14}, // LD6
- {1, C1_15, C2_15, C3_15}, // LD7
- {1, C1_16, C2_16, C3_16}, // LD8
- {0, C9_15, C8_15, C6_14}, // LB15
+ { 0, C1_8, C2_8, C3_8 },
+ { 1, C9_6, C8_6, C7_6 },
+ { 1, C9_5, C8_5, C7_5 },
+ { 1, C9_4, C8_4, C7_4 },
+ { 1, C9_3, C8_3, C7_3 },
+ { 1, C9_2, C8_2, C7_2 },
+ { 1, C9_1, C8_1, C7_1 },
+ { 1, C2_9, C3_9, C4_9 },
+ { 1, C1_9, C3_10, C4_10 },
+ { 1, C1_10, C2_10, C4_11 },
+ { 1, C1_11, C2_11, C3_11 },
+ { 1, C1_12, C2_12, C3_12 },
+ { 1, C1_13, C2_13, C3_13 },
+ { 0, C1_16, C2_16, C3_16 },
- {1, C8_8, C7_8, C6_8}, // LC17
- {1, C1_8, C2_8, C3_8}, // LC8
- {1, C1_7, C2_7, C3_7}, // LC7
- {1, C2_1, C3_1, C4_1}, // LC0
- {1, C9_14, C8_14, C7_14}, // LD14
- {1, C9_15, C8_15, C6_14}, // LD15
- {1, C9_16, C7_15, C6_15}, // LD16
- {1, C8_16, C7_16, C6_16}, // LD17
- {0, C8_16, C7_16, C6_16}, // LB17
- {0, C9_16, C7_15, C6_15}, // LB16
+ { 1, C9_8, C7_7, C6_7 },
+ { 1, C1_5, C2_5, C3_5 },
+ { 1, C1_4, C2_4, C3_4 },
+ { 1, C1_3, C2_3, C3_3 },
+ { 1, C1_2, C2_2, C4_3 },
+ { 1, C1_1, C3_2, C4_2 },
+ { 1, C9_9, C8_9, C7_9 },
+ { 1, C9_10, C8_10, C7_10 },
+ { 1, C9_11, C8_11, C7_11 },
+ { 1, C9_12, C8_12, C7_12 },
+ { 1, C1_14, C2_14, C3_14 },
+ { 1, C1_15, C2_15, C3_15 },
+ { 1, C1_16, C2_16, C3_16 },
+ { 0, C9_15, C8_15, C6_14 },
+ { 1, C8_8, C7_8, C6_8 },
+ { 1, C1_8, C2_8, C3_8 },
+ { 1, C1_7, C2_7, C3_7 },
+ { 1, C2_1, C3_1, C4_1 },
+ { 1, C9_14, C8_14, C7_14 },
+ { 1, C9_15, C8_15, C6_14 },
+ { 1, C9_16, C7_15, C6_15 },
+ { 1, C8_16, C7_16, C6_16 },
+ { 0, C8_16, C7_16, C6_16 },
+ { 0, C9_16, C7_15, C6_15 }
};
-led_config_t g_led_config = { {
- { 0, 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, NO_LED,42, 43 },
- { 44, 45, 46, 47, 48, 49, 59, 51, 52, 53, 54, 55, NO_LED,56, 57 },
- { 58, 59, 60, NO_LED,NO_LED,61, NO_LED,NO_LED,62, 63, 64, 65, NO_LED,66, 67 }
-}, {
- {0,0}, {15,0}, {30,0}, {45,0}, {60,0}, {75,0}, {90,0}, {105,0}, {120,0}, {135,0}, {150,0}, {165,0}, {180,0}, {203,0},{224,0},
- {4,16},{23,16},{38,16},{53,16},{68,16}, {83,16}, {98,16}, {113,16},{128,16},{143,16},{158,16},{173,16},{188,16},{206,16},{224,16},
- {6,32},{26,32},{41,32},{56,32},{71,32}, {86,32}, {101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32},{224,32},
- {9,48},{34,48},{49,48},{64,48},{79,48}, {94,48}, {109,48},{124,48},{139,48},{154,48},{169,48},{189,48},{210,48},{224,48},
- {2,64},{21,64},{39,64},{96,64},{150,64},{165,64},{180,64},{195,64},{210,64},{224,64}
-}, {
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
- 1, 1, 1, 4, 1, 1, 1, 1, 1, 1
-} };
+led_config_t g_led_config = {
+ {
+ { 0, 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, NO_LED, 42, 43 },
+ { 44, 45, 46, 47, 48, 49, 59, 51, 52, 53, 54, 55, NO_LED, 56, 57 },
+ { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, NO_LED, 66, 67 }
+ }, {
+ { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 },
+ { 4, 16 }, { 23, 16 }, { 38, 16 }, { 53, 16 }, { 68, 16 }, { 83, 16 }, { 98, 16 }, { 113, 16 }, { 128, 16 }, { 143, 16 }, { 158, 16 }, { 173, 16 }, { 188, 16 }, { 206, 16 }, { 224, 16 },
+ { 6, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 201, 32 }, { 224, 32 },
+ { 9, 48 }, { 34, 48 }, { 49, 48 }, { 64, 48 }, { 79, 48 }, { 94, 48 }, { 109, 48 }, { 124, 48 }, { 139, 48 }, { 154, 48 }, { 169, 48 }, { 189, 48 }, { 210, 48 }, { 224, 48 },
+ { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 150, 64 }, { 165, 64 }, { 180, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 }
+ }, {
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1
+ }
+};
#endif
-void matrix_init_kb(void) {
- 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 suspend_power_down_kb(void)
-{
+void suspend_power_down_kb(void) {
rgb_matrix_set_suspend_state(true);
suspend_power_down_user();
}
-void suspend_wakeup_init_kb(void)
-{
+void suspend_wakeup_init_kb(void) {
rgb_matrix_set_suspend_state(false);
suspend_wakeup_init_user();
}
__attribute__ ((weak))
-void rgb_matrix_indicators_user(void)
-{
- if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK))
- {
+void rgb_matrix_indicators_user(void) {
+ if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
}
}
diff --git a/keyboards/dztech/dz65rgb/dz65rgb.h b/keyboards/dztech/dz65rgb/dz65rgb.h
index b251a339f9..371facc89e 100644
--- a/keyboards/dztech/dz65rgb/dz65rgb.h
+++ b/keyboards/dztech/dz65rgb/dz65rgb.h
@@ -1,12 +1,15 @@
#pragma once
-#define XXX KC_NO
+
#include "quantum.h"
+
+#define XXX KC_NO
+
#define LAYOUT_65_ansi( \
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, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
- K40, K41, K42, K45, K48, K49, K4A, K4B, K4D, K4E \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K40, K41, K42, K45, K48, 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 }, \
diff --git a/keyboards/dztech/dz65rgb/info.json b/keyboards/dztech/dz65rgb/info.json
index fe61e5d973..66ed072af3 100644
--- a/keyboards/dztech/dz65rgb/info.json
+++ b/keyboards/dztech/dz65rgb/info.json
@@ -1,12 +1,85 @@
{
- "keyboard_name": "dz65rgb",
- "url": "",
- "maintainer": "dztch",
- "width": 15,
- "height": 5,
- "layouts": {
+ "keyboard_name": "dz65rgb",
+ "url": "",
+ "maintainer": "dztech",
+ "width": 16,
+ "height": 5,
+ "layouts": {
"LAYOUT_65_ansi": {
- "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, "w":2},{"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}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
- }
- }
+ "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, "w":2},
+ {"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},
+ {"x":11, "y":4},
+ {"x":12, "y":4},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ }
+ }
}
diff --git a/keyboards/dztech/dz65rgb/keymaps/adi/keymap.c b/keyboards/dztech/dz65rgb/keymaps/adi/keymap.c
new file mode 100644
index 0000000000..f3d3cbf9a4
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/keymaps/adi/keymap.c
@@ -0,0 +1,19 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = 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,
+ 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,
+ LCTL_T(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_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi(
+ KC_GESC, 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_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_PGUP,
+ LCTL_T(KC_CAPS), RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+
+};
diff --git a/keyboards/dztech/dz65rgb/keymaps/adi/readme.md b/keyboards/dztech/dz65rgb/keymaps/adi/readme.md
new file mode 100644
index 0000000000..fd3a6744ca
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/keymaps/adi/readme.md
@@ -0,0 +1,13 @@
+# Adi's DZ65RGB Layout
+![Layout Visual](https://i.imgur.com/xuFkvVI.png)
+
+This layout modifies the extra row on the right and makes some of the key bindings easier to reach on Layer 1.
+## Step by Step
+1. Build your Firmware: run build command in directory
+```make dztech/dz65rgb/v1:adi```
+2. Flash your Firmware:
+ * Open QMK Toolbox Application
+ * Open firmware file: dztech_dz65rgb_v1_adi.bin
+ * Unplug keyboard USB-C, and hold the ESC key while plugging it back in
+ * Check that QMK Toolbox displays: *** STM32 device connected.
+ * Hit the flash button!
diff --git a/keyboards/dztech/dz65rgb/keymaps/default/keymap.c b/keyboards/dztech/dz65rgb/keymaps/default/keymap.c
index 7f1416f1e7..70151e45bc 100644
--- a/keyboards/dztech/dz65rgb/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz65rgb/keymaps/default/keymap.c
@@ -1,32 +1,18 @@
#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_65_ansi( /* Base */
- 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_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_BSLASH, KC_PGUP,\
- CTL_T(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_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_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
- [_LAYER1] = LAYOUT_65_ansi( /* FN */
- KC_GESC, 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_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,\
- CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,\
- KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
+ [0] = 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_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_PGUP,
+ CTL_T(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_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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi(
+ KC_GESC, 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,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,
+ CTL_T(KC_CAPS), RGB_SPI, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, KC_PGDN,
+ KC_LSFT, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_VOLU, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
};
-
-void matrix_init_user(void)
-{
- //user initialization
-}
-
-void matrix_scan_user(void)
-{
- //user matrix
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
- return true;
-}
diff --git a/keyboards/dztech/dz65rgb/readme.md b/keyboards/dztech/dz65rgb/readme.md
index 7f8aad95f8..8d7b95b3d6 100644
--- a/keyboards/dztech/dz65rgb/readme.md
+++ b/keyboards/dztech/dz65rgb/readme.md
@@ -2,13 +2,18 @@
A customizable 65% RGB keyboard.
-Keyboard Maintainer: [DZtech](http://keyboarddiy.taobao.com)
-Hardware Supported: [DZtech](http://keyboarddiy.taobao.com)
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: DZ65RGB V1 and V2
+* Hardware Availability: [KBDfans](https://kbdfans.com/)
+There are two versions of the DZ65RGB. Please use the appropriate firmware for your board.
+
+* V1: STM32F303 (Arm), takes .bin files
+* V2: ATmega32U4 (AVR), takes .hex files
Make example for this keyboard (after setting up your build environment):
- make dztech/dz65rgb:default
+ make dztech/dz65rgb/v1:default # Arm (STM32F303)
+ make dztech/dz65rgb/v2:default # AVR (ATmega32U4)
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/dztech/dz65rgb/rules.mk b/keyboards/dztech/dz65rgb/rules.mk
deleted file mode 100644
index 6e80abf472..0000000000
--- a/keyboards/dztech/dz65rgb/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# MCU name
-MCU = STM32F303
-
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = lite # 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
-NKRO_ENABLE = yes # USB Nkey Rollover
-AUDIO_ENABLE = no
-RGB_MATRIX_ENABLE = yes # Use RGB matrix
-
-LAYOUTS = 65_ansi
diff --git a/keyboards/dztech/dz65rgb/v1/config.h b/keyboards/dztech/dz65rgb/v1/config.h
new file mode 100644
index 0000000000..cc40fdc5a0
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/v1/config.h
@@ -0,0 +1,68 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1222
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ65RGB
+#define DESCRIPTION DZ65 ARM RGB 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 { B1, B10, B11, B14, B12 }
+#define MATRIX_COL_PINS { A6, A7, B0, B13, B15, A8, A15, B3, B4, B5, B8, B9, C13, C14, C15 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_LED_PROCESS_LIMIT 4
+# define RGB_MATRIX_LED_FLUSH_LIMIT 26
+# define DEBOUNCE 3
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BAND_SAT
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+# define DRIVER_ADDR_1 0b1110100
+# define DRIVER_ADDR_2 0b1110111
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 35
+# define DRIVER_2_LED_TOTAL 33
+# define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#endif
diff --git a/keyboards/dztech/dz65rgb/v1/rules.mk b/keyboards/dztech/dz65rgb/v1/rules.mk
new file mode 100644
index 0000000000..9175430052
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/v1/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3731 # Use RGB matrix
+
+LAYOUTS = 65_ansi
diff --git a/keyboards/dztech/dz65rgb/v2/config.h b/keyboards/dztech/dz65rgb/v2/config.h
new file mode 100644
index 0000000000..778d43df95
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/v2/config.h
@@ -0,0 +1,68 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1222
+#define DEVICE_VER 0x0002
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ65RGB
+#define DESCRIPTION DZ65 AVR RGB 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 { F0, F1, F4, E6, C6 }
+#define MATRIX_COL_PINS { F7, F6, F5, C7, B0, B1, B2, B3, B4, D7, D6, D4, D5, D3, D2 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+# define NO_ACTION_MACRO
+# define NO_ACTION_FUNCTION
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_LED_PROCESS_LIMIT 4
+# define RGB_MATRIX_LED_FLUSH_LIMIT 26
+# define DEBOUNCE 3
+# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_KEYPRESSES
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BAND_SAT
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+# define DRIVER_ADDR_1 0b1110100
+# define DRIVER_ADDR_2 0b1110111
+# define DRIVER_COUNT 2
+# define DRIVER_1_LED_TOTAL 35
+# define DRIVER_2_LED_TOTAL 33
+# define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#endif
diff --git a/keyboards/dztech/dz65rgb/v2/rules.mk b/keyboards/dztech/dz65rgb/v2/rules.mk
new file mode 100644
index 0000000000..118087e2ff
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/v2/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = IS31FL3731 # Use RGB matrix
+
+LAYOUTS = 65_ansi
diff --git a/keyboards/efreet/config.h b/keyboards/efreet/config.h
index 2a420b248e..c95a6a6b22 100644
--- a/keyboards/efreet/config.h
+++ b/keyboards/efreet/config.h
@@ -20,8 +20,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 0x0000
+#define VENDOR_ID 0x534F // "SO"
+#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER Soran
#define PRODUCT Efreet
diff --git a/keyboards/efreet/keymaps/via/keymap.c b/keyboards/efreet/keymaps/via/keymap.c
new file mode 100644
index 0000000000..c08e3bbe08
--- /dev/null
+++ b/keyboards/efreet/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2020 Wilba
+ *
+ * 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_ortho_4x12(
+ 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_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 ,
+ BL_TOGG, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+ [1] = LAYOUT_ortho_4x12(
+ 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
+ ),
+ [2] = LAYOUT_ortho_4x12(
+ 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
+ ),
+ [3] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/efreet/keymaps/via/rules.mk b/keyboards/efreet/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/efreet/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/efreet/rules.mk b/keyboards/efreet/rules.mk
index f3c51f7a6a..411c3f7a76 100644
--- a/keyboards/efreet/rules.mk
+++ b/keyboards/efreet/rules.mk
@@ -14,19 +14,19 @@ BOOTLOADER = atmel-dfu
# 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 = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = lite # 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
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 = no # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+MIDI_ENABLE = no # MIDI support
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)
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
LAYOUTS = ortho_4x12 planck_mit
diff --git a/keyboards/ep/96/info.json b/keyboards/ep/96/info.json
index 4be41b24c3..7f9dd0e534 100644
--- a/keyboards/ep/96/info.json
+++ b/keyboards/ep/96/info.json
@@ -1,426 +1,113 @@
{
- "keyboard_name": "ep96",
- "maintainer": "e11i0t23",
- "width": 19,
- "height": 6,
- "layouts": {
- "LAYOUT": {
- "key_count": 100,
- "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": "F11",
- "x": 11,
- "y": 0
- }, {
- "label": "F12",
- "x": 12,
- "y": 0
- }, {
- "label": "Prt Sc",
- "x": 13,
- "y": 0
- }, {
- "label": "Delete",
- "x": 14,
- "y": 0
- }, {
- "label": "home",
- "x": 15,
- "y": 0
- }, {
- "label": "Menu",
- "x": 16,
- "y": 0
- }, {
- "label": "Pg Up",
- "x": 17,
- "y": 0
- }, {
- "label": "Pg Dn",
- "x": 18,
- "y": 0
- }, {
- "label": "~",
- "x": 0,
- "y": 1
- }, {
- "label": "!",
- "x": 1,
- "y": 1
- }, {
- "label": "@",
- "x": 2,
- "y": 1
- }, {
- "label": "#",
- "x": 3,
- "y": 1
- }, {
- "label": "$",
- "x": 4,
- "y": 1
- }, {
- "label": "%",
- "x": 5,
- "y": 1
- }, {
- "label": "^",
- "x": 6,
- "y": 1
- }, {
- "label": "&",
- "x": 7,
- "y": 1
- }, {
- "label": "*",
- "x": 8,
- "y": 1
- }, {
- "label": "(",
- "x": 9,
- "y": 1
- }, {
- "label": ")",
- "x": 10,
- "y": 1
- }, {
- "label": "_",
- "x": 11,
- "y": 1
- }, {
- "label": "+",
- "x": 12,
- "y": 1
- }, {
- "label": "Backspace",
- "x": 13,
- "y": 1,
- "w": 2
- }, {
- "label": "Num Lock",
- "x": 15,
- "y": 1
- }, {
- "label": "/",
- "x": 16,
- "y": 1
- }, {
- "label": "*",
- "x": 17,
- "y": 1
- }, {
- "label": "-",
- "x": 18,
- "y": 1
- }, {
- "label": "Tab",
- "x": 0,
- "y": 2,
- "w": 1.5
- }, {
- "label": "Q",
- "x": 1.5,
- "y": 2
- }, {
- "label": "W",
- "x": 2.5,
- "y": 2
- }, {
- "label": "E",
- "x": 3.5,
- "y": 2
- }, {
- "label": "R",
- "x": 4.5,
- "y": 2
- }, {
- "label": "T",
- "x": 5.5,
- "y": 2
- }, {
- "label": "Y",
- "x": 6.5,
- "y": 2
- }, {
- "label": "U",
- "x": 7.5,
- "y": 2
- }, {
- "label": "I",
- "x": 8.5,
- "y": 2
- }, {
- "label": "O",
- "x": 9.5,
- "y": 2
- }, {
- "label": "P",
- "x": 10.5,
- "y": 2
- }, {
- "label": "{",
- "x": 11.5,
- "y": 2
- }, {
- "label": "}",
- "x": 12.5,
- "y": 2
- }, {
- "label": "Enter",
- "x": 13.75,
- "y": 2,
- "w": 1.25,
- "h": 2
- }, {
- "label": "7",
- "x": 15,
- "y": 2
- }, {
- "label": "8",
- "x": 16,
- "y": 2
- }, {
- "label": "9",
- "x": 17,
- "y": 2
- }, {
- "label": "+",
- "x": 18,
- "y": 2,
- "h": 2
- }, {
- "label": "Caps Lock",
- "x": 0,
- "y": 3,
- "w": 1.75
- }, {
- "label": "A",
- "x": 1.75,
- "y": 3
- }, {
- "label": "S",
- "x": 2.75,
- "y": 3
- }, {
- "label": "D",
- "x": 3.75,
- "y": 3
- }, {
- "label": "F",
- "x": 4.75,
- "y": 3
- }, {
- "label": "G",
- "x": 5.75,
- "y": 3
- }, {
- "label": "H",
- "x": 6.75,
- "y": 3
- }, {
- "label": "J",
- "x": 7.75,
- "y": 3
- }, {
- "label": "K",
- "x": 8.75,
- "y": 3
- }, {
- "label": "L",
- "x": 9.75,
- "y": 3
- }, {
- "label": ":",
- "x": 10.75,
- "y": 3
- }, {
- "label": "\"",
- "x": 11.75,
- "y": 3
- }, {
- "label": "~",
- "x": 12.75,
- "y": 3
- }, {
- "label": "4",
- "x": 15,
- "y": 3
- }, {
- "label": "5",
- "x": 16,
- "y": 3
- }, {
- "label": "6",
- "x": 17,
- "y": 3
- }, {
- "label": "Shift",
- "x": 0,
- "y": 4,
- "w": 1.25
- }, {
- "label": "|",
- "x": 1.25,
- "y": 4
- }, {
- "label": "Z",
- "x": 2.25,
- "y": 4
- }, {
- "label": "X",
- "x": 3.25,
- "y": 4
- }, {
- "label": "C",
- "x": 4.25,
- "y": 4
- }, {
- "label": "V",
- "x": 5.25,
- "y": 4
- }, {
- "label": "B",
- "x": 6.25,
- "y": 4
- }, {
- "label": "N",
- "x": 7.25,
- "y": 4
- }, {
- "label": "M",
- "x": 8.25,
- "y": 4
- }, {
- "label": "<",
- "x": 9.25,
- "y": 4
- }, {
- "label": ">",
- "x": 10.25,
- "y": 4
- }, {
- "label": "?",
- "x": 11.25,
- "y": 4
- }, {
- "label": "Shift",
- "x": 12.25,
- "y": 4,
- "w": 1.75
- }, {
- "label": "\u2191",
- "x": 14,
- "y": 4
- }, {
- "label": "1",
- "x": 15,
- "y": 4
- }, {
- "label": "2",
- "x": 16,
- "y": 4
- }, {
- "label": "3",
- "x": 17,
- "y": 4
- }, {
- "label": "Enter",
- "x": 18,
- "y": 4,
- "h": 2
- }, {
- "label": "Ctrl",
- "x": 0,
- "y": 5,
- "w": 1.25
- }, {
- "label": "Win",
- "x": 1.25,
- "y": 5,
- "w": 1.25
- }, {
- "label": "Alt",
- "x": 2.5,
- "y": 5,
- "w": 1.25
- }, {
- "x": 3.75,
- "y": 5,
- "w": 6.25
- }, {
- "label": "Alt",
- "x": 10,
- "y": 5,
- "w": 1.5
- }, {
- "label": "Crtl",
- "x": 11.5,
- "y": 5,
- "w": 1.5
- }, {
- "label": "\u2190",
- "x": 13,
- "y": 5
- }, {
- "label": "\u2193",
- "x": 14,
- "y": 5
- }, {
- "label": "\u2192",
- "x": 15,
- "y": 5
- }, {
- "label": "0",
- "x": 16,
- "y": 5
- }, {
- "label": ".",
- "x": 17,
- "y": 5
- }]
+ "keyboard_name": "ep96",
+ "maintainer": "e11i0t23",
+ "width": 19,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 100,
+ "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":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"Print Screen", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"End", "x":16, "y":0},
+ {"label":"Page Up", "x":17, "y":0},
+ {"label":"Page Down", "x":18, "y":0},
+ {"label":"~", "x":0, "y":1},
+ {"label":"!", "x":1, "y":1},
+ {"label":"@", "x":2, "y":1},
+ {"label":"#", "x":3, "y":1},
+ {"label":"$", "x":4, "y":1},
+ {"label":"%", "x":5, "y":1},
+ {"label":"^", "x":6, "y":1},
+ {"label":"&", "x":7, "y":1},
+ {"label":"*", "x":8, "y":1},
+ {"label":"(", "x":9, "y":1},
+ {"label":")", "x":10, "y":1},
+ {"label":"_", "x":11, "y":1},
+ {"label":"+", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+ {"label":"Num Lock", "x":15, "y":1},
+ {"label":"/", "x":16, "y":1},
+ {"label":"*", "x":17, "y":1},
+ {"label":"-", "x":18, "y":1},
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"{", "x":11.5, "y":2},
+ {"label":"}", "x":12.5, "y":2},
+ {"label":"7", "x":15, "y":2},
+ {"label":"8", "x":16, "y":2},
+ {"label":"9", "x":17, "y":2},
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":":", "x":10.75, "y":3},
+ {"label":"\"", "x":11.75, "y":3},
+ {"label":"~", "x":12.75, "y":3},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
+ {"label":"4", "x":15, "y":3},
+ {"label":"5", "x":16, "y":3},
+ {"label":"6", "x":17, "y":3},
+ {"label":"+", "x":18, "y":2, "h":2},
+ {"label":"Shift", "x":0, "y":4, "w":1.25},
+ {"label":"|", "x":1.25, "y":4},
+ {"label":"Z", "x":2.25, "y":4},
+ {"label":"X", "x":3.25, "y":4},
+ {"label":"C", "x":4.25, "y":4},
+ {"label":"V", "x":5.25, "y":4},
+ {"label":"B", "x":6.25, "y":4},
+ {"label":"N", "x":7.25, "y":4},
+ {"label":"M", "x":8.25, "y":4},
+ {"label":"<", "x":9.25, "y":4},
+ {"label":">", "x":10.25, "y":4},
+ {"label":"?", "x":11.25, "y":4},
+ {"label":"Shift", "x":12.25, "y":4, "w":1.75},
+ {"label":"↑", "x":14, "y":4},
+ {"label":"1", "x":15, "y":4},
+ {"label":"2", "x":16, "y":4},
+ {"label":"3", "x":17, "y":4},
+ {"label":"Ctrl", "x":0, "y":5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5, "w":1.5},
+ {"label":"Ctrl", "x":11.5, "y":5, "w":1.5},
+ {"label":"â†", "x":13, "y":5},
+ {"label":"↓", "x":14, "y":5},
+ {"label":"→", "x":15, "y":5},
+ {"label":"0", "x":16, "y":5},
+ {"label":".", "x":17, "y":5},
+ {"label":"Enter", "x":18, "y":4, "h":2}
+ ]
+ }
}
- }
}
diff --git a/keyboards/ep/comsn/tf_longeboye/info.json b/keyboards/ep/comsn/tf_longeboye/info.json
index 5cfa993d30..d34294b670 100644
--- a/keyboards/ep/comsn/tf_longeboye/info.json
+++ b/keyboards/ep/comsn/tf_longeboye/info.json
@@ -44,7 +44,6 @@
{ "label": "7", "x": 17.5, "y": 1 },
{ "label": "8", "x": 18.5, "y": 1 },
{ "label": "9", "x": 19.5, "y": 1 },
- { "label": "+", "x": 20.5, "y": 1, "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 },
@@ -62,6 +61,7 @@
{ "label": "4", "x": 17.5, "y": 2 },
{ "label": "5", "x": 18.5, "y": 2 },
{ "label": "6", "x": 19.5, "y": 2 },
+ { "label": "+", "x": 20.5, "y": 1, "h": 2 },
{ "label": "Shift", "x": 0, "y": 3, "w": 1.25 },
{ "label": "|", "x": 1.25, "y": 3 },
{ "label": "Z", "x": 2.25, "y": 3 },
diff --git a/keyboards/ergodash/rev1/config.h b/keyboards/ergodash/rev1/config.h
index 52f81e4ac9..7e84a3cab0 100644
--- a/keyboards/ergodash/rev1/config.h
+++ b/keyboards/ergodash/rev1/config.h
@@ -69,6 +69,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 12, 12 } // Number of LEDs
+// The LEDs on the slave half go in reverse order
+#define RGBLIGHT_LED_MAP { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, \
+ 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12}
+
#define SOFT_SERIAL_PIN D0
#define SELECT_SOFT_SERIAL_SPEED 1
/*Sets the protocol speed when using serial communication*/
diff --git a/keyboards/ergodone/rules.mk b/keyboards/ergodone/rules.mk
index 4c2fcf1595..aaeedb4311 100644
--- a/keyboards/ergodone/rules.mk
+++ b/keyboards/ergodone/rules.mk
@@ -25,13 +25,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
USB_6KRO_ENABLE = no # USB 6key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-KEYMAP_IN_EEPROM_ENABLE = no # External keymap in eeprom
-KEYMAP_SECTION_ENABLE = no # Fixed address keymap for keymap editor
-SOFTPWM_LED_ENABLE = no # Enable SoftPWM to drive backlight
-FADING_LED_ENABLE = no # Enable fading backlight
-BREATHING_LED_ENABLE = no # Enable breathing backlight
-LEDMAP_ENABLE = no # Enable LED mapping
-LEDMAP_IN_EEPROM_ENABLE = no # Read LED mapping from eeprom
SWAP_HANDS_ENABLE = no # Disable Onehand
RGBLIGHT_ENABLE = no
MIDI_ENABLE = no
diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c
index 4936ab42c3..20c78bd57e 100644
--- a/keyboards/ergodox_ez/keymaps/default/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/default/keymap.c
@@ -174,7 +174,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
ergodox_right_led_2_off();
ergodox_right_led_3_off();
- uint8_t layer = biton32(state);
+ uint8_t layer = get_highest_layer(state);
switch (layer) {
case 0:
#ifdef RGBLIGHT_COLOR_LAYER_0
diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
index 59302b8003..1913a2d369 100644
--- a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
+++ b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
@@ -11,7 +11,6 @@
#define IGNORE_MOD_TAP_INTERRUPT
#undef PERMISSIVE_HOLD
-#undef PREVENT_STUCK_MODIFIERS
#define FORCE_NKRO
diff --git a/keyboards/ergodox_ez/led_i2c.c b/keyboards/ergodox_ez/led_i2c.c
index 3e75a8cd08..4a7a02f468 100644
--- a/keyboards/ergodox_ez/led_i2c.c
+++ b/keyboards/ergodox_ez/led_i2c.c
@@ -51,7 +51,13 @@ void rgblight_set(void) {
#endif
}
}
-
+#ifdef RGBW
+ else {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+ convert_rgb_to_rgbw(&led[i]);
+ }
+ }
+#endif
uint8_t led_num = RGBLED_NUM;
i2c_init();
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c
index 4f11a0ad52..c707729380 100644
--- a/keyboards/ergodox_ez/matrix.c
+++ b/keyboards/ergodox_ez/matrix.c
@@ -122,6 +122,9 @@ uint8_t matrix_scan(void) {
} else {
print("left side attached\n");
ergodox_blink_all_leds();
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_init(); // re-init driver on reconnect
+#endif
}
}
}
diff --git a/keyboards/ergodox_stm32/keymaps/default/keymap.c b/keyboards/ergodox_stm32/keymaps/default/keymap.c
index d3d4b57228..dcf8d15b7b 100644
--- a/keyboards/ergodox_stm32/keymaps/default/keymap.c
+++ b/keyboards/ergodox_stm32/keymaps/default/keymap.c
@@ -13,9 +13,9 @@ const uint16_t PROGMEM fn_actions[] = {
[1] = TT(1)
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
- uint8_t layer = biton32(state);
+ uint8_t layer = get_highest_layer(state);
ergodox_led_all_off();
ergodox_board_led_1_off();
diff --git a/keyboards/ergoslab/config.h b/keyboards/ergoslab/config.h
new file mode 100644
index 0000000000..590b63c9d6
--- /dev/null
+++ b/keyboards/ergoslab/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2019 Tom Saleeba <ergoslab@techotom.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"
+
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 40
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_MAX_SPEED 4
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 255
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/ergoslab/ergoslab.c b/keyboards/ergoslab/ergoslab.c
new file mode 100644
index 0000000000..6f2796c07c
--- /dev/null
+++ b/keyboards/ergoslab/ergoslab.c
@@ -0,0 +1 @@
+#include "ergoslab.h"
diff --git a/keyboards/ergoslab/ergoslab.h b/keyboards/ergoslab/ergoslab.h
new file mode 100644
index 0000000000..8b02490543
--- /dev/null
+++ b/keyboards/ergoslab/ergoslab.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef KEYBOARD_ergoslab_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/ergoslab/info.json b/keyboards/ergoslab/info.json
new file mode 100644
index 0000000000..e24f0f1fc7
--- /dev/null
+++ b/keyboards/ergoslab/info.json
@@ -0,0 +1,66 @@
+{
+ "keyboard_name": "ergoslab",
+ "url": "https://github.com/tomsaleeba/ergoslab",
+ "maintainer": "tomsaleeba",
+ "width": 13,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_ergoslab": {
+ "key_count": 52,
+ "layout": [
+ {"label":"Q", "x":0, "y":0.625},
+ {"label":"W", "x":1, "y":0.125},
+ {"label":"E", "x":2, "y":0},
+ {"label":"R", "x":3, "y":0.125},
+ {"label":"T", "x":4, "y":0.25},
+ {"label":"Y", "x":8, "y":0.25},
+ {"label":"U", "x":9, "y":0.125},
+ {"label":"I", "x":10, "y":0},
+ {"label":"O", "x":11, "y":0.125},
+ {"label":"P", "x":12, "y":0.625},
+ {"label":"A", "x":0, "y":1.625},
+ {"label":"S", "x":1, "y":1.125},
+ {"label":"D", "x":2, "y":1},
+ {"label":"F", "x":3, "y":1.125},
+ {"label":"G", "x":4, "y":1.25},
+ {"label":"H", "x":8, "y":1.25},
+ {"label":"J", "x":9, "y":1.125},
+ {"label":"K", "x":10, "y":1},
+ {"label":"L", "x":11, "y":1.125},
+ {"label":";", "x":12, "y":1.625},
+ {"label":"Z", "x":0, "y":2.625},
+ {"label":"X", "x":1, "y":2.125},
+ {"label":"C", "x":2, "y":2},
+ {"label":"V", "x":3, "y":2.125},
+ {"label":"B", "x":4, "y":2.25},
+ {"label":"N", "x":8, "y":2.25},
+ {"label":"M", "x":9, "y":2.125},
+ {"label":",", "x":10, "y":2},
+ {"label":".", "x":11, "y":2.125},
+ {"label":"/", "x":12, "y":2.625},
+ {"label":"'", "x":0, "y":3.625},
+ {"label":"Alt", "x":1, "y":3.125},
+ {"label":"Del", "x":2, "y":3},
+ {"label":"Enter", "x":3, "y":3.125},
+ {"label":"Shift", "x":4, "y":3.25},
+ {"label":"Ctrl", "x":5, "y":3.25},
+ {"label":"Numb", "x":7, "y":3.25},
+ {"label":"Space", "x":8, "y":3.25},
+ {"label":"Left", "x":9, "y":3.125},
+ {"label":"Down", "x":10, "y":3},
+ {"label":"Up", "x":11, "y":3.125},
+ {"label":"Right", "x":12, "y":3.625},
+ {"label":"[", "x":1, "y":4.25},
+ {"label":"(", "x":2, "y":4.25},
+ {"label":"Esc", "x":3, "y":4.25},
+ {"label":"Media", "x":4, "y":4.25},
+ {"label":"GUI", "x":5, "y":4.25},
+ {"label":"Tab", "x":7, "y":4.25},
+ {"label":"Mouse", "x":8, "y":4.25},
+ {"label":"Bspc", "x":9, "y":4.25},
+ {"label":")", "x":10, "y":4.25},
+ {"label":"]", "x":11, "y":4.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ergoslab/keymaps/default/config.h b/keyboards/ergoslab/keymaps/default/config.h
new file mode 100644
index 0000000000..2c47a7440d
--- /dev/null
+++ b/keyboards/ergoslab/keymaps/default/config.h
@@ -0,0 +1,29 @@
+/*
+Copyright 2019 Tom Saleeba <ergoslab@techotom.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
diff --git a/keyboards/ergoslab/keymaps/default/keymap.c b/keyboards/ergoslab/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a9bf279246
--- /dev/null
+++ b/keyboards/ergoslab/keymaps/default/keymap.c
@@ -0,0 +1,73 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ BASE,
+ MDIA,
+ NUMB,
+ MOUS
+};
+
+#ifdef RGBLIGHT_ENABLE
+#define ERGOSLAB_BRIGHTNESS 112
+#define HSV_ERGOSLAB_ORANGE 28, 255, 16
+#define HSV_ERGOSLAB_RED 0, 255, ERGOSLAB_BRIGHTNESS
+#define HSV_ERGOSLAB_GREEN 85, 255, ERGOSLAB_BRIGHTNESS
+#define HSV_ERGOSLAB_CYAN 128, 255, ERGOSLAB_BRIGHTNESS
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_ergoslab(
+ 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_SCLN,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ KC_QUOT, KC_LALT, KC_DEL, KC_ENT, KC_LSFT, KC_LCTL, MO(NUMB), KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ KC_LBRC, KC_LPRN, KC_ESC, MO(MDIA),KC_RGUI, KC_TAB, TG(MOUS), KC_BSPC, KC_RPRN, KC_RBRC
+ ),
+
+ [MDIA] = LAYOUT_ergoslab(
+ 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,
+ _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, KC_MUTE,
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [NUMB] = LAYOUT_ergoslab(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_BSLS, KC_PIPE,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_GRV, KC_COLN, KC_TILD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_DQT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [MOUS] = LAYOUT_ergoslab(
+ _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN3, KC_WH_D, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_ACL0, _______, KC_BTN2, KC_BTN1, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
+
+#ifdef RGBLIGHT_ENABLE
+layer_state_t layer_state_set_user(layer_state_t state) {
+ uint8_t layer = biton32(state);
+ switch (layer) {
+ case BASE:
+ rgblight_sethsv(HSV_ERGOSLAB_ORANGE);
+ break;
+ case MDIA:
+ rgblight_sethsv(HSV_ERGOSLAB_RED);
+ break;
+ case NUMB:
+ rgblight_sethsv(HSV_ERGOSLAB_GREEN);
+ break;
+ case MOUS:
+ rgblight_sethsv(HSV_ERGOSLAB_CYAN);
+ break;
+ default:
+ break;
+ }
+ return state;
+};
+#endif
diff --git a/keyboards/ergoslab/readme.md b/keyboards/ergoslab/readme.md
new file mode 100644
index 0000000000..9343f3bc9e
--- /dev/null
+++ b/keyboards/ergoslab/readme.md
@@ -0,0 +1,33 @@
+# ergoslab
+
+![ergoslab](https://raw.githubusercontent.com/tomsaleeba/ergoslab/master/ergoslab.jpg)
+
+
+A split ergo 5x6 keyboard with hotswap sockets and a heap of thumb keys designed
+by Tom Saleeba. [More info on the GitHub
+Repo](https://github.com/tomsaleeba/ergoslab).
+
+**Status** The ergoslab is currently being beta-tested.
+
+* Keyboard Maintainer: [Tom Saleeba](https://github.com/tomsaleeba)
+* Hardware Supported: Pro Micro (ATmega32U4)
+* Hardware Availability: gerbers are available from the [releases page on the
+GitHub repo](https://github.com/tomsaleeba/ergoslab/releases). Get them
+manufactured at your favourite PCB house. I used JLCPCB.
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ergoslab:default
+
+Example of flashing this keyboard:
+
+ make ergoslab:default:flash
+
+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).
+
+A build guide for this keyboard can be found here: [Build
+Guide](https://github.com/tomsaleeba/ergoslab/blob/master/build-guide.md)
diff --git a/keyboards/ergoslab/rev1/config.h b/keyboards/ergoslab/rev1/config.h
new file mode 100644
index 0000000000..4e69b10953
--- /dev/null
+++ b/keyboards/ergoslab/rev1/config.h
@@ -0,0 +1,71 @@
+/*
+Copyright 2019 Tom Saleeba <ergoslab@techotom.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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x5148
+#define DEVICE_VER 0x0100
+#define MANUFACTURER tomsaleeba
+#define PRODUCT Ergoslab Keyboard
+#define DESCRIPTION Split 45 percent ergonomic keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D2
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 2 // Number of LEDs
+// FIXME this following line should enable our layer status LEDs to work on both
+// sides without need to wire them into a chain. It doesn't though. Uncommenting
+// means the slave side of the keyboard stops working (and the LEDs don't work).
+// #define RGBLED_SPLIT {1,1}
+
+/*
+ * 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/ergoslab/rev1/rev1.c b/keyboards/ergoslab/rev1/rev1.c
new file mode 100644
index 0000000000..0e3e0fe996
--- /dev/null
+++ b/keyboards/ergoslab/rev1/rev1.c
@@ -0,0 +1,18 @@
+#include "rev1.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}},
+ {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}},
+
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
+};
+#endif
diff --git a/keyboards/ergoslab/rev1/rev1.h b/keyboards/ergoslab/rev1/rev1.h
new file mode 100644
index 0000000000..bf99a17b23
--- /dev/null
+++ b/keyboards/ergoslab/rev1/rev1.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "ergoslab.h"
+
+#include "quantum.h"
+
+#define LAYOUT_ergoslab( \
+ L00, L01, L02, L03, L04, R04, R03, R02, R01, R00, \
+ L10, L11, L12, L13, L14, R14, R13, R12, R11, R10, \
+ L20, L21, L22, L23, L24, R24, R23, R22, R21, R20, \
+ L30, L31, L32, L33, L34, L35, R35, R34, R33, R32, R31, R30, \
+ L41, L42, L43, L44, L45, R45, R44, R43, R42, R41 \
+) { \
+ { L00, L01, L02, L03, L04, KC_NO }, \
+ { L10, L11, L12, L13, L14, KC_NO }, \
+ { L20, L21, L22, L23, L24, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { KC_NO, L41, L42, L43, L44, L45 }, \
+ { R00, R01, R02, R03, R04, KC_NO }, \
+ { R10, R11, R12, R13, R14, KC_NO }, \
+ { R20, R21, R22, R23, R24, KC_NO }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { KC_NO, R41, R42, R43, R44, R45 } \
+ }
diff --git a/keyboards/ergoslab/rules.mk b/keyboards/ergoslab/rules.mk
new file mode 100644
index 0000000000..f5ae8c51ee
--- /dev/null
+++ b/keyboards/ergoslab/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# 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
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # 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 = 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 = ergoslab/rev1
diff --git a/keyboards/ergotravel/keymaps/yanfali/config.h b/keyboards/ergotravel/keymaps/yanfali/config.h
index eeca26ce1d..072554991f 100644
--- a/keyboards/ergotravel/keymaps/yanfali/config.h
+++ b/keyboards/ergotravel/keymaps/yanfali/config.h
@@ -35,4 +35,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
+#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LGUI)))
diff --git a/keyboards/ergotravel/keymaps/yanfali/rules.mk b/keyboards/ergotravel/keymaps/yanfali/rules.mk
index 0613ea8667..2964d73ab8 100644
--- a/keyboards/ergotravel/keymaps/yanfali/rules.mk
+++ b/keyboards/ergotravel/keymaps/yanfali/rules.mk
@@ -1 +1,7 @@
BOOTLOADER = qmk-dfu
+
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+LTO_ENABLE = yes
diff --git a/keyboards/eve/meteor/readme.md b/keyboards/eve/meteor/readme.md
index 8e933c09d1..28884156ea 100644
--- a/keyboards/eve/meteor/readme.md
+++ b/keyboards/eve/meteor/readme.md
@@ -2,50 +2,20 @@
60% PCB with Function Row
-
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: EVE Meteor
-Hardware Availability: [zFrontier](https://en.zfrontier.com/products/eve-meteor)
-
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: EVE Meteor
+* Hardware Availability: [zFrontier](https://en.zfrontier.com/products/eve-meteor)
Make example for this keyboard (after setting up your build environment):
make eve/meteor:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make eve/meteor:default:flash
**Reset Key:** Short the two holes labeled `FW_JP` underneath the PCB, beside the Tab key while plugging in the keyboard.
Do not confuse this with the LED holes of the switch in the `Tab` position. `FW_JP` is not reachable from the top as the plate blocks access to it.
-It is recommended to program a `RESET` key in your keymap.
-
-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 python3
- pip3 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/exclusive/e65/keymaps/madhatter/keymap.c b/keyboards/exclusive/e65/keymaps/madhatter/keymap.c
new file mode 100644
index 0000000000..f8617f3ef4
--- /dev/null
+++ b/keyboards/exclusive/e65/keymaps/madhatter/keymap.c
@@ -0,0 +1,26 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _QWERTY,
+ _FNM
+};
+
+#define FNM MO(_FNM)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_65_ansi_7u_wk_splitbs(
+ 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_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_TILD, 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_LALT, KC_LGUI, KC_SPC, FNM, KC_LEFT,KC_DOWN,KC_RGHT
+ ),
+
+ [_FNM] = LAYOUT_65_ansi_7u_wk_splitbs(
+ 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_MPLY,
+ _______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, RESET, KC_VOLU,
+ AG_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, KC_VOLD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_MNXT,
+ _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ ),
+};
diff --git a/keyboards/exclusive/e6_rgb/config.h b/keyboards/exclusive/e6_rgb/config.h
index cb213c25e2..3a61311810 100644
--- a/keyboards/exclusive/e6_rgb/config.h
+++ b/keyboards/exclusive/e6_rgb/config.h
@@ -7,8 +7,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xDEAD
-#define PRODUCT_ID 0xFEED
+#define VENDOR_ID 0x4154 //AT
+#define PRODUCT_ID 0x4536 //E6
#define DEVICE_VER 0x0062
#define MANUFACTURER astro
#define PRODUCT e6rgb
@@ -23,27 +23,6 @@
#define UNUSED_PINS
#define DIODE_DIRECTION COL2ROW
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/*
- * 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
-
//rgb light setting
#define RGBLED_NUM 6
#define RGB_DI_PIN B7
@@ -58,8 +37,3 @@
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 63
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
-
-// tapping setting
-#define TAPPING_TERM 200
-#define RETRO_TAPPING
-#define PERMISSIVE_HOLD
diff --git a/keyboards/exclusive/e6_rgb/e6_rgb.c b/keyboards/exclusive/e6_rgb/e6_rgb.c
index 106e58497e..0e248a2023 100644
--- a/keyboards/exclusive/e6_rgb/e6_rgb.c
+++ b/keyboards/exclusive/e6_rgb/e6_rgb.c
@@ -5,24 +5,10 @@
#include "e6_rgb.h"
#ifdef RGB_MATRIX_ENABLE
-__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) {
setPinOutput(D5);
writePinHigh(D5);
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
+ matrix_init_user();
}
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
@@ -190,3 +176,30 @@ led_config_t g_led_config = { {
} };
#endif
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+#if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
+ case KC_F13: // toggle rgb matrix
+ rgb_matrix_toggle();
+ return false;
+ case KC_F14:
+ rgb_matrix_step();
+ return false;
+ case KC_F15:
+ rgb_matrix_increase_hue();
+ return false;
+ case KC_F16:
+ rgb_matrix_increase_sat();
+ return false;
+ case KC_F17:
+ rgb_matrix_increase_val();
+ return false;
+#endif
+ default:
+ break;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/exclusive/e6_rgb/e6_rgb.h b/keyboards/exclusive/e6_rgb/e6_rgb.h
index 01f700c009..df105863b7 100644
--- a/keyboards/exclusive/e6_rgb/e6_rgb.h
+++ b/keyboards/exclusive/e6_rgb/e6_rgb.h
@@ -10,74 +10,75 @@
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define LAYOUT_60_ansi( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ 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, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
k40, k42, k43, k47, k48, k49, k4a, k4b \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
- {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
- {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, KC_NO}, \
- {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, k48, k49, k4a, k4b} \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
+ {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, KC_NO}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, k48, k49, k4a, k4b} \
}
#define LAYOUT_60_wkl( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ 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, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k40, k42, k43, k47, k49, k4a, k4b \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
- {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
- {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
- {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
+ {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
}
#define LAYOUT_60_hhkb( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ 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, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k42, k43, k47, k49, k4a \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
- {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
- {k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3c, k3d}, \
- {KC_NO, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, KC_NO, k49, k4a, KC_NO} \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ { k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
+ { k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
+ {KC_NO, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, KC_NO, k49, k4a, KC_NO} \
}
+
#define LAYOUT_60_wkl_split_bs( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ 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, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k40, k42, k43, k47, k49, k4a, k4b \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
- {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
- {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
- {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
+ {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
}
#define LAYOUT_60_ansi_split_bs_shift( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ 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, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k40, k42, k43, k47, k48, k49, k4a, k4b \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
- {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
- {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
- {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, k48, k49, k4a, k4b} \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k0e}, \
+ {k30, k32, k33, k34, k35, k36, k37, k38, KC_NO, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, KC_NO, k48, k49, k4a, k4b} \
}
diff --git a/keyboards/exclusive/e6_rgb/info.json b/keyboards/exclusive/e6_rgb/info.json
index 80f3610029..f4e5f7fe98 100644
--- a/keyboards/exclusive/e6_rgb/info.json
+++ b/keyboards/exclusive/e6_rgb/info.json
@@ -1,21 +1,1292 @@
{
- "keyboard_name": "e6_rgb",
- "url": "",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT_60_wkl": {
- "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":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
- },
- "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}]
- },
- "LAYOUT_60_hhkb": {
- "key_count":60,
- "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":"|", "x":13, "y":0}, {"label":"~", "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":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "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}, {"label":"Fn", "x":14, "y":3}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}]
- }
- }
+ "keyboard_name": "e6_rgb",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_wkl": {
+ "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": 1.75
+ },
+ {
+ "label": "Fn",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 1.5,
+ "y": 4
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "x": 4,
+ "y": 4,
+ "w": 7
+ },
+ {
+ "label": "Alt",
+ "x": 11,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 12.5,
+ "y": 4
+ },
+ {
+ "label": "Ctrl",
+ "x": 13.5,
+ "y": 4,
+ "w": 1.5
+ }
+ ]
+ },
+ "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
+ }
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "key_count": 60,
+ "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": "|",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "~",
+ "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": "Backspace",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Control",
+ "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
+ },
+ {
+ "label": "Fn",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "Win",
+ "x": 1.5,
+ "y": 4
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "x": 4,
+ "y": 4,
+ "w": 7
+ },
+ {
+ "label": "Alt",
+ "x": 11,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 12.5,
+ "y": 4
+ }
+ ]
+ },
+ "LAYOUT_allleds": {
+ "key_count": 62,
+ "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": "|",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "~",
+ "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": "Backspace",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Control",
+ "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
+ },
+ {
+ "label": "Fn",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 1.5,
+ "y": 4
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "x": 4,
+ "y": 4,
+ "w": 7
+ },
+ {
+ "label": "Alt",
+ "x": 11,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 12.5,
+ "y": 4
+ },
+ {
+ "label": "Fn",
+ "x": 13.5,
+ "y": 4,
+ "w": 1.5
+ }
+ ]
+ }
+ }
}
diff --git a/keyboards/exclusive/e6_rgb/keymaps/allleds/keymap.c b/keyboards/exclusive/e6_rgb/keymaps/allleds/keymap.c
new file mode 100644
index 0000000000..d9a7885eb8
--- /dev/null
+++ b/keyboards/exclusive/e6_rgb/keymaps/allleds/keymap.c
@@ -0,0 +1,16 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_wkl_split_bs(
+ 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,\
+ KC_LCTRL, 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_END,\
+ KC_CAPS, KC_LGUI, KC_LALT, LT(1,KC_SPC), KC_RALT, TG(1), KC_RCTL),
+ [1] = LAYOUT_60_wkl_split_bs(
+ _______, 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,\
+ RESET, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,\
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP,KC_RIGHT,_______,_______,_______,\
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______,_______,_______, _______, _______,TG(0),_______),
+};
diff --git a/keyboards/exclusive/e6_rgb/keymaps/allleds/readme.md b/keyboards/exclusive/e6_rgb/keymaps/allleds/readme.md
new file mode 100644
index 0000000000..f9d6b26522
--- /dev/null
+++ b/keyboards/exclusive/e6_rgb/keymaps/allleds/readme.md
@@ -0,0 +1,13 @@
+This keymap turns RGB underglow and per-key RGB ON at the same time.
+
+While this is the case:
+
+RGB_TOG, RGB_MOD, etc to control the RGB underglow
+
+F13-F17 were used to control the per key RGB
+
+- F13 to turn the RGB on/off
+- F14 to change the effect mode
+- F15 to increase the HUE
+- F16 to increase the SAT
+- F17 to increase the VAL
diff --git a/keyboards/exclusive/e6_rgb/keymaps/allleds/rules.mk b/keyboards/exclusive/e6_rgb/keymaps/allleds/rules.mk
new file mode 100644
index 0000000000..f8610f7e28
--- /dev/null
+++ b/keyboards/exclusive/e6_rgb/keymaps/allleds/rules.mk
@@ -0,0 +1 @@
+RGB_MATRIX_ENABLE = IS31FL3733# Use RGB matrix
diff --git a/keyboards/exclusive/e6_rgb/keymaps/via/keymap.c b/keyboards/exclusive/e6_rgb/keymaps/via/keymap.c
new file mode 100644
index 0000000000..39d7a74c4c
--- /dev/null
+++ b/keyboards/exclusive/e6_rgb/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_wkl_split_bs(
+ 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,\
+ KC_LCTRL, 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_END,\
+ KC_CAPS, KC_LGUI, KC_LALT, LT(1,KC_SPC), KC_RALT, TG(1), KC_RCTL),
+ [1] = LAYOUT_60_wkl_split_bs(
+ _______, 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,\
+ RESET, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,\
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,_______,_______,_______,\
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______,_______,_______, _______, _______, TG(0),_______),
+ [2] = LAYOUT_60_wkl_split_bs(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______,_______,_______, _______, _______,_______,_______),
+ [3] = LAYOUT_60_wkl_split_bs(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\
+ _______,_______,_______, _______, _______,_______,_______),
+};
diff --git a/keyboards/exclusive/e6_rgb/keymaps/via/rules.mk b/keyboards/exclusive/e6_rgb/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/exclusive/e6_rgb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/exclusive/e6_rgb/rules.mk b/keyboards/exclusive/e6_rgb/rules.mk
index 4695f64760..4d8e1c6e5f 100644
--- a/keyboards/exclusive/e6_rgb/rules.mk
+++ b/keyboards/exclusive/e6_rgb/rules.mk
@@ -11,29 +11,24 @@ MCU = atmega32u4
# ATmega328P USBasp
BOOTLOADER = atmel-dfu
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-#OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
# 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)
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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
+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)
+MIDI_ENABLE = no # MIDI support
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
-#RGBLIGHT_ENABLE = yes # Use RGB bottom light
-RGB_MATRIX_ENABLE = IS31FL3733# Use RGB matrix
+RGBLIGHT_ENABLE = yes # Use RGB underglow light
+RGB_MATRIX_ENABLE = no # Use RGB matrix
LAYOUTS = 60_ansi 60_hhkb
diff --git a/keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c b/keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c
index 7300419176..6d9209e487 100644
--- a/keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c
+++ b/keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c
@@ -60,15 +60,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/exclusive/e6v2/le_bmc/readme.md b/keyboards/exclusive/e6v2/le_bmc/readme.md
index 4dc8e6ef51..561560a3e3 100644
--- a/keyboards/exclusive/e6v2/le_bmc/readme.md
+++ b/keyboards/exclusive/e6v2/le_bmc/readme.md
@@ -2,43 +2,18 @@
These docs are for the BMC version of the E6-V2 PCB sold during Round 2 which has an atmega32a microcontroller. Please do not flash this `.hex` file on your atmega32u4 equipped E6-V2 or your E6V2 BMC from Round 1.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: ps2avrgb E6-V2 with atmega32a microcontroller
-Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: ps2avrgb E6-V2 with atmega32a microcontroller
+* Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
Make example for this keyboard (after setting up your build environment):
make exclusive/e6v2/le_bmc:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as left control while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make exclusive/e6v2/le_bmc:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *left control* while plugging in the keyboard.
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/exclusive/e6v2/oe_bmc/keymaps/default/keymap.c b/keyboards/exclusive/e6v2/oe_bmc/keymaps/default/keymap.c
index 7300419176..6d9209e487 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/keymaps/default/keymap.c
+++ b/keyboards/exclusive/e6v2/oe_bmc/keymaps/default/keymap.c
@@ -60,15 +60,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/exclusive/e6v2/oe_bmc/readme.md b/keyboards/exclusive/e6v2/oe_bmc/readme.md
index a386abf6c0..cd6da0ff0b 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/readme.md
+++ b/keyboards/exclusive/e6v2/oe_bmc/readme.md
@@ -2,43 +2,18 @@
These docs are for the BMC version of the E6-V2 PCB sold during Round 1 which has an atmega32a microcontroller. Please do not flash this `.hex` file on your atmega32u4 equipped E6-V2 or your E6V2 BMC from Round 2.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: ps2avrgb E6-V2 with atmega32a microcontroller
-Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: ps2avrgb E6-V2 with atmega32a microcontroller
+* Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)
Make example for this keyboard (after setting up your build environment):
make exclusive/e6v2/oe_bmc:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as left control while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make exclusive/e6v2/oe_bmc:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *left control* while plugging in the keyboard.
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/exclusive/e7v1se/config.h b/keyboards/exclusive/e7v1se/config.h
new file mode 100644
index 0000000000..f11a700920
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/config.h
@@ -0,0 +1,252 @@
+/*
+Copyright 2019 Bart Riemens
+
+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 0x7051
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Exclusive / E-Team
+#define PRODUCT E7-V1 SE
+#define DESCRIPTION E7-V1 SE
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 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
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { E6, B0, B1, B2, B3, F0 }
+#define MATRIX_COL_PINS { D5, D3, D2, D1, D0, D7, D6, D4, B4, B5, B6, C6, C7, F7, F6, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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 */
+/*== customize breathing effect ==*/
+ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+ #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+ /*==== use exp() and sin() ====*/
+ #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+ #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/exclusive/e7v1se/e7v1se.c b/keyboards/exclusive/e7v1se/e7v1se.c
new file mode 100644
index 0000000000..36cfccc2f5
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/e7v1se.c
@@ -0,0 +1,50 @@
+/* Copyright 2019 Bart Riemens
+ *
+ * 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 "e7v1se.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+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);
+}
+
+bool led_update_kb(led_t led_state) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ return led_update_user(led_state);
+}
+*/
diff --git a/keyboards/exclusive/e7v1se/e7v1se.h b/keyboards/exclusive/e7v1se/e7v1se.h
new file mode 100644
index 0000000000..c36072dc0a
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/e7v1se.h
@@ -0,0 +1,43 @@
+/* Copyright 2019 Bart Riemens
+ *
+ * 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 is 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, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, \
+ K50, K51, K52, K56, K5A, K5B, K5D, K5E, K5F \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, K4E, KC_NO }, \
+ { K50, K51, K52, KC_NO, KC_NO, KC_NO, K56, KC_NO, KC_NO, KC_NO, K5A, K5B, KC_NO, K5D, K5E, K5F } \
+}
diff --git a/keyboards/exclusive/e7v1se/info.json b/keyboards/exclusive/e7v1se/info.json
new file mode 100644
index 0000000000..fd9fe0a680
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/info.json
@@ -0,0 +1,95 @@
+{
+ "keyboard_name": "e7v1se",
+ "url": "https://geekhack.org/index.php?topic=101363",
+ "maintainer": "Bart Riemens",
+ "width": 16.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "K00", "x": 0, "y": 0, "w": 1 },
+ { "label": "K01", "x": 1.25, "y": 0, "w": 1 },
+ { "label": "K02", "x": 2.25, "y": 0, "w": 1 },
+ { "label": "K03", "x": 3.25, "y": 0, "w": 1 },
+ { "label": "K04", "x": 4.25, "y": 0, "w": 1 },
+ { "label": "K05", "x": 5.5, "y": 0, "w": 1 },
+ { "label": "K06", "x": 6.5, "y": 0, "w": 1 },
+ { "label": "K07", "x": 7.5, "y": 0, "w": 1 },
+ { "label": "K08", "x": 8.5, "y": 0, "w": 1 },
+ { "label": "K09", "x": 9.75, "y": 0, "w": 1 },
+ { "label": "K0a", "x": 10.75, "y": 0, "w": 1 },
+ { "label": "K0b", "x": 11.75, "y": 0, "w": 1 },
+ { "label": "K0c", "x": 12.75, "y": 0, "w": 1 },
+ { "label": "K0e", "x": 14, "y": 0, "w": 1 },
+ { "label": "K0f", "x": 15.25, "y": 0, "w": 1 },
+ { "label": "K10", "x": 0, "y": 1, "w": 1 },
+ { "label": "K11", "x": 1, "y": 1, "w": 1 },
+ { "label": "K12", "x": 2, "y": 1, "w": 1 },
+ { "label": "K13", "x": 3, "y": 1, "w": 1 },
+ { "label": "K14", "x": 4, "y": 1, "w": 1 },
+ { "label": "K15", "x": 5, "y": 1, "w": 1 },
+ { "label": "K16", "x": 6, "y": 1, "w": 1 },
+ { "label": "K17", "x": 7, "y": 1, "w": 1 },
+ { "label": "K18", "x": 8, "y": 1, "w": 1 },
+ { "label": "K19", "x": 9, "y": 1, "w": 1 },
+ { "label": "K1a", "x": 10, "y": 1, "w": 1 },
+ { "label": "K1b", "x": 11, "y": 1, "w": 1 },
+ { "label": "K1c", "x": 12, "y": 1, "w": 1 },
+ { "label": "K1d", "x": 13, "y": 1, "w": 1 },
+ { "label": "K1e", "x": 14, "y": 1, "w": 1 },
+ { "label": "K1f", "x": 15.25, "y": 1, "w": 1 },
+ { "label": "K20", "x": 0, "y": 2, "w": 1.5 },
+ { "label": "K22", "x": 1.5, "y": 2, "w": 1 },
+ { "label": "K23", "x": 2.5, "y": 2, "w": 1 },
+ { "label": "K24", "x": 3.5, "y": 2, "w": 1 },
+ { "label": "K25", "x": 4.5, "y": 2, "w": 1 },
+ { "label": "K26", "x": 5.5, "y": 2, "w": 1 },
+ { "label": "K27", "x": 6.5, "y": 2, "w": 1 },
+ { "label": "K28", "x": 7.5, "y": 2, "w": 1 },
+ { "label": "K29", "x": 8.5, "y": 2, "w": 1 },
+ { "label": "K2a", "x": 9.5, "y": 2, "w": 1 },
+ { "label": "K2b", "x": 10.5, "y": 2, "w": 1 },
+ { "label": "K2c", "x": 11.5, "y": 2, "w": 1 },
+ { "label": "K2d", "x": 12.5, "y": 2, "w": 1 },
+ { "label": "K2e", "x": 13.5, "y": 2, "w": 1.5 },
+ { "label": "K2f", "x": 15.25, "y": 2, "w": 1 },
+ { "label": "K30", "x": 0, "y": 3, "w": 1.75 },
+ { "label": "K32", "x": 1.75, "y": 3, "w": 1 },
+ { "label": "K33", "x": 2.75, "y": 3, "w": 1 },
+ { "label": "K34", "x": 3.75, "y": 3, "w": 1 },
+ { "label": "K35", "x": 4.75, "y": 3, "w": 1 },
+ { "label": "K36", "x": 5.75, "y": 3, "w": 1 },
+ { "label": "K37", "x": 6.75, "y": 3, "w": 1 },
+ { "label": "K38", "x": 7.75, "y": 3, "w": 1 },
+ { "label": "K39", "x": 8.75, "y": 3, "w": 1 },
+ { "label": "K3a", "x": 9.75, "y": 3, "w": 1 },
+ { "label": "K3b", "x": 10.75, "y": 3, "w": 1 },
+ { "label": "K3c", "x": 11.75, "y": 3, "w": 1 },
+ { "label": "K3d", "x": 12.75, "y": 3, "w": 2.25 },
+ { "label": "K40", "x": 0, "y": 4, "w": 1.25 },
+ { "label": "K41", "x": 1.25, "y": 4, "w": 1 },
+ { "label": "K42", "x": 2.25, "y": 4, "w": 1 },
+ { "label": "K43", "x": 3.25, "y": 4, "w": 1 },
+ { "label": "K44", "x": 4.25, "y": 4, "w": 1 },
+ { "label": "K45", "x": 5.25, "y": 4, "w": 1 },
+ { "label": "K46", "x": 6.25, "y": 4, "w": 1 },
+ { "label": "K47", "x": 7.25, "y": 4, "w": 1 },
+ { "label": "K48", "x": 8.25, "y": 4, "w": 1 },
+ { "label": "K49", "x": 9.25, "y": 4, "w": 1 },
+ { "label": "K4a", "x": 10.25, "y": 4, "w": 1 },
+ { "label": "K4b", "x": 11.25, "y": 4, "w": 1 },
+ { "label": "K4d", "x": 12.25, "y": 4, "w": 1.75 },
+ { "label": "K4e", "x": 14.25, "y": 4.25, "w": 1 },
+ { "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": "K56", "x": 3.75, "y": 5, "w": 6.25 },
+ { "label": "K5a", "x": 10, "y": 5, "w": 1.25 },
+ { "label": "K5b", "x": 11.25, "y": 5, "w": 1.25 },
+ { "label": "K5d", "x": 13.25, "y": 5.25, "w": 1 },
+ { "label": "K5e", "x": 14.25, "y": 5.25, "w": 1 },
+ { "label": "K5f", "x": 15.25, "y": 5.25, "w": 1 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/exclusive/e7v1se/keymaps/default/keymap.c b/keyboards/exclusive/e7v1se/keymaps/default/keymap.c
new file mode 100644
index 0000000000..376b4c9509
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+#include QMK_KEYBOARD_H
+
+/*
+ * ,---------------------------------------------------------------------|
+ * |Esc|â–“|F1 |F2 |F3 |F4 |â–“|F5 |F6 |F7 |F8 |â–“|F9 |F10|F11|F12|â–“|Ins|â–“|Del|
+ * |---------------------------------------------------------------------|
+ * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|â–“PgU |
+ * |---------------------------------------------------------------------|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |â–“PgDn|
+ * |---------------------------------------------------------------------|
+ * |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |â–“â–“â–“â–“â–“â–“â–“|
+ * |---------------------------------------------------------------------|
+ * |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |â–“| Up |â–“â–“|
+ * |---------------------------------------------------------------------|
+ * |Ctrl|GUI |Alt | Space |Alt |Fn |â–“|Lt |Dn |Rt |
+ * `---------------------------------------------------------------------|'
+ */
+
+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_INS, 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_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, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_DEC, BL_INC, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, AG_TOGG, _______, _______, MO(1), RGB_MOD, RGB_VAD, RGB_HUD),
+};
diff --git a/keyboards/exclusive/e7v1se/keymaps/default/readme.md b/keyboards/exclusive/e7v1se/keymaps/default/readme.md
new file mode 100644
index 0000000000..2b7a5c71cc
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/keymaps/default/readme.md
@@ -0,0 +1,17 @@
+# The default keymap for e7v1se
+
+```
+ ,---------------------------------------------------------------------|
+ |Esc|â–“|F1 |F2 |F3 |F4 |â–“|F5 |F6 |F7 |F8 |â–“|F9 |F10|F11|F12|â–“|Ins|â–“|Del|
+ |---------------------------------------------------------------------|
+ |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|â–“PgU |
+ |---------------------------------------------------------------------|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |â–“PgDn|
+ |---------------------------------------------------------------------|
+ |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |â–“â–“â–“â–“â–“â–“â–“|
+ |---------------------------------------------------------------------|
+ |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |â–“| Up |â–“â–“|
+ |---------------------------------------------------------------------|
+ |Ctrl|GUI |Alt | Space |Alt |Fn |â–“|Lt |Dn |Rt |
+ `---------------------------------------------------------------------|'
+```
diff --git a/keyboards/exclusive/e7v1se/keymaps/mac/keymap.c b/keyboards/exclusive/e7v1se/keymaps/mac/keymap.c
new file mode 100644
index 0000000000..ab863fcafd
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/keymaps/mac/keymap.c
@@ -0,0 +1,35 @@
+#include QMK_KEYBOARD_H
+
+/*
+ * ,---------------------------------------------------------------------|
+ * |Esc|â–“|F1 |F2 |F3 |F4 |â–“|F5 |F6 |F7 |F8 |â–“|F9 |F10|F11|F12|â–“|Ins|â–“|Del|
+ * |---------------------------------------------------------------------|
+ * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|â–“PgU |
+ * |---------------------------------------------------------------------|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |â–“PgDn|
+ * |---------------------------------------------------------------------|
+ * |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |â–“â–“â–“â–“â–“â–“â–“|
+ * |---------------------------------------------------------------------|
+ * |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |â–“| Up |â–“â–“|
+ * |---------------------------------------------------------------------|
+ * |Ctrl|Alt |GUI| Space |Alt |Fn |â–“|Lt |Dn |Rt |
+ * `---------------------------------------------------------------------|'
+ */
+
+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_INS, 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_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, 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_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_DEC, BL_INC, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, AG_TOGG , _______, _______, MO(1), RGB_MOD, RGB_VAD, RGB_HUD),
+};
diff --git a/keyboards/exclusive/e7v1se/keymaps/mac/readme.md b/keyboards/exclusive/e7v1se/keymaps/mac/readme.md
new file mode 100644
index 0000000000..54ea48c6d0
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/keymaps/mac/readme.md
@@ -0,0 +1,17 @@
+# The MacOS keymap for e7v1se
+
+```
+ ,---------------------------------------------------------------------|
+ |Esc|â–“|F1 |F2 |F3 |F4 |â–“|F5 |F6 |F7 |F8 |â–“|F9 |F10|F11|F12|â–“|Ins|â–“|Del|
+ |---------------------------------------------------------------------|
+ |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|â–“PgU |
+ |---------------------------------------------------------------------|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |â–“PgDn|
+ |---------------------------------------------------------------------|
+ |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |â–“â–“â–“â–“â–“â–“â–“|
+ |---------------------------------------------------------------------|
+ |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |â–“| Up |â–“â–“|
+ |---------------------------------------------------------------------|
+ |Ctrl|Alt |GUI| Space |Alt |Fn |â–“|Lt |Dn |Rt |
+ `---------------------------------------------------------------------|'
+```
diff --git a/keyboards/exclusive/e7v1se/readme.md b/keyboards/exclusive/e7v1se/readme.md
new file mode 100644
index 0000000000..7c17589bd3
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/readme.md
@@ -0,0 +1,15 @@
+# E7-V1 SE
+
+![e7v1se](https://i.imgur.com/ksbDEYh.jpg)
+
+A 75% keyboard made by Exclusive and run in a Geekhack group buy.
+
+- Keyboard Maintainer: [Bart Riemens](https://github.com/briemens)
+- Hardware Supported: E7-V1 SE
+- Hardware Availability: [Geekhack](https://geekhack.org/index.php?topic=101363)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make exclusive/e7v1se: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/exclusive/e7v1se/rules.mk b/keyboards/exclusive/e7v1se/rules.mk
new file mode 100644
index 0000000000..c9e41ede4b
--- /dev/null
+++ b/keyboards/exclusive/e7v1se/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = full # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/exent/readme.md b/keyboards/exent/readme.md
index 08807eda55..a98eff5f03 100644
--- a/keyboards/exent/readme.md
+++ b/keyboards/exent/readme.md
@@ -2,9 +2,9 @@
65% custom keyboard with large bezels.
-Keyboard Maintainer: [mechmerlin](https://github.com/mechmerlin)
-Hardware Supported: Exent PCB
-Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=87213.0)
+* Keyboard Maintainer: [mechmerlin](https://github.com/mechmerlin)
+* Hardware Supported: Exent PCB
+* Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=87213.0)
Make example for this keyboard (after setting up your build environment):
@@ -14,6 +14,6 @@ Flashing example for this keyboard ([after setting up the bootloadHID flashing e
make exent:default:flash
-**Reset Key**: Hold down the key located at `k0d`, commonly programmed as Backspace while plugging in the keyboard.
+**Reset Key**: Hold down the key located at `k0d`, commonly programmed as *Backspace* while plugging in the keyboard.
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/facew/readme.md b/keyboards/facew/readme.md
index b749d18d29..a852a4f46d 100644
--- a/keyboards/facew/readme.md
+++ b/keyboards/facew/readme.md
@@ -4,44 +4,18 @@ A 60% no frills keyboard.
The FaceW is a special run of the WKL B.Face sourced from Sprit that doesn't have underglow RGB LEDs but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru instead of ps2avrGB. It is designed and manufactured in Korea.
-Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
-Hardware Supported: FaceW Sprit Edition PCB
-Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352
+* Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
+* Hardware Supported: FaceW Sprit Edition PCB
+* Hardware Availability: <https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352>
Make example for this keyboard (after setting up your build environment):
make facew:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** To put the FaceW into reset, hold `q` (`K01`) while plugging in.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make facew:default:flash
+
+**Reset Key**: Hold down the key located at *K01*, commonly programmed as *q* while plugging in the keyboard.
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/fluorite/config.h b/keyboards/fluorite/config.h
new file mode 100644
index 0000000000..59af3eb265
--- /dev/null
+++ b/keyboards/fluorite/config.h
@@ -0,0 +1,244 @@
+/*
+Copyright 2019 Mafuyu Ihotsuno
+
+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 ihotsuno
+#define PRODUCT fluorite
+#define DESCRIPTION Fluorite is a chaotic keyboard consisting of staggered rows, staggered columns, and ortholinear.
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 9
+
+/*
+ * 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, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { D3, D1, D0, D4, C6, D7, E6, B4, B5 }
+#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 DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_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/fluorite/fluorite.c b/keyboards/fluorite/fluorite.c
new file mode 100644
index 0000000000..7c864fbe7f
--- /dev/null
+++ b/keyboards/fluorite/fluorite.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 Mafuyu Ihotsuno
+ *
+ * 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 "fluorite.h"
diff --git a/keyboards/fluorite/fluorite.h b/keyboards/fluorite/fluorite.h
new file mode 100644
index 0000000000..75691c0adf
--- /dev/null
+++ b/keyboards/fluorite/fluorite.h
@@ -0,0 +1,55 @@
+/* Copyright 2019 Mafuyu Ihotsuno
+ *
+ * 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( \
+ L00, L01, L02, L03, L04, L05, L06, L07, R00, R01, R02, R03, R04, R05, R06, R07, \
+ L10, L11, L12, L13, L14, L15, L16, L17, R10, R11, R12, R13, R14, R15, R16, R17, \
+L20, L21, L22, L23, L24, L25, L26, L27, L28, R20, R21, R22, R23, R24, R25, R26, R27, R28, \
+L30, L31, L32, L33, L34, L35, L36, L37, L38, R30, R31, R32, R33, R34, R35, R36, R37, R38, \
+L40, L41, L42, L43, L44, L45, L46, L47, L48, R40, R41, R42, R43, R44, R45, R46, R47, R48, \
+L50, L51, L52, L53, L54, L55, L56, L57, L58, R50, R51, R52, R53, R54, R55, R56, R57, R58, \
+L60, L61, L62, L63, L64, L65, L66, L67, L68, R60, R61, R62, R63, R64, R65, R66, R67, R68, \
+L70, L71, L72, L73, L74, L75, L76, L77, L78, R70, R71, R72, R73, R74, R75, R76, R77, R78 \
+) \
+{ \
+ { KC_NO, L00, L01, L02, L03, L04, L05, L06, L07 }, \
+ { KC_NO, L10, L11, L12, L13, L14, L15, L16, L17 }, \
+ { L20, L21, L22, L23, L24, L25, L26, L27, L28 }, \
+ { L30, L31, L32, L33, L34, L35, L36, L37, L38 }, \
+ { L40, L41, L42, L43, L44, L45, L46, L47, L48 }, \
+ { L50, L51, L52, L53, L54, L55, L56, L57, L58 }, \
+ { L60, L61, L62, L63, L64, L65, L66, L67, L68 }, \
+ { L70, L71, L72, L73, L74, L75, L76, L77, L78 }, \
+ { KC_NO, R07, R06, R05, R04, R03, R02, R01, R00 }, \
+ { KC_NO, R17, R16, R15, R14, R13, R12, R11, R10 }, \
+ { R28, R27, R26, R25, R24, R23, R22, R21, R20 }, \
+ { R38, R37, R36, R35, R34, R33, R32, R31, R30 }, \
+ { R48, R47, R46, R45, R44, R43, R42, R41, R40 }, \
+ { R58, R57, R56, R55, R54, R53, R52, R51, R50 }, \
+ { R68, R67, R66, R65, R64, R63, R62, R61, R60 }, \
+ { R78, R77, R76, R75, R74, R73, R72, R71, R70 }, \
+}
diff --git a/keyboards/fluorite/info.json b/keyboards/fluorite/info.json
new file mode 100644
index 0000000000..46f726ed80
--- /dev/null
+++ b/keyboards/fluorite/info.json
@@ -0,0 +1,160 @@
+{
+ "keyboard_name": "fluorite",
+ "url": "",
+ "maintainer": "ihotsuno, qmk",
+ "width": 24,
+ "height": 9,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"F1", "x":3.5, "y":0},
+ {"label":"F2", "x":4.5, "y":0},
+ {"label":"F3", "x":5.5, "y":0},
+ {"label":"F4", "x":6.5, "y":0},
+ {"label":"Print Screen", "x":7.5, "y":1},
+ {"label":"*", "x":8.5, "y":1},
+ {"label":"/", "x":9.5, "y":1},
+ {"label":"0", "x":10.5, "y":1},
+ {"label":"Num Lock", "x":12.5, "y":1},
+ {"label":"/", "x":13.5, "y":1},
+ {"label":"*", "x":14.5, "y":1},
+ {"label":"Backspace", "x":15.5, "y":1},
+ {"label":"F1", "x":16.5, "y":0},
+ {"label":"F2", "x":17.5, "y":0},
+ {"label":"F3", "x":18.5, "y":0},
+ {"label":"F4", "x":19.5, "y":0},
+
+ {"label":"F5", "x":3.25, "y":1},
+ {"label":"F6", "x":4.25, "y":1},
+ {"label":"F7", "x":5.25, "y":1},
+ {"label":"F8", "x":6.25, "y":1},
+ {"label":"-", "x":7.5, "y":2},
+ {"label":"7", "x":8.5, "y":2},
+ {"label":"8", "x":9.5, "y":2},
+ {"label":"9", "x":10.5, "y":2},
+ {"label":"7", "x":12.5, "y":2},
+ {"label":"8", "x":13.5, "y":2},
+ {"label":"9", "x":14.5, "y":2},
+ {"label":"-", "x":15.5, "y":2},
+ {"label":"F5", "x":16.75, "y":1},
+ {"label":"F6", "x":17.75, "y":1},
+ {"label":"F7", "x":18.75, "y":1},
+ {"label":"F8", "x":19.75, "y":1},
+
+ {"label":"GUI", "x":1.5, "y":2},
+ {"label":"F9", "x":3, "y":2},
+ {"label":"F10", "x":4, "y":2},
+ {"label":"F11", "x":5, "y":2},
+ {"label":"F12", "x":6, "y":2},
+ {"label":"+", "x":7.5, "y":3},
+ {"label":"4", "x":8.5, "y":3},
+ {"label":"5", "x":9.5, "y":3},
+ {"label":"6", "x":10.5, "y":3},
+ {"label":"4", "x":12.5, "y":3},
+ {"label":"5", "x":13.5, "y":3},
+ {"label":"6", "x":14.5, "y":3},
+ {"label":"+", "x":15.5, "y":3},
+ {"label":"F9", "x":17, "y":2},
+ {"label":"F10", "x":18, "y":2},
+ {"label":"F11", "x":19, "y":2},
+ {"label":"F12", "x":20, "y":2},
+ {"label":"GUI", "x":21.5, "y":2},
+
+ {"label":"1", "x":1.5, "y":3},
+ {"label":"2", "x":2.5, "y":3},
+ {"label":"3", "x":3.5, "y":3},
+ {"label":"4", "x":4.5, "y":3},
+ {"label":"5", "x":5.5, "y":3},
+ {"label":"Esc", "x":7.5, "y":4},
+ {"label":"1", "x":8.5, "y":4},
+ {"label":"2", "x":9.5, "y":4},
+ {"label":"3", "x":10.5, "y":4},
+ {"label":"1", "x":12.5, "y":4},
+ {"label":"2", "x":13.5, "y":4},
+ {"label":"3", "x":14.5, "y":4},
+ {"label":"Tab", "x":15.5, "y":4},
+ {"label":"6", "x":17.5, "y":3},
+ {"label":"7", "x":18.5, "y":3},
+ {"label":"8", "x":19.5, "y":3},
+ {"label":"9", "x":20.5, "y":3},
+ {"label":"0", "x":21.5, "y":3},
+
+ {"label":"Q", "x":1.75, "y":4},
+ {"label":"W", "x":2.75, "y":4},
+ {"label":"E", "x":3.75, "y":4},
+ {"label":"R", "x":4.75, "y":4},
+ {"label":"T", "x":5.75, "y":4},
+ {"label":"Backspace", "x":7.5, "y":5},
+ {"label":"Y", "x":8.5, "y":5},
+ {"label":"Insert", "x":9.5, "y":5},
+ {"label":".", "x":10.5, "y":5},
+ {"label":"0", "x":12.5, "y":5},
+ {"label":".", "x":13.5, "y":5},
+ {"label":"Page Up", "x":14.5, "y":5},
+ {"label":"Home", "x":15.5, "y":5},
+ {"label":"Y", "x":17.25, "y":4},
+ {"label":"U", "x":18.25, "y":4},
+ {"label":"I", "x":19.25, "y":4},
+ {"label":"O", "x":20.25, "y":4},
+ {"label":"P", "x":21.25, "y":4},
+
+ {"label":"A", "x":2, "y":5},
+ {"label":"S", "x":3, "y":5},
+ {"label":"D", "x":4, "y":5},
+ {"label":"F", "x":5, "y":5},
+ {"label":"G", "x":6, "y":5},
+ {"label":"Delete", "x":7.5, "y":6},
+ {"label":"N", "x":8.5, "y":6},
+ {"label":"Up", "x":9.5, "y":6},
+ {"label":"PEnter", "x":10.5, "y":6},
+ {"label":"PEnter", "x":12.5, "y":6},
+ {"label":"Up", "x":13.5, "y":6},
+ {"label":"Page Down", "x":14.5, "y":6},
+ {"label":"End", "x":15.5, "y":6},
+ {"label":"H", "x":17, "y":5},
+ {"label":"J", "x":18, "y":5},
+ {"label":"K", "x":19, "y":5},
+ {"label":"L", "x":20, "y":5},
+ {"label":"-", "x":21, "y":5},
+
+ {"label":"Z", "x":2.25, "y":6},
+ {"label":"X", "x":3.25, "y":6},
+ {"label":"C", "x":4.25, "y":6},
+ {"label":"V", "x":5.25, "y":6},
+ {"label":"B", "x":6.25, "y":6},
+ {"label":"Shift", "x":7.25, "y":7, "w":1.25},
+ {"label":"Left", "x":8.5, "y":7},
+ {"label":"Down", "x":9.5, "y":7},
+ {"label":"Right", "x":10.5, "y":7},
+ {"label":"Left", "x":12.5, "y":7},
+ {"label":"Down", "x":13.5, "y":7},
+ {"label":"Right", "x":14.5, "y":7},
+ {"label":"Shift", "x":15.5, "y":7, "w":1.25},
+ {"label":"N", "x":16.75, "y":6},
+ {"label":"M", "x":17.75, "y":6},
+ {"label":",", "x":18.75, "y":6},
+ {"label":".", "x":19.75, "y":6},
+ {"label":"/", "x":20.75, "y":6},
+
+ {"label":"`", "x":0.25, "y":3},
+ {"label":"Tab", "x":0.25, "y":4, "w":1.5},
+ {"label":"Shift", "x":0.5, "y":5, "w":1.5},
+ {"label":"Ctrl", "x":1, "y":6},
+ {"label":"TT(3)", "x":0, "y":6},
+ {"label":"Space", "x":4.625, "y":7, "w":1.25},
+ {"label":"MO(1)", "x":5.875, "y":7},
+ {"label":"Ctrl", "x":9.25, "y":8, "w":1.25},
+ {"label":"Alt", "x":10.5, "y":8},
+ {"label":"Alt", "x":12.5, "y":8},
+ {"label":"Ctrl", "x":13.5, "y":8, "w":1.25},
+ {"label":"MO(2)", "x":17.125, "y":7},
+ {"label":"Enter", "x":18.125, "y":7, "w":1.25},
+ {"label":"Esc", "x":23, "y":6},
+ {"label":"Menu", "x":22, "y":6},
+ {"label":"\"", "x":22, "y":5, "w":1.5},
+ {"label":"=", "x":22.25, "y":4, "w":1.5},
+ {"label":"Backspace", "x":22.5, "y":3, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fluorite/keymaps/default/config.h b/keyboards/fluorite/keymaps/default/config.h
new file mode 100644
index 0000000000..b4e9d27200
--- /dev/null
+++ b/keyboards/fluorite/keymaps/default/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2019 Mafuyu Ihotsuno
+ *
+ * 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 220
+#define TAPPING_TOGGLE 2
+
+// place overrides here
diff --git a/keyboards/fluorite/keymaps/default/keymap.c b/keyboards/fluorite/keymaps/default/keymap.c
new file mode 100644
index 0000000000..38efa333b3
--- /dev/null
+++ b/keyboards/fluorite/keymaps/default/keymap.c
@@ -0,0 +1,206 @@
+/* Copyright 2019 Mafuyu Ihotsuno
+ *
+ * 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 layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _CUSTOM1,
+ _CUSTOM2,
+ _ADJUST
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+};
+
+#define KC_TTCM1 TT(_CUSTOM1)
+#define KC_TTCM2 TT(_CUSTOM2)
+#define KC_CTLTB CTL_T(KC_TAB)
+#define KC_GUIEI GUI_T(KC_LANG2)
+#define KC_ALTKN ALT_T(KC_LANG1)
+#define KC_RSHM RSFT(KC_HOME)
+#define KC_RSEN RSFT(KC_END)
+#define KC_RSJY RSFT(KC_JYEN)
+#define KC_RSRO RSFT(KC_RO)
+#define KC_LSTAB LSFT(KC_TAB)
+#define KC_LSFCO LSFT(KC_COMM)
+#define KC_LSFDO LSFT(KC_DOT)
+#define KC_LCTLZ LCTL(KC_Z)
+#define KC_LCTLX LCTL(KC_X)
+#define KC_LCTLC LCTL(KC_C)
+#define KC_LCTLV LCTL(KC_V)
+#define KC_LCTLY LCTL(KC_Y)
+#define KC_LALSP LALT(KC_SPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT( /* Base */
+ //,-------------------------------------------------------------------------------. ,-------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, KC_PAST, KC_PSLS, KC_P0, KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F5, KC_F6, KC_F7, KC_F8, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_F5, KC_F6, KC_F7, KC_F8,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LGUI, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_F9, KC_F10, KC_F11, KC_F12, KC_RGUI,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, KC_P1, KC_P2, KC_P3, KC_P1, KC_P2, KC_P3, KC_TAB, KC_6, KC_7, KC_8, KC_9, KC_0,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_INS, KC_PDOT, KC_P0, KC_PDOT, KC_PGUP, KC_HOME, KC_Y, KC_U, KC_I, KC_O, KC_P,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL, KC_N, KC_UP, KC_PENT, KC_PENT, KC_UP, KC_PGDN, KC_END, KC_H, KC_J, KC_K, KC_L, KC_MINS,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RSFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_GRV, KC_TAB, KC_LSFT, KC_LCTL, KC_TTCM1, KC_SPC, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_ENT, KC_ESC, KC_APP, KC_QUOT, KC_EQL, KC_BSPC \
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ ),
+
+ [_LOWER] = LAYOUT( /* Base */
+ //,-------------------------------------------------------------------------------. ,-------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, KC_PAST, KC_PSLS, KC_P0, KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F5, KC_F6, KC_F7, KC_F8, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_F5, KC_F6, KC_F7, KC_F8,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LGUI, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_F9, KC_F10, KC_F11, KC_F12, KC_RGUI,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P1, KC_P2, KC_P3, KC_P1, KC_P2, KC_P3, KC_RBRC, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, KC_Y, KC_INS, KC_PDOT, KC_P0, KC_PDOT, KC_PGUP, KC_HOME, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_RSJY,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_BSPC, KC_DEL, KC_N, KC_UP, KC_PENT, KC_PENT, KC_UP, KC_PGDN, KC_END, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LCTLZ, KC_LCTLX, KC_LCTLC, KC_LCTLV, KC_DEL, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RSFT, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_GRV, KC_TAB, KC_LSFT, KC_LCTL, KC_ESC, KC_SPC, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_ENT, KC_ESC, KC_APP, KC_ENT, KC_EQL, KC_DEL \
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ ),
+
+ [_RAISE] = LAYOUT( /* Base */
+ //,-------------------------------------------------------------------------------. ,-------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, KC_PAST, KC_PSLS, KC_P0, KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F5, KC_F6, KC_F7, KC_F8, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_F5, KC_F6, KC_F7, KC_F8,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LGUI, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_F9, KC_F10, KC_F11, KC_F12, KC_RGUI,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_ESC, KC_P1, KC_P2, KC_P3, KC_P1, KC_P2, KC_P3, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, KC_Y, KC_INS, KC_PDOT, KC_P0, KC_PDOT, KC_PGUP, KC_HOME, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_RSJY,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, KC_N, KC_UP, KC_PENT, KC_PENT, KC_UP, KC_PGDN, KC_END, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LBRC,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RSFT, KC_DEL, KC_RSRO, KC_SCLN, KC_QUOT, KC_RO,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_GRV, KC_TAB, KC_LSFT, KC_LCTL, KC_ESC, KC_SPC, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_ENT, KC_ESC, KC_APP, KC_ENT, KC_BSLS, KC_DEL \
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ ),
+
+ [_CUSTOM1] = LAYOUT( /* Base */
+ //,-------------------------------------------------------------------------------. ,-------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, KC_PPLS, KC_PMNS, KC_P0, KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F5, KC_F6, KC_F7, KC_F8, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_F5, KC_F6, KC_F7, KC_F8,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LGUI, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_F9, KC_F10, KC_F11, KC_F12, KC_RGUI,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ESC, KC_P1, KC_P2, KC_P3, KC_P1, KC_P2, KC_P3, KC_TAB, KC_6, KC_7, KC_8, KC_9, KC_0,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_P0, KC_INS, KC_PDOT, KC_P0, KC_PDOT, KC_PGUP, KC_HOME, KC_Y, KC_U, KC_I, KC_O, KC_P,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL, KC_H, KC_UP, KC_PENT, KC_PENT, KC_UP, KC_PGDN, KC_END, KC_H, KC_J, KC_K, KC_L, KC_MINS,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RSFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_N, KC_TAB, KC_LSFT, KC_LCTL, KC_TTCM2, KC_LALT, KC_TTCM1, KC_LCTL, KC_LCTLY, KC_RALT, KC_RCTL, KC_TTCM1, KC_ENT, KC_ESC, KC_SPC, KC_ENT, KC_DEL, KC_BSPC \
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ ),
+
+ [_CUSTOM2] = LAYOUT( /* Base */
+ //,-------------------------------------------------------------------------------. ,-------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, KC_PPLS, KC_PMNS, KC_P0, KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F5, KC_F6, KC_F7, KC_F8, KC_PMNS, KC_P7, KC_P8, KC_P9, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_F5, KC_F6, KC_F7, KC_F8,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LGUI, KC_F9, KC_F10, KC_F11, KC_F12, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_F9, KC_F10, KC_F11, KC_F12, KC_RGUI,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Y, KC_M, KC_I, KC_L, KC_P, KC_H, KC_P1, KC_P2, KC_P3, KC_P1, KC_P2, KC_P3, KC_TAB, KC_6, KC_7, KC_8, KC_9, KC_0,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_COMM, KC_BSPC, KC_PDOT, KC_P0, KC_PDOT, KC_PGUP, KC_HOME, KC_Y, KC_U, KC_I, KC_O, KC_P,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_BSLS, KC_DOT, KC_UP, KC_PENT, KC_PENT, KC_UP, KC_PGDN, KC_END, KC_H, KC_J, KC_K, KC_L, KC_MINS,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RSFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_N, KC_TAB, KC_LSFT, KC_LCTL, KC_ESC, KC_LALT, KC_TTCM2, KC_LCTLZ, KC_LCTLY, KC_RALT, KC_RCTL, KC_TTCM2, KC_ENT, KC_ESC, KC_SPC, KC_ENT, KC_DEL, KC_BSPC \
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ ),
+
+ [_ADJUST] = LAYOUT( /* Base */
+ //,-------------------------------------------------------------------------------. ,-------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_6, KC_7, KC_8, KC_9, KC_0,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LSFCO, KC_RCBR, KC_RBRC, KC_ASTR, KC_BSPC, KC_DEL, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, KC_END, KC_BSPC, KC_LPRN, KC_BSLS, KC_PIPE, KC_LSFDO,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_RSFT, KC_DEL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_GRV, KC_TAB, KC_LSFT, KC_LALT, KC_ESC, KC_SPC, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_ENT, KC_ESC, KC_APP, KC_ENT, XXXXXXX, XXXXXXX \
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ // SEND_STRING("QMK is the best thing ever!");
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ // when keycode QMKBEST is released
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ // SEND_STRING("QMK is the best thing ever!");
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ // when keycode QMKBEST is released
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/fluorite/keymaps/default/readme.md b/keyboards/fluorite/keymaps/default/readme.md
new file mode 100644
index 0000000000..f9216dab9a
--- /dev/null
+++ b/keyboards/fluorite/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for fluorite \ No newline at end of file
diff --git a/keyboards/fluorite/readme.md b/keyboards/fluorite/readme.md
new file mode 100644
index 0000000000..d55252c94a
--- /dev/null
+++ b/keyboards/fluorite/readme.md
@@ -0,0 +1,17 @@
+# fluorite
+
+![fluorite](https://github.com/ihotsuno/keyboard/blob/master/kbd-fluorite-cxl/doc/image/fluorite-CXL-001.jpg)
+
+![fluorite](https://github.com/ihotsuno/keyboard/blob/master/kbd-fluorite-cxl/doc/image/fluorite-CXL-002.jpg)
+
+Fluorite is a chaotic keyboard consisting of staggered rows, staggered columns, and ortholinear.
+
+* Keyboard Maintainer: [mafuyu ihotsuno](https://github.com/ihotsuno) [@ihotsuno](https://twitter.com/ihotsuno)
+* Hardware Supported: fluorite CXL PCB, ProMicro
+* Hardware Availability: [ten key](https://tenkey.connpass.com/), [booth.pm](https://ihotsuno.booth.pm/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fluorite: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/fluorite/rules.mk b/keyboards/fluorite/rules.mk
new file mode 100644
index 0000000000..107da9b954
--- /dev/null
+++ b/keyboards/fluorite/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+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
+
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/fortitude60/keymaps/default/keymap.c b/keyboards/fortitude60/keymaps/default/keymap.c
index 1c96424f6e..c476fed854 100644
--- a/keyboards/fortitude60/keymaps/default/keymap.c
+++ b/keyboards/fortitude60/keymaps/default/keymap.c
@@ -155,7 +155,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/fortitude60/rev1/config.h b/keyboards/fortitude60/rev1/config.h
index ad4407a111..98f610461c 100644
--- a/keyboards/fortitude60/rev1/config.h
+++ b/keyboards/fortitude60/rev1/config.h
@@ -18,8 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef REV1_CONFIG_H
#define REV1_CONFIG_H
-#include QMK_KEYBOARD_CONFIG_H
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCB10
#define PRODUCT_ID 0x1156
diff --git a/keyboards/foxlab/leaf60/hotswap/keymaps/crd/keymap.c b/keyboards/foxlab/leaf60/hotswap/keymaps/crd/keymap.c
new file mode 100644
index 0000000000..117edf3524
--- /dev/null
+++ b/keyboards/foxlab/leaf60/hotswap/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
+};
+
+#define KC_CTES CTL_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_tsangan_hhkb(
+ 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_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,
+ 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_RSFT, MO(_FL),
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_SPC, KC_RALT, XXXXXXX, TO(_CL)
+ ),
+ [_FL] = LAYOUT_60_tsangan_hhkb(
+ _______, 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_DEL,
+ _______, _______, _______, EEP_RST, RESET, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_CL] = LAYOUT_60_tsangan_hhkb(
+ 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, BL_ON, XXXXXXX, XXXXXXX,
+ XXXXXXX, BL_DEC, BL_INC, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_BRTG, BL_STEP, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_OFF, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_BL)
+ )
+};
diff --git a/keyboards/ft/mars80/keymaps/default/keymap.c b/keyboards/ft/mars80/keymaps/default/keymap.c
index ba7ef83d98..010102d723 100644
--- a/keyboards/ft/mars80/keymaps/default/keymap.c
+++ b/keyboards/ft/mars80/keymaps/default/keymap.c
@@ -61,15 +61,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/ft/mars80/readme.md b/keyboards/ft/mars80/readme.md
index 9622751334..3d108300bb 100644
--- a/keyboards/ft/mars80/readme.md
+++ b/keyboards/ft/mars80/readme.md
@@ -2,43 +2,18 @@
TKL Keyboard with in switch backlight and RGB Underglow.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: Mars 8.0 PCB
-Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=93723.0)
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: Mars 8.0 PCB
+* Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=93723.0)
Make example for this keyboard (after setting up your build environment):
make ft/mars80:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make ft/mars80:default:flash
**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Pause/Break` while plugging in the keyboard.
-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 python3
- pip3 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/gami_studio/lex60/config.h b/keyboards/gami_studio/lex60/config.h
new file mode 100644
index 0000000000..8a038ccce7
--- /dev/null
+++ b/keyboards/gami_studio/lex60/config.h
@@ -0,0 +1,53 @@
+/*
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7353
+#define PRODUCT_ID 0x0160
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Maartenwut
+#define PRODUCT Lex60
+#define DESCRIPTION A 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 {D5,D4,B0,D2,D3}
+#define MATRIX_COL_PINS {B7,F7,C7,E6,C6,F0,B6,F1,B5,F4,B4,F5,D7,F6,D6}
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define QMK_ESC_OUTPUT B7 // usually COL
+#define QMK_ESC_INPUT D5 // usually ROW
+
+#define RGB_DI_PIN D1
+#define RGBLED_NUM 12
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/gami_studio/lex60/keymaps/default/keymap.c b/keyboards/gami_studio/lex60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..039eb93b3a
--- /dev/null
+++ b/keyboards/gami_studio/lex60/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+#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 layer_names {
+ _BASE,
+ _GAMING,
+ _FUNCTION,
+ _FIRMWARE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_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_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_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, LT(2, KC_ENT), KC_RGUI, KC_RALT, KC_APP, KC_RCTRL),
+
+ [_GAMING] = 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_LCTL, 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, MO(2), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, XXXXXXX, KC_RGUI, KC_RALT, KC_APP, KC_RCTRL),
+
+ [_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_BSLS, KC_DEL,\
+ KC_TAB, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(2, KC_ENT), KC_RGUI, KC_RALT, KC_APP, KC_RCTRL),
+
+ [_FIRMWARE] = LAYOUT(
+ RESET, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_DEC, BL_TOGG, BL_INC, XXXXXXX, XXXXXXX, TG(1),\
+ 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),
+};
diff --git a/keyboards/gami_studio/lex60/lex60.c b/keyboards/gami_studio/lex60/lex60.c
new file mode 100644
index 0000000000..939d6c5589
--- /dev/null
+++ b/keyboards/gami_studio/lex60/lex60.c
@@ -0,0 +1 @@
+#include "lex60.h"
diff --git a/keyboards/gami_studio/lex60/lex60.h b/keyboards/gami_studio/lex60/lex60.h
new file mode 100644
index 0000000000..eea7a454b6
--- /dev/null
+++ b/keyboards/gami_studio/lex60/lex60.h
@@ -0,0 +1,21 @@
+#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, k45, 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, k45, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, XXX} \
+}
diff --git a/keyboards/gami_studio/lex60/readme.md b/keyboards/gami_studio/lex60/readme.md
new file mode 100644
index 0000000000..2724719c0f
--- /dev/null
+++ b/keyboards/gami_studio/lex60/readme.md
@@ -0,0 +1,12 @@
+# Gami Studio Lex60
+
+A 60% with split space bars made by Gami Studio.
+
+* Keyboard Maintainer: [Gami Studio](https://github.com/GamiStudio)
+* Hardware Supported: Lex60 powered by the ATmega32U4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make gami_studio/lex60:default # postfix with `:flash` to load the firmware into the board
+
+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/gami_studio/lex60/rules.mk b/keyboards/gami_studio/lex60/rules.mk
new file mode 100644
index 0000000000..3b7f4dbd51
--- /dev/null
+++ b/keyboards/gami_studio/lex60/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/gh60/revc/info.json b/keyboards/gh60/revc/info.json
index 51c61f3182..bbfa1f2dab 100644
--- a/keyboards/gh60/revc/info.json
+++ b/keyboards/gh60/revc/info.json
@@ -24,8 +24,8 @@
},
"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},{"label":"Space","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}]
+ "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":"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}, {"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}, {"label":"Space", "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}]
},
"LAYOUT_60_ansi_split_bs_rshift": {
diff --git a/keyboards/gh60/satan/keymaps/smt/keymap.c b/keyboards/gh60/satan/keymaps/smt/keymap.c
index 8546211d5e..829032a829 100644
--- a/keyboards/gh60/satan/keymaps/smt/keymap.c
+++ b/keyboards/gh60/satan/keymaps/smt/keymap.c
@@ -37,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
* |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl |
+ * |Ctrl|Gui |Alt | Space |Alt |Fn |Gui |Ctrl |
* `-----------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_60_ansi(
- 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, \
- 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_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, \
+ 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, \
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FUNC), KC_RCTL
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNC), KC_RGUI, KC_RCTL
),
/* Keymap _COLEMAK: (Base Layer) Default Layer
@@ -58,15 +58,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------|
* |Shift | Z| X| C| V| B| K| M| ,| .| /|Shift |
* |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl |
+ * |Ctrl|Gui |Alt | Space |Alt |Fn |Gui |Ctrl |
* `-----------------------------------------------------------'
*/
[_COLEMAK] = LAYOUT_60_ansi(
- 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, \
- 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_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, \
+ 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, \
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FUNC), KC_RCTL
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNC), KC_RGUI, KC_RCTL
),
/* Keymap _DVORAK: (Base Layer) Default Layer
@@ -79,35 +79,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------|
* |Shift | ;| Q| J| K| X| B| M| W| V| Z|ShiftEnter|
* |-----------------------------------------------------------|
- * |Ctrl|Gui |Alt | Space |Alt |Gui |Fn |Ctrl |
+ * |Ctrl|Gui |Alt | Space |Alt |Fn |Gui |Ctrl |
* `-----------------------------------------------------------'
*/
[_DVORAK] = LAYOUT_60_ansi(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \
- 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \
+ 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, \
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_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FUNC), KC_RCTL
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNC), KC_RGUI, KC_RCTL
),
/* Keymap _FUNC: Function Layer
* ,-----------------------------------------------------------.
- * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
+ * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| BL |
* |-----------------------------------------------------------|
- * | |Hom| UP|End| | | |Qwt|Cmk|Dvk| |BL-|BL+|BL |
+ * | |Hom| UP|End| | | |Qwt|Cmk|Dvk| |UP |BL-| BL+ |
* |-----------------------------------------------------------|
- * | |LFT| DN| RT| | |LFT| DN| UP| RT|Vo+|Pg+| |
+ * | |LFT| DN| RT| | | | | |Pg+|LFT|RGT| |
* |-----------------------------------------------------------|
- * | | | |Prv|Ply|Nxt| | | |Vo-|Pg-| |
+ * | | | |Prv|Ply|Nxt| | | |Pg-|DN | |
* |-----------------------------------------------------------|
* |RESET| | | | | | | |
* `-----------------------------------------------------------'
*/
[_FUNC] = LAYOUT_60_ansi(
- _______, 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, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, BL_DEC, BL_INC, BL_TOGG, \
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU, KC_PGUP, _______, \
- _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_VOLD, KC_PGDN, _______, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, BL_TOGG, \
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_UP, BL_DEC, BL_INC, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_PGUP, KC_LEFT, KC_RGHT, _______, \
+ _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PGDN, KC_DOWN, _______, \
RESET, _______, _______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/gingham/readme.md b/keyboards/gingham/readme.md
index 9893884e84..d0c3e6fad7 100644
--- a/keyboards/gingham/readme.md
+++ b/keyboards/gingham/readme.md
@@ -9,11 +9,12 @@ Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/gingha
Hardware Availability: https://yiancar-designs.com/, https://novelkeys.xyz, https://mechboards.co.uk/
Make example for this keyboard (after setting up your build environment):
+
make gingham:default
-Flash firmware:
- // In bootloader mode
- make gingham:default:program
+Flashing example for this keyboard:
+
+ make gingham:default:flash
Bootloader:
use usbasploader HSGW's my repository.
diff --git a/keyboards/gingham/rules.mk b/keyboards/gingham/rules.mk
index aa228c875b..2ef090bd68 100644
--- a/keyboards/gingham/rules.mk
+++ b/keyboards/gingham/rules.mk
@@ -14,10 +14,6 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# Flash program via avrdude, but default command is not suitable.
-# You can use plaid:default:program
-PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
-
# disable debug code
OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/gray_studio/cod67/rules.mk b/keyboards/gray_studio/cod67/rules.mk
index 0bed09539f..132db98f45 100644
--- a/keyboards/gray_studio/cod67/rules.mk
+++ b/keyboards/gray_studio/cod67/rules.mk
@@ -9,10 +9,7 @@ MCU = atmega32u4
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
-BOOTLOADER = atmel-dfu # actually lufa-ms
-
-# Mass storage bootloader on the COD67 uses bin files
-FIRMWARE_FORMAT = bin
+BOOTLOADER = lufa-ms
# Build Options
# change yes to no to disable
diff --git a/keyboards/gray_studio/hb85/readme.md b/keyboards/gray_studio/hb85/readme.md
index c0c2fdf371..7e39f327c1 100644
--- a/keyboards/gray_studio/hb85/readme.md
+++ b/keyboards/gray_studio/hb85/readme.md
@@ -4,45 +4,18 @@
A Sony HitBit MSX Computer inspired Keyboard.
-Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
-Hardware Supported: Gray Studio HB85
-Hardware Availability: [Group buy](https://en.zfrontier.com/products/gray-hb85) finished
+* Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
+* Hardware Supported: Gray Studio HB85
+* Hardware Availability: [Group buy](https://en.zfrontier.com/products/gray-hb85) finished
Make example for this keyboard (after setting up your build environment):
make gray_studio/hb85:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make gray_studio/hb85:default:flash
**Reset Key:** Hold down the key located at `K00`, commonly programmed as F3 while plugging in the keyboard.
-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 python3
- pip3 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.
-
-**Please Note:** You will need to use the `EEP_RST` keycode first, followed by unplugging/replugging the board to get RGB underglow effects to work.
-
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/gray_studio/space65/keymaps/default/keymap.c b/keyboards/gray_studio/space65/keymaps/default/keymap.c
index 229a0c574b..17f44b3b65 100644
--- a/keyboards/gray_studio/space65/keymaps/default/keymap.c
+++ b/keyboards/gray_studio/space65/keymaps/default/keymap.c
@@ -22,20 +22,20 @@ enum custom_keycodes {
};
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_BSPC, 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_INS, \
- 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_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_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-[1] = LAYOUT( \
- 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_TRNS, KC_TRNS, KC_MUTE, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, 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_PGUP, KC_VOLD, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
- ),
+ [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_BSPC, 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_INS, \
+ 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_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_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT( \
+ 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_TRNS, KC_TRNS, KC_MUTE, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, 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_PGUP, KC_VOLD, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/gray_studio/space65/keymaps/iso/keymap.c b/keyboards/gray_studio/space65/keymaps/iso/keymap.c
new file mode 100644
index 0000000000..66c69eba8b
--- /dev/null
+++ b/keyboards/gray_studio/space65/keymaps/iso/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2020 Rys Sommefeldt
+ *
+ * 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_65_iso_blocker(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │PUp│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │PDn│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │Ctrl│LGUI│LAlt│      Spaaaaaaace       │RAlt│ L1 │ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ 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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_iso_blocker(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │RST│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│       │   │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ TOG │PLN│MOD│HU+│HU-│SA+│SA-│VA+│VA-│   │   │   │   │     │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â”    ├───┤
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │   │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │    │   │   │   │   │   │   │   │   │   │   │   │      │   │   │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │    │    │    │                        │    │    │ │   │   │   │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ 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, _______, _______,
+ RGB_TOG, RGB_M_P, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/gray_studio/space65/keymaps/iso/readme.md b/keyboards/gray_studio/space65/keymaps/iso/readme.md
new file mode 100644
index 0000000000..e7d3dd8238
--- /dev/null
+++ b/keyboards/gray_studio/space65/keymaps/iso/readme.md
@@ -0,0 +1,3 @@
+# ISO keymap for Space65
+
+Make this firmware with `make gray_studio/space65:iso`.
diff --git a/keyboards/gray_studio/space65/rules.mk b/keyboards/gray_studio/space65/rules.mk
index ced89eac04..e3909d8dd4 100644
--- a/keyboards/gray_studio/space65/rules.mk
+++ b/keyboards/gray_studio/space65/rules.mk
@@ -32,4 +32,4 @@ 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)
-LAYOUTS = 65_ansi_blocker
+LAYOUTS = 65_ansi_blocker 65_iso_blocker
diff --git a/keyboards/gray_studio/space65/space65.h b/keyboards/gray_studio/space65/space65.h
index 15aa89935b..943e9e66c9 100644
--- a/keyboards/gray_studio/space65/space65.h
+++ b/keyboards/gray_studio/space65/space65.h
@@ -27,10 +27,10 @@
*/
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
- k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
- k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
- k40, k41, k43, k45, k47, k48, k4A, k4B, k4D, k4E, k4F \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
+ k40, k41, k43, k45, k47, k48, k4A, k4B, k4D, k4E, k4F \
) \
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
@@ -41,17 +41,30 @@
}
#define LAYOUT_65_ansi_blocker( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0E, k0F, \
- k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
- k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
- k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
- k40, k41, k43, k47, k4A, k4B, k4D, k4E, k4F \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0F, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, k3F, \
+ k40, k41, k43, k47, k4A, k4B, k4D, k4E, k4F \
) \
{ \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, KC_NO, k0E, k0F }, \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, KC_NO, k0F }, \
{ k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F }, \
{ k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, KC_NO, k3D, k3E, k3F }, \
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4A, k4B, KC_NO, k4D, k4E, k4F }, \
}
+#define LAYOUT_65_iso_blocker( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1E, K2D, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
+ K40, K41, K43, K47, K4A, K4B, K4D, K4E, K4F \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO, K0F }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F }, \
+ { K40, K41, KC_NO, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E, K4F }, \
+}
diff --git a/keyboards/gray_studio/think65/hotswap/keymaps/default/keymap.c b/keyboards/gray_studio/think65/hotswap/keymaps/default/keymap.c
index 187f68c5c0..ea9146dcf6 100644
--- a/keyboards/gray_studio/think65/hotswap/keymaps/default/keymap.c
+++ b/keyboards/gray_studio/think65/hotswap/keymaps/default/keymap.c
@@ -17,18 +17,18 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_ansi_blocker(
- 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_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_HOME,
- 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, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ 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_HOME,
+ 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, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_65_ansi_blocker(
- RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ 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, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/keyboards/gray_studio/think65/solder/info.json b/keyboards/gray_studio/think65/solder/info.json
index 0be5042538..cc87af41bb 100644
--- a/keyboards/gray_studio/think65/solder/info.json
+++ b/keyboards/gray_studio/think65/solder/info.json
@@ -77,7 +77,77 @@
{"label":"K4F (E6,F6)", "x":15, "y":4}
]
},
-
+ "LAYOUT_65_iso_badge": {
+ "key_count": 66,
+ "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, "w":2},
+ {"label":"K0F", "x":15, "y":0},
+ {"label":"K10", "x":0, "y":1, "w":1.5},
+ {"label":"K12", "x":1.5, "y":1},
+ {"label":"K13", "x":2.5, "y":1},
+ {"label":"K14", "x":3.5, "y":1},
+ {"label":"K15", "x":4.5, "y":1},
+ {"label":"K16", "x":5.5, "y":1},
+ {"label":"K17", "x":6.5, "y":1},
+ {"label":"K18", "x":7.5, "y":1},
+ {"label":"K19", "x":8.5, "y":1},
+ {"label":"K1A", "x":9.5, "y":1},
+ {"label":"K1B", "x":10.5, "y":1},
+ {"label":"K1C", "x":11.5, "y":1},
+ {"label":"K1D", "x":12.5, "y":1},
+ {"label":"K1F", "x":15, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.75},
+ {"label":"K22", "x":1.75, "y":2},
+ {"label":"K23", "x":2.75, "y":2},
+ {"label":"K24", "x":3.75, "y":2},
+ {"label":"K25", "x":4.75, "y":2},
+ {"label":"K26", "x":5.75, "y":2},
+ {"label":"K27", "x":6.75, "y":2},
+ {"label":"K28", "x":7.75, "y":2},
+ {"label":"K29", "x":8.75, "y":2},
+ {"label":"K2A", "x":9.75, "y":2},
+ {"label":"K2B", "x":10.75, "y":2},
+ {"label":"K2C", "x":11.75, "y":2},
+ {"label":"K1E", "x":12.75, "y":2},
+ {"label":"K2D", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"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":"K3D", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3E", "x":14, "y":3},
+ {"label":"K40", "x":0, "y":4, "w":1.25},
+ {"label":"K41", "x":1.25, "y":4, "w":1.25},
+ {"label":"K43", "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":"K4D", "x":13, "y":4},
+ {"label":"K4E", "x":14, "y":4},
+ {"label":"K4F", "x":15, "y":4}
+ ]
+ },
"LAYOUT_all": {
"key_count": 69,
"layout": [
@@ -154,4 +224,4 @@
}
}
,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
-} \ No newline at end of file
+}
diff --git a/keyboards/gray_studio/think65/solder/keymaps/default/keymap.c b/keyboards/gray_studio/think65/solder/keymaps/default/keymap.c
index 187f68c5c0..ea9146dcf6 100644
--- a/keyboards/gray_studio/think65/solder/keymaps/default/keymap.c
+++ b/keyboards/gray_studio/think65/solder/keymaps/default/keymap.c
@@ -17,18 +17,18 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_ansi_blocker(
- 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_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_HOME,
- 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, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ 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_HOME,
+ 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, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_65_ansi_blocker(
- RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
+ 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, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/keyboards/gray_studio/think65/solder/keymaps/rys/keymap.c b/keyboards/gray_studio/think65/solder/keymaps/rys/keymap.c
new file mode 100644
index 0000000000..658798ed67
--- /dev/null
+++ b/keyboards/gray_studio/think65/solder/keymaps/rys/keymap.c
@@ -0,0 +1,271 @@
+/* Copyright 2019 Rys Sommefeldt
+ *
+ * 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
+
+/*
+ * LED ranges
+ * ┌─────────────┬─────────────┬───────────────────────────────────────────â”
+ * │ 00 01 02 03 │ 04 05 06 07 │ 08 09 10 11 12 13 14 15 16 17 18 19 20 21 │
+ * │   escape    │    badge    │              underglow                    │
+ * └─────────────┴─────────────┴───────────────────────────────────────────┘
+ */
+
+// Define the LED ranges start, end
+#define THINK65_LED_RANGE_OFF 0, 0
+#define THINK65_LED_RANGE_ESC 0, 4
+#define THINK65_LED_RANGE_BADGE 4, 8
+#define THINK65_LED_RANGE_UNDERGLOW 8, 22
+#define THINK65_LED_RANGE_ALL 0, 22
+
+// Turn the LEDs off by setting HSV to 0, 0, 0
+#define THINK65_LEDS_OFF 0, 0, 0
+
+// There are 3 ranges, so we can store all combinations in 2^3 values
+// Define all of them to make it easier to write the cycling code
+#define THINK65_LED_STATE_OFF 0x0 // 0b00000000
+#define THINK65_LED_STATE_ESC 0x1 // 0b00000001
+#define THINK65_LED_STATE_BADGE 0x2 // 0b00000010
+#define THINK65_LED_STATE_UNDERGLOW 0x4 // 0b00000100
+#define THINK65_LED_STATE_ESC_AND_BADGE 0x3 // 0b00000011
+#define THINK65_LED_STATE_ESC_AND_UNDERGLOW 0x5 // 0b00000101
+#define THINK65_LED_STATE_BADGE_AND_UNDERGLOW 0x6 // 0b00000110
+#define THINK65_LED_STATE_ON 0x7 // 0b00000111
+
+// Define each LED range as a bit flag
+#define THINK65_LED_ESC_RANGE_BIT 0
+#define THINK65_LED_BADGE_RANGE_BIT 1
+#define THINK65_LED_UNDERGLOW_RANGE_BIT 2
+
+// Setup some keycodes to control cycling and range toggling
+enum rys_keycodes {
+ CYC_LED = SAFE_RANGE,
+ TOG_ESC,
+ TOG_BDG,
+ TOG_UGL
+};
+
+// setup the user EEPROM space we need
+typedef union {
+ uint8_t raw;
+ struct {
+ uint8_t current_led_state:8;
+ };
+} user_config_t;
+
+user_config_t user_config;
+
+// toggle one of the range flag bits
+void toggle_led_state(unsigned int led_range) {
+ if (led_range >= THINK65_LED_ESC_RANGE_BIT && led_range <= THINK65_LED_UNDERGLOW_RANGE_BIT) {
+ user_config.current_led_state ^= 1 << led_range;
+ }
+}
+
+// set one of the range flag bits
+void set_led_state(unsigned int led_range) {
+ if (led_range >= THINK65_LED_ESC_RANGE_BIT && led_range <= THINK65_LED_UNDERGLOW_RANGE_BIT) {
+ user_config.current_led_state |= 1 << led_range;
+ }
+}
+
+// clear one of the range flag bits
+void clear_led_state(unsigned int led_range) {
+ if (led_range >= THINK65_LED_ESC_RANGE_BIT && led_range <= THINK65_LED_UNDERGLOW_RANGE_BIT) {
+ user_config.current_led_state &= ~(1 << led_range);
+ }
+}
+
+// cycle LED states: Off -> Esc -> Badge -> Underglow -> Esc+Badge -> Esc+Underglow -> Badge+Underglow -> All
+void cycle_led_state(void) {
+ switch(user_config.current_led_state) {
+ case THINK65_LED_STATE_OFF:
+ user_config.current_led_state = THINK65_LED_STATE_ESC;
+ break;
+ case THINK65_LED_STATE_ESC:
+ user_config.current_led_state = THINK65_LED_STATE_BADGE;
+ break;
+ case THINK65_LED_STATE_BADGE:
+ user_config.current_led_state = THINK65_LED_STATE_UNDERGLOW;
+ break;
+ case THINK65_LED_STATE_UNDERGLOW:
+ user_config.current_led_state = THINK65_LED_STATE_ESC_AND_BADGE;
+ break;
+ case THINK65_LED_STATE_ESC_AND_BADGE:
+ user_config.current_led_state = THINK65_LED_STATE_ESC_AND_UNDERGLOW;
+ break;
+ case THINK65_LED_STATE_ESC_AND_UNDERGLOW:
+ user_config.current_led_state = THINK65_LED_STATE_BADGE_AND_UNDERGLOW;
+ break;
+ case THINK65_LED_STATE_BADGE_AND_UNDERGLOW:
+ user_config.current_led_state = THINK65_LED_STATE_ON;
+ break;
+ case THINK65_LED_STATE_ON:
+ user_config.current_led_state = THINK65_LED_STATE_OFF;
+ break;
+ default:
+ break;
+ }
+}
+
+void apply_led_state(void) {
+ uint8_t h = rgblight_get_hue();
+ uint8_t s = rgblight_get_sat();
+ uint8_t v = rgblight_get_val();
+
+ // Set the RGB ranges based on the current state
+ switch(user_config.current_led_state) {
+ case THINK65_LED_STATE_OFF:
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_ALL);
+ break;
+ case THINK65_LED_STATE_ESC:
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_ESC);
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_BADGE);
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_UNDERGLOW);
+ break;
+ case THINK65_LED_STATE_BADGE:
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_ESC);
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE);
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_UNDERGLOW);
+ break;
+ case THINK65_LED_STATE_UNDERGLOW:
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_ESC);
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_BADGE);
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_UNDERGLOW);
+ break;
+ case THINK65_LED_STATE_ESC_AND_BADGE:
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_ESC);
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE);
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_UNDERGLOW);
+ break;
+ case THINK65_LED_STATE_ESC_AND_UNDERGLOW:
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_ESC);
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_BADGE);
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_UNDERGLOW);
+ break;
+ case THINK65_LED_STATE_BADGE_AND_UNDERGLOW:
+ rgblight_sethsv_range(THINK65_LEDS_OFF, THINK65_LED_RANGE_ESC);
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_BADGE);
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_UNDERGLOW);
+ break;
+ case THINK65_LED_STATE_ON:
+ rgblight_sethsv_range(h, s, v, THINK65_LED_RANGE_ALL);
+ break;
+ default:
+ break;
+ }
+}
+
+void keyboard_post_init_user(void) {
+ user_config.raw = eeconfig_read_user();
+
+ if (user_config.current_led_state >= THINK65_LED_STATE_OFF && user_config.current_led_state <= THINK65_LED_STATE_ON) {
+ // If the current state read from user EEPROM is valid, apply it
+ apply_led_state();
+ } else {
+ // Setup a new default state of off
+ user_config.current_led_state = THINK65_LED_STATE_OFF;
+ apply_led_state();
+ eeconfig_update_user(user_config.raw);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case CYC_LED:
+ if (record->event.pressed) {
+ cycle_led_state();
+ apply_led_state();
+ eeconfig_update_user(user_config.raw);
+ }
+ break;
+ case TOG_ESC:
+ if (record->event.pressed) {
+ toggle_led_state(THINK65_LED_ESC_RANGE_BIT);
+ apply_led_state();
+ eeconfig_update_user(user_config.raw);
+ }
+ break;
+ case TOG_BDG:
+ if (record->event.pressed) {
+ toggle_led_state(THINK65_LED_BADGE_RANGE_BIT);
+ apply_led_state();
+ eeconfig_update_user(user_config.raw);
+ }
+ break;
+ case TOG_UGL:
+ if (record->event.pressed) {
+ toggle_led_state(THINK65_LED_UNDERGLOW_RANGE_BIT);
+ apply_led_state();
+ eeconfig_update_user(user_config.raw);
+ }
+ break;
+ case KC_CAPS:
+ if (!record->event.pressed) {
+ // connect capslock LED control to the badge LEDs
+ host_keyboard_led_state().caps_lock ? set_led_state(THINK65_LED_BADGE_RANGE_BIT) : clear_led_state(THINK65_LED_BADGE_RANGE_BIT);
+ apply_led_state();
+ eeconfig_update_user(user_config.raw);
+ }
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_iso_badge(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │   │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤   │
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │   │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │Ctrl│LAlt│GUI │      Spaaaaaaace       │RAlt│ L1 │ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ 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_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_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_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_iso_badge(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │RST│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│       │   │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ TOG │PLN│MOD│HU+│HU-│SA+│SA-│VA+│VA-│   │   │   │   │     │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â”    ├───┤
+ * │      │   │   │   │   │   │   │   │   │   │   │   │   │    │   │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤   │
+ * │    │   │   │   │   │   │   │   │   │   │   │   │      │CYC│   │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │    │    │    │                        │    │    │ │ESC│BDG│UGL│
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ 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, _______, _______,
+ RGB_TOG, RGB_M_P, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CYC_LED,
+ _______, _______, _______, _______, _______, _______, TOG_ESC, TOG_BDG, TOG_UGL
+ ),
+
+};
diff --git a/keyboards/gray_studio/think65/solder/keymaps/rys/readme.md b/keyboards/gray_studio/think65/solder/keymaps/rys/readme.md
new file mode 100644
index 0000000000..ed73e30647
--- /dev/null
+++ b/keyboards/gray_studio/think65/solder/keymaps/rys/readme.md
@@ -0,0 +1,11 @@
+# Personal keymap for the Think 6.5 with compatible soldered PCB
+
+The layout is UK ISO with some small personal tweaks.
+
+The LED cycling code is based on code posted to the Gray Studio Discord by `MudkipMao` on Nov 22nd 2019. Thanks!
+
+## LED cycling
+
+This map saves and restores your current active LED group choice to user EEPROM and restores it on keyboard init, which you can cycle through all combinations of, or toggle individually.
+
+The cycle is `Off -> Esc -> Badge -> Underglow -> Esc+Badge -> Esc+Underglow -> Badge+Underglow -> All`. Look at the keymap for the controls on layer 1.
diff --git a/keyboards/gray_studio/think65/solder/solder.h b/keyboards/gray_studio/think65/solder/solder.h
index b77cc578b1..19ee551258 100644
--- a/keyboards/gray_studio/think65/solder/solder.h
+++ b/keyboards/gray_studio/think65/solder/solder.h
@@ -45,5 +45,19 @@
{ K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E, K4F }, \
}
+#define LAYOUT_65_iso_badge( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1E, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K40, K41, K43, K46, K4A, K4B, K4D, K4E, K4F \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, KC_NO, K0F }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, KC_NO }, \
+ { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E, K4F }, \
+}
+
// generated by KBFirmware JSON to QMK Parser
-// https://noroadsleft.github.io/kbf_qmk_converter/ \ No newline at end of file
+// https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/hadron/ver3/keymaps/default/keymap.c b/keyboards/hadron/ver3/keymaps/default/keymap.c
index 749c385c85..e8082eb71f 100644
--- a/keyboards/hadron/ver3/keymaps/default/keymap.c
+++ b/keyboards/hadron/ver3/keymaps/default/keymap.c
@@ -193,7 +193,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
@@ -267,4 +267,3 @@ void matrix_init_user(void) {
void matrix_scan_user(void) {
}
-
diff --git a/keyboards/handwired/2x5keypad/keymaps/default/keymap.c b/keyboards/handwired/2x5keypad/keymaps/default/keymap.c
index 91a0e28f6a..23614a9b78 100644
--- a/keyboards/handwired/2x5keypad/keymaps/default/keymap.c
+++ b/keyboards/handwired/2x5keypad/keymaps/default/keymap.c
@@ -143,7 +143,7 @@ layer_state_t layer_state_set_user(layer_state_t state)
{
turn_off_leds();
- switch (biton32(state))
+ switch (get_highest_layer(state))
{
case NORMAL_LAYER:
break;
diff --git a/keyboards/handwired/aek64/config.h b/keyboards/handwired/aek64/config.h
index 45ce6665bc..7d235358c3 100644
--- a/keyboards/handwired/aek64/config.h
+++ b/keyboards/handwired/aek64/config.h
@@ -27,27 +27,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT AEK64
#define DESCRIPTION QMK keyboard firmware for AEK64 handwired
+/* Define the backlight */
+/*#define BACKLIGHT_ON_STATE 1*/
+
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
// Originally made for a Teensy 2++
-#define MATRIX_COL_PINS { F0, E6, E7, B0, B1, B2, B3, B4, B5, B6, B7, D0, D1, D2 }
+#define MATRIX_COL_PINS { F0, E6, E7, B0, B1, B2, B3, B4, B5, B6, D3, D0, D1, D2 }
#define MATRIX_ROW_PINS { E0, E1, C0, C1, C2 }
#define UNUSED_PINS
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
/* Set 0 if debouncing isn't 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
-
/* Enable the space-cadet options */
#define RSPC_KEYS KC_RSFT, KC_TRNS, KC_PGUP
#define RCPC_KEYS KC_RCTL, KC_TRNS, KC_PGDOWN
@@ -59,20 +53,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define COMBO_COUNT 1
-/*
- * 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 BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
diff --git a/keyboards/handwired/aek64/keymaps/4sstylz/keycodes.h b/keyboards/handwired/aek64/keymaps/4sstylz/keycodes.h
new file mode 100644
index 0000000000..9898fe0df3
--- /dev/null
+++ b/keyboards/handwired/aek64/keymaps/4sstylz/keycodes.h
@@ -0,0 +1,85 @@
+/*
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ * Version 2, December 2004
+ *
+ * Copyright (C) 2019 4sStylZ <4sstylz@protonmail.ch>
+ *
+ * Everyone is permitted to copy and distribute verbatim or modified
+ * copies of this license document, and changing it is allowed as long
+ * as the name is changed.
+ *
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ *
+ * 0. You just DO WHAT THE FUCK YOU WANT TO.
+ */
+#include QMK_KEYBOARD_H
+
+/**
+ * Macro for selecting all the text in the document.
+ * Usual shortcut : Ctrl+A.
+ *
+ * @param keyrecord_t *record
+ *
+ * @return void
+ */
+void select_all(keyrecord_t *record) {
+ if (record->event.pressed) {
+ register_code(KC_LCTL);
+ tap_code(KC_A);
+ unregister_code(KC_LCTL);
+ }
+}
+
+/**
+ * Macro for selecting the current row.
+ *
+ * @param keyrecord_t *record
+ *
+ * @return void
+ */
+void select_row(keyrecord_t *record) {
+ if (record->event.pressed) {
+ tap_code(KC_HOME);
+ register_code(KC_LSFT);
+ tap_code(KC_END);
+ unregister_code(KC_LSFT);
+ }
+}
+
+/**
+ * Macro for selecting the current word.
+ * Usage : You need to have the cursor into the word or directly at the right.
+ *
+ *
+ * Usual shortcut : Ctrl+A.
+ *
+ * @param keyrecord_t *record
+ *
+ * @return void
+ */
+void select_word(keyrecord_t *record) {
+ if (record->event.pressed) {
+ register_code(KC_LCTL);
+ tap_code(KC_LEFT);
+ register_code(KC_LSFT);
+ tap_code(KC_RIGHT);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_LCTL);
+ }
+}
+
+/**
+ * Macro for inserting two 0 with keypad.
+ * Be carefull to have the keypad lock enabled
+ *
+ * @param keyrecord_t *record
+ *
+ * @return void
+ */
+void insert_00(keyrecord_t *record) {
+ if (record->event.pressed) {
+ tap_code(KC_P0);
+ tap_code(KC_P0);
+ }
+}
diff --git a/keyboards/handwired/aek64/keymaps/4sstylz/keymap.c b/keyboards/handwired/aek64/keymaps/4sstylz/keymap.c
index 65f8354aab..cb62fb001c 100644
--- a/keyboards/handwired/aek64/keymaps/4sstylz/keymap.c
+++ b/keyboards/handwired/aek64/keymaps/4sstylz/keymap.c
@@ -1,4 +1,5 @@
#include QMK_KEYBOARD_H
+#include <keycodes.h>
// Implement Super-alt↯tab
// See https://docs.qmk.fm/#/feature_macros?id=super-alt↯tab
@@ -7,7 +8,10 @@ uint16_t alt_tab_timer = 0;
// Defining all the custom keycodes.
enum custom_keycodes {
- ALT_TAB = SAFE_RANGE
+ ALT_TAB = SAFE_RANGE,
+ SLC_ROW,
+ SLC_ALL,
+ SLC_WRD
};
const uint16_t PROGMEM lock_combo[] = {KC_J, KC_K, KC_L, KC_SCLN, COMBO_END};
@@ -18,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty
* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬─────────────â”
* │ ` Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bksp │
- * ├─────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
+ * ├──────┴──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
* ├─────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┴┠Enter│
* │ Layer 2 │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
@@ -40,14 +44,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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,
MO(1) , 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_LSPO , KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC ,
- KC_LCPO , KC_LALT, ALT_TAB, KC_SPC, KC_LGUI, KC_RALT, KC_RCPC
+ KC_LCPO , KC_LGUI, KC_LALT, KC_SPC, KC_APP , KC_RALT, KC_RCPC
),
/* 1: second layer for media keys and many advanced features ç
* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬─────────────â”
* │Alt F4│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │
- * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
- * │ │ │ │PrtScn│ Brt+ │ Brt- │Ctrl A│ Home │ Up │ End │ ‽  │ ↑     │ ⸮   │ │ │
+ * ├──────┴──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┬───────┤
+ * │ │ │PrtScn│ Brt+ │ Brt- │Ctrl A│ Home │ Up │ End │ ‽  │ ↑     │ ⸮   │ │ │
* ├─────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼─────┴┠│
* │ │ Cut │ Copy │Paste │ Del │ Del │ Left │ Down │Right │ ↠│ ↓ │ → │ │ │
* ├──────┬──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┴──────┴──────┤
@@ -57,11 +61,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* └──────┴──────┴──────┴──────────────────────────────────────────────────────────────┴──────┴──────┴──────┘
*/
[1] = LAYOUT( \
- LALT(KC_F4), 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_BRIU , KC_BRID, LCTL(KC_A), KC_HOME, KC_UP , KC_END , UC(0x203D) , UC(0x8593), UC(0x2E2E),
- _______ , _______ , LSFT(KC_DEL), LCTL(KC_INS), LSFT(KC_INS), KC_DEL , KC_DEL , KC_LEFT, KC_DOWN, KC_RIGHT, UC(0x8592) , UC(0x8595), UC(0x8594), _______,
- _______ , _______ , KC_MUTE , KC_VOLD , KC_VOLU , _______, _______ , _______, _______, _______ , _______ , RESET , _______ ,
- _______ , _______ , _______ , _______, _______ , _______ , _______
+ LALT(KC_F4), 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 ,
+ _______ , _______ , SLC_ALL , SLC_ROW , SLC_WRD , _______, KC_BSPC, KC_HOME, KC_UP , KC_END , KC_BRIU, KC_BRID , KC_PSCR,
+ _______ , _______ , LSFT(KC_DEL), LCTL(KC_INS), LSFT(KC_INS), KC_DEL , KC_ENT , KC_LEFT, KC_DOWN, KC_RIGHT, BL_TOGG, BL_STEP , BL_BRTG, _______,
+ _______ , _______ , KC_MUTE , KC_VOLD , KC_VOLU , ALT_TAB, _______, _______, _______, _______ , _______, RESET , _______ ,
+ _______ , _______ , _______ , _______, _______ , _______, _______
)
};
@@ -88,6 +92,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
unregister_code(KC_TAB);
}
break;
+ case SLC_ALL:
+ select_all(record);
+ break;
+ case SLC_ROW:
+ select_row(record);
+ break;
+ case SLC_WRD:
+ select_word(record);
+ break;
}
return true;
}
diff --git a/keyboards/handwired/aek64/rules.mk b/keyboards/handwired/aek64/rules.mk
index c02af3dd6c..52c3061306 100644
--- a/keyboards/handwired/aek64/rules.mk
+++ b/keyboards/handwired/aek64/rules.mk
@@ -25,3 +25,4 @@ UNICODE_ENABLE = yes # Enable support for arrow keys icon on the second layer.
COMBO_ENABLE = yes # Enable combo for special function when using multiple keys at once.
TAP_DANCE_ENABLE = no # Enable use multiple tap
NKRO_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/handwired/aranck/aranck.h b/keyboards/handwired/aranck/aranck.h
index de7639fd03..df887c2c56 100644
--- a/keyboards/handwired/aranck/aranck.h
+++ b/keyboards/handwired/aranck/aranck.h
@@ -25,7 +25,7 @@
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
-#define LAYOUT_aranck_mit(\
+#define LAYOUT_planck_mit(\
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, \
diff --git a/keyboards/handwired/aranck/config.h b/keyboards/handwired/aranck/config.h
index 5212409c8d..0de56cc3b6 100644
--- a/keyboards/handwired/aranck/config.h
+++ b/keyboards/handwired/aranck/config.h
@@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001
#define MANUFACTURER Ardakilic
-#define PRODUCT ARANCK
+#define PRODUCT Aranck
#define DESCRIPTION A handwired 40% ortholinear keyboard
/* key matrix size */
diff --git a/keyboards/handwired/aranck/info.json b/keyboards/handwired/aranck/info.json
index 450d89634a..5e138508d5 100644
--- a/keyboards/handwired/aranck/info.json
+++ b/keyboards/handwired/aranck/info.json
@@ -6,7 +6,7 @@
"width": 12,
"height": 4,
"layouts": {
- "LAYOUT_aranck_mit": {
+ "LAYOUT_planck_mit": {
"key_count": 47,
"layout": [
{ "x": 0, "y": 0 },
diff --git a/keyboards/handwired/aranck/keymaps/default/keymap.c b/keyboards/handwired/aranck/keymaps/default/keymap.c
index 2765c7afbf..206d23b6af 100644
--- a/keyboards/handwired/aranck/keymaps/default/keymap.c
+++ b/keyboards/handwired/aranck/keymaps/default/keymap.c
@@ -42,10 +42,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | PWR | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_aranck_mit(
+[_QWERTY] = LAYOUT_planck_mit(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
LT(_NUMPAD, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT /*KC_ENT*/,
+ LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
LT(_SODA, KC_POWER), KC_LCTL, KC_LALT, KC_LGUI, MO(_LOWER), LT(_SPACE, KC_SPC), MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_aranck_mit(
+[_LOWER] = LAYOUT_planck_mit(
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, _______,
@@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_aranck_mit(
+[_RAISE] = LAYOUT_planck_mit(
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, _______,
@@ -89,18 +89,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Soda Layer
* Keys that I mostly use when while chilling or taking a break :)
* ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | | | | |
+ * | | | | | | | | | Up | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | Mute |
+ * | | | | | | | | Left | Down |Right | | Mute |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | Next | Vol- | Vol+ | Play |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
* `-----------------------------------------------------------------------------------'
*/
-[_SODA] = LAYOUT_aranck_mit(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE,
+[_SODA] = LAYOUT_planck_mit(
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_BRMU
),
@@ -116,7 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
* `-----------------------------------------------------------------------------------'
*/
-[_SPACE] = LAYOUT_aranck_mit(
+[_SPACE] = LAYOUT_planck_mit(
_______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LOCKSCREEN,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
@@ -129,15 +129,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | Enter| 4 | 5 | 6 | + | * |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | 1 | 2 | 3 | + | / |
+ * | | | | | | | Enter| 1 | 2 | 3 | + | / |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | 0 | 0 | . | , | = |
* `-----------------------------------------------------------------------------------'
*/
-[_NUMPAD] = LAYOUT_aranck_mit(
+[_NUMPAD] = LAYOUT_planck_mit(
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC,
_______, _______, _______, _______, _______, _______, KC_PENT, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PAST,
- _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PSLS,
+ _______, _______, _______, _______, _______, _______, KC_PENT, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PSLS,
_______, _______, _______, _______, _______, _______, KC_P0, KC_P0, KC_PDOT, KC_PCMM, KC_PEQL
),
@@ -153,7 +153,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_aranck_mit(
+[_ADJUST] = LAYOUT_planck_mit(
_______, RESET, EEP_RST, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
_______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, _______, _______, _______, _______, _______,
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______,
@@ -166,13 +166,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
-
-//bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-// 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/aranck/keymaps/turkishish/config.h b/keyboards/handwired/aranck/keymaps/turkishish/config.h
index 3e40ef4f6d..0810a3b23f 100644
--- a/keyboards/handwired/aranck/keymaps/turkishish/config.h
+++ b/keyboards/handwired/aranck/keymaps/turkishish/config.h
@@ -19,4 +19,6 @@
// place overrides here
#define RETRO_TAPPING
-#define PERMISSIVE_HOLD \ No newline at end of file
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_FORCE_HOLD \ No newline at end of file
diff --git a/keyboards/handwired/aranck/keymaps/turkishish/keymap.c b/keyboards/handwired/aranck/keymaps/turkishish/keymap.c
index 195b8aaad0..4e7ef57b71 100644
--- a/keyboards/handwired/aranck/keymaps/turkishish/keymap.c
+++ b/keyboards/handwired/aranck/keymaps/turkishish/keymap.c
@@ -43,6 +43,7 @@ enum aranck_layers {
#define VERTICAL_PIPE RALT(KC_EQL)
#define BACKTICK RALT(KC_BSLS)
#define TILDE RALT(KC_RBRC)
+#define NUMBER_SIGN RALT(KC_3)
#define LOCKSCREEN LCTL(LSFT(KC_POWER)) // Screen Lock shortcut for OSX
/*
@@ -93,10 +94,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Sda|<>| Ctrl | Alt | OS |Lowr|,| Space* |Rise|"| Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_aranck_mit(
+[_QWERTY] = LAYOUT_planck_mit(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
LT(_NUMPAD, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT /*KC_ENT*/,
+ LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
LT(_SODA, KC_GRV), KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_BSLS), LT(_SPACE, KC_SPC), LT(_RAISE, KC_NONUS_BSLASH), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
@@ -106,15 +107,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | ? | _ | Ğ | Ü | - |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | "$" | "{" | "}" | , | ">" |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | "$" | "{" | "}" | < | ">" |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | "[" | "]" | ' | " |
+ * | | | | | | | | "[" | "]" | ' | " |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_aranck_mit(
+[_LOWER] = LAYOUT_planck_mit(
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_LBRC, KC_RBRC, KC_EQL,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DOLLAR_SIGN, CURLY_OPEN, CURLY_CLOSE, KC_BSLS, LSFT(KC_GRV),
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DOLLAR_SIGN, CURLY_OPEN, CURLY_CLOSE, KC_GRV, LSFT(KC_GRV),
_______, _______, _______, _______, _______, _______, _______, SQUARE_OPEN, SQUARE_CLOSE, LSFT(KC_2), KC_NONUS_BSLASH
),
@@ -125,15 +126,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | * | - | "\" | "|" | , |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | , | " | "~" | "`" | <>| |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | # | " | "~" | "`" | <>| |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_aranck_mit(
+[_RAISE] = LAYOUT_planck_mit(
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, BACKSLASH, VERTICAL_PIPE, KC_BSLS,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, TILDE, BACKTICK, KC_GRV,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMBER_SIGN, KC_NUBS, TILDE, BACKTICK, KC_GRV,
_______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
@@ -148,7 +149,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
* `-----------------------------------------------------------------------------------'
*/
-[_SODA] = LAYOUT_aranck_mit(
+[_SODA] = LAYOUT_planck_mit(
_______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_MUTE,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
@@ -166,7 +167,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
* `-----------------------------------------------------------------------------------'
*/
-[_SPACE] = LAYOUT_aranck_mit(
+[_SPACE] = LAYOUT_planck_mit(
_______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LOCKSCREEN,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
@@ -181,15 +182,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | Enter| 4 | 5 | 6 | + | * |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | 1 | 2 | 3 | + | / |
+ * | | | | | | | Enter| 1 | 2 | 3 | + | / |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | 0 | 0 | . | , | = |
* `-----------------------------------------------------------------------------------'
*/
-[_NUMPAD] = LAYOUT_aranck_mit(
+[_NUMPAD] = LAYOUT_planck_mit(
_______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC,
_______, _______, _______, _______, _______, _______, KC_PENT, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PAST,
- _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PSLS,
+ _______, _______, _______, _______, _______, _______, KC_PENT, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PSLS,
_______, _______, _______, _______, _______, _______, KC_P0, KC_P0, KC_SLSH, KC_PDOT, KC_PEQL
),
@@ -204,7 +205,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_aranck_mit(
+[_ADJUST] = LAYOUT_planck_mit(
_______, RESET, EEP_RST, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
_______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, _______, _______, _______, _______, _______,
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______,
@@ -217,9 +218,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
-
-void matrix_init_user(void) {}
-
-void matrix_scan_user(void) {}
-
-void led_set_user(uint8_t usb_led) {}
diff --git a/keyboards/handwired/aranck/keymaps/turkishish/readme.md b/keyboards/handwired/aranck/keymaps/turkishish/readme.md
index 8998081c1f..3ff12ca0e7 100644
--- a/keyboards/handwired/aranck/keymaps/turkishish/readme.md
+++ b/keyboards/handwired/aranck/keymaps/turkishish/readme.md
@@ -1 +1,7 @@
# The Turkishish keymap for Aranck
+
+This layout is optimized for my use cases with Turkish OS layout.
+
+You can flash the "turkishish" layout like:
+
+ make handwired/aranck:turkishish:flash
diff --git a/keyboards/handwired/aranck/readme.md b/keyboards/handwired/aranck/readme.md
index 67089b4997..437d0b44db 100644
--- a/keyboards/handwired/aranck/readme.md
+++ b/keyboards/handwired/aranck/readme.md
@@ -8,15 +8,11 @@ A handwired 40% ortholinear keyboard.
The story: https://imgur.com/a/4QI7ifJ
-Keyboard Maintainer: [Arda Kilicdagi](https://github.com/ardakilic)
-Hardware Supported: Pro Micro
+* Keyboard Maintainer: [Arda Kilicdagi](https://github.com/ardakilic)
+* Hardware Supported: Pro Micro
Make example for this keyboard (after setting up your build environment):
- make handwired/aranck:default:flash
+ make handwired/aranck:default
-You can flash the "turkishish" layout (which I'm currently using) like:
-
- make handwired/aranck:turkishish:flash
-
-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
+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/aranck/rules.mk b/keyboards/handwired/aranck/rules.mk
index b95b98a4c7..a6809de9d4 100644
--- a/keyboards/handwired/aranck/rules.mk
+++ b/keyboards/handwired/aranck/rules.mk
@@ -14,10 +14,10 @@ BOOTLOADER = caterina
# 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)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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
@@ -25,9 +25,11 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+MIDI_ENABLE = no # MIDI support
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
-HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) \ No newline at end of file
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+LAYOUTS = planck_mit \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/keymaps/default/keymap.c b/keyboards/handwired/bluepill/keymaps/default/keymap.c
index 8a34930390..870a530f9e 100644
--- a/keyboards/handwired/bluepill/keymaps/default/keymap.c
+++ b/keyboards/handwired/bluepill/keymaps/default/keymap.c
@@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define _FNTWO 2
// Highly Modified by Xydane
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NORMAL] = LAYOUT_seventy_ansi(
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_PSCREEN,KC_HOME, KC_END, \
KC_GRAVE, 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_DELETE, \
@@ -50,8 +50,8 @@ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9,
};
/* Layer based ilumination, just binary */
-uint32_t layer_state_set_user(uint32_t state) {
- switch (biton32(state)) {
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
case _FNONE:
palSetPad(GPIOA, 0); //OFF Color A
palClearPad(GPIOA, 1); //ON Color B
@@ -66,4 +66,4 @@ uint32_t layer_state_set_user(uint32_t state) {
break;
}
return state;
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/bluepill/keymaps/iso/keymap.c b/keyboards/handwired/bluepill/keymaps/iso/keymap.c
index a6aedde7a3..072f430fbd 100644
--- a/keyboards/handwired/bluepill/keymaps/iso/keymap.c
+++ b/keyboards/handwired/bluepill/keymaps/iso/keymap.c
@@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define _FNTWO 2
// Highly Modified by Xydane
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NORMAL] = LAYOUT_seventy_iso(
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_PSCREEN,KC_HOME, KC_END, \
KC_GRAVE, 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_DELETE, \
@@ -66,4 +66,4 @@ uint32_t layer_state_set_user(uint32_t state) {
break;
}
return state;
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/cans12er/README.md b/keyboards/handwired/cans12er/README.md
new file mode 100644
index 0000000000..5ecb2d2c26
--- /dev/null
+++ b/keyboards/handwired/cans12er/README.md
@@ -0,0 +1,18 @@
+# Cans12er
+![Cans12er](https://i.imgur.com/ZsO6QSI.jpg)
+
+A 12-key, orthogonal keypad designed by Can!
+
+* Keyboard Maintainer: [Can](https://github.com/canbaytok)
+* Hardware Supported: Pro Micro Atmega32u4
+* Hardware Availability: DIY with the [open-source design files](https://github.com/canbaytok/Cans12er)
+
+Schematic can be found here: [EasyEDA](https://easyeda.com/senordoenermann/mediapad)
+
+Build Instructions can be found here: [canbaytok/Cans12er](https://github.com/canbaytok/Cans12er)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/cans12er: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/cans12er/cans12er.c b/keyboards/handwired/cans12er/cans12er.c
new file mode 100644
index 0000000000..e74b6a3026
--- /dev/null
+++ b/keyboards/handwired/cans12er/cans12er.c
@@ -0,0 +1 @@
+#include "cans12er.h"
diff --git a/keyboards/handwired/cans12er/cans12er.h b/keyboards/handwired/cans12er/cans12er.h
new file mode 100644
index 0000000000..87a39799ef
--- /dev/null
+++ b/keyboards/handwired/cans12er/cans12er.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_3x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 } \
+}
diff --git a/keyboards/handwired/cans12er/config.h b/keyboards/handwired/cans12er/config.h
new file mode 100644
index 0000000000..d7bc4c5c5a
--- /dev/null
+++ b/keyboards/handwired/cans12er/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Can
+#define PRODUCT cans12er
+#define DESCRIPTION a simple 3x4 keypad. every part can be manufactured at home
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F7, B1, B3 }
+#define MATRIX_COL_PINS { D0, D4, C6, 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 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
diff --git a/keyboards/handwired/cans12er/keymaps/default/keymap.c b/keyboards/handwired/cans12er/keymaps/default/keymap.c
new file mode 100644
index 0000000000..864abede37
--- /dev/null
+++ b/keyboards/handwired/cans12er/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#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 _KEYPAD 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_KEYPAD] = LAYOUT_ortho_3x4(
+ KC_A, KC_B, KC_C, KC_D,
+ KC_E, KC_F, KC_G, KC_H,
+ KC_I, KC_J, KC_K, KC_L
+),
+};
diff --git a/keyboards/handwired/cans12er/rules.mk b/keyboards/handwired/cans12er/rules.mk
new file mode 100644
index 0000000000..c6675b6153
--- /dev/null
+++ b/keyboards/handwired/cans12er/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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 \ No newline at end of file
diff --git a/keyboards/handwired/ck4x4/keymaps/default/keymap.c b/keyboards/handwired/ck4x4/keymaps/default/keymap.c
index d3717754d8..bc8b602a67 100644
--- a/keyboards/handwired/ck4x4/keymaps/default/keymap.c
+++ b/keyboards/handwired/ck4x4/keymaps/default/keymap.c
@@ -17,13 +17,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(KC_7, KC_8, KC_9, KC_MINUS, \
KC_4, KC_5, KC_6, KC_PLUS, \
KC_1, KC_2, KC_3, KC_ENTER, \
RESET, KC_NO, KC_NO, KC_NO \
), // test with KC_CAPS, KC_A, RESET
};
-
-const uint16_t fn_actions[] = {
-};
diff --git a/keyboards/handwired/ck4x4/rules.mk b/keyboards/handwired/ck4x4/rules.mk
index 7ed9022e65..cd4bc260f3 100644
--- a/keyboards/handwired/ck4x4/rules.mk
+++ b/keyboards/handwired/ck4x4/rules.mk
@@ -1,37 +1,5 @@
-# project specific files
-# SRC = matrix.c \
-# led.c
-
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
diff --git a/keyboards/handwired/co60/rev6/config.h b/keyboards/handwired/co60/rev6/config.h
index b1ab99fd9b..a2c73853ca 100644
--- a/keyboards/handwired/co60/rev6/config.h
+++ b/keyboards/handwired/co60/rev6/config.h
@@ -55,6 +55,5 @@
/* Backlight configuration
* Backlight LEDs on B8
*/
-#define BACKLIGHT_LEVELS 24
+#define BACKLIGHT_PIN B8
#define BACKLIGHT_BREATHING
-#define BREATHING_PERIOD 6
diff --git a/keyboards/handwired/co60/rev6/led.c b/keyboards/handwired/co60/rev6/led.c
deleted file mode 100644
index fe28ce2e8f..0000000000
--- a/keyboards/handwired/co60/rev6/led.c
+++ /dev/null
@@ -1,240 +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/>.
-*/
-
-#include "hal.h"
-#include "led_custom.h"
-#include "rev6.h"
-#include "printf.h"
-
-static void breathing_callback(PWMDriver *pwmp);
-
-static PWMConfig pwmCFG = {
- 0xFFFF, /* PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- NULL, /* No Callback */
- {
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-static PWMConfig pwmCFG_breathing = {
- 0xFFFF, /* 10kHz PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- breathing_callback, /* Breathing Callback */
- {
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-// See http://jared.geek.nz/2013/feb/linear-led-pwm
-static uint16_t cie_lightness(uint16_t v) {
- if (v <= 5243) // if below 8% of max
- return v / 9; // same as dividing by 900%
- else {
- uint32_t y = (((uint32_t)v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
- // to get a useful result with integer division, we shift left in the expression above
- // and revert what we've done again after squaring.
- y = y * y * y >> 8;
- if (y > 0xFFFFUL) // prevent overflow
- return 0xFFFFU;
- else
- return (uint16_t)y;
- }
-}
-
-void backlight_init_ports(void) {
- palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(2));
- pwmStart(&PWMD4, &pwmCFG);
- if (kb_backlight_config.enable) {
- if (kb_backlight_config.breathing) {
- breathing_enable();
- } else {
- backlight_set(kb_backlight_config.level);
- }
- } else {
- backlight_set(0);
- }
-}
-
-void backlight_set(uint8_t level) {
- uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t)level / BACKLIGHT_LEVELS));
- if (level == 0) {
- // Turn backlight off
- // Disable channel 3 on PWM4
- pwmDisableChannel(&PWMD4, 2);
- } else {
- // Turn backlight on
- if (!is_breathing()) {
- // Enable channel 3 on PWM4
- pwmEnableChannel(&PWMD4, 2, PWM_FRACTION_TO_WIDTH(&PWMD4, 0xFFFF, duty));
- }
- }
-}
-
-uint8_t backlight_tick = 0;
-
-void backlight_task(void) {
-}
-
-#define BREATHING_NO_HALT 0
-#define BREATHING_HALT_OFF 1
-#define BREATHING_HALT_ON 2
-#define BREATHING_STEPS 128
-
-static uint8_t breathing_period = BREATHING_PERIOD;
-static uint8_t breathing_halt = BREATHING_NO_HALT;
-static uint16_t breathing_counter = 0;
-
-bool is_breathing(void) {
- return PWMD4.config == &pwmCFG_breathing;
-}
-
-#define breathing_min() do {breathing_counter = 0;} while (0)
-#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
-
-
-void breathing_interrupt_enable(void){
- pwmStop(&PWMD4);
- pwmStart(&PWMD4, &pwmCFG_breathing);
- chSysLockFromISR();
- pwmEnablePeriodicNotification(&PWMD4);
- pwmEnableChannelI(
- &PWMD4,
- 2,
- PWM_FRACTION_TO_WIDTH(
- &PWMD4,
- 0xFFFF,
- 0xFFFF
- )
- );
- chSysUnlockFromISR();
-}
-
-void breathing_interrupt_disable(void){
- pwmStop(&PWMD4);
- pwmStart(&PWMD4, &pwmCFG);
-}
-
-void breathing_enable(void)
-{
- breathing_counter = 0;
- breathing_halt = BREATHING_NO_HALT;
- breathing_interrupt_enable();
-}
-
-void breathing_pulse(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_min();
- else
- breathing_max();
- breathing_halt = BREATHING_HALT_ON;
- breathing_interrupt_enable();
-}
-
-void breathing_disable(void)
-{
- breathing_interrupt_disable();
- // Restore backlight level
- backlight_set(kb_backlight_config.level);
-}
-
-void breathing_self_disable(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_halt = BREATHING_HALT_OFF;
- else
- breathing_halt = BREATHING_HALT_ON;
-}
-
-void breathing_toggle(void) {
- if (is_breathing()){
- breathing_disable();
- } else {
- breathing_enable();
- }
-}
-
-void breathing_period_set(uint8_t value)
-{
- if (!value)
- value = 1;
- breathing_period = value;
-}
-
-void breathing_period_default(void) {
- breathing_period_set(BREATHING_PERIOD);
-}
-
-void breathing_period_inc(void)
-{
- breathing_period_set(breathing_period+1);
-}
-
-void breathing_period_dec(void)
-{
- breathing_period_set(breathing_period-1);
-}
-
-/* To generate breathing curve in python:
- * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
- */
-static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) {
- return v / BACKLIGHT_LEVELS * kb_backlight_config.level;
-}
-
-static void breathing_callback(PWMDriver *pwmp)
-{
- (void)pwmp;
- uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
- // resetting after one period to prevent ugly reset at overflow.
- breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
- uint8_t index = breathing_counter / interval % BREATHING_STEPS;
-
- if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
- ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
- {
- breathing_interrupt_disable();
- }
-
- uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
-
- chSysLockFromISR();
- pwmEnableChannelI(
- &PWMD4,
- 2,
- PWM_FRACTION_TO_WIDTH(
- &PWMD4,
- 0xFFFF,
- duty
- )
- );
- chSysUnlockFromISR();
-}
diff --git a/keyboards/handwired/co60/rev6/rev6.c b/keyboards/handwired/co60/rev6/rev6.c
index f597513b16..e2645871a0 100644
--- a/keyboards/handwired/co60/rev6/rev6.c
+++ b/keyboards/handwired/co60/rev6/rev6.c
@@ -15,25 +15,3 @@
*/
#include "rev6.h"
-#include "backlight.h"
-#include "led.h"
-#include "printf.h"
-
-backlight_levels_config_t kb_backlight_config = {
- .enable = true,
- .breathing = true,
- .level = BACKLIGHT_LEVELS
-};
-
-uint8_t *o_fb;
-
-uint16_t counterst = 0;
-
-void matrix_init_kb(void) {
- matrix_init_user();
- backlight_init_ports();
-}
-
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
diff --git a/keyboards/handwired/co60/rev6/rev6.h b/keyboards/handwired/co60/rev6/rev6.h
index 7d11f19d3c..1f0fe51e23 100644
--- a/keyboards/handwired/co60/rev6/rev6.h
+++ b/keyboards/handwired/co60/rev6/rev6.h
@@ -126,21 +126,3 @@
{ KC_NO, K401, K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, KC_NO }, \
}
-// Backlighting
-typedef union {
- uint8_t raw;
- struct {
- bool enable :1;
- bool breathing : 1;
- uint8_t level :6;
- };
-} backlight_levels_config_t;
-
-extern backlight_levels_config_t kb_backlight_config;
-extern bool kb_backlight_breathing;
-
-void backlight_init_ports(void);
-void backlight_set(uint8_t level);
-bool is_breathing(void);
-void breathing_enable(void);
-void breathing_disable(void);
diff --git a/keyboards/handwired/co60/rev6/rules.mk b/keyboards/handwired/co60/rev6/rules.mk
index fc7cabb108..b20c2efedc 100644
--- a/keyboards/handwired/co60/rev6/rules.mk
+++ b/keyboards/handwired/co60/rev6/rules.mk
@@ -1,9 +1,6 @@
# MCU name
MCU = STM32F303
-# Code for backlight breathing:
-SRC += led.c
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/handwired/co60/rev7/config.h b/keyboards/handwired/co60/rev7/config.h
index 1ccc12ad4c..e13d28f507 100644
--- a/keyboards/handwired/co60/rev7/config.h
+++ b/keyboards/handwired/co60/rev7/config.h
@@ -57,9 +57,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Backlight configuration
* Backlight LEDs on B8
*/
-#define BACKLIGHT_LEVELS 24
+#define BACKLIGHT_PIN B8
#define BACKLIGHT_BREATHING
-#define BREATHING_PERIOD 6
+
+/* RGB underglow configuration */
+#define WS2812_SPI SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 5
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/handwired/co60/rev7/halconf.h b/keyboards/handwired/co60/rev7/halconf.h
index 5e5d70219e..7363a21a21 100644
--- a/keyboards/handwired/co60/rev7/halconf.h
+++ b/keyboards/handwired/co60/rev7/halconf.h
@@ -153,7 +153,7 @@
* @brief Enables the SPI subsystem.
*/
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_SPI FALSE
+#define HAL_USE_SPI TRUE
#endif
/**
diff --git a/keyboards/handwired/co60/rev7/led.c b/keyboards/handwired/co60/rev7/led.c
deleted file mode 100644
index 13f8d98608..0000000000
--- a/keyboards/handwired/co60/rev7/led.c
+++ /dev/null
@@ -1,242 +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/>.
-*/
-
-#include "hal.h"
-#include "led_custom.h"
-#include "rev7.h"
-#include "printf.h"
-
-static void breathing_callback(PWMDriver *pwmp);
-
-static PWMConfig pwmCFG = {
- 0xFFFF, /* PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- NULL, /* No Callback */
- {
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-static PWMConfig pwmCFG_breathing = {
- 0xFFFF, /* 10kHz PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- breathing_callback, /* Breathing Callback */
- {
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-// See http://jared.geek.nz/2013/feb/linear-led-pwm
-static uint16_t cie_lightness(uint16_t v) {
- if (v <= 5243) // if below 8% of max
- return v / 9; // same as dividing by 900%
- else {
- uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
- // to get a useful result with integer division, we shift left in the expression above
- // and revert what we've done again after squaring.
- y = y * y * y >> 8;
- if (y > 0xFFFFUL) // prevent overflow
- return 0xFFFFU;
- else
- return (uint16_t) y;
- }
-}
-
-
-void backlight_init_ports(void) {
- palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(2));
- pwmStart(&PWMD4, &pwmCFG);
- if(kb_backlight_config.enable){
- if(kb_backlight_config.breathing){
- breathing_enable();
- } else{
- backlight_set(kb_backlight_config.level);
- }
- } else {
- backlight_set(0);
- }
-}
-
-void backlight_set(uint8_t level) {
- uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t) level / BACKLIGHT_LEVELS));
- if (level == 0) {
- // Turn backlight off
- // Disable channel 3 on PWM4
- pwmDisableChannel(&PWMD4, 2);
- } else {
- // Turn backlight on
- if(!is_breathing()){
- // Enable channel 3 on PWM4
- pwmEnableChannel(&PWMD4, 2, PWM_FRACTION_TO_WIDTH(&PWMD4,0xFFFF,duty));
- }
- }
-}
-
-
-uint8_t backlight_tick = 0;
-
-void backlight_task(void) {
-}
-
-#define BREATHING_NO_HALT 0
-#define BREATHING_HALT_OFF 1
-#define BREATHING_HALT_ON 2
-#define BREATHING_STEPS 128
-
-static uint8_t breathing_period = BREATHING_PERIOD;
-static uint8_t breathing_halt = BREATHING_NO_HALT;
-static uint16_t breathing_counter = 0;
-
-bool is_breathing(void) {
- return PWMD4.config == &pwmCFG_breathing;
-}
-
-#define breathing_min() do {breathing_counter = 0;} while (0)
-#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
-
-
-void breathing_interrupt_enable(void){
- pwmStop(&PWMD4);
- pwmStart(&PWMD4, &pwmCFG_breathing);
- chSysLockFromISR();
- pwmEnablePeriodicNotification(&PWMD4);
- pwmEnableChannelI(
- &PWMD4,
- 2,
- PWM_FRACTION_TO_WIDTH(
- &PWMD4,
- 0xFFFF,
- 0xFFFF
- )
- );
- chSysUnlockFromISR();
-}
-
-void breathing_interrupt_disable(void){
- pwmStop(&PWMD4);
- pwmStart(&PWMD4, &pwmCFG);
-}
-
-void breathing_enable(void)
-{
- breathing_counter = 0;
- breathing_halt = BREATHING_NO_HALT;
- breathing_interrupt_enable();
-}
-
-void breathing_pulse(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_min();
- else
- breathing_max();
- breathing_halt = BREATHING_HALT_ON;
- breathing_interrupt_enable();
-}
-
-void breathing_disable(void)
-{
- breathing_interrupt_disable();
- // Restore backlight level
- backlight_set(kb_backlight_config.level);
-}
-
-void breathing_self_disable(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_halt = BREATHING_HALT_OFF;
- else
- breathing_halt = BREATHING_HALT_ON;
-}
-
-void breathing_toggle(void) {
- if (is_breathing()){
- breathing_disable();
- } else {
- breathing_enable();
- }
-}
-
-void breathing_period_set(uint8_t value)
-{
- if (!value)
- value = 1;
- breathing_period = value;
-}
-
-void breathing_period_default(void) {
- breathing_period_set(BREATHING_PERIOD);
-}
-
-void breathing_period_inc(void)
-{
- breathing_period_set(breathing_period+1);
-}
-
-void breathing_period_dec(void)
-{
- breathing_period_set(breathing_period-1);
-}
-
-/* To generate breathing curve in python:
- * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
- */
-static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) {
- return v / BACKLIGHT_LEVELS * kb_backlight_config.level;
-}
-
-static void breathing_callback(PWMDriver *pwmp)
-{
- (void)pwmp;
- uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
- // resetting after one period to prevent ugly reset at overflow.
- breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
- uint8_t index = breathing_counter / interval % BREATHING_STEPS;
-
- if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
- ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
- {
- breathing_interrupt_disable();
- }
-
- uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
-
- chSysLockFromISR();
- pwmEnableChannelI(
- &PWMD4,
- 2,
- PWM_FRACTION_TO_WIDTH(
- &PWMD4,
- 0xFFFF,
- duty
- )
- );
- chSysUnlockFromISR();
-}
diff --git a/keyboards/handwired/co60/rev7/mcuconf.h b/keyboards/handwired/co60/rev7/mcuconf.h
index 69bf9185d1..7ad0137446 100644
--- a/keyboards/handwired/co60/rev7/mcuconf.h
+++ b/keyboards/handwired/co60/rev7/mcuconf.h
@@ -210,7 +210,7 @@
/*
* SPI driver system settings.
*/
-#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI1 TRUE
#define STM32_SPI_USE_SPI2 FALSE
#define STM32_SPI_USE_SPI3 FALSE
#define STM32_SPI_SPI1_DMA_PRIORITY 1
diff --git a/keyboards/handwired/co60/rev7/rev7.c b/keyboards/handwired/co60/rev7/rev7.c
index 3d0964d899..40fd7e6649 100644
--- a/keyboards/handwired/co60/rev7/rev7.c
+++ b/keyboards/handwired/co60/rev7/rev7.c
@@ -15,25 +15,3 @@
*/
#include "rev7.h"
-#include "backlight.h"
-#include "led.h"
-#include "printf.h"
-
-backlight_levels_config_t kb_backlight_config = {
- .enable = true,
- .breathing = true,
- .level = BACKLIGHT_LEVELS
-};
-
-uint8_t *o_fb;
-
-uint16_t counterst = 0;
-
-void matrix_init_kb(void) {
- matrix_init_user();
- backlight_init_ports();
-}
-
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
diff --git a/keyboards/handwired/co60/rev7/rev7.h b/keyboards/handwired/co60/rev7/rev7.h
index 4ab2b8d722..fb9c7cb315 100644
--- a/keyboards/handwired/co60/rev7/rev7.h
+++ b/keyboards/handwired/co60/rev7/rev7.h
@@ -126,21 +126,3 @@
{ KC_NO, K401, K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, KC_NO }, \
}
-// Backlighting
-typedef union {
- uint8_t raw;
- struct {
- bool enable :1;
- bool breathing : 1;
- uint8_t level :6;
- };
-} backlight_levels_config_t;
-
-extern backlight_levels_config_t kb_backlight_config;
-extern bool kb_backlight_breathing;
-
-void backlight_init_ports(void);
-void backlight_set(uint8_t level);
-bool is_breathing(void);
-void breathing_enable(void);
-void breathing_disable(void);
diff --git a/keyboards/handwired/co60/rev7/rules.mk b/keyboards/handwired/co60/rev7/rules.mk
index 9daeaf047a..50e4bb8918 100644
--- a/keyboards/handwired/co60/rev7/rules.mk
+++ b/keyboards/handwired/co60/rev7/rules.mk
@@ -1,8 +1,8 @@
# MCU name
MCU = STM32F303
-# Code for backlight breathing:
-SRC += led.c
+# Use SPI for RGB underglow:
+WS2812_DRIVER = spi
# Build Options
# comment out to disable the options.
@@ -15,7 +15,7 @@ CONSOLE_ENABLE = no # 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
+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/handwired/colorlice/colorlice.c b/keyboards/handwired/colorlice/colorlice.c
new file mode 100644
index 0000000000..1fd5fddd11
--- /dev/null
+++ b/keyboards/handwired/colorlice/colorlice.c
@@ -0,0 +1,67 @@
+/* Copyright 2019 marhalloweenvt
+ *
+ * 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 "colorlice.h"
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
+ { 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, NO_LED },
+ { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, NO_LED, 44, NO_LED },
+ { 58, 57, 56, 55, 54, 53, NO_LED, 52, 51, 50, 49, 48, 47, 46, 45, NO_LED},
+ { 59, NO_LED, 60, 61, 62, NO_LED, NO_LED,63, NO_LED, NO_LED, 64, 65,66,67, 68, NO_LED }
+}, {
+ { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 195, 0 }, { 210, 0 }, { 224, 0 },
+ { 224, 16 }, { 210, 16 }, { 195, 16 }, { 180, 16 }, { 165, 16 }, { 150, 16 }, { 135, 16 }, { 120, 16 }, { 90, 16 }, { 75, 16 }, { 60, 16 }, { 45, 16 }, { 30, 16 }, { 15, 16 }, { 0, 16 },
+ { 0, 32 }, { 15, 32 }, { 30, 32 }, { 45, 32 }, { 60, 32 }, { 75, 32 }, { 90, 32 }, { 135, 32 }, { 150, 32 }, { 165, 32 }, { 180, 32 }, { 195, 32 }, { 210, 32 }, { 224, 32 },
+ { 225, 48 }, { 224, 48 }, { 210, 48 }, { 195, 48 }, { 180, 48 }, { 165, 48 }, { 150, 48 }, { 135, 48 }, { 90, 48 }, { 75, 48 }, { 60, 48 }, { 45, 48 }, { 30, 48 }, { 15, 48 },
+ { 15, 64 }, { 45, 64 }, { 75, 64 }, { 90, 64 }, { 150, 64 }, { 180, 64 }, { 210, 64 }, { 215, 64 }, { 220, 64 }, { 225, 64 }
+}, {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+} };
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+void suspend_power_down_kb(void)
+{
+ rgb_matrix_set_suspend_state(true);
+ suspend_power_down_user();
+}
+
+void suspend_wakeup_init_kb(void)
+{
+ rgb_matrix_set_suspend_state(false);
+ suspend_wakeup_init_user();
+}
+#endif
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ // writePin sets the pin high for 1 and low for 0.
+ // In this example the pins are inverted, setting
+ // it low/0 turns it on, and high/1 turns the LED off.
+ // This behavior depends on whether the LED is between the pin
+ // and VCC or the pin and GND.
+ writePin(B2, !led_state.num_lock);
+ writePin(C6, !led_state.caps_lock);
+ writePin(B7, !led_state.scroll_lock);
+ }
+ return res;
+}
diff --git a/keyboards/handwired/colorlice/colorlice.h b/keyboards/handwired/colorlice/colorlice.h
new file mode 100644
index 0000000000..c1e88abe83
--- /dev/null
+++ b/keyboards/handwired/colorlice/colorlice.h
@@ -0,0 +1,42 @@
+/* Copyright 2019 marhalloweenvt
+ *
+ * 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, k0e, k0f, \
+ 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, K2e, \
+ k30, k31, k32, k33, k34, k35, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k42, k43, k44, k47, k4a, k4e \
+) { \
+ { 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, k1e, KC_NO }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, K2e, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, KC_NO, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, KC_NO }, \
+ { k40, KC_NO, k42, k43, k44, KC_NO, KC_NO, k47, KC_NO, KC_NO, k4a, KC_NO,KC_NO, KC_NO, k4e, KC_NO }, \
+}
+
diff --git a/keyboards/handwired/colorlice/config.h b/keyboards/handwired/colorlice/config.h
new file mode 100644
index 0000000000..1782542119
--- /dev/null
+++ b/keyboards/handwired/colorlice/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2019 Marhalloweenvt
+
+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 0x0302
+#define DEVICE_VER 0x0001
+#define MANUFACTURER marhalloweenvt
+#define PRODUCT Colorlice
+#define DESCRIPTION Replacement PCB for TGR Alice
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, B6, B5, B4, D7, D6, D4, E6, B0, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+/* RGB LEDs */
+#define RGB_DI_PIN B1
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_LED_PROCESS_LIMIT 4
+#define RGB_MATRIX_LED_FLUSH_LIMIT 26
+#define DRIVER_LED_TOTAL 70
diff --git a/keyboards/handwired/colorlice/info.json b/keyboards/handwired/colorlice/info.json
new file mode 100644
index 0000000000..0b2887625c
--- /dev/null
+++ b/keyboards/handwired/colorlice/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "ColorLice",
+ "url": "",
+ "maintainer": "marhalloweenvt",
+ "width": 17.75,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"K63", "x":0, "y":0},
+ {"label":"K00", "x":1.25, "y":0},
+ {"label":"K01", "x":2.25, "y":0},
+ {"label":"K02", "x":3.25, "y":0},
+ {"label":"K03", "x":4.25, "y":0},
+ {"label":"K04", "x":5.25, "y":0},
+ {"label":"K05", "x":6.25, "y":0},
+ {"label":"K06", "x":7.25, "y":0},
+ {"label":"K07", "x":10.25, "y":0},
+ {"label":"K08", "x":11.25, "y":0},
+ {"label":"K09", "x":12.25, "y":0},
+ {"label":"K10", "x":13.25, "y":0},
+ {"label":"K11", "x":14.25, "y":0},
+ {"label":"K12", "x":15.25, "y":0},
+ {"label":"K13", "x":16.25, "y":0},
+ {"label":"K14", "x":17.25, "y":0},
+ {"label":"K64", "x":0, "y":1},
+ {"label":"K15", "x":1.25, "y":1, "w":1.5},
+ {"label":"K16", "x":2.75, "y":1},
+ {"label":"K17", "x":3.75, "y":1},
+ {"label":"K18", "x":4.75, "y":1},
+ {"label":"K19", "x":5.75, "y":1},
+ {"label":"K20", "x":6.75, "y":1},
+ {"label":"K21", "x":9.75, "y":1},
+ {"label":"K22", "x":10.75, "y":1},
+ {"label":"K23", "x":11.75, "y":1},
+ {"label":"K24", "x":12.75, "y":1},
+ {"label":"K25", "x":13.75, "y":1},
+ {"label":"K26", "x":14.75, "y":1},
+ {"label":"K27", "x":15.75, "y":1},
+ {"label":"K28", "x":16.75, "y":1, "w":1.5},
+ {"label":"K65", "x":0, "y":2},
+ {"label":"K29", "x":1.25, "y":2, "w":1.75},
+ {"label":"K30", "x":3, "y":2},
+ {"label":"K31", "x":4, "y":2},
+ {"label":"K32", "x":5, "y":2},
+ {"label":"K33", "x":6, "y":2},
+ {"label":"K34", "x":7, "y":2},
+ {"label":"K35", "x":10, "y":2},
+ {"label":"K36", "x":11, "y":2},
+ {"label":"K37", "x":12, "y":2},
+ {"label":"K38", "x":13, "y":2},
+ {"label":"K39", "x":14, "y":2},
+ {"label":"K40", "x":15, "y":2},
+ {"label":"K41", "x":16, "y":2, "w":2.25},
+ {"label":"K42", "x":1.25, "y":3, "w":2.25},
+ {"label":"K43", "x":3.5, "y":3},
+ {"label":"K44", "x":4.5, "y":3},
+ {"label":"K45", "x":5.5, "y":3},
+ {"label":"K46", "x":6.5, "y":3},
+ {"label":"K47", "x":7.5, "y":3},
+ {"label":"K48", "x":9.5, "y":3},
+ {"label":"K49", "x":10.5, "y":3},
+ {"label":"K50", "x":11.5, "y":3},
+ {"label":"K51", "x":12.5, "y":3},
+ {"label":"K52", "x":13.5, "y":3},
+ {"label":"K53", "x":14.5, "y":3},
+ {"label":"K54", "x":15.5, "y":3, "w":1.75},
+ {"label":"K55", "x":17.25, "y":3},
+ {"label":"K56", "x":1.25, "y":4, "w":1.5},
+ {"label":"K57", "x":4.25, "y":4, "w":1.5},
+ {"label":"K58", "x":5.75, "y":4, "w":2},
+ {"label":"K59", "x":7.75, "y":4, "w":1.25},
+ {"label":"K60", "x":9.5, "y":4, "w":2.75},
+ {"label":"K61", "x":12.25, "y":4, "w":1.5},
+ {"label":"K62", "x":16.75, "y":4, "w":1.5}
+ ]
+ }
+ }
+ }
diff --git a/keyboards/handwired/colorlice/keymaps/default/keymap.c b/keyboards/handwired/colorlice/keymaps/default/keymap.c
new file mode 100644
index 0000000000..84257a1208
--- /dev/null
+++ b/keyboards/handwired/colorlice/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2019 marhalloweenvt
+ *
+ * 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(
+ RGB_TOG, 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,
+ RGB_MOD, 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_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_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),
+
+ [1] = 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, KC_DEL,
+ _______, _______, _______, KC_UP, _______, _______, _______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD , _______, _______,
+ _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+ _______, _______, _______, _______, _______, _______, _______ ),
+};
diff --git a/keyboards/handwired/colorlice/readme.md b/keyboards/handwired/colorlice/readme.md
new file mode 100644
index 0000000000..de4c3fce36
--- /dev/null
+++ b/keyboards/handwired/colorlice/readme.md
@@ -0,0 +1,13 @@
+# COLORLICE
+
+A keyboard inspired by TGR Alice
+
+* Keyboard Maintainer: [marhalloweenvt](https://github.com/marhalloweenvt)
+* Hardware Supported: Colorlice PCB
+* Hardware Availability: Colorlice PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/colorlice: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/colorlice/rules.mk b/keyboards/handwired/colorlice/rules.mk
new file mode 100644
index 0000000000..02da465d3e
--- /dev/null
+++ b/keyboards/handwired/colorlice/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # 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
+# 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
+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
+LTO_ENABLE = no # Use link time optimization
+RGB_MATRIX_ENABLE = WS2812 # Enable keyboard RGB backlight functionality with ws2812 driver
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h
new file mode 100644
index 0000000000..e8899a3689
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/config.h
@@ -0,0 +1,43 @@
+/*
+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
+
+
+#define USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+//#define EE_HANDS
+
+// Mouse
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 15
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 60
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 3
+
+// RGB backlight
+#undef RGB_DI_PIN
+#define RGB_DI_PIN D3
+#undef RGBLED_NUM
+#define RGBLED_NUM 30
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_LIMIT_VAL 95
+#define RGBLIGHT_SPLIT
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c
new file mode 100644
index 0000000000..41d8ee94fa
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/keymap.c
@@ -0,0 +1,106 @@
+/* A standard layout for the Dactyl Manuform 5x6 Keyboard */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _MAC,
+ _WINDOWS,
+ _MOUSE,
+ _ARROWS,
+ _SYMBOLS,
+ _NUMBERS,
+ _MEDIA,
+};
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_MAC] = LAYOUT_5x6(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_GRAVE,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS,
+ KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
+ KC_LSFT, CTL_T(KC_Z) , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLASH,
+ KC_LALT,KC_LCTRL, KC_DEL, KC_PMNS,
+ KC_SPC, MO(_ARROWS), MO(_MOUSE), KC_ENT,
+ KC_LCMD, MO(_SYMBOLS), KC_EQL, KC_RALT,
+ KC_LALT, MO(_NUMBERS), MO(_MEDIA), KC_EJCT
+ ),
+
+ [_WINDOWS] = LAYOUT_5x6(
+
+ _______,_______, _______ ,_______,_______ ,_______, _______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______, _______, _______ , _______ , _______ ,_______,_______,
+ _______,_______,_______,_______,_______ ,_______, _______, _______ , _______ , _______ ,_______,_______,
+ _______,_______,_______,_______,_______,_______, _______, _______ , _______ , _______ ,_______ ,_______,
+ KC_LCMD,KC_LALT, _______, _______,
+ _______,_______, _______,_______,
+ KC_LCTRL,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+
+ [_MOUSE] = LAYOUT_5x6(
+
+ KC_F11,KC_F1, KC_F2 ,KC_F3,KC_F4 ,KC_F5, KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F12,
+ _______,_______,_______,KC_WH_U,_______,_______, _______, _______ , KC_MS_U , _______ ,_______,_______,
+ _______,_______,KC_WH_L,KC_WH_D,KC_WH_R ,_______, KC_BTN1, KC_MS_L , KC_MS_D , KC_MS_R ,_______,_______,
+ _______,_______,KC_ACL0,KC_ACL1,KC_ACL2,_______, _______, KC_BTN2 , _______ , _______ ,_______ ,_______,
+ _______,_______, _______, RESET,
+ KC_BTN1,KC_BTN2, _______,_______,
+ _______,KC_BTN2, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+ [_ARROWS] = LAYOUT_5x6(
+
+ RESET,_______, _______ ,_______,_______ ,TG(_WINDOWS), _______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______, _______, KC_HOME , KC_UP , KC_END ,_______,_______,
+ _______,_______,_______,_______,_______ ,_______, KC_HOME, KC_LEFT , KC_DOWN , KC_RIGHT ,KC_END,_______,
+ _______,_______,_______,_______,_______,_______, _______, KC_PGDOWN , _______ , KC_PGUP ,_______ ,_______,
+ RESET,_______, _______, _______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+ [_SYMBOLS] = LAYOUT_5x6(
+
+ _______,_______, _______ ,_______,_______ ,_______, KC_CIRC,KC_CIRC,KC_LABK,KC_RABK,_______,_______,
+ _______,_______,_______,_______,_______,_______, KC_LABK, KC_AT , KC_LCBR , KC_RCBR ,KC_HASH,KC_RABK,
+ _______,_______,_______,_______,_______ ,_______, KC_PERC, KC_EQL , KC_LPRN , KC_RPRN ,KC_DLR,KC_AMPR,
+ _______,_______,_______,_______,_______,_______, KC_TILD, KC_GRAVE , KC_LBRC , KC_RBRC ,KC_PIPE ,KC_EXLM,
+ _______,_______, KC_PPLS, KC_PMNS,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+ [_NUMBERS] = LAYOUT_5x6(
+
+ RESET,_______, _______ ,_______,_______ ,_______, KC_PSLS,KC_PAST,KC_PPLS,KC_PMNS,_______,_______,
+ _______,_______,_______,KC_PSLS,KC_PAST,_______, _______, KC_7 , KC_8 , KC_9 ,_______,_______,
+ _______,_______,_______,KC_PMNS,KC_PPLS ,_______, _______, KC_4 , KC_5 , KC_6 ,_______,_______,
+ _______,_______,_______,_______,_______,_______, _______, KC_1 , KC_2 , KC_3 ,_______ ,_______,
+ _______,_______, KC_0, KC_DOT,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+ [_MEDIA] = LAYOUT_5x6(
+
+ KC_MSTP,KC_MPRV, KC_MPLY ,KC_MNXT,_______ ,_______, _______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,KC_VOLU,_______, RGB_SPI, _______ , _______ , _______ ,_______,_______,
+ _______,_______,_______,_______,KC_VOLD ,_______, RGB_TOG, RGB_MODE_FORWARD , RGB_HUI , RGB_SAI ,RGB_VAI,_______,
+ _______,_______,_______,_______,KC_MUTE,_______, RGB_SPD, RGB_MODE_REVERSE , RGB_HUD , RGB_SAD ,RGB_VAD ,_______,
+ _______,_______, _______, _______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+};
+
+
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk
new file mode 100644
index 0000000000..1e3cebb145
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/squirrel/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/handwired/steamvan/rev1/led_custom.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/config.h
index 56e723db8f..29ab59ad66 100644
--- a/keyboards/handwired/steamvan/rev1/led_custom.h
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2019 John M Daly <jmdaly@gmail.com>
+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
@@ -15,8 +15,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/>.
*/
+
#pragma once
-void backlight_task(void);
-void breathing_interrupt_disable(void);
-void breathing_interrupt_enable(void);
+
+#define USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+//#define EE_HANDS
+// Rows are doubled-up
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/keymap.c
new file mode 100644
index 0000000000..f8dfb2718c
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/swedish/keymap.c
@@ -0,0 +1,58 @@
+/* A Swedish XMonad layout for the Dactyl Manuform 5x6 Keyboard */
+
+#include QMK_KEYBOARD_H
+#include "keymap_swedish.h"
+
+enum dactyl_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+};
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+#define TERM LGUI(LSFT(KC_ENT))
+#define ALTTAB LGUI(KC_TAB)
+#define KILL LGUI(LSFT(KC_C))
+#define OPEN LGUI(KC_P)
+#define KC_QSM LSFT(SE_PLUS)
+#define KC_AA SE_AA
+#define KC_AE SE_AE
+#define KC_OE SE_OSLH
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_5x6(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , SE_APOS,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_AA ,
+ KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_OE , KC_AE ,
+ KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SE_SLSH, SE_MINS,
+ KC_EXLM, KC_QSM , SE_PLUS, SE_EQL ,
+ RAISE , KC_SPC , KC_ENT , LOWER ,
+ ALTTAB , KC_LGUI, KC_BSPC, KC_DEL ,
+ OPEN , TERM , KILL , KC_LALT
+ ),
+
+ [_LOWER] = LAYOUT_5x6(
+ SE_TILD, KC_EXLM, SE_AT , KC_HASH, SE_DLR , KC_PERC, SE_CIRC, SE_AMPR, SE_ASTR, SE_SLSH, SE_LPRN, SE_RPRN,
+ SE_ACUT, _______, _______, _______, _______, _______, _______, _______, _______, _______, SE_LCBR, SE_RCBR,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, SE_LBRC, SE_RBRC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, SE_LESS, SE_GRTR,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+
+ ),
+
+ [_RAISE] = LAYOUT_5x6(
+ KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
+ _______, _______, _______, _______, _______, _______, RESET , _______, _______, _______, KC_MUTE, SE_PIPE,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END , KC_VOLU, SE_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLD, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/handwired/dactyl_promicro/dactyl_promicro.h b/keyboards/handwired/dactyl_promicro/dactyl_promicro.h
index 5dfc42f2a9..61dad7f538 100644
--- a/keyboards/handwired/dactyl_promicro/dactyl_promicro.h
+++ b/keyboards/handwired/dactyl_promicro/dactyl_promicro.h
@@ -2,38 +2,37 @@
#include "quantum.h"
-
#ifdef USE_I2C
#include <stddef.h>
#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/interrupt.h>
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
#endif
#endif
#define LAYOUT_6x6(\
- 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, \
- L55, L51, L52, R53, R54, R50, \
- L53, R52, \
- L54, R51 \
- )\
- { \
- { 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 }, \
- { KC_NO, L51, L52, L53, L54, L55 }, \
+ 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, \
+ L55, L51, L52, R53, R54, R50, \
+ L53, R52, \
+ L54, R51 \
+ )\
+ {\
+ { 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 }, \
+ { KC_NO, L51, L52, L53, L54, L55 }, \
\
- { R00, R01, R02, R03, R04, R05 }, \
- { R10, R11, R12, R13, R14, R15 }, \
- { R20, R21, R22, R23, R24, R25 }, \
- { R30, R31, R32, R33, R34, R35 }, \
- { R40, R41, R42, R43, R44, R45 }, \
- { R50, R51, R52, R53, R54, KC_NO }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, R44, R45 }, \
+ { R50, R51, R52, R53, R54, KC_NO } \
}
diff --git a/keyboards/handwired/dactyl_promicro/info.json b/keyboards/handwired/dactyl_promicro/info.json
new file mode 100644
index 0000000000..7d70e9a60f
--- /dev/null
+++ b/keyboards/handwired/dactyl_promicro/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Dactyl ProMicro",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17,
+ "height": 8,
+ "layouts": {
+ "LAYOUT_6x6": {
+ "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":"R00", "x":11, "y":0},
+ {"label":"R01", "x":12, "y":0},
+ {"label":"R02", "x":13, "y":0},
+ {"label":"R03", "x":14, "y":0},
+ {"label":"R04", "x":15, "y":0},
+ {"label":"R05", "x":16, "y":0},
+ {"label":"L10", "x":0, "y":1},
+ {"label":"L11", "x":1, "y":1},
+ {"label":"L12", "x":2, "y":1},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1},
+ {"label":"L15", "x":5, "y":1},
+ {"label":"R10", "x":11, "y":1},
+ {"label":"R11", "x":12, "y":1},
+ {"label":"R12", "x":13, "y":1},
+ {"label":"R13", "x":14, "y":1},
+ {"label":"R14", "x":15, "y":1},
+ {"label":"R15", "x":16, "y":1},
+ {"label":"L20", "x":0, "y":2},
+ {"label":"L21", "x":1, "y":2},
+ {"label":"L22", "x":2, "y":2},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2},
+ {"label":"L25", "x":5, "y":2},
+ {"label":"R20", "x":11, "y":2},
+ {"label":"R21", "x":12, "y":2},
+ {"label":"R22", "x":13, "y":2},
+ {"label":"R23", "x":14, "y":2},
+ {"label":"R24", "x":15, "y":2},
+ {"label":"R25", "x":16, "y":2},
+ {"label":"L30", "x":0, "y":3},
+ {"label":"L31", "x":1, "y":3},
+ {"label":"L32", "x":2, "y":3},
+ {"label":"L33", "x":3, "y":3},
+ {"label":"L34", "x":4, "y":3},
+ {"label":"L35", "x":5, "y":3},
+ {"label":"R30", "x":11, "y":3},
+ {"label":"R31", "x":12, "y":3},
+ {"label":"R32", "x":13, "y":3},
+ {"label":"R33", "x":14, "y":3},
+ {"label":"R34", "x":15, "y":3},
+ {"label":"R35", "x":16, "y":3},
+ {"label":"L40", "x":0, "y":4},
+ {"label":"L41", "x":1, "y":4},
+ {"label":"L42", "x":2, "y":4},
+ {"label":"L43", "x":3, "y":4},
+ {"label":"L44", "x":4, "y":4},
+ {"label":"L45", "x":5, "y":6, "h":2},
+ {"label":"R40", "x":11, "y":6, "h":2 },
+ {"label":"R41", "x":12, "y":4},
+ {"label":"R42", "x":13, "y":4},
+ {"label":"R43", "x":14, "y":4},
+ {"label":"R44", "x":15, "y":4},
+ {"label":"R45", "x":16, "y":4},
+ {"label":"L55", "x":6, "y":6, "h":2 },
+ {"label":"L51", "x":6, "y":5},
+ {"label":"L52", "x":7, "y":5},
+ {"label":"R53", "x":9, "y":5},
+ {"label":"R54", "x":10, "y":5},
+ {"label":"R50", "x":10, "y":6, "h":2 },
+ {"label":"L53", "x":7, "y":6},
+ {"label":"R52", "x":9, "y":6},
+ {"label":"L54", "x":7, "y":7},
+ {"label":"R51", "x":9, "y":7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c b/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
index 394803aef5..298cddfd0a 100644
--- a/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
@@ -1,6 +1,3 @@
-
-/* A QWERTY 3 Layer layout for the Dactyl Manuform 6x6 Keyboard */
-
#include QMK_KEYBOARD_H
@@ -11,36 +8,44 @@
#define RAISE MO(_RAISE)
#define LOWER MO(_LOWER)
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-
- [_QWERTY] = LAYOUT_6x6(
- KC_ESC , 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_MINS,
- KC_LSFT , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
- KC_LCTL , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM , KC_DOT ,KC_SLSH,KC_BSLASH,
- KC_PLUS , KC_LEFT,KC_UP ,KC_DOWN, KC_RGHT, RAISE , LOWER , KC_HOME, KC_PGUP, KC_PGDN,KC_END ,KC_EQL,
- _______,KC_LALT,KC_PSCR, KC_LGUI, KC_SPC, KC_ENT,KC_GRAVE, KC_AT ,KC_PSCR ,_______
-
- ),
+#define ONE_GRV LT(1,KC_GRAVE)
+#define CTL_Z LCTL_T(KC_Z)
+#define ALT_SHFT LALT(KC_LSFT)
+#define ALT_MENU LALT_T(KC_MENU)
+#define LG_QUOT LGUI_T(KC_QUOT)
+#define CTL_ESC LCTL_T(KC_ESC)
+#define CTL_SLS LCTL_T(KC_SLSH)
+#define LT2_COL LT(_RAISE, KC_SCLN)
-
- [_LOWER] = LAYOUT_6x6(
- 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_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS,
- _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 ,KC_MINS,KC_PIPE,
- _______,_______,_______,_______,_______,KC_PSCR, KC_P0 , KC_P1 , KC_P2 , KC_P3 ,KC_EQL ,KC_UNDS,
- _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
- _______,_______,_______,_______,_______, _______,_______,_______,_______,_______
-),
-
- [_RAISE] = LAYOUT_6x6(
- 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_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS ,KC_SLCK,KC_MUTE,
- _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU,
- _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD,
- _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
- _______,_______,_______,_______,_______, _______,_______,_______,_______,_______
- ),
-
- };
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_6x6(
+ KC_EQL , 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_Q ,KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS,
+ KC_BSPC, KC_A ,KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,LT2_COL,LG_QUOT,
+ KC_LSFT, CTL_Z ,KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM, KC_DOT,CTL_SLS,KC_RSFT,
+ ONE_GRV,KC_QUOT,ALT_SHFT,KC_LEFT,KC_RGHT,KC_SPC , KC_ENT , KC_UP ,KC_DOWN,KC_LBRC,KC_RBRC,TT(_LOWER),
+ KC_BSPC,ALT_MENU,KC_LGUI, KC_RALT,CTL_ESC,KC_TAB ,
+ KC_HOME, KC_PGUP,
+ KC_END , KC_PGDN
+ ),
+ [_LOWER] = LAYOUT_6x6(
+ _______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,
+ _______,KC_EXLM,KC_AT ,KC_LBRC,KC_RBRC,KC_PIPE, KC_UP ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PAST,KC_F12 ,
+ _______,KC_HASH,KC_DLR ,KC_LPRN,KC_RPRN,KC_GRV , KC_DOWN,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS,_______,
+ _______,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD, KC_AMPR,KC_P1 ,KC_P2 ,KC_P3 ,KC_PSLS,_______,
+ RESET ,_______,_______,_______,_______,_______, _______,_______,KC_PDOT,KC_P0 ,KC_PEQL,_______,
+ _______,_______,_______, _______,_______,_______,
+ _______, _______,
+ _______, _______
+ ),
+ [_RAISE] = LAYOUT_6x6(
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ _______,_______,_______,KC_MS_U,_______,_______, _______,_______,_______,_______,_______,_______,
+ _______,_______,KC_MS_L,KC_MS_D,KC_MS_R,_______, _______,_______,_______,_______,_______,KC_MPLY,
+ _______,_______,_______,_______,_______,_______, _______,_______,KC_MPRV,KC_MNXT,_______,_______,
+ RESET ,_______,_______,KC_BTN1,KC_BTN2,_______, KC_WBAK,KC_VOLU,KC_VOLD,KC_MUTE,_______,_______,
+ _______,_______,_______, _______,_______,_______,
+ _______, _______,
+ _______, _______
+ )
+};
diff --git a/keyboards/handwired/floorboard/config.h b/keyboards/handwired/floorboard/config.h
new file mode 100644
index 0000000000..6f2e9d0c0b
--- /dev/null
+++ b/keyboards/handwired/floorboard/config.h
@@ -0,0 +1,252 @@
+/*
+Copyright 2019 Kevin Lockwood
+
+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 Kevin Lockwood
+#define PRODUCT Floorboard
+#define DESCRIPTION A handwired 4x12 ortholinear board
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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 { A2, A1, A0, B8 }
+#define MATRIX_COL_PINS { B7, B6, B5, B4, B3, B2, B1, B9, B0, B15, B14, B13 }
+#define UNUSED_PINS { B10, B11, B12, A14, A13, A4, A5, A6, A7, A8, A15, A10, A9 }
+
+/* COL2ROW, ROW2COL*/
+#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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/floorboard/floorboard.c b/keyboards/handwired/floorboard/floorboard.c
new file mode 100644
index 0000000000..6317f66acc
--- /dev/null
+++ b/keyboards/handwired/floorboard/floorboard.c
@@ -0,0 +1,17 @@
+/* Copyright 2019 Kevin Lockwood
+ *
+ * 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 "floorboard.h"
diff --git a/keyboards/handwired/floorboard/floorboard.h b/keyboards/handwired/floorboard/floorboard.h
new file mode 100644
index 0000000000..de7f49c01d
--- /dev/null
+++ b/keyboards/handwired/floorboard/floorboard.h
@@ -0,0 +1,41 @@
+/* Copyright 2019 Kevin Lockwood
+ *
+ * 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 is 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_ortho_4x12( \
+ 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 \
+) \
+{ \
+ { 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 } \
+}
+
diff --git a/keyboards/handwired/floorboard/info.json b/keyboards/handwired/floorboard/info.json
new file mode 100644
index 0000000000..6445b76112
--- /dev/null
+++ b/keyboards/handwired/floorboard/info.json
@@ -0,0 +1,64 @@
+{
+ "keyboard_name": "Floorboard",
+ "url": "https://imgur.com/gJLgwQI",
+ "maintainer": "Kevin Lockwood",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x12": {
+ "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":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+ {"x":4, "y":1},
+ {"x":5, "y":1},
+ {"x":6, "y":1},
+ {"x":7, "y":1},
+ {"x":8, "y":1},
+ {"x":9, "y":1},
+ {"x":10, "y":1},
+ {"x":11, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+ {"x":4, "y":2},
+ {"x":5, "y":2},
+ {"x":6, "y":2},
+ {"x":7, "y":2},
+ {"x":8, "y":2},
+ {"x":9, "y":2},
+ {"x":10, "y":2},
+ {"x":11, "y":2},
+
+ {"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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/floorboard/keymaps/default/keymap.c b/keyboards/handwired/floorboard/keymaps/default/keymap.c
new file mode 100644
index 0000000000..161dbea030
--- /dev/null
+++ b/keyboards/handwired/floorboard/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+/* Copyright 2019 Kevin Lockwood
+ *
+ * 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_ortho_4x12(KC_TAB, KC_SCLN, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT, KC_LSFT, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, LT(2,KC_CAPS), MO(3), KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_BSPC, KC_RALT, KC_VOLD, KC_VOLU, LT(2,KC_MPLY)),
+ [1] = LAYOUT_ortho_4x12(KC_PERC, KC_LBRC, KC_LCBR, KC_RCBR, KC_LPRN, KC_PEQL, KC_ASTR, KC_RPRN, KC_PLUS, KC_EXLM, KC_RBRC, KC_GRV, KC_LCTL, KC_7, KC_5, KC_3, KC_1, KC_9, KC_0, KC_2, KC_4, KC_6, KC_8, KC_MINS, KC_LSFT, KC_LBRC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SLSH, KC_NO, KC_TRNS, KC_NO, KC_LGUI, KC_LALT, KC_SPC, KC_TRNS, KC_NO, KC_DEL, KC_RALT, KC_PSCR, KC_APP, KC_NO),
+ [2] = LAYOUT_ortho_4x12(KC_WAKE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SLEP, KC_LCTL, KC_NO, KC_CUT, KC_COPY, KC_PSTE, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_LGUI, KC_LALT, KC_BTN1, KC_BTN2, KC_TRNS, KC_NO, KC_RALT, KC_NO, KC_APP, KC_NO),
+ [3] = LAYOUT_ortho_4x12(KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_F7, KC_F5, KC_F3, KC_F1, KC_F9, KC_F10, KC_F2, KC_F4, KC_F6, KC_F8, KC_NO, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_NO, KC_DEL, KC_RALT, KC_BRID, KC_BRIU, KC_NO)
+};
diff --git a/keyboards/handwired/floorboard/keymaps/default/readme.md b/keyboards/handwired/floorboard/keymaps/default/readme.md
new file mode 100644
index 0000000000..eed7dfd5a9
--- /dev/null
+++ b/keyboards/handwired/floorboard/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for the Floorboard
diff --git a/keyboards/handwired/floorboard/readme.md b/keyboards/handwired/floorboard/readme.md
new file mode 100644
index 0000000000..37c708565c
--- /dev/null
+++ b/keyboards/handwired/floorboard/readme.md
@@ -0,0 +1,15 @@
+# Floorboard
+
+![Floorboard Image](https://i.imgur.com/gJLgwQI.jpg)
+
+I was too broke to buy the planck pcb, and I wanted the soldering practice. So here it is, in all it's glory. A handwired planck with a proton C, and the dvorak layout. Because why not. I named it the Floorboard as a callback to the planck, and because it's a couple of plays on words rolled into one.
+
+* Keyboard Maintainer: [Kevin Lockwood](https://github.com/kevin-b-lockwood)
+* Hardware Supported: Proton C
+* Hardware Availability: [Clueboard](https://clueboard.co/parts/qmk-proton-c)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/floorboard: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/floorboard/rules.mk b/keyboards/handwired/floorboard/rules.mk
new file mode 100644
index 0000000000..16f3332aaa
--- /dev/null
+++ b/keyboards/handwired/floorboard/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+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 = 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+LAYOUTS = ortho_4x12
diff --git a/keyboards/handwired/heisenberg/config.h b/keyboards/handwired/heisenberg/config.h
new file mode 100644
index 0000000000..9fe57cbeba
--- /dev/null
+++ b/keyboards/handwired/heisenberg/config.h
@@ -0,0 +1,262 @@
+/*
+Copyright 2019 Arda Kilicdagi
+
+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 Ardakilic
+#define PRODUCT Heisenberg
+#define DESCRIPTION A handwired 40% ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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 \
+ { D3, D2, D1, D0 }
+#define MATRIX_COL_PINS \
+ { C6, D7, E6, B4, B6, B2, B3, B1, F7, F6, F5, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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 D4
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 6
+// #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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
+
+
+/**
+ * Heisenberg-specific definitions
+ */
+#define B5_AUDIO
+/**
+ * Heisenberg-specific definitions END
+ */
+
+
+#define TAPPING_TERM 200
+/* 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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/heisenberg/heisenberg.c b/keyboards/handwired/heisenberg/heisenberg.c
new file mode 100644
index 0000000000..54c8bdae95
--- /dev/null
+++ b/keyboards/handwired/heisenberg/heisenberg.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 Arda Kilicdagi
+ *
+ * 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 "heisenberg.h" \ No newline at end of file
diff --git a/keyboards/handwired/heisenberg/heisenberg.h b/keyboards/handwired/heisenberg/heisenberg.h
new file mode 100644
index 0000000000..df887c2c56
--- /dev/null
+++ b/keyboards/handwired/heisenberg/heisenberg.h
@@ -0,0 +1,39 @@
+/* Copyright 2019 Arda Kilicdagi
+ *
+ * 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_planck_mit(\
+ 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 \
+) \
+{ \
+ { 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, KC_NO, k35, k36, k37, k38, k39, k3a } \
+}
diff --git a/keyboards/handwired/heisenberg/info.json b/keyboards/handwired/heisenberg/info.json
new file mode 100644
index 0000000000..88e0f7ce47
--- /dev/null
+++ b/keyboards/handwired/heisenberg/info.json
@@ -0,0 +1,62 @@
+{
+ "keyboard_name": "Heisenberg",
+ "keyboard_folder": "handwired/heisenberg",
+ "url": "https://github.com/Ardakilic",
+ "maintainer": "Arda Kilicdagi",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_planck_mit": {
+ "key_count": 47,
+ "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": 0, "y": 1 },
+ { "x": 1, "y": 1 },
+ { "x": 2, "y": 1 },
+ { "x": 3, "y": 1 },
+ { "x": 4, "y": 1 },
+ { "x": 5, "y": 1 },
+ { "x": 6, "y": 1 },
+ { "x": 7, "y": 1 },
+ { "x": 8, "y": 1 },
+ { "x": 9, "y": 1 },
+ { "x": 10, "y": 1 },
+ { "x": 11, "y": 1 },
+ { "x": 0, "y": 2 },
+ { "x": 1, "y": 2 },
+ { "x": 2, "y": 2 },
+ { "x": 3, "y": 2 },
+ { "x": 4, "y": 2 },
+ { "x": 5, "y": 2 },
+ { "x": 6, "y": 2 },
+ { "x": 7, "y": 2 },
+ { "x": 8, "y": 2 },
+ { "x": 9, "y": 2 },
+ { "x": 10, "y": 2 },
+ { "x": 11, "y": 2 },
+ { "x": 0, "y": 3 },
+ { "x": 1, "y": 3 },
+ { "x": 2, "y": 3 },
+ { "x": 3, "y": 3 },
+ { "x": 4, "y": 3 },
+ { "x": 5, "y": 3, "w": 2 },
+ { "x": 7, "y": 3 },
+ { "x": 8, "y": 3 },
+ { "x": 9, "y": 3 },
+ { "x": 10, "y": 3 },
+ { "x": 11, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/heisenberg/keymaps/default/keymap.c b/keyboards/handwired/heisenberg/keymaps/default/keymap.c
new file mode 100644
index 0000000000..03c2a21b3b
--- /dev/null
+++ b/keyboards/handwired/heisenberg/keymaps/default/keymap.c
@@ -0,0 +1,168 @@
+/* Copyright 2019 Arda Kilicdagi
+ *
+ * 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 heisenberg_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _SPACE,
+ _SODA,
+ _NUMPAD
+};
+
+
+#define LOCKSCREEN LCTL(LSFT(KC_POWER)) // Screen Lock shortcut for OSX
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |NPdESC| A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |SftEtr|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | PWR | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT(_NUMPAD, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT /*KC_ENT*/,
+ LT(_SODA, KC_POWER), KC_LCTL, KC_LALT, KC_LGUI, MO(_LOWER), LT(_SPACE, KC_SPC), MO(_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_mit(
+ 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_mit(
+ 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
+),
+
+/* Soda Layer
+ * Keys that I mostly use when while chilling or taking a break :)
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | Up | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Left | Down |Right | | Mute |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_SODA] = LAYOUT_planck_mit(
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_BRMU
+),
+
+/* Space Layer (Space Bar Layer Tap)
+ * ,-----------------------------------------------------------------------------------.
+ * | |CMD+1 |CMD+2 |CMD+3 |CMD+4 |CMD+5 |CMD+6 |CMD+7 |CMD+8 |CMD+9 |CMD+0 |LCKOSX|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | Up | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Left | Down | Right| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_SPACE] = LAYOUT_planck_mit(
+ _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LOCKSCREEN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_BRMU
+),
+
+/* Numpad Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | 7 | 8 | 9 | - | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Enter| 4 | 5 | 6 | + | * |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Enter| 1 | 2 | 3 | + | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | 0 | 0 | . | , | = |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_planck_mit(
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, KC_PENT, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PAST,
+ _______, _______, _______, _______, _______, _______, KC_PENT, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PSLS,
+ _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, KC_PDOT, KC_PCMM, KC_PEQL
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|EEPRst| RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | |MUSmod|Aud on|Audoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_mit(
+ _______, RESET, EEP_RST, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, _______, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+// Enable the adjust layer when both lower and
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+} \ No newline at end of file
diff --git a/keyboards/handwired/heisenberg/keymaps/default/readme.md b/keyboards/handwired/heisenberg/keymaps/default/readme.md
new file mode 100644
index 0000000000..7ab5d474ef
--- /dev/null
+++ b/keyboards/handwired/heisenberg/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for Heisenberg
diff --git a/keyboards/handwired/heisenberg/keymaps/turkishish/config.h b/keyboards/handwired/heisenberg/keymaps/turkishish/config.h
new file mode 100644
index 0000000000..0810a3b23f
--- /dev/null
+++ b/keyboards/handwired/heisenberg/keymaps/turkishish/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2019 Arda Kilicdagi
+ *
+ * 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
+
+#define RETRO_TAPPING
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_FORCE_HOLD \ No newline at end of file
diff --git a/keyboards/handwired/heisenberg/keymaps/turkishish/keymap.c b/keyboards/handwired/heisenberg/keymaps/turkishish/keymap.c
new file mode 100644
index 0000000000..2581e01bf8
--- /dev/null
+++ b/keyboards/handwired/heisenberg/keymaps/turkishish/keymap.c
@@ -0,0 +1,232 @@
+/* Copyright 2019 Arda Kilicdagi
+ *
+ * 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 heisenberg_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _SPACE,
+ _SODA,
+ _NUMPAD
+};
+
+//KC_NONUS_BSLASH (\|) is equivalent to ["é] key in Turkish keyboards.
+//KC_GRV (~ `) is equivalent to [<>|] key in Turkish keyboards.
+// KC_SCLN is Turkish s [ÅŸÅž] key
+// KC_QUOT is Turkish i [iÄ°] key
+// KC_COMM is Turkish o [öÖ] key
+// KC_DOT is Turkish c [çÇ] key
+
+// Custom shortcuts specific to Turkish layout
+#define CURLY_OPEN RALT(KC_7)
+#define CURLY_CLOSE RALT(KC_0)
+#define SQUARE_OPEN RALT(KC_8)
+#define SQUARE_CLOSE RALT(KC_9)
+#define DOLLAR_SIGN RALT(KC_4)
+#define BACKSLASH RALT(KC_MINS)
+#define VERTICAL_PIPE RALT(KC_EQL)
+#define BACKTICK RALT(KC_BSLS)
+#define TILDE RALT(KC_RBRC)
+#define NUMBER_SIGN RALT(KC_3)
+#define LOCKSCREEN LCTL(LSFT(KC_POWER)) // Screen Lock shortcut for OSX
+
+/*
+// Unicode Turkish characters, in case it's needed
+enum {
+ TR_C, // ç
+ TR_C_L, // Ç
+ TR_I, // ı
+ TR_I_L, // Ä°
+ TR_G, // ÄŸ
+ TR_G_L, // Äž
+ TR_S, // ÅŸ
+ TR_S_L, // Åž
+ TR_U, // ü
+ TR_U_L, // Ü
+ TR_O, // ö
+ TR_O_L, // Ö
+};
+
+// clang-format off
+const uint32_t PROGMEM unicode_map[] = {
+ [TR_C] = 0x00c7,
+ [TR_C_L] = 0x00e7,
+ [TR_I] = 0x0130,
+ [TR_I_L] = 0x0131,
+ [TR_G] = 0x011e,
+ [TR_G_L] = 0x011f,
+ [TR_S] = 0x015e,
+ [TR_S_L] = 0x015f,
+ [TR_U] = 0x00dc,
+ [TR_U_L] = 0x00fc,
+ [TR_O] = 0x00d6,
+ [TR_O_L] = 0x00f6,
+};
+// clang-format on
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |NPdEsc| A | S | D | F | G | H | J | K | L | Åž | Ä° |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |SftCps| Z | X | C | V | B | N | M | Ö | Ç | . |SftEtr|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Sda|<>| Ctrl | Alt | OS |Lowr|,| Space* |Rise|"| Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT(_NUMPAD, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT /*KC_ENT*/,
+ LT(_SODA, KC_GRV), KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_BSLS), LT(_SPACE, KC_SPC), LT(_RAISE, KC_NONUS_BSLASH), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | > | ! | ' | ^ | + | % | & | / | ( | ) | = | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | ? | _ | Ğ | Ü | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | "$" | "{" | "}" | < | ">" |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | "[" | "]" | ' | " |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_mit(
+ 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_LBRC, KC_RBRC, KC_EQL,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DOLLAR_SIGN, CURLY_OPEN, CURLY_CLOSE, KC_GRV, LSFT(KC_GRV),
+ _______, _______, _______, _______, _______, _______, _______, SQUARE_OPEN, SQUARE_CLOSE, LSFT(KC_2), KC_NONUS_BSLASH
+),
+
+
+/* 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 | # | " | "~" | "`" | <>| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_mit(
+ 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, BACKSLASH, VERTICAL_PIPE, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMBER_SIGN, KC_NUBS, TILDE, BACKTICK, KC_GRV,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Soda Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | Up | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Left | Down |Right | | Mute |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_SODA] = LAYOUT_planck_mit(
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_BRMU
+),
+
+/* Space Layer (Space Bar Layer Tap)
+ * ,-----------------------------------------------------------------------------------.
+ * | |CMD+1 |CMD+2 |CMD+3 |CMD+4 |CMD+5 |CMD+6 |CMD+7 |CMD+8 |CMD+9 |CMD+0 |LCKOSX|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | Up | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Left | Down |Right | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | |Brghtâ–¼|Brghtâ–²|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_SPACE] = LAYOUT_planck_mit(
+ _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LOCKSCREEN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_BRMU
+),
+
+
+/* Numpad Layer
+ * KC_PDOT is comma on the Turkish layout ¯\_(ツ)_/¯
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | 7 | 8 | 9 | - | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Enter| 4 | 5 | 6 | + | * |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Enter| 1 | 2 | 3 | + | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | 0 | 0 | . | , | = |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_planck_mit(
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, KC_PENT, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PAST,
+ _______, _______, _______, _______, _______, _______, KC_PENT, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PSLS,
+ _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, KC_SLSH, KC_PDOT, KC_PEQL
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|EEPRom| RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | |MUSmod|Aud on|Audoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_mit(
+ _______, RESET, EEP_RST, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, _______, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+// Enable the adjust layer when both lower and
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+// I like greenish cyan for my single colored animations
+//extern rgblight_config_t rgblight_config;
+void keyboard_post_init_user(void) {
+ //rgblight_config.hue = 100;
+ //rgblight_config.sat = 255;
+ //rgblight_config.val = 255;
+ rgblight_enable_noeeprom(); // enables Rgb, without saving settings
+ rgblight_sethsv_noeeprom(100, 255, 255); // sets the color to greenish without saving
+ //rgblight_sethsv_noeeprom_turquoise();
+
+} \ No newline at end of file
diff --git a/keyboards/handwired/heisenberg/keymaps/turkishish/readme.md b/keyboards/handwired/heisenberg/keymaps/turkishish/readme.md
new file mode 100644
index 0000000000..d994401bbd
--- /dev/null
+++ b/keyboards/handwired/heisenberg/keymaps/turkishish/readme.md
@@ -0,0 +1,5 @@
+# The Turkishish keymap for Heisenberg
+
+You can flash the "turkishish" layout (which I'm currently using) like:
+
+ make handwired/heisenberg:turkishish \ No newline at end of file
diff --git a/keyboards/handwired/heisenberg/readme.md b/keyboards/handwired/heisenberg/readme.md
new file mode 100644
index 0000000000..bb3bca090d
--- /dev/null
+++ b/keyboards/handwired/heisenberg/readme.md
@@ -0,0 +1,14 @@
+# Heisenberg
+
+![heisenberg](https://i.imgur.com/BthPF7A.png)
+
+A handwired 40% ortholinear keyboard with underglow LEDs and a passive buzzer.
+
+* Keyboard Maintainer: [Arda Kilicdagi](https://github.com/ardakilic)
+* Hardware Supported: Pro Micro
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/heisenberg: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/heisenberg/rules.mk b/keyboards/handwired/heisenberg/rules.mk
new file mode 100644
index 0000000000..2fd710029c
--- /dev/null
+++ b/keyboards/handwired/heisenberg/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+LAYOUTS = planck_mit
diff --git a/keyboards/handwired/hexon38/config.h b/keyboards/handwired/hexon38/config.h
index e9e1eb4d29..1176d3fa57 100644
--- a/keyboards/handwired/hexon38/config.h
+++ b/keyboards/handwired/hexon38/config.h
@@ -49,6 +49,3 @@
/* Locking resynchronize hack */
//#define LOCKING_RESYNC_ENABLE
-
-/* prevent stuck modifiers */
-//#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/handwired/hnah40/readme.md b/keyboards/handwired/hnah40/readme.md
index 20e2d71274..a15800daee 100644
--- a/keyboards/handwired/hnah40/readme.md
+++ b/keyboards/handwired/hnah40/readme.md
@@ -10,7 +10,11 @@ Hardware Availability: https://github.com/vuhopkep/PCB/tree/master/Hnah40-Atmega
Make example for this keyboard (after setting up your build environment):
- make handwired/hnah40:default:program
+ make handwired/hnah40:default
+
+Flashing example for this keyboard:
+
+ make handwired/hnah40:default:flash
## Bootloader
use usbasploader from hsgw.
diff --git a/keyboards/handwired/hnah40/rules.mk b/keyboards/handwired/hnah40/rules.mk
index bbdf5176c4..a705bff6ab 100644
--- a/keyboards/handwired/hnah40/rules.mk
+++ b/keyboards/handwired/hnah40/rules.mk
@@ -11,15 +11,9 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# Flash program via avrdude, but default command is not suitable.
-# You can use hnah40:default:program
-PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
-
-
# disable debug code
OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/handwired/jot50/keymaps/default/keymap.c b/keyboards/handwired/jot50/keymaps/default/keymap.c
index 7342dcd22e..7b674af528 100644
--- a/keyboards/handwired/jot50/keymaps/default/keymap.c
+++ b/keyboards/handwired/jot50/keymaps/default/keymap.c
@@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/handwired/jotanck/jotanck.c b/keyboards/handwired/jotanck/jotanck.c
index 812781c3b7..caf0ad0141 100644
--- a/keyboards/handwired/jotanck/jotanck.c
+++ b/keyboards/handwired/jotanck/jotanck.c
@@ -1,10 +1,12 @@
#include "jotanck.h"
void matrix_init_kb(void) {
- matrix_init_user();
+ matrix_init_user();
}
-void keyboard_pre_init_user() {
- setPinOutput(JOTANCK_LED1);
- setPinOutput(JOTANCK_LED2);
+void keyboard_pre_init_kb() {
+ setPinOutput(JOTANCK_LED1);
+ setPinOutput(JOTANCK_LED2);
+
+ keyboard_pre_init_user();
}
diff --git a/keyboards/handwired/jotanck/keymaps/default/keymap.c b/keyboards/handwired/jotanck/keymaps/default/keymap.c
index 2467559a60..3de30d396b 100644
--- a/keyboards/handwired/jotanck/keymaps/default/keymap.c
+++ b/keyboards/handwired/jotanck/keymaps/default/keymap.c
@@ -78,9 +78,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
#ifdef JOTANCK_LEDS
- switch (biton32(state)) {
+ switch (get_highest_layer(state)) {
case _LOWER:
writePinHigh(JOTANCK_LED1);
writePinLow(JOTANCK_LED2);
diff --git a/keyboards/handwired/k_numpad17/config.h b/keyboards/handwired/k_numpad17/config.h
new file mode 100644
index 0000000000..e14101edec
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/config.h
@@ -0,0 +1,53 @@
+/*
+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 Handwired
+#define PRODUCT K-Numpad17
+#define DESCRIPTION QMK keyboard firmware for handwired numpad with 17 keys
+
+#define TAPPING_TERM 400
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { D1, D4, C6, D7, E6 }
+#define MATRIX_COL_PINS { B2, B1, F6 , F4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+
+/* Set 0 if debouncing isn't 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
+
+
diff --git a/keyboards/handwired/k_numpad17/k_numpad17.c b/keyboards/handwired/k_numpad17/k_numpad17.c
new file mode 100644
index 0000000000..290a86aac5
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/k_numpad17.c
@@ -0,0 +1 @@
+#include "k_numpad17.h" \ No newline at end of file
diff --git a/keyboards/handwired/k_numpad17/k_numpad17.h b/keyboards/handwired/k_numpad17/k_numpad17.h
new file mode 100644
index 0000000000..1fc99794df
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/k_numpad17.h
@@ -0,0 +1,35 @@
+#pragma once
+#include "quantum.h"
+
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, \
+ k20, k21, k22, k13, \
+ k30, k31, k32, \
+ k40, k41, k33 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, KC_NO}, \
+ {k30, k31, k32, k33}, \
+ {k40, KC_NO, k41, KC_NO} \
+}
+
+/* matrix layout
+ * ,-------------------.
+ * | 00 | 01 | 02 | 03 |
+ * |----|----|----|----|
+ * | 10 | 11 | 12 | |
+ * |----|----|----| 13 |
+ * | 20 | 21 | 22 | |
+ * |----|----|----|----|
+ * | 30 | 31 | 32 | |
+ * |----|----|----| 33 |
+ * | 40 | 41 | |
+ * `-------------------'
+ */
+
+
diff --git a/keyboards/handwired/k_numpad17/keymaps/default/keymap.c b/keyboards/handwired/k_numpad17/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2f383eea91
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ,-------------------.
+ * | NL | / | * | - |
+ * |----|----|----|----|
+ * | 7 | 8 | 9 | |
+ * |----|----|----| + |
+ * | 4 | 5 | 6 | |
+ * |----|----|----|----|
+ * | 1 | 2 | 3 | |
+ * |----|----|----| En |
+ * | 0 | . | |
+ * `-------------------'
+ */
+
+ [0] = LAYOUT_numpad_5x4(
+ 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
+ ),
+};
diff --git a/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c b/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c
new file mode 100644
index 0000000000..c2f314116b
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/keymaps/karlssn/keymap.c
@@ -0,0 +1,61 @@
+#include QMK_KEYBOARD_H
+
+//Tap Dance Declarations
+enum {
+ TD_DOT_COMMAS = 0
+};
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Esc, twice for Caps Lock
+ [TD_DOT_COMMAS] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMMA)
+// Other declarations would go here, separated by commas, if you have them
+};
+
+//In Layer declaration, add tap dance item in place of a key code
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ,-------------------.
+ * |bcsp| / | * | - |
+ * |----|----|----|----|
+ * | 7 | 8 | 9 | |
+ * |----|----|----| + |
+ * | 4 | 5 | 6 | |
+ * |----|----|----|----|
+ * | 1 | 2 | 3 | |
+ * |----|----|----| En |
+ * | FN/0 | . | |
+ * `-------------------'
+ */
+
+ [0] = LAYOUT_numpad_5x4(
+ KC_BSPC, 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,
+ LT(1, KC_P0), TD(TD_DOT_COMMAS), KC_PENT
+ ),
+ /*
+ * ,-------------------.
+ * | F10| F11| F12| - |
+ * |----|----|----|----|
+ * | F7 | F8 | F9 | |
+ * |----|----|----| vol|
+ * | F4 | F5 | F6 | + |
+ * |----|----|----|----|
+ * | F1 | F2 | F3 | vol|
+ * |----|----|----| - |
+ * | FN | . | |
+ * `-------------------'
+ */
+ [1] = LAYOUT_numpad_5x4(
+ KC_F10, KC_F11, KC_F12, KC_NO,
+ KC_F7, KC_F8, KC_F9,
+ KC_F4, KC_F5, KC_F6, KC_VOLU,
+ KC_F1, KC_F2, KC_F3,
+ KC_NO, KC_PDOT, KC_VOLD
+ )
+};
diff --git a/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk b/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/keymaps/karlssn/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/k_numpad17/readme.md b/keyboards/handwired/k_numpad17/readme.md
new file mode 100644
index 0000000000..76bbaf4391
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/readme.md
@@ -0,0 +1,25 @@
+# K-Numpad17
+<img src="https://i.imgur.com/MasSa71.jpg" alt="k-numpad" width="400"/>
+
+### Arduino Pro Micro Pinout
+| rows | 0 | 1 | 2 | 3 | 4 |
+| ----------- | --- | --- | --- | --- | --- |
+| arduino pin | 2 | 4 | 5 | 6 | 7 |
+| qmk pin | D1 | D4 | C6 | D7 | E6 |
+
+| columns | 0 | 1 | 2 | 3 |
+| ----------- | --- | --- | --- | --- |
+| arduino pin | 16 | 15 | A1 | A3 |
+| qmk pin | B5 | B4 | B3 | C3 |
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/k_numpad17:default
+
+Bootmagic is enabled. Press the key at (0,0) while plugging the keyboard in to jump to bootloader. This is numlock in the default keymap.
+
+* Keyboard Maintainer: [Karlssn](https://github.com/Karlssn)
+* Hardware Availability: [Casefile](https://www.thingiverse.com/thing:4062409)
+
+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/handwired/k_numpad17/rules.mk b/keyboards/handwired/k_numpad17/rules.mk
new file mode 100644
index 0000000000..e1f2d2a148
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite # Key at 0,0 makes the keyboard go into bootloader
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+TAP_DANCE_ENABLE = no
+
+LAYOUTS = numpad_5x4
diff --git a/keyboards/handwired/magicforce61/keymaps/default/keymap.c b/keyboards/handwired/magicforce61/keymaps/default/keymap.c
index 12252c978a..5f4440a171 100644
--- a/keyboards/handwired/magicforce61/keymaps/default/keymap.c
+++ b/keyboards/handwired/magicforce61/keymaps/default/keymap.c
@@ -7,7 +7,6 @@
#define KC_X0 LT(_FN2, KC_GRV)
#define KC_X1 MO(_FN1)
#define NAV_ESC LT(_FN1, KC_ESC)
-#define KC_GUI MAGIC_UNNO_GUI
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
diff --git a/keyboards/handwired/minorca/config.h b/keyboards/handwired/minorca/config.h
index fea201b9cf..acaf26e959 100644
--- a/keyboards/handwired/minorca/config.h
+++ b/keyboards/handwired/minorca/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"
@@ -24,9 +23,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6660
#define DEVICE_VER 0x0001
-#define MANUFACTURER ME
-#define PRODUCT MinOrca
-#define DESCRIPTION Tiny Whale
+#define MANUFACTURER panc.co
+#define PRODUCT Minorca
+#define DESCRIPTION QMK Firmware for panc.co Minorca
/* key matrix size */
#define MATRIX_ROWS 4
@@ -72,4 +71,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-#endif
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP KC_SPACE
diff --git a/keyboards/handwired/minorca/info.json b/keyboards/handwired/minorca/info.json
index dafee63456..d1ae1171fe 100644
--- a/keyboards/handwired/minorca/info.json
+++ b/keyboards/handwired/minorca/info.json
@@ -1,55 +1,55 @@
{
- "keyboard_name": "Minorca Handwired",
- "url": "",
- "maintainer": "qmk",
- "width": 12,
- "height": 4,
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label":"KA00", "x":0, "y":0},
- {"label":"KA01", "x":1, "y":0},
- {"label":"KA02", "x":2, "y":0},
- {"label":"KA03", "x":3, "y":0},
- {"label":"KA04", "x":4, "y":0},
- {"label":"KA05", "x":5, "y":0},
- {"label":"KA06", "x":6, "y":0},
- {"label":"KA07", "x":7, "y":0},
- {"label":"KA08", "x":8, "y":0},
- {"label":"KA09", "x":9, "y":0},
- {"label":"KA10", "x":10, "y":0},
- {"label":"KA11", "x":11, "y":0},
- {"label":"KB00", "x":0, "y":1, "w":1.25},
- {"label":"KB01", "x":1.25, "y":1},
- {"label":"KB02", "x":2.25, "y":1},
- {"label":"KB03", "x":3.25, "y":1},
- {"label":"KB04", "x":4.25, "y":1},
- {"label":"KB05", "x":5.25, "y":1},
- {"label":"KB06", "x":6.25, "y":1},
- {"label":"KB07", "x":7.25, "y":1},
- {"label":"KB08", "x":8.25, "y":1},
- {"label":"KB09", "x":9.25, "y":1},
- {"label":"KB11", "x":10.25, "y":1, "w":1.75},
- {"label":"KC00", "x":0, "y":2, "w":1.75},
- {"label":"KC02", "x":1.75, "y":2},
- {"label":"KC03", "x":2.75, "y":2},
- {"label":"KC04", "x":3.75, "y":2},
- {"label":"KC05", "x":4.75, "y":2},
- {"label":"KC06", "x":5.75, "y":2},
- {"label":"KC07", "x":6.75, "y":2},
- {"label":"KC08", "x":7.75, "y":2},
- {"label":"KC09", "x":8.75, "y":2},
- {"label":"KC10", "x":9.75, "y":2},
- {"label":"KC11", "x":10.75, "y":2, "w":1.25},
- {"label":"KD00", "x":0, "y":3, "w":1.25},
- {"label":"KD02", "x":1.25, "y":3, "w":1.25},
- {"label":"KD03", "x":2.5, "y":3, "w":1.25},
- {"label":"KD04", "x":3.75, "y":3, "w":2.25},
- {"label":"KD07", "x":6, "y":3, "w":2.25},
- {"label":"KD09", "x":8.25, "y":3, "w":1.25},
- {"label":"KD10", "x":9.5, "y":3},
- {"label":"KD11", "x":10.5, "y":3, "w":1.5}
- ]
+ "keyboard_name": "Minorca Handwired",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "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":"K10", "x":0, "y":1, "w":1.25},
+ {"label":"K11", "x":1.25, "y":1},
+ {"label":"K12", "x":2.25, "y":1},
+ {"label":"K13", "x":3.25, "y":1},
+ {"label":"K14", "x":4.25, "y":1},
+ {"label":"K15", "x":5.25, "y":1},
+ {"label":"K16", "x":6.25, "y":1},
+ {"label":"K17", "x":7.25, "y":1},
+ {"label":"K18", "x":8.25, "y":1},
+ {"label":"K19", "x":9.25, "y":1},
+ {"label":"K1B", "x":10.25, "y":1, "w":1.75},
+ {"label":"K20", "x":0, "y":2, "w":1.75},
+ {"label":"K22", "x":1.75, "y":2},
+ {"label":"K23", "x":2.75, "y":2},
+ {"label":"K24", "x":3.75, "y":2},
+ {"label":"K25", "x":4.75, "y":2},
+ {"label":"K26", "x":5.75, "y":2},
+ {"label":"K27", "x":6.75, "y":2},
+ {"label":"K28", "x":7.75, "y":2},
+ {"label":"K29", "x":8.75, "y":2},
+ {"label":"K2A", "x":9.75, "y":2},
+ {"label":"K2B", "x":10.75, "y":2, "w":1.25},
+ {"label":"K30", "x":0, "y":3, "w":1.25},
+ {"label":"K32", "x":1.25, "y":3, "w":1.25},
+ {"label":"K33", "x":2.5, "y":3, "w":1.25},
+ {"label":"K34", "x":3.75, "y":3, "w":2.25},
+ {"label":"K37", "x":6, "y":3, "w":2.25},
+ {"label":"K39", "x":8.25, "y":3, "w":1.25},
+ {"label":"K3A", "x":9.5, "y":3},
+ {"label":"K3B", "x":10.5, "y":3, "w":1.5}
+ ]
+ }
}
- }
}
diff --git a/keyboards/handwired/minorca/keymaps/default/config.h b/keyboards/handwired/minorca/keymaps/default/config.h
deleted file mode 100644
index c19ad73724..0000000000
--- a/keyboards/handwired/minorca/keymaps/default/config.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#pragma once
-
-// place overrides here
-
-
-/* bootmagic salt key */
-#define BOOTMAGIC_KEY_SALT KC_ESC
-
-/* skip bootmagic and eeconfig */
-#define BOOTMAGIC_KEY_SKIP KC_SPACE
diff --git a/keyboards/handwired/minorca/keymaps/rgb/config.h b/keyboards/handwired/minorca/keymaps/rgb/config.h
index 43b3c59110..d3715d054b 100644
--- a/keyboards/handwired/minorca/keymaps/rgb/config.h
+++ b/keyboards/handwired/minorca/keymaps/rgb/config.h
@@ -1,13 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-/* bootmagic salt key */
-#define BOOTMAGIC_KEY_SALT KC_ESC
-
-/* skip bootmagic and eeconfig */
-#define BOOTMAGIC_KEY_SKIP KC_SPACE
+#pragma once
/* ws2812 RGB LED */
#define RGB_DI_PIN D5
@@ -16,5 +7,3 @@
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-
-#endif
diff --git a/keyboards/handwired/minorca/keymaps/rgb/readme.md b/keyboards/handwired/minorca/keymaps/rgb/readme.md
index ec3b4f00f1..4e9917789e 100644
--- a/keyboards/handwired/minorca/keymaps/rgb/readme.md
+++ b/keyboards/handwired/minorca/keymaps/rgb/readme.md
@@ -1,4 +1,4 @@
-#RGB backlight for MinOrca
+# RGB backlight for MinOrca
![wiring](https://i.imgur.com/jyYyiSS.jpg)
@@ -8,16 +8,18 @@ http://www.40percent.club/2016/08/tiny-whale.html
The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key.
-* Tab + Z Toggle on/off
-* Tab + X Mode
-* Tab + C Hue+
-* Tab + V Hue-
-* Tab + B Saturation+
-* Tab + N Saturation-
-* Tab + M Brightness+
-* Tab + , Brightness-
-
-Example wiring:
+Shortcut | Function
+:------- | :-----
+Tab + Z | Toggle on/off
+Tab + X | Mode
+Tab + C | Hue+
+Tab + V | Hue-
+Tab + B | Saturation+
+Tab + N | Saturation-
+Tab + M | Brightness+
+Tab + , | Brightness-
+
+## Example wiring:
WS2812 data pin is connected to D5
diff --git a/keyboards/handwired/minorca/keymaps/rgb/rules.mk b/keyboards/handwired/minorca/keymaps/rgb/rules.mk
index 6e430d59e2..faa034d88e 100644
--- a/keyboards/handwired/minorca/keymaps/rgb/rules.mk
+++ b/keyboards/handwired/minorca/keymaps/rgb/rules.mk
@@ -1,21 +1 @@
-
-
-# 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 = 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 = 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 = 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.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight
diff --git a/keyboards/handwired/minorca/minorca.c b/keyboards/handwired/minorca/minorca.c
index 24e72c2a5c..dbae0b0f90 100644
--- a/keyboards/handwired/minorca/minorca.c
+++ b/keyboards/handwired/minorca/minorca.c
@@ -1,6 +1 @@
#include "minorca.h"
-
-void matrix_init_kb(void) {
-
- matrix_init_user();
-} \ No newline at end of file
diff --git a/keyboards/handwired/minorca/minorca.h b/keyboards/handwired/minorca/minorca.h
index 2df4ebdc4f..ca524caf59 100644
--- a/keyboards/handwired/minorca/minorca.h
+++ b/keyboards/handwired/minorca/minorca.h
@@ -1,18 +1,15 @@
-#ifndef MINORCA_H
-#define MINORCA_H
+#pragma once
#include "quantum.h"
#define LAYOUT( \
- KA00, KA01, KA02, KA03, KA04, KA05, KA06, KA07, KA08, KA09, KA10, KA11, \
- KB00, KB01, KB02, KB03, KB04, KB05, KB06, KB07, KB08, KB09, KB11, \
- KC00, KC02, KC03, KC04, KC05, KC06, KC07, KC08, KC09, KC10, KC11, \
- KD00, KD02, KD03, KD04, KD07, KD09, KD10, KD11 \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K32, K33, K34, K37, K39, K3A, K3B \
) { \
- { KA00, KA01, KA02, KA03, KA04, KA05, KA06, KA07, KA08, KA09, KA10, KA11 }, \
- { KB00, KB01, KB02, KB03, KB04, KB05, KB06, KB07, KB08, KB09, KC_NO, KB11 }, \
- { KC00, KC_NO, KC02, KC03, KC04, KC05, KC06, KC07, KC08, KC09, KC10, KC11 }, \
- { KD00, KC_NO, KD02, KD03, KD04, KC_NO, KC_NO, KD07, KC_NO, KD09, KD10, KD11 } \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, K1B }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
+ { K30, KC_NO, K32, K33, K34, KC_NO, KC_NO, K37, KC_NO, K39, K3A, K3B } \
}
-
-#endif
diff --git a/keyboards/handwired/minorca/readme.md b/keyboards/handwired/minorca/readme.md
index c910459603..46d310c617 100644
--- a/keyboards/handwired/minorca/readme.md
+++ b/keyboards/handwired/minorca/readme.md
@@ -1,10 +1,10 @@
-# minorca
+# Minorca
A handwired 40% keyboard by panc.co.
-Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
-Hardware Supported: panc.co minorca
-Hardware Availability: [panc.co](https://www.panc.co/blog/minorcasebright-information-page)
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+* Hardware Supported: panc.co Minorca, Teensy 2.0
+* Hardware Availability: [panc.co](https://www.panc.co/blog/minorcasebright-information-page)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/handwired/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk
index 5c29c0c93e..195749ceb3 100644
--- a/keyboards/handwired/minorca/rules.mk
+++ b/keyboards/handwired/minorca/rules.mk
@@ -12,21 +12,22 @@ MCU = atmega32u4
BOOTLOADER = halfkay
# 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
+# 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 = no # Console for debug(+400)
+BOOTMAGIC_ENABLE = yes # 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 = 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
+# 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
-MIDI_ENABLE = no # MIDI controls
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight
+MIDI_ENABLE = no # MIDI support
+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
UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-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
diff --git a/keyboards/handwired/onekey/bluepill/rules.mk b/keyboards/handwired/onekey/bluepill/rules.mk
index aeda2782b9..69436650b5 100644
--- a/keyboards/handwired/onekey/bluepill/rules.mk
+++ b/keyboards/handwired/onekey/bluepill/rules.mk
@@ -1,41 +1,10 @@
-# GENERIC STM32F103C8T6 board - stm32duino bootloader
-BOARD = GENERIC_STM32_F103
+# MCU name
+MCU = STM32F103
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
DFU_ARGS = -d 1eaf:0003 -a2 -R
-DFU_SUFFIX_ARGS ?= -v 1eaf -p 0003
-
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+DFU_SUFFIX_ARGS = -v 1eaf -p 0003
diff --git a/keyboards/handwired/onekey/stm32f0_disco/rules.mk b/keyboards/handwired/onekey/stm32f0_disco/rules.mk
index 69639f940e..fe5e3f824f 100644
--- a/keyboards/handwired/onekey/stm32f0_disco/rules.mk
+++ b/keyboards/handwired/onekey/stm32f0_disco/rules.mk
@@ -1,34 +1,2 @@
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p df11 -v 0483
+# MCU name
+MCU = STM32F072
diff --git a/keyboards/handwired/p65rgb/config.h b/keyboards/handwired/p65rgb/config.h
new file mode 100644
index 0000000000..c3900c7ec8
--- /dev/null
+++ b/keyboards/handwired/p65rgb/config.h
@@ -0,0 +1,64 @@
+/*
+Copyright 2019 marhalloweenvt
+
+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 0x75B4
+#define DEVICE_VER 0x0001
+#define MANUFACTURER marhalloweenvt
+#define PRODUCT p65rgb
+#define DESCRIPTION Replacement PCB for e6.5
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 17
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { C7, C6, B6, B5, D5 }
+#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, B0, B1, B2, B3, B7, D0, D1, D2, D3, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B4
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_LED_PROCESS_LIMIT 4
+#define RGB_MATRIX_LED_FLUSH_LIMIT 26
+#define DRIVER_LED_TOTAL 83
+#define RGBLIGHT_LIMIT_VAL 180
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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
+
+#define QMK_ESC_OUTPUT E6 // usually COL
+#define QMK_ESC_INPUT C7 // usually ROW
diff --git a/keyboards/handwired/p65rgb/info.json b/keyboards/handwired/p65rgb/info.json
new file mode 100644
index 0000000000..b3901525d3
--- /dev/null
+++ b/keyboards/handwired/p65rgb/info.json
@@ -0,0 +1,82 @@
+{
+ "keyboard_name": "p65rgb",
+ "url": "",
+ "maintainer": "marhalloweenvt",
+ "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":"~", "x":13, "y":0},
+ {"label":"|", "x":14, "y":0},
+ {"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":"Backspace", "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},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.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":"Up", "x":14, "y":3},
+ {"label":"Fn", "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":"Menu", "x":11.25, "y":4, "w":1.25},
+ {"label":"Left", "x":13, "y":4},
+ {"label":"Down", "x":14, "y":4},
+ {"label":"Right", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/p65rgb/keymaps/default/keymap.c b/keyboards/handwired/p65rgb/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2a9f6cc712
--- /dev/null
+++ b/keyboards/handwired/p65rgb/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2019 marhalloweenvt
+ *
+ * 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_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_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_BSPC, KC_PGUP,
+ CTL_T(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_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, TO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_APP, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT( /* FN */
+ KC_GESC, 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_INS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_HOME,
+ CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_END,
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
+
+};
diff --git a/keyboards/handwired/p65rgb/p65rgb.c b/keyboards/handwired/p65rgb/p65rgb.c
new file mode 100644
index 0000000000..5c045c2fc1
--- /dev/null
+++ b/keyboards/handwired/p65rgb/p65rgb.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 marhalloweenvt
+ *
+ * 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 "p65rgb.h"
+
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 },
+ { 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17 },
+ { 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 },
+ { 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51 },
+ { 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82 }
+}, {
+ { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, {105, 0 }, {120, 0 }, {135, 0 }, {150, 0 }, {165, 0 }, {180, 0 }, {195, 0 }, {205, 0 }, {210, 0 }, {224, 0 },
+ { 224,16 }, {224, 16 }, {210, 16 }, {180, 16 }, {165, 16 }, {150, 16 }, {135, 16 }, {120, 16 }, {105, 16 }, { 90, 16 }, { 75, 16 }, { 60, 16 }, { 45, 16 }, { 30, 16 }, { 15, 16 }, { 0, 16 }, { 0, 16 },
+ { 0, 32 }, { 0, 32 }, { 15, 32 }, { 30, 32 }, { 45, 32 }, { 60, 32 }, { 75, 32 }, { 90, 32 }, {105, 32 }, {120, 32 }, {135, 32 }, {150, 32 }, {165, 32 }, {190, 32 }, {205, 32 }, {210, 32 }, {224, 32 },
+ { 224, 8 }, {224, 48 }, {210, 48 }, {195, 48 }, {180, 48 }, {150, 48 }, {135, 48 }, {120, 48 }, {105, 48 }, { 90, 48 }, { 75, 48 }, { 60, 48 }, { 45, 48 }, { 30, 48 }, { 15, 48 }, { 0, 48 }, { 0, 48 },
+ { 0, 64 }, { 0, 64 }, { 0, 64 }, { 15, 64 }, { 15, 64 }, { 40, 64 }, { 90, 64 }, {105, 64 }, {150, 64 }, {180, 64 }, {180, 64 }, {195, 64 }, {210, 64 }, {220, 64 }, {224, 64 }
+}, {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2,
+ 2, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 2, 2, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2
+} };
+
+void suspend_power_down_kb(void)
+{
+ rgb_matrix_set_suspend_state(true);
+ suspend_power_down_user();
+}
+
+void suspend_wakeup_init_kb(void)
+{
+ rgb_matrix_set_suspend_state(false);
+ suspend_wakeup_init_user();
+}
diff --git a/keyboards/handwired/p65rgb/p65rgb.h b/keyboards/handwired/p65rgb/p65rgb.h
new file mode 100644
index 0000000000..fd7e216d13
--- /dev/null
+++ b/keyboards/handwired/p65rgb/p65rgb.h
@@ -0,0 +1,42 @@
+/* Copyright 2019 marhalloweenvt
+ *
+ * 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, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, K2e, k2f, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3c, k3e, k3f, \
+ k40, k41, k42, k45, k49, k4a, k4c, k4e, k4f \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, KC_NO }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO, k1e, k1f, KC_NO }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, K2e, k2f, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, KC_NO, k3c, KC_NO, k3e, k3f, KC_NO }, \
+ { k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, k49, k4a, KC_NO, k4c, KC_NO, k4e, k4f, KC_NO }, \
+}
+
diff --git a/keyboards/handwired/p65rgb/readme.md b/keyboards/handwired/p65rgb/readme.md
new file mode 100644
index 0000000000..e0c787b86e
--- /dev/null
+++ b/keyboards/handwired/p65rgb/readme.md
@@ -0,0 +1,15 @@
+# p65rgb
+
+![p65rgb](https://i.imgur.com/Z3RfOXe.jpg)
+
+A replacement PCB for my E6.5 Keyboard
+
+* Keyboard Maintainer: [marhalloweenvt](https://github.com/marhalloweenvt)
+* Hardware Supported: p65rgb
+* Hardware Availability: p65rgb
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/p65rgb: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/p65rgb/rules.mk b/keyboards/handwired/p65rgb/rules.mk
new file mode 100644
index 0000000000..297aa1cd77
--- /dev/null
+++ b/keyboards/handwired/p65rgb/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # 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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+RGB_MATRIX_ENABLE = WS2812 # Enable keyboard RGB backlight functionality with ws2812 driver
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/handwired/prime_exl/config.h b/keyboards/handwired/prime_exl/config.h
index ef6e204ec4..8e5692fa86 100644
--- a/keyboards/handwired/prime_exl/config.h
+++ b/keyboards/handwired/prime_exl/config.h
@@ -49,23 +49,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*9*2)) = (37+720)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 757
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 267 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16 \ No newline at end of file
diff --git a/keyboards/handwired/prime_exl/keymaps/default/keymap.c b/keyboards/handwired/prime_exl/keymaps/default/keymap.c
index 1dac7825e4..7cf9197081 100644
--- a/keyboards/handwired/prime_exl/keymaps/default/keymap.c
+++ b/keyboards/handwired/prime_exl/keymaps/default/keymap.c
@@ -132,9 +132,9 @@ void led_set_user(uint8_t usb_led) {
}
//function for layer indicator LED
-uint32_t layer_state_set_user(uint32_t state)
+layer_state_t layer_state_set_user(layer_state_t state)
{
- if (biton32(state) == 2) {
+ if (get_highest_layer(state) == 2) {
writePinHigh(C6);
} else {
writePinLow(C6);
diff --git a/keyboards/handwired/prime_exl/keymaps/via/rules.mk b/keyboards/handwired/prime_exl/keymaps/via/rules.mk
index e726a8a0e0..1e5b99807c 100644
--- a/keyboards/handwired/prime_exl/keymaps/via/rules.mk
+++ b/keyboards/handwired/prime_exl/keymaps/via/rules.mk
@@ -1,86 +1 @@
-# 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 = 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 = 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)
-
-# This is the VIA magic
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-SRC += keyboards/wilba_tech/wt_main.c
-
+VIA_ENABLE = yes
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index f05273d254..f9560206b4 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -19,15 +19,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
-#define USB_VENDOR_ID_LENOVO 0x17ef
-#define USB_DEVICE_ID_LENOVO_TPKBD 0x6009
-#define USB_DEVICE_ID_LENOVO_CUSBKBD 0x6047
-#define USB_DEVICE_ID_LENOVO_CBTKBD 0x6048
-#define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067
-
/* USB Device descriptor parameter */
-#define VENDOR_ID USB_VENDOR_ID_LENOVO
-#define PRODUCT_ID USB_DEVICE_ID_LENOVO_CBTKBD
+#define VENDOR_ID 0x17EF // Lenovo
+//#define PRODUCT_ID 0x6009 // ThinkPad Keyboard with TrackPoint
+//#define PRODUCT_ID 0x6047 // ThinkPad Compact USB Keyboard with TrackPoint
+#define PRODUCT_ID 0x6048 // ThinkPad Compact Bluetooth Keyboard with TrackPoint
+//#define PRODUCT_ID 0x6067 // ThinkPad Pro Docking Station
#define DEVICE_VER 0x0001
#define MANUFACTURER Priyadi
#define PRODUCT Promethium Keyboard
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index 207984407c..14a293bb39 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -986,7 +986,7 @@ void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool *
}
#endif
-uint32_t layer_state_set_kb(uint32_t state)
+layer_state_t layer_state_set_user(layer_state_t state)
{
// turn on punc layer if both fun & num are on
if ((state & ((1UL<<_NUM) | (1UL<<_FUN))) == ((1UL<<_NUM) | (1UL<<_FUN))) {
diff --git a/keyboards/handwired/pteron/config.h b/keyboards/handwired/pteron/config.h
index 56921b020d..af9c1598e9 100644
--- a/keyboards/handwired/pteron/config.h
+++ b/keyboards/handwired/pteron/config.h
@@ -24,6 +24,3 @@
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5 // 5 is default
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/handwired/pteron/keymaps/default/keymap.c b/keyboards/handwired/pteron/keymaps/default/keymap.c
index 3079cc7afd..976fbb6e16 100644
--- a/keyboards/handwired/pteron/keymaps/default/keymap.c
+++ b/keyboards/handwired/pteron/keymaps/default/keymap.c
@@ -99,6 +99,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c b/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c
index 2bc5432712..1c835bad1f 100644
--- a/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c
+++ b/keyboards/handwired/steamvan/keymaps/jmdaly/keymap.c
@@ -44,10 +44,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_LGUI, _______, _______, _______, _______, _______, MO(_L4)
),
[_L3] = LAYOUT_standard( /* LAYER 3 */
- KC_MINS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- KC_EQL, KC_PIPE, KC_TILD, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_INS,
- _______, _______, _______, KC_DQUO, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
+ KC_MINS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_EQL, KC_PIPE, KC_TILD, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_INS,
+ _______, RGB_TOG, RGB_MOD, RGB_RMOD, KC_DQUO, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
),
[_L4] = LAYOUT_standard( /* LAYER 4 */
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_PGUP, _______,
diff --git a/keyboards/handwired/steamvan/rev1/config.h b/keyboards/handwired/steamvan/rev1/config.h
index f10f42966b..f47dc90c19 100644
--- a/keyboards/handwired/steamvan/rev1/config.h
+++ b/keyboards/handwired/steamvan/rev1/config.h
@@ -57,9 +57,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Backlight configuration
* Backlight LEDs on B8
*/
-#define BACKLIGHT_LEVELS 24
+#define BACKLIGHT_PIN B8
#define BACKLIGHT_BREATHING
-#define BREATHING_PERIOD 6
+
+#define WS2812_SPI SPID1
+#define WS2812_SPI_MOSI_PAL_MODE 5
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/handwired/steamvan/rev1/halconf.h b/keyboards/handwired/steamvan/rev1/halconf.h
index 5e5d70219e..7363a21a21 100644
--- a/keyboards/handwired/steamvan/rev1/halconf.h
+++ b/keyboards/handwired/steamvan/rev1/halconf.h
@@ -153,7 +153,7 @@
* @brief Enables the SPI subsystem.
*/
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_SPI FALSE
+#define HAL_USE_SPI TRUE
#endif
/**
diff --git a/keyboards/handwired/steamvan/rev1/led.c b/keyboards/handwired/steamvan/rev1/led.c
deleted file mode 100644
index 1b78fa2f86..0000000000
--- a/keyboards/handwired/steamvan/rev1/led.c
+++ /dev/null
@@ -1,242 +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/>.
-*/
-
-#include "hal.h"
-#include "led_custom.h"
-#include "rev1.h"
-#include "printf.h"
-
-static void breathing_callback(PWMDriver *pwmp);
-
-static PWMConfig pwmCFG = {
- 0xFFFF, /* PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- NULL, /* No Callback */
- {
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-static PWMConfig pwmCFG_breathing = {
- 0xFFFF, /* 10kHz PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- breathing_callback, /* Breathing Callback */
- {
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-// See http://jared.geek.nz/2013/feb/linear-led-pwm
-static uint16_t cie_lightness(uint16_t v) {
- if (v <= 5243) // if below 8% of max
- return v / 9; // same as dividing by 900%
- else {
- uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
- // to get a useful result with integer division, we shift left in the expression above
- // and revert what we've done again after squaring.
- y = y * y * y >> 8;
- if (y > 0xFFFFUL) // prevent overflow
- return 0xFFFFU;
- else
- return (uint16_t) y;
- }
-}
-
-
-void backlight_init_ports(void) {
- palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(2));
- pwmStart(&PWMD4, &pwmCFG);
- if(kb_backlight_config.enable){
- if(kb_backlight_config.breathing){
- breathing_enable();
- } else{
- backlight_set(kb_backlight_config.level);
- }
- } else {
- backlight_set(0);
- }
-}
-
-void backlight_set(uint8_t level) {
- uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t) level / BACKLIGHT_LEVELS));
- if (level == 0) {
- // Turn backlight off
- // Disable channel 3 on PWM4
- pwmDisableChannel(&PWMD4, 2);
- } else {
- // Turn backlight on
- if(!is_breathing()){
- // Enable channel 3 on PWM4
- pwmEnableChannel(&PWMD4, 2, PWM_FRACTION_TO_WIDTH(&PWMD4,0xFFFF,duty));
- }
- }
-}
-
-
-uint8_t backlight_tick = 0;
-
-void backlight_task(void) {
-}
-
-#define BREATHING_NO_HALT 0
-#define BREATHING_HALT_OFF 1
-#define BREATHING_HALT_ON 2
-#define BREATHING_STEPS 128
-
-static uint8_t breathing_period = BREATHING_PERIOD;
-static uint8_t breathing_halt = BREATHING_NO_HALT;
-static uint16_t breathing_counter = 0;
-
-bool is_breathing(void) {
- return PWMD4.config == &pwmCFG_breathing;
-}
-
-#define breathing_min() do {breathing_counter = 0;} while (0)
-#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
-
-
-void breathing_interrupt_enable(void){
- pwmStop(&PWMD4);
- pwmStart(&PWMD4, &pwmCFG_breathing);
- chSysLockFromISR();
- pwmEnablePeriodicNotification(&PWMD4);
- pwmEnableChannelI(
- &PWMD4,
- 2,
- PWM_FRACTION_TO_WIDTH(
- &PWMD4,
- 0xFFFF,
- 0xFFFF
- )
- );
- chSysUnlockFromISR();
-}
-
-void breathing_interrupt_disable(void){
- pwmStop(&PWMD4);
- pwmStart(&PWMD4, &pwmCFG);
-}
-
-void breathing_enable(void)
-{
- breathing_counter = 0;
- breathing_halt = BREATHING_NO_HALT;
- breathing_interrupt_enable();
-}
-
-void breathing_pulse(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_min();
- else
- breathing_max();
- breathing_halt = BREATHING_HALT_ON;
- breathing_interrupt_enable();
-}
-
-void breathing_disable(void)
-{
- breathing_interrupt_disable();
- // Restore backlight level
- backlight_set(kb_backlight_config.level);
-}
-
-void breathing_self_disable(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_halt = BREATHING_HALT_OFF;
- else
- breathing_halt = BREATHING_HALT_ON;
-}
-
-void breathing_toggle(void) {
- if (is_breathing()){
- breathing_disable();
- } else {
- breathing_enable();
- }
-}
-
-void breathing_period_set(uint8_t value)
-{
- if (!value)
- value = 1;
- breathing_period = value;
-}
-
-void breathing_period_default(void) {
- breathing_period_set(BREATHING_PERIOD);
-}
-
-void breathing_period_inc(void)
-{
- breathing_period_set(breathing_period+1);
-}
-
-void breathing_period_dec(void)
-{
- breathing_period_set(breathing_period-1);
-}
-
-/* To generate breathing curve in python:
- * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
- */
-static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) {
- return v / BACKLIGHT_LEVELS * kb_backlight_config.level;
-}
-
-static void breathing_callback(PWMDriver *pwmp)
-{
- (void)pwmp;
- uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
- // resetting after one period to prevent ugly reset at overflow.
- breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
- uint8_t index = breathing_counter / interval % BREATHING_STEPS;
-
- if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
- ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
- {
- breathing_interrupt_disable();
- }
-
- uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
-
- chSysLockFromISR();
- pwmEnableChannelI(
- &PWMD4,
- 2,
- PWM_FRACTION_TO_WIDTH(
- &PWMD4,
- 0xFFFF,
- duty
- )
- );
- chSysUnlockFromISR();
-}
diff --git a/keyboards/handwired/steamvan/rev1/mcuconf.h b/keyboards/handwired/steamvan/rev1/mcuconf.h
index 69bf9185d1..7ad0137446 100644
--- a/keyboards/handwired/steamvan/rev1/mcuconf.h
+++ b/keyboards/handwired/steamvan/rev1/mcuconf.h
@@ -210,7 +210,7 @@
/*
* SPI driver system settings.
*/
-#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI1 TRUE
#define STM32_SPI_USE_SPI2 FALSE
#define STM32_SPI_USE_SPI3 FALSE
#define STM32_SPI_SPI1_DMA_PRIORITY 1
diff --git a/keyboards/handwired/steamvan/rev1/rev1.c b/keyboards/handwired/steamvan/rev1/rev1.c
index 3188649494..53f9a400f4 100644
--- a/keyboards/handwired/steamvan/rev1/rev1.c
+++ b/keyboards/handwired/steamvan/rev1/rev1.c
@@ -15,22 +15,3 @@
*/
#include "rev1.h"
-#include "led.h"
-#include "printf.h"
-
-backlight_config_t kb_backlight_config = {
- .enable = true,
- .breathing = true,
- .level = BACKLIGHT_LEVELS
-};
-
-
-
-void matrix_init_kb(void) {
- matrix_init_user();
- backlight_init_ports();
-}
-
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
diff --git a/keyboards/handwired/steamvan/rev1/rev1.h b/keyboards/handwired/steamvan/rev1/rev1.h
index 83f7ecb9ca..1cb72277ff 100644
--- a/keyboards/handwired/steamvan/rev1/rev1.h
+++ b/keyboards/handwired/steamvan/rev1/rev1.h
@@ -16,7 +16,6 @@
#pragma once
#include "quantum.h"
-#include "backlight.h"
// This a shortcut to help you visually see your layout.
// There are a number of variations depending on the layout of your bottom row.
@@ -79,12 +78,3 @@
{ K30, K31, K32, K33, K34, KC_NO, K36, KC_NO, K38, K39, K3A, K3B } \
}
-// Backlighting
-extern backlight_config_t kb_backlight_config;
-extern bool kb_backlight_breathing;
-
-void backlight_init_ports(void);
-void backlight_set(uint8_t level);
-bool is_breathing(void);
-void breathing_enable(void);
-void breathing_disable(void);
diff --git a/keyboards/handwired/steamvan/rev1/rules.mk b/keyboards/handwired/steamvan/rev1/rules.mk
index 471cb4c1e1..797d7b35da 100644
--- a/keyboards/handwired/steamvan/rev1/rules.mk
+++ b/keyboards/handwired/steamvan/rev1/rules.mk
@@ -1,8 +1,8 @@
# MCU name
MCU = STM32F303
-# Code for backlight breathing:
-SRC += led.c
+# Use SPI for RGB underglow:
+WS2812_DRIVER = spi
# Build Options
# comment out to disable the options.
@@ -15,7 +15,7 @@ CONSOLE_ENABLE = no # 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
+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/handwired/videowriter/README.md b/keyboards/handwired/videowriter/README.md
new file mode 100644
index 0000000000..ef8471aa91
--- /dev/null
+++ b/keyboards/handwired/videowriter/README.md
@@ -0,0 +1,61 @@
+# QMK-based firmware for Magnavox Videowriter keyboard
+Matrix layout is based on info from this [article](https://deskthority.net/workshop-f7/magnavox-videowriter-keyboard-cleanup-and-conversion-t19687.html).
+
+![Videowriter](https://i.imgur.com/zNTHmZa.jpg)
+
+Magnavox Videowriter keyboard conversion project: direct connection of Pro Micro to the matrix.
+
+* Keyboard Maintainer: [DmNosachev](https://github.com/DmNosachev)
+* Hardware Supported: Alps-based [Magnavox Videowriter keyboard](https://deskthority.net/wiki/Magnavox_VideoWriter), Pro Micro 16MHz 5V MCU board (you can use any MCU which is supported by QMK and has 18 or more IO).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/videowriter: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).
+
+# Modding
+
+## Matrix
+
+Videowriter has 8x10 matrix:
+
+| col/row | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+|---------|----------|-----------|-----------|-----------|----------|-----------|-----------|---------|
+| 0 | | | | | | | 51 LShift | 39 Caps |
+| 1 | 08 Copy | 07 Find | 06 Split | 05 Center | 04 Page | 03 Spell | 02 Print | 01 Menu |
+| 2 | 16 5 | 15 4 | 14 3 | 13 2 | 12 1 | 11 Delete | 10 GoTo | 09 Move |
+| 3 | 24 BkSpc | 23 Equals | 22 Minus | 21 0 | 20 9 | 19 8 | 18 7 | 17 6 |
+| 4 | 32 U | 31 Y | 30 T | 29 R | 28 E | 27 W | 26 Q | 25 Tab |
+| 5 | 41 S | 40 A | 38 Return | 37 ] | 36 [ | 35 P | 34 O | 33 I |
+| 6 | 49 ; | 48 L | 47 K | 46 J | 45 H | 44 G | 43 F | 42 D |
+| 7 | 58 M | 57 N | 56 B | 55 V | 54 C | 53 X | 52 Z | 50 " |
+| 8 | 67 Left | 66 Up | 65 Insert | 64 Space | 63 Style | 61 / | 60 . | 59 , |
+| 9 | | | 62 RShift | 72 Undo | 71 Help | 70 Do | 69 Right | 68 Down |
+
+## Separating Shift keys
+Initially left and right Shift keys are connected in parrallel. You need to cut the traces from right Shift (switch 62) and wire it to column 2 (switch 65, right pin) and row 9 (switch 71, bottom pin).
+
+![Right shift](https://i.imgur.com/ttdTVtC.jpg)
+
+## Stock components removal
+SN74LS145N IC (BCD-to-decimal decoder, drives matrix rows), NEC D8049HC IC (MCU, drives matrix columns) and resistor array need to be desoldered from the PCB. You need to shorten the 4 diodes (D2–D5) in the bottom right corner of the PCB (solder a wire between their pins).
+I've also removed two electrolytic capacitors and some ceramic capacitors just to free an additional space.
+
+Optional: add diodes between each switch and corresponding row for NKRO. If you choose not to add them, create `config.h` file in your personal keymap folder and add `#define MATRIX_HAS_GHOST` to it.
+
+## Pro Micro
+Suggested mount position for the Pro Micro:
+
+![PCB bottom side](https://i.imgur.com/bb7zZD0.jpg)
+
+1. Solder two 8-pin headers to the Pro Micro (pin D1-B5 on the left side and pins F4-B6 on the right side).
+2. Solder the Pro Micro to the Videowriter's PCB.
+3. Solder 6 wire bridges (pink color on the photo).
+4. By this point rows 0-4 and all columns will be already in place.
+5. Connect rows 5-9 (see right side of the PCB) to the corresponding pins of the Pro Micro using additional wires.
+6. Optional: connect a push button between Reset and Ground pins.
+
+![PCB top side](https://i.imgur.com/PVEXIxj.jpg)
+
+Compile and flash the firmware. Use matrix [debug mode](https://docs.qmk.fm/#/feature_command) if something is wrong.
diff --git a/keyboards/handwired/videowriter/config.h b/keyboards/handwired/videowriter/config.h
new file mode 100644
index 0000000000..d392564eb9
--- /dev/null
+++ b/keyboards/handwired/videowriter/config.h
@@ -0,0 +1,140 @@
+/*
+Copyright 2019 DmNosachev
+
+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 Magnavox
+#define PRODUCT Videowriter
+#define DESCRIPTION Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+/*
+ * 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 { D7, C6, D1, D0, D4, D2, D3, E6, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Uncomment this if you didn't install diodes */
+//#define MATRIX_HAS_GHOST
+
+/* 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
+
+
+/*
+ * 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+//#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#endif
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/handwired/videowriter/info.json b/keyboards/handwired/videowriter/info.json
new file mode 100644
index 0000000000..194b558bef
--- /dev/null
+++ b/keyboards/handwired/videowriter/info.json
@@ -0,0 +1,20 @@
+{
+ "keyboard_name": "videowriter",
+ "url": "https://deskthority.net/viewtopic.php?f=7&t=20210",
+ "maintainer": "DmNosachev",
+ "width": 16,
+ "height": 7.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"menu", "x":1, "y":1, "h":0.75}, {"label":"print", "x":2, "y":1, "h":0.75}, {"label":"spell", "x":3, "y":1, "h":0.75}, {"label":"page", "x":4.5, "y":1, "h":0.75}, {"label":"center", "x":5.5, "y":1, "h":0.75}, {"label":"split", "x":6.5, "y":1, "h":0.75}, {"label":"find", "x":7.5, "y":1, "h":0.75}, {"label":"copy", "x":9, "y":1, "h":0.75}, {"label":"move", "x":10, "y":1, "h":0.75}, {"label":"go to", "x":11, "y":1, "h":0.75},
+ {"label":"left", "x":13, "y":0.5}, {"label":"down", "x":14, "y":1}, {"label":"up", "x":14, "y":0}, {"label":"right", "x":15, "y":0.5},
+ {"label":"del", "x":0, "y":2.5}, {"label":"1", "x":1, "y":2.5}, {"label":"2", "x":2, "y":2.5}, {"label":"3", "x":3, "y":2.5}, {"label":"4", "x":4, "y":2.5}, {"label":"5", "x":5, "y":2.5}, {"label":"6", "x":6, "y":2.5}, {"label":"7", "x":7, "y":2.5}, {"label":"8", "x":8, "y":2.5}, {"label":"9", "x":9, "y":2.5}, {"label":"0", "x":10, "y":2.5}, {"label":"-", "x":11, "y":2.5}, {"label":"=", "x":12, "y":2.5}, {"label":"backspace", "x":13, "y":2.5, "w":1.5}, {"label":"do", "x":15, "y":2.5, "h":1.33},
+ {"label":"tab", "x":0, "y":3.5, "w":1.5}, {"label":"Q", "x":1.5, "y":3.5}, {"label":"W", "x":2.5, "y":3.5}, {"label":"E", "x":3.5, "y":3.5}, {"label":"R", "x":4.5, "y":3.5}, {"label":"T", "x":5.5, "y":3.5}, {"label":"Y", "x":6.5, "y":3.5}, {"label":"U", "x":7.5, "y":3.5}, {"label":"I", "x":8.5, "y":3.5}, {"label":"O", "x":9.5, "y":3.5}, {"label":"P", "x":10.5, "y":3.5}, {"label":"[", "x":11.5, "y":3.5}, {"label":"]", "x":12.5, "y":3.5}, {"label":"help", "x":15, "y":3.833, "h":1.33},
+ {"label":"caps lock", "x":0, "y":4.5, "w":1.75}, {"label":"A", "x":1.75, "y":4.5}, {"label":"S", "x":2.75, "y":4.5}, {"label":"D", "x":3.75, "y":4.5}, {"label":"F", "x":4.75, "y":4.5}, {"label":"G", "x":5.75, "y":4.5}, {"label":"H", "x":6.75, "y":4.5}, {"label":"J", "x":7.75, "y":4.5}, {"label":"K", "x":8.75, "y":4.5}, {"label":"L", "x":9.75, "y":4.5}, {"label":";", "x":10.75, "y":4.5}, {"label":"'", "x":11.75, "y":4.5}, {"label":"return", "x":12.75, "y":4.5, "w":1.75}, {"label":"undo", "x":15, "y":5.167, "h":1.33},
+ {"label":"shift", "x":0, "y":5.5, "w":2.25}, {"label":"Z", "x":2.25, "y":5.5}, {"label":"X", "x":3.25, "y":5.5}, {"label":"C", "x":4.25, "y":5.5}, {"label":"V", "x":5.25, "y":5.5}, {"label":"B", "x":6.25, "y":5.5}, {"label":"N", "x":7.25, "y":5.5}, {"label":"M", "x":8.25, "y":5.5}, {"label":"<", "x":9.25, "y":5.5}, {"label":">", "x":10.25, "y":5.5}, {"label":"?", "x":11.25, "y":5.5}, {"label":"shift", "x":12.25, "y":5.5, "w":2.25},
+ {"label":"style", "x":1.25, "y":6.5, "w":1.5}, {"label":"space", "x":2.75, "y":6.5, "w":9}, {"label":"insert", "x":11.75, "y":6.5, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/videowriter/keymaps/default/keymap.c b/keyboards/handwired/videowriter/keymaps/default/keymap.c
new file mode 100644
index 0000000000..527ee6fffc
--- /dev/null
+++ b/keyboards/handwired/videowriter/keymaps/default/keymap.c
@@ -0,0 +1,107 @@
+/* Copyright 2019 DmNosachev
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+// Example of custom keycodes used by macros in process_record_user
+/*
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * ,---------------------------------------------------------------------------------------.
+ * | ,----------------. ,-----------------------. ,--------------. | up | |
+ * | |vol- |vol+| mute| | prev| play| stop| next| |prsc|scrlk|ins| |left|down|right|
+ * |---------------------------------------------------------------------------------------|
+ * | ~`| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSp| fn1 |
+ * |---------------------------------------------------------------------------------------|
+ * |Tab/fn1| Q | W | E | R | T | Y | U | I | O | P | [ | ] | | menu|
+ * |---------------------------------------------------------------------------------------|
+ * |Ctrl | A | S | D | F | G | H | J | K | L | ; | " | enter ||\ctrl|
+ * |---------------------------------------------------------------------------------------'
+ * | Shift | Z | X | C | V | B | N | M | < | > | ? | Shift |
+ * `---------------------------------------------------------------------------------'
+ * | Alt | Space | Caps |
+ * `------------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT(
+ KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_PSCR, KC_SLCK, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ 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_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_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, RCTL_T(KC_BSLS),
+ 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_LGUI, KC_SPC, KC_RALT),
+/*
+ *
+ * ,---------------------------------------------------------------------------------------.
+ * | ,----------------. ,-----------------------. ,--------------. |pgup| |
+ * | | | | | | | | |sect| | |reset|pause| |home|pgdn| end |
+ * |---------------------------------------------------------------------------------------|
+ * |Esc| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | del | |
+ * |---------------------------------------------------------------------------------------|
+ * | | mlb | mup | mrb | ms+ | | | | up | | | | | | gui |
+ * |---------------------------------------------------------------------------------------|
+ * | | ml | mdn | mr | ms- | | | left| down|right| | | | |
+ * |---------------------------------------------------------------------------------------'
+ * | | | | | | | | | | | | |
+ * `---------------------------------------------------------------------------------'
+ * | | | |
+ * `------------------------------------------------------------------'
+ */
+ [_FN1] = 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_DEL, KC_HOME,
+ _______, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
+ _______, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______
+ )
+};
+
+/* macros template (example)
+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/\n");
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+*/
+
diff --git a/keyboards/handwired/videowriter/keymaps/default/readme.md b/keyboards/handwired/videowriter/keymaps/default/readme.md
new file mode 100644
index 0000000000..05b0f039f9
--- /dev/null
+++ b/keyboards/handwired/videowriter/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for videowriter
diff --git a/keyboards/handwired/videowriter/keymaps/oleg/config.h b/keyboards/handwired/videowriter/keymaps/oleg/config.h
new file mode 100644
index 0000000000..3f2896a669
--- /dev/null
+++ b/keyboards/handwired/videowriter/keymaps/oleg/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2019 DmNosachev
+ *
+ * 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
+
+// Have't added any diodes in this particular convertion project
+#define MATRIX_HAS_GHOST
diff --git a/keyboards/handwired/videowriter/keymaps/oleg/keymap.c b/keyboards/handwired/videowriter/keymaps/oleg/keymap.c
new file mode 100644
index 0000000000..76587f6f73
--- /dev/null
+++ b/keyboards/handwired/videowriter/keymaps/oleg/keymap.c
@@ -0,0 +1,108 @@
+/* Copyright 2019 DmNosachev
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+// Example of custom keycodes used by macros in process_record_user
+/*
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*
+ * ,---------------------------------------------------------------------------------------.
+ * | ,----------------. ,-----------------------. ,--------------. | up | |
+ * | |vol- |vol+| mute| | prev| play| stop| next| |prsc|scrlk|ins| |left|down|right|
+ * |---------------------------------------------------------------------------------------|
+ * | ~`| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSp| fn1 |
+ * |---------------------------------------------------------------------------------------|
+ * |Tab/fn1| Q | W | E | R | T | Y | U | I | O | P | [ | ] | | menu|
+ * |---------------------------------------------------------------------------------------|
+ * |Ctrl | A | S | D | F | G | H | J | K | L | ; | " | enter ||\ctrl|
+ * |---------------------------------------------------------------------------------------'
+ * | Shift | Z | X | C | V | B | N | M | < | > | ? | Shift |
+ * `---------------------------------------------------------------------------------'
+ * | Alt | Space | Caps |
+ * `------------------------------------------------------------------'
+ */
+
+ [_BASE] = LAYOUT(
+ KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MPLY, KC_MSTP, KC_MNXT, KC_PSCR, KC_SLCK, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ 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, MO(_FN1),
+ LT(_FN1, 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_APP,
+ 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, RCTL_T(KC_BSLS),
+ 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_LALT, KC_SPC, KC_CAPS
+ ),
+
+/*
+ * sect = section sign, Unicode 0x00A7
+ * ,---------------------------------------------------------------------------------------.
+ * | ,----------------. ,-----------------------. ,--------------. |pgup| |
+ * | | | | | | | | |sect| | |reset|pause| |home|pgdn| end |
+ * |---------------------------------------------------------------------------------------|
+ * |Esc| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | del | |
+ * |---------------------------------------------------------------------------------------|
+ * | | mlb | mup | mrb | ms+ | | | | up | | | | | | gui |
+ * |---------------------------------------------------------------------------------------|
+ * | | ml | mdn | mr | ms- | | | left| down|right| | | | |
+ * |---------------------------------------------------------------------------------------'
+ * | | | | | | | | | | | | |
+ * `---------------------------------------------------------------------------------'
+ * | | | |
+ * `------------------------------------------------------------------'
+ */
+
+ [_FN1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, UC(0x00A7), _______, RESET, KC_PAUS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
+ _______, 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_BTN1, KC_MS_U, KC_BTN2, KC_WH_U ,_______, _______, _______, KC_UP, _______, _______, _______, _______, KC_RGUI,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______
+ )
+};
+
+/* macros template (example)
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case USECT:
+ if (record->event.pressed) {
+ // when keycode USECT is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode USECT is released
+ }
+ break;
+ }
+ return true;
+}
+*/
+
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_WIN);
+}
+
diff --git a/keyboards/handwired/videowriter/keymaps/oleg/rules.mk b/keyboards/handwired/videowriter/keymaps/oleg/rules.mk
new file mode 100644
index 0000000000..0065be986b
--- /dev/null
+++ b/keyboards/handwired/videowriter/keymaps/oleg/rules.mk
@@ -0,0 +1,4 @@
+# this particular convertion project uses Pro Micro with DFU bootloader instead of Caterina
+BOOTLOADER = lufa-dfu
+
+UNICODE_ENABLE = yes
diff --git a/keyboards/handwired/videowriter/rules.mk b/keyboards/handwired/videowriter/rules.mk
new file mode 100644
index 0000000000..7b326cc319
--- /dev/null
+++ b/keyboards/handwired/videowriter/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+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 = 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/handwired/videowriter/videowriter.c b/keyboards/handwired/videowriter/videowriter.c
new file mode 100644
index 0000000000..5f0f3d7122
--- /dev/null
+++ b/keyboards/handwired/videowriter/videowriter.c
@@ -0,0 +1,17 @@
+/* Copyright 2019 DmNosachev
+ *
+ * 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 "videowriter.h"
diff --git a/keyboards/handwired/videowriter/videowriter.h b/keyboards/handwired/videowriter/videowriter.h
new file mode 100644
index 0000000000..f06a5d50aa
--- /dev/null
+++ b/keyboards/handwired/videowriter/videowriter.h
@@ -0,0 +1,59 @@
+/* Copyright 2019 DmNosachev
+ *
+ * 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 XXX KC_NO
+
+/*
+ * ,---------------------------------------------------------------------------------------.
+ * | ,----------------. ,-----------------------. ,--------------. | up | |
+ * | |menu|print|spell| |page|center|split|find | |copy|move|goto| |left|down|right|
+ * |---------------------------------------------------------------------------------------|
+ * |del| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSp| do |
+ * |---------------------------------------------------------------------------------------|
+ * |Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | | help|
+ * |-----------------------------------------------------------------------------' |-----|
+ * |Caps | A | S | D | F | G | H | J | K | L | ; | " | return | undo|
+ * |---------------------------------------------------------------------------------------|
+ * | Shift | Z | X | C | V | B | N | M | < | > | ? | Shift | |
+ * '---------------------------------------------------------------------------------------'
+ * | style| Space | insert|
+ * '------------------------------------------------------------------'
+ */
+
+#define LAYOUT( \
+ K17, K16, K15, K14, K13, K12, K11, K10, K27, K26, K80, K97, K81, K96, \
+ K25, K24, K23, K22, K21, K20, K37, K36, K35, K34, K33, K32, K31, K30, K95, \
+ K47, K46, K45, K44, K43, K42, K41, K40, K57, K56, K55, K54, K53, K94, \
+ K07, K51, K50, K67, K66, K65, K64, K63, K62, K61, K60, K77, K52, K93, \
+ K06, K76, K75, K74, K73, K72, K71, K70, K87, K86, K85, K92, \
+ K84, K83, K82 \
+) \
+{ \
+ { XXX, XXX, XXX, XXX, XXX, XXX, 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 }, \
+ { K80, K81, K82, K83, K84, K85, K86, K87 }, \
+ { XXX, XXX, K92, K93, K94, K95, K96, K97 } \
+}
diff --git a/keyboards/handwired/wulkan/keymaps/default/keymap.c b/keyboards/handwired/wulkan/keymaps/default/keymap.c
index 5134fb0002..fec8442ee3 100644
--- a/keyboards/handwired/wulkan/keymaps/default/keymap.c
+++ b/keyboards/handwired/wulkan/keymaps/default/keymap.c
@@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/handwired/xealous/keymaps/default/keymap.c b/keyboards/handwired/xealous/keymaps/default/keymap.c
index ca82445a55..41a3f8c805 100644
--- a/keyboards/handwired/xealous/keymaps/default/keymap.c
+++ b/keyboards/handwired/xealous/keymaps/default/keymap.c
@@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
float tone_qwerty[][2] = TONE_QWERTY;
float tone_numpad[][2] = TONE_NUMPAD;
-uint32_t default_layer_state_set_kb(uint32_t state) {
+layer_state_t default_layer_state_set_kb(layer_state_t state) {
if (state == 1UL<<_QWERTY) {
PLAY_SONG(tone_qwerty);
} else if (state == 1UL<<_NUMPAD) {
diff --git a/keyboards/hecomi/keymaps/default/keymap.c b/keyboards/hecomi/keymaps/default/keymap.c
index 505966fbeb..312799f737 100644
--- a/keyboards/hecomi/keymaps/default/keymap.c
+++ b/keyboards/hecomi/keymaps/default/keymap.c
@@ -75,9 +75,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
-uint32_t layer_state_set_user(uint32_t state)
+layer_state_t layer_state_set_user(layer_state_t state)
{
- uint8_t layer=biton32(state);
+ uint8_t layer=get_highest_layer(state);
switch(layer)
{
case DF:
diff --git a/keyboards/heliar/wm1_hotswap/config.h b/keyboards/heliar/wm1_hotswap/config.h
new file mode 100644
index 0000000000..b4579ab1ee
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/config.h
@@ -0,0 +1,49 @@
+/* Copyright 2019 HELIAR MK
+ *
+ * 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 0xD070
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Heliar
+#define PRODUCT wm1 hotswap
+#define DESCRIPTION 69% custom 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 { D5, D3, B3, F0, E6 }
+#define MATRIX_COL_PINS { D2, B0, B1, B2, D1, D0, C7, C6, B6, B5, B4, F4, F5, F6, F1 }
+
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 3 \ No newline at end of file
diff --git a/keyboards/heliar/wm1_hotswap/info.json b/keyboards/heliar/wm1_hotswap/info.json
new file mode 100644
index 0000000000..512d278cf5
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/info.json
@@ -0,0 +1,81 @@
+{
+ "keyboard_name": "wm1",
+ "url": "",
+ "maintainer": "heliar",
+ "width": 18.25,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT": {
+ "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": 9, "y": 0},
+ {"label": "k08", "x": 10, "y": 0},
+ {"label": "k09", "x": 11, "y": 0},
+ {"label": "k0a", "x": 12, "y": 0},
+ {"label": "k0b", "x": 13, "y": 0},
+ {"label": "k0c", "x": 14, "y": 0},
+ {"label": "k0d", "x": 15, "y": 0, "w": 2},
+ {"label": "k0e", "x": 17.25, "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": 8.5, "y": 1},
+ {"label": "k17", "x": 9.5, "y": 1},
+ {"label": "k18", "x": 10.5, "y": 1},
+ {"label": "k19", "x": 11.5, "y": 1},
+ {"label": "k1a", "x": 12.5, "y": 1},
+ {"label": "k1b", "x": 13.5, "y": 1},
+ {"label": "k1c", "x": 14.5, "y": 1},
+ {"label": "k1d", "x": 15.5, "y": 1, "w": 1.5},
+ {"label": "k1e", "x": 17.25, "y": 1},
+ {"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": 8.75, "y": 2},
+ {"label": "k27", "x": 9.75, "y": 2},
+ {"label": "k28", "x": 10.75, "y": 2},
+ {"label": "k29", "x": 11.75, "y": 2},
+ {"label": "k2a", "x": 12.75, "y": 2},
+ {"label": "k2b", "x": 13.75, "y": 2},
+ {"label": "k2d", "x": 14.75, "y": 2, "w": 2.25},
+ {"label": "k2e", "x": 17.25, "y": 2},
+ {"label": "k30", "x": 0, "y": 3, "w": 2.25},
+ {"label": "k31", "x": 2.25, "y": 3},
+ {"label": "k32", "x": 3.25, "y": 3},
+ {"label": "k33", "x": 4.25, "y": 3},
+ {"label": "k34", "x": 5.25, "y": 3},
+ {"label": "k35", "x": 6.25, "y": 3},
+ {"label": "k36", "x": 8.25, "y": 3},
+ {"label": "k37", "x": 9.25, "y": 3},
+ {"label": "k38", "x": 10.25, "y": 3},
+ {"label": "k39", "x": 11.25, "y": 3},
+ {"label": "k3a", "x": 12.25, "y": 3},
+ {"label": "k3b", "x": 13.25, "y": 3},
+ {"label": "k3c", "x": 14.25, "y": 3, "w": 1.75},
+ {"label": "k3d", "x": 16.25, "y": 3.25},
+ {"label": "k40", "x": 0, "y": 4, "w": 1.5},
+ {"label": "k42", "x": 3, "y": 4, "w": 1.5},
+ {"label": "k43", "x": 4.5, "y": 4},
+ {"label": "k44", "x": 5.5, "y": 4, "w": 2},
+ {"label": "k46", "x": 8.25, "y": 4, "w": 2.75},
+ {"label": "k49", "x": 11, "y": 4, "w": 1.5},
+ {"label": "k4b", "x": 13.5, "y": 4, "w": 1.5},
+ {"label": "k4c", "x": 15.25, "y": 4.25},
+ {"label": "k4d", "x": 16.25, "y": 4.25},
+ {"label": "k4e", "x": 17.25, "y": 4.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/heliar/wm1_hotswap/keymaps/default/keymap.c b/keyboards/heliar/wm1_hotswap/keymaps/default/keymap.c
new file mode 100644
index 0000000000..b1cd519ae5
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = 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_ESC,
+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_INS,
+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_DEL,
+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, KC_UP,
+KC_LCTL, KC_LALT,KC_LGUI,KC_SPC, LT(_FN,KC_SPC), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+[_FN] = 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, _______, _______,
+RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/heliar/wm1_hotswap/keymaps/default/readme.md b/keyboards/heliar/wm1_hotswap/keymaps/default/readme.md
new file mode 100644
index 0000000000..d35a2c1e4d
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+# The default layout
+## layer 0 keymap
+![Wm1 Layout Image Layer0](https://i.imgur.com/UWQzasE.png)
+## layer 1 keymap
+![Wm1 Layout Image Layer1](https://i.imgur.com/cHOefMH.png)
+## The keycap size of layout
+![Wm1 Layout Image Layout size](https://i.imgur.com/jL1EDod.png) \ No newline at end of file
diff --git a/keyboards/heliar/wm1_hotswap/readme.md b/keyboards/heliar/wm1_hotswap/readme.md
new file mode 100644
index 0000000000..f6ba7e185f
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/readme.md
@@ -0,0 +1,19 @@
+# Wm1 ergonomic Keyboard alternative hotswap PCB
+### Original Wm1 Keyboard
+![Wm1 keyboard with SA Pulse](https://i.imgur.com/f0zRPTB.png)
+### Pcb front side
+![Wm1 front side of Pcb](https://i.imgur.com/2W2G3V6.jpg)
+### Pcb back side
+![Wm1 back side of Pcb](https://i.imgur.com/nGxVJGI.jpg)
+
+A ergonomic 68 key keyboard's hotswap-type PCB which is made by heliar and this PCB is compatible with the wm1 keyboard is designed by Hoq.
+
+* Keyboard Maintainer: [Heliar](https://github.com/heliarmk)
+* Hardware Supported: Hotswap type
+* Hardware Availability: [Heliar](https://github.com/heliarmk)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make heliar/wm1_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/heliar/wm1_hotswap/rules.mk b/keyboards/heliar/wm1_hotswap/rules.mk
new file mode 100644
index 0000000000..74214d81ac
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+## Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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/heliar/wm1_hotswap/wm1_hotswap.c b/keyboards/heliar/wm1_hotswap/wm1_hotswap.c
new file mode 100644
index 0000000000..08f1469e3d
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/wm1_hotswap.c
@@ -0,0 +1,39 @@
+/* Copyright 2019 HELIAR MK
+ *
+ * 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 "wm1_hotswap.h"
+
+
+void keyboard_pre_init_kb(void)
+{
+ setPinOutput(D7);
+ writePinHigh(D7);
+ setPinOutput(D6);
+ writePinHigh(D6);
+ setPinOutput(D4);
+ writePinHigh(D4);
+}
+
+bool led_update_kb(led_t led_state) {
+
+ if (led_update_user(led_state)){
+ writePin(D7, !led_state.num_lock);
+ writePin(D6, !led_state.caps_lock);
+ writePin(D4, !led_state.scroll_lock);
+ }
+
+ return true;
+}
diff --git a/keyboards/heliar/wm1_hotswap/wm1_hotswap.h b/keyboards/heliar/wm1_hotswap/wm1_hotswap.h
new file mode 100644
index 0000000000..295fc8097c
--- /dev/null
+++ b/keyboards/heliar/wm1_hotswap/wm1_hotswap.h
@@ -0,0 +1,42 @@
+/* Copyright 2019 HELIAR MK
+ *
+ * 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, 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, K3B, K3C, K3D, \
+ K40, K42, K43, K44, K46, K49, 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, KC_NO, K2D, K2E}, \
+ {K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO},\
+ {K40, KC_NO, K42, K43, K44, KC_NO,K46, KC_NO, KC_NO, K49, KC_NO, K4B, K4C, K4D, K4E} \
+}
diff --git a/keyboards/helix/pico/keymaps/default/keymap.c b/keyboards/helix/pico/keymaps/default/keymap.c
index 8d1de894fc..7cc3cb586e 100644
--- a/keyboards/helix/pico/keymaps/default/keymap.c
+++ b/keyboards/helix/pico/keymaps/default/keymap.c
@@ -146,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Adjust (Lower + Raise)
* ,-----------------------------------------. ,-----------------------------------------.
- * | | Reset| | | | | | | | | | | |
+ * | | Reset|RGBRST| | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | |Aud on|Audoff|MU TOG|MU MOD| Mac | | Win |Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
@@ -156,7 +156,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT( \
- _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RESET, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, AU_ON, AU_OFF, MU_TOG, MU_MOD, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, CK_TOGG, CK_RST, CK_UP, CK_DOWN, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
diff --git a/keyboards/helix/pico/rules.mk b/keyboards/helix/pico/rules.mk
index e916f25f45..d3ad20ccad 100644
--- a/keyboards/helix/pico/rules.mk
+++ b/keyboards/helix/pico/rules.mk
@@ -5,6 +5,11 @@ SRC += local_drivers/serial.c
SRC += local_drivers/ssd1306.c
KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers
+# A workaround until #7089 is merged.
+# serial.c must not be compiled with the -lto option.
+# The current LIB_SRC has a side effect with the -fno-lto option, so use it.
+LIB_SRC += local_drivers/serial.c
+
CUSTOM_MATRIX = yes
SRC += pico/matrix.c
diff --git a/keyboards/helix/rev2/keymaps/default/keymap.c b/keyboards/helix/rev2/keymaps/default/keymap.c
index 4b8b26ecd8..78e3424fd5 100644
--- a/keyboards/helix/rev2/keymaps/default/keymap.c
+++ b/keyboards/helix/rev2/keymaps/default/keymap.c
@@ -126,7 +126,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | ( | ) | F12 | | | Home | End | |
+ * | CAPS | F7 | F8 | F9 | F10 | F11 | ( | ) | F12 | | | Home | End | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
@@ -135,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
_______, 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_LPRN, KC_RPRN, KC_F12, _______, _______, KC_HOME, KC_END, _______, \
+ KC_CAPS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_LPRN, KC_RPRN, KC_F12, _______, _______, KC_HOME, KC_END, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
@@ -147,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | | F12 | | |PageDn|PageUp| |
+ * | CAPS | F7 | F8 | F9 | F10 | F11 | | | F12 | | |PageDn|PageUp| |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
@@ -156,7 +156,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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_PGDN, KC_PGUP, _______, \
+ KC_CAPS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, KC_F12, _______, _______, KC_PGDN, KC_PGUP, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
@@ -278,7 +278,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Adjust (Lower + Raise)
* ,-----------------------------------------. ,-----------------------------------------.
- * | | Reset| | | | | | | | | | | Del |
+ * | | Reset|RGBRST| | | | | | | | | | Del |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | |Aud on|Audoff| Mac | | Win |Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
@@ -288,7 +288,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT( \
- _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, RESET, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
@@ -526,35 +526,37 @@ void matrix_update(struct CharacterMatrix *dest,
static void render_logo(struct CharacterMatrix *matrix) {
- static char logo[]={
+ static const char helix_logo[] PROGMEM ={
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};
- matrix_write(matrix, logo);
+ matrix_write_P(matrix, helix_logo);
//matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
}
-
-
-void render_status(struct CharacterMatrix *matrix) {
-
- // Render to mode icon
- static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
- if(keymap_config.swap_lalt_lgui==false){
- matrix_write(matrix, logo[0][0]);
- matrix_write_P(matrix, PSTR("\n"));
- matrix_write(matrix, logo[0][1]);
- }else{
- matrix_write(matrix, logo[1][0]);
- matrix_write_P(matrix, PSTR("\n"));
- matrix_write(matrix, logo[1][1]);
+static void render_rgbled_status(bool full, struct CharacterMatrix *matrix) {
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_ANIMATIONS)
+ char buf[30];
+ if(rgblight_config.enable) {
+ if (full) {
+ snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
+ rgblight_config.mode,
+ rgblight_config.hue/RGBLIGHT_HUE_STEP,
+ rgblight_config.sat/RGBLIGHT_SAT_STEP,
+ rgblight_config.val/RGBLIGHT_VAL_STEP);
+ } else {
+ snprintf(buf, sizeof(buf), "[%2d] ",rgblight_config.mode);
+ }
+ matrix_write(matrix, buf);
}
+#endif
+}
+static void render_layer_status(struct CharacterMatrix *matrix) {
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
- char buf[40];
- snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
- matrix_write_P(matrix, PSTR("\nLayer: "));
+ char buf[10];
+ matrix_write_P(matrix, PSTR("Layer: "));
switch (layer_state) {
case L_BASE:
matrix_write_P(matrix, PSTR("Default"));
@@ -570,16 +572,39 @@ void render_status(struct CharacterMatrix *matrix) {
matrix_write_P(matrix, PSTR("Adjust"));
break;
default:
+ matrix_write_P(matrix, PSTR("Undef-"));
+ snprintf(buf,sizeof(buf), "%ld", layer_state);
matrix_write(matrix, buf);
}
+}
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write_P(matrix, os_logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write_P(matrix, os_logo[0][1]);
+ }else{
+ matrix_write_P(matrix, os_logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write_P(matrix, os_logo[1][1]);
+ }
+
+ matrix_write_P(matrix, PSTR(" "));
+ render_layer_status(matrix);
+ matrix_write_P(matrix, PSTR("\n"));
// Host Keyboard LED Status
- char led[40];
- snprintf(led, sizeof(led), "\n%s %s %s",
- (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
- (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
- (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
- matrix_write(matrix, led);
+ matrix_write_P(matrix, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ?
+ PSTR("NUMLOCK") : PSTR(" "));
+ matrix_write_P(matrix, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ?
+ PSTR("CAPS") : PSTR(" "));
+ matrix_write_P(matrix, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ?
+ PSTR("SCLK") : PSTR(" "));
+ matrix_write_P(matrix, PSTR("\n"));
+ render_rgbled_status(true, matrix);
}
@@ -597,6 +622,8 @@ void iota_gfx_task_user(void) {
render_status(&matrix);
}else{
render_logo(&matrix);
+ render_rgbled_status(false, &matrix);
+ render_layer_status(&matrix);
}
matrix_update(&display, &matrix);
}
diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c
index 322959dbbb..70a6cb0a5e 100644
--- a/keyboards/helix/rev2/matrix.c
+++ b/keyboards/helix/rev2/matrix.c
@@ -95,9 +95,8 @@ uint8_t matrix_cols(void)
void matrix_init(void)
{
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
+ split_keyboard_setup();
+
// initialize row and col
unselect_rows();
init_cols();
diff --git a/keyboards/helix/rev2/rules.mk b/keyboards/helix/rev2/rules.mk
index 4db8f7da94..7357d568c6 100644
--- a/keyboards/helix/rev2/rules.mk
+++ b/keyboards/helix/rev2/rules.mk
@@ -5,6 +5,11 @@ SRC += local_drivers/serial.c
SRC += local_drivers/ssd1306.c
KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers
+# A workaround until #7089 is merged.
+# serial.c must not be compiled with the -lto option.
+# The current LIB_SRC has a side effect with the -fno-lto option, so use it.
+LIB_SRC += local_drivers/serial.c
+
CUSTOM_MATRIX = yes
SRC += rev2/matrix.c
diff --git a/keyboards/helix/rev2/split_util.c b/keyboards/helix/rev2/split_util.c
index e1ff8b4379..89df43e277 100644
--- a/keyboards/helix/rev2/split_util.c
+++ b/keyboards/helix/rev2/split_util.c
@@ -7,6 +7,7 @@
#include "split_util.h"
#include "matrix.h"
#include "keyboard.h"
+#include "wait.h"
#ifdef USE_MATRIX_I2C
# include "i2c.h"
@@ -14,19 +15,64 @@
# include "split_scomm.h"
#endif
+#ifdef EE_HANDS
+# include "eeconfig.h"
+#endif
+
+#ifndef SPLIT_USB_TIMEOUT
+ #define SPLIT_USB_TIMEOUT 2500
+#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
+bool waitForUsb(void) {
+ for (uint8_t i = 0; i < (SPLIT_USB_TIMEOUT / 100); i++) {
+ // This will return true of a USB connection has been established
+ if (UDADDR & _BV(ADDEN)) {
+ return true;
+ }
+ wait_ms(100);
+ }
+
+ // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow
+ (USBCON &= ~(_BV(USBE) | _BV(OTGPADE)));
+
+ return false;
+}
+
+
+__attribute__((weak)) bool is_keyboard_left(void) {
+#if defined(SPLIT_HAND_PIN)
+ // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
+ setPinInput(SPLIT_HAND_PIN);
+ return readPin(SPLIT_HAND_PIN);
+#elif defined(EE_HANDS)
+ return eeconfig_read_handedness();
+#elif defined(MASTER_RIGHT)
+ return !has_usb();
+#endif
+
+ return has_usb();
+}
+
+__attribute__((weak)) bool has_usb(void) {
+ static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
+
+ // only check once, as this is called often
+ if (usbstate == UNKNOWN) {
+#if defined(SPLIT_USB_DETECT)
+ usbstate = waitForUsb() ? MASTER : SLAVE;
+#elif defined(__AVR__)
+ USBCON |= (1 << OTGPADE); // enables VBUS pad
+ wait_us(5);
+
+ usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS
+#else
+ usbstate = MASTER;
+#endif
+ }
+
+ return (usbstate == MASTER);
}
static void keyboard_master_setup(void) {
@@ -47,14 +93,8 @@ static void keyboard_slave_setup(void) {
#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();
+ isLeftHand = is_keyboard_left();
if (has_usb()) {
keyboard_master_setup();
@@ -64,7 +104,3 @@ void split_keyboard_setup(void) {
sei();
}
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-}
diff --git a/keyboards/hhkb/keymaps/xyverz/keymap.c b/keyboards/hhkb/keymaps/xyverz/keymap.c
new file mode 100644
index 0000000000..eebaede979
--- /dev/null
+++ b/keyboards/hhkb/keymaps/xyverz/keymap.c
@@ -0,0 +1,137 @@
+/*
+Xyverz's HHKB layout
+
+Rev 0.1, initial commit.
+
+This is my initial keymap for the HHKB with Hasu's alternate controller.
+The default layer is Dvorak, with Qwerty and Colemak being optional.
+Will probably add to it later, but for now I'm going to enjoy this as it is.
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QW,
+ _DV,
+ _CM,
+ _FL,
+};
+
+enum planck_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK };
+
+#define FN_TAB LT(_FL, KC_TAB)
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /*
+ * _QW: Qwerty Layer
+ * ,-----------------------------------------------------------.
+ * |ESC | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |Del|
+ * |-----------------------------------------------------------|
+ * |Fn/Tb| Q| W| E| R| T| Y| U| I| O| P| [| ]|BkSpc|
+ * |-----------------------------------------------------------|
+ * |Control| A| S| D| F| G| H| J| K| L| ;| '| Return|
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |Fn|
+ * |-----------------------------------------------------------|
+ * | |Alt |Gui | Space |Gui |Alt | |
+ * `-----------------------------------------------------------'
+ */
+ /* Layer 0: Qwerty */
+ [_QW] = 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_BSLS, KC_DEL ,
+ FN_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(_FL),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
+ ),
+
+ /*
+ * _DV: Dvorak Layer
+ * ,-----------------------------------------------------------.
+ * |ESC | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \ |Del|
+ * |-----------------------------------------------------------|
+ * |Fn/Tb| '| ,| .| P| Y| F| G| C| R| L| /| =|BkSpc|
+ * |-----------------------------------------------------------|
+ * |Control| A| O| E| U| I| D| H| T| N| S| -| Return|
+ * |-----------------------------------------------------------|
+ * |Shift | ;| Q| J| K| X| B| M| W| V| Z| Shift |Fn|
+ * |-----------------------------------------------------------|
+ * | |Alt |Gui | Space |Gui |Alt | |
+ * `-----------------------------------------------------------'
+ */
+ /* Layer 1: Dvorak */
+ [_DV] = LAYOUT(
+ 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_BSLS, KC_DEL ,
+ FN_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_LCTL, 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_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(_FL),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
+ ),
+
+ /*
+ * _CM: Colemak Layer
+ * ,-----------------------------------------------------------.
+ * |ESC | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |Del|
+ * |-----------------------------------------------------------|
+ * |Fn/Tb| Q| W| F| P| G| J| L| U| Y| ;| [| ]|BkSpc|
+ * |-----------------------------------------------------------|
+ * |Control| A| R| S| T| D| H| N| E| I| O| '| Return|
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| K| M| ,| .| /| Shift |Fn|
+ * |-----------------------------------------------------------|
+ * | |Alt |Gui | Space |Gui |Alt | |
+ * `-----------------------------------------------------------'
+ */
+ /* Layer 2: Colemak */
+ [_CM] = 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_BSLS, KC_DEL ,
+ FN_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_LCTL, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
+ ),
+
+ /*
+ * _FL: Function Layer
+ * ,-----------------------------------------------------------.
+ * |Grv |F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |RST|
+ * |-----------------------------------------------------------|
+ * | | |_QW|_DV|_CM| | |PgU| Up|PgD|PSc|SLk|Pau| |
+ * |-----------------------------------------------------------|
+ * | | |MPr|MPl|MNx| |Hom| Lt| Dn| Rt| | | |
+ * |-----------------------------------------------------------|
+ * |CAPS | |Mut|VlD|VlU| |End| | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | Ins | | | |
+ * `-----------------------------------------------------------'
+ */
+ /* Layer 3: Functions */
+ [_FL] = 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, _______, RESET ,
+ _______, _______, QWERTY, DVORAK, COLEMAK, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+ KC_CAPS, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_END, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+
+};
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case DVORAK:
+ set_single_persistent_default_layer(_DV);
+ return false;
+ case QWERTY:
+ set_single_persistent_default_layer(_QW);
+ return false;
+ case COLEMAK:
+ set_single_persistent_default_layer(_CM);
+ return false;
+ }
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/hineybush/h75_singa/config.h b/keyboards/hineybush/h75_singa/config.h
new file mode 100644
index 0000000000..82222e29c3
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/config.h
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 hineybush
+
+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 0x04D8
+#define PRODUCT_ID 0xEC9A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Singa Keyboards
+#define PRODUCT h75_singa
+#define DESCRIPTION Singa
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 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
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { B0, B1, D0, D1, D2, D6 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, B2, D4, D5, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN B3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 22
+ #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+ #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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/hineybush/h75_singa/h75_singa.c b/keyboards/hineybush/h75_singa/h75_singa.c
new file mode 100644
index 0000000000..290f6023e1
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/h75_singa.c
@@ -0,0 +1,26 @@
+/* Copyright 2019 hineybush
+ *
+ * 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 "h75_singa.h"
+
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv(0, 255, 128); // Set default HSV - red hue, full saturation, medium brightness
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default
+
+ eeconfig_update_kb(0);
+ eeconfig_init_user();
+}
diff --git a/keyboards/hineybush/h75_singa/h75_singa.h b/keyboards/hineybush/h75_singa/h75_singa.h
new file mode 100644
index 0000000000..7e8e63d183
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/h75_singa.h
@@ -0,0 +1,61 @@
+/* Copyright 2019 hineybush
+ *
+ * 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 is 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_all( \
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k100, k101, 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, k213, k214, k215, \
+ k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315, \
+ k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k414, k415, \
+ k500, k501, k502, k504, k506, k508, k510, k511, k513, k514, k515 \
+) \
+{ \
+ {k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015}, \
+ {k100, k101, 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, k214, k215}, \
+ {k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315}, \
+ {k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, KC_NO, k414, k415}, \
+ {k500, k501, k502, KC_NO, k504, KC_NO, k506, KC_NO, k508, KC_NO, k510, k511, KC_NO, k513, k514, k515} \
+}
+
+#define LAYOUT_wkl_std( \
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k114, k115, \
+ k200, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, \
+ k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k314, k315, \
+ k400, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k414, k415, \
+ k500, k501, k506, k510, k511, k513, k514, k515 \
+) \
+{ \
+ {k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015}, \
+ {k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, KC_NO, k114, k115}, \
+ {k200, KC_NO, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215}, \
+ {k300, KC_NO, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO, k314, k315}, \
+ {k400, KC_NO, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, KC_NO, k414, k415}, \
+ {k500, k501, KC_NO, KC_NO, KC_NO, KC_NO, k506, KC_NO, KC_NO, KC_NO, k510, k511, KC_NO, k513, k514, k515} \
+}
diff --git a/keyboards/hineybush/h75_singa/info.json b/keyboards/hineybush/h75_singa/info.json
new file mode 100644
index 0000000000..8b886289c3
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "h75_singa",
+ "url": "",
+ "maintainer": "hineybush",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_all": {
+ "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":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Delete", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1}, {"x":14, "y":1}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":1.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":2.75}, {"x":6.5, "y":5, "w":1.25}, {"x":7.75, "y":5, "w":2.25}, {"label":"Alt", "x":10, "y":5, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
+ },
+ "LAYOUT_wkl_std": {
+ "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":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Delete", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":1.5, "y":5, "w":1.5}, {"x":3, "y":5, "w":6.5}, {"label":"Alt", "x":9.5, "y":5, "w":1.5}, {"label":"Ctrl", "x":11, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
+ }
+ }
+}
diff --git a/keyboards/hineybush/h75_singa/keymaps/default/keymap.c b/keyboards/hineybush/h75_singa/keymaps/default/keymap.c
new file mode 100644
index 0000000000..85f59d0fb2
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2019 hineybush
+ *
+ * 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] = {
+ /* k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k100, k101, 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, k213, k214, k215, \
+ k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315, \
+ k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k414, k415, \
+ k500, k501, k502, k504, k506, k508, k510, k511, k513, k514, k515 \ */
+ [0] = 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_PAUS, 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_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_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,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,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RGB_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,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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/hineybush/h75_singa/keymaps/default/readme.md b/keyboards/hineybush/h75_singa/keymaps/default/readme.md
new file mode 100644
index 0000000000..cf2ef2d818
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for h75_singa
diff --git a/keyboards/hineybush/h75_singa/keymaps/via/keymap.c b/keyboards/hineybush/h75_singa/keymaps/via/keymap.c
new file mode 100644
index 0000000000..37efc344c0
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/via/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2019 hineybush
+ *
+ * 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] = {
+ /* k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k100, k101, 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, k213, k214, k215, \
+ k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315, \
+ k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k414, k415, \
+ k500, k501, k502, k504, k506, k508, k510, k511, k513, k514, k515 \ */
+ [0] = 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_PAUS, 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_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_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,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,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RGB_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,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
+ ),
+
+ [2] = LAYOUT_all(
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_all(
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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/hineybush/h75_singa/keymaps/via/readme.md b/keyboards/hineybush/h75_singa/keymaps/via/readme.md
new file mode 100644
index 0000000000..4c3cfd8009
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The default VIA keymap for h75_singa
diff --git a/keyboards/hineybush/h75_singa/keymaps/via/rules.mk b/keyboards/hineybush/h75_singa/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/h75_singa/keymaps/wkl_std/keymap.c b/keyboards/hineybush/h75_singa/keymaps/wkl_std/keymap.c
new file mode 100644
index 0000000000..156f99225d
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/wkl_std/keymap.c
@@ -0,0 +1,46 @@
+/* Copyright 2019 hineybush
+ *
+ * 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] = {
+ /* k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k114, k115, \
+ k200, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, \
+ k300, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k314, k315, \
+ k400, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k414, k415, \
+ k500, k501, k506, k510, k511, k513, k514, k515 \*/
+ [0] = LAYOUT_wkl_std(
+ 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_PAUS, 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_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_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_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_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+
+ ),
+
+ [1] = LAYOUT_wkl_std(
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,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,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RGB_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,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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/hineybush/h75_singa/keymaps/wkl_std/readme.md b/keyboards/hineybush/h75_singa/keymaps/wkl_std/readme.md
new file mode 100644
index 0000000000..cbffa642ce
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/keymaps/wkl_std/readme.md
@@ -0,0 +1 @@
+# A basic winkeyless keymap with full-sized backspace for h75_singa
diff --git a/keyboards/idb_60/readme.md b/keyboards/hineybush/h75_singa/readme.md
index e6ed6822b6..815785834c 100644
--- a/keyboards/idb_60/readme.md
+++ b/keyboards/hineybush/h75_singa/readme.md
@@ -1,17 +1,15 @@
-# idb 60 PCB
+# h75_singa
-Firmware for the idb 60 PCB
+![h75_singa](imgur.com image replace me!) - TBD
-Keyboard Maintainer: [/u/omgitspngu](https://github.com/itspngu)
-Hardware Supported: idb 60 PCB
-Hardware Availability: [/u/omgitspngu](https://www.reddit.com/user/omgitspngu/)
+New 75% PCB for Singa Keyboards
-Make example for this keyboard (after setting up your build environment):
-
- make idb_60:default
+* Keyboard Maintainer: [hineybush](https://github.com/hineybush)
+* Hardware Supported: Singa w/ USB Type-C support (exact version TBA)
+* Hardware Availability: TBA
-Or to make and flash:
+Make example for this keyboard (after setting up your build environment):
- make idb_60:default:dfu
+ make h75_singa: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/hineybush/h75_singa/rules.mk b/keyboards/hineybush/h75_singa/rules.mk
new file mode 100644
index 0000000000..92ad960cb9
--- /dev/null
+++ b/keyboards/hineybush/h75_singa/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/hineybush/h87a/config.h b/keyboards/hineybush/h87a/config.h
index 5a1e6d366c..f9d8f9766e 100644
--- a/keyboards/hineybush/h87a/config.h
+++ b/keyboards/hineybush/h87a/config.h
@@ -72,5 +72,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 200
#define RGBLIGHT_SLEEP // RGB will turn off when PC is put to sleep
#endif
diff --git a/keyboards/hineybush/h87a/h87a.c b/keyboards/hineybush/h87a/h87a.c
index 2ce469b692..c3bb890806 100644
--- a/keyboards/hineybush/h87a/h87a.c
+++ b/keyboards/hineybush/h87a/h87a.c
@@ -42,4 +42,11 @@ void led_set_kb(uint8_t usb_led) {
led_set_user(usb_led);
}
-
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv(0, 255, 128); // Set default HSV - red hue, full saturation, medium brightness
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default
+
+ eeconfig_update_kb(0);
+ eeconfig_init_user();
+}
diff --git a/keyboards/hineybush/h87a/keymaps/default/keymap.c b/keyboards/hineybush/h87a/keymaps/default/keymap.c
index 974a7e35bc..8aa116c93e 100644
--- a/keyboards/hineybush/h87a/keymaps/default/keymap.c
+++ b/keyboards/hineybush/h87a/keymaps/default/keymap.c
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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_TRNS, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_TOGG, BL_DEC, BL_INC,
diff --git a/keyboards/hineybush/h87a/keymaps/via/keymap.c b/keyboards/hineybush/h87a/keymaps/via/keymap.c
new file mode 100644
index 0000000000..e4be1cfc9b
--- /dev/null
+++ b/keyboards/hineybush/h87a/keymaps/via/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2020 Josh Hinnebusch
+
+ * 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_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_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_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_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_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_TOGG, BL_DEC, BL_INC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_TOGG, BL_DEC, BL_INC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_TOGG, BL_DEC, BL_INC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 led_init_ports(void) {
+ setPinOutput(D5);
+ setPinOutput(E6);
+}
+
+bool led_update_user(led_t led_state) {
+ writePin(D5, !led_state.caps_lock);
+ writePin(E6, !led_state.scroll_lock);
+ return true;
+}
diff --git a/keyboards/hineybush/h87a/keymaps/via/readme.md b/keyboards/hineybush/h87a/keymaps/via/readme.md
new file mode 100644
index 0000000000..f81b69ee83
--- /dev/null
+++ b/keyboards/hineybush/h87a/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The default VIA keymap for h87a
diff --git a/keyboards/hineybush/h87a/keymaps/via/rules.mk b/keyboards/hineybush/h87a/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/hineybush/h87a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/h87a/rules.mk b/keyboards/hineybush/h87a/rules.mk
index 653ec1f9a2..2c5bc96c6f 100644
--- a/keyboards/hineybush/h87a/rules.mk
+++ b/keyboards/hineybush/h87a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # 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 = no # Console for debug(+400)
diff --git a/keyboards/hineybush/h88/keymaps/default/keymap.c b/keyboards/hineybush/h88/keymaps/default/keymap.c
index 17035b4725..2e0251ee2e 100644
--- a/keyboards/hineybush/h88/keymaps/default/keymap.c
+++ b/keyboards/hineybush/h88/keymaps/default/keymap.c
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_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_TRNS, KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC,
diff --git a/keyboards/hineybush/h88/keymaps/via/keymap.c b/keyboards/hineybush/h88/keymaps/via/keymap.c
new file mode 100644
index 0000000000..0e6bd37c1b
--- /dev/null
+++ b/keyboards/hineybush/h88/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+/* Copyright 2020 Josh Hinnebusch
+
+ * 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_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_0, 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_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_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_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, BL_TOGG, BL_DEC, BL_INC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/hineybush/h88/keymaps/via/readme.md b/keyboards/hineybush/h88/keymaps/via/readme.md
new file mode 100644
index 0000000000..086686e7d6
--- /dev/null
+++ b/keyboards/hineybush/h88/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The default VIA keymap for h88a
diff --git a/keyboards/hineybush/h88/keymaps/via/rules.mk b/keyboards/hineybush/h88/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/hineybush/h88/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/h88/rules.mk b/keyboards/hineybush/h88/rules.mk
index 62b2d7b8b3..f395375460 100644
--- a/keyboards/hineybush/h88/rules.mk
+++ b/keyboards/hineybush/h88/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
diff --git a/keyboards/hineybush/hbcp/config.h b/keyboards/hineybush/hbcp/config.h
index 5bf426df7e..8a5b96ec36 100644
--- a/keyboards/hineybush/hbcp/config.h
+++ b/keyboards/hineybush/hbcp/config.h
@@ -58,26 +58,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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_LIMIT_VAL 200 /* 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
-// /*== customize breathing effect ==*/
-// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
-// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
-// /*==== use exp() and sin() ====*/
-// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
-// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
@@ -98,149 +83,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// #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 */
-/* defined by default; to change, uncomment and set to the combination you want */
-// #define IS_COMMAND() (get_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_HELP H
-//#define MAGIC_KEY_HELP_ALT 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 0
-//#define MAGIC_KEY_LAYER0_ALT GRAVE
-//#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 B
-//#define MAGIC_KEY_BOOTLOADER_ALT ESC
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
-//#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/hineybush/hbcp/hbcp.c b/keyboards/hineybush/hbcp/hbcp.c
index cd5320f6e5..e2513023e0 100644
--- a/keyboards/hineybush/hbcp/hbcp.c
+++ b/keyboards/hineybush/hbcp/hbcp.c
@@ -67,6 +67,15 @@ void led_set_kb(uint8_t usb_led) {
led_set_user(usb_led);
}
+void eeconfig_init_kb(void) { // EEPROM is getting reset!
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv(0, 255, 128); // Set default HSV - red hue, full saturation, medium brightness
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default
+
+ eeconfig_update_kb(0);
+ eeconfig_init_user();
+}
+
#ifdef RGBLIGHT_ENABLE
__attribute__ ((weak))
diff --git a/keyboards/hineybush/hbcp/keymaps/via/keymap.c b/keyboards/hineybush/hbcp/keymaps/via/keymap.c
new file mode 100644
index 0000000000..8a260cee8f
--- /dev/null
+++ b/keyboards/hineybush/hbcp/keymaps/via/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2019 hineybush
+ *
+ * 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_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_DEL, KC_INS, 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_GRV, KC_BSPC, 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, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ 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_LSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+
+ ),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK,KC_HOME, KC_END,
+ KC_TRNS, KC_TRNS, KC_TRNS,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_HUD, RGB_HUI,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, RGB_SAD, RGB_SAI,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, 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_VAD, RGB_VAI,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, RGB_TOG, RGB_MOD,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT, KC_TRNS,KC_TRNS, KC_TRNS
+
+ ),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,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_VAI,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,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_VAI,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS, 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/hineybush/hbcp/keymaps/via/readme.md b/keyboards/hineybush/hbcp/keymaps/via/readme.md
new file mode 100644
index 0000000000..be77ea7ff6
--- /dev/null
+++ b/keyboards/hineybush/hbcp/keymaps/via/readme.md
@@ -0,0 +1,2 @@
+# The default VIA keymap for hbcp
+
diff --git a/keyboards/hineybush/hbcp/keymaps/via/rules.mk b/keyboards/hineybush/hbcp/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/hineybush/hbcp/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/hbcp/rules.mk b/keyboards/hineybush/hbcp/rules.mk
index fa31c9e001..869fa029c9 100644
--- a/keyboards/hineybush/hbcp/rules.mk
+++ b/keyboards/hineybush/hbcp/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
diff --git a/keyboards/hineybush/physix/config.h b/keyboards/hineybush/physix/config.h
new file mode 100644
index 0000000000..cc6e185321
--- /dev/null
+++ b/keyboards/hineybush/physix/config.h
@@ -0,0 +1,252 @@
+/*
+Copyright 2019 hineybush
+
+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 0x04D8
+#define PRODUCT_ID 0xEC81
+#define DEVICE_VER 0x0001
+#define MANUFACTURER LZ
+#define PRODUCT PhysiX
+#define DESCRIPTION A custom ergonomic keyboard by Life Zone
+
+/* 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 { D0, D1, D2, C7, C6 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, B3, B2, B1, B0, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS { B6 }
+
+/* COL2ROW, ROW2COL*/
+#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 E6
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 26
+ #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+ #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/hineybush/physix/info.json b/keyboards/hineybush/physix/info.json
new file mode 100644
index 0000000000..089fcdb26b
--- /dev/null
+++ b/keyboards/hineybush/physix/info.json
@@ -0,0 +1,21 @@
+{
+ "keyboard_name": "physix",
+ "url": "",
+ "maintainer": "hineybush",
+ "width": 20.25,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"Delete", "x":18.75, "y":0}, {"label":"Esc", "x":0.75, "y":0.25}, {"label":"!", "x":1.75, "y":0.25}, {"label":"@", "x":2.75, "y":0.25}, {"label":"#", "x":4, "y":0.25}, {"label":"$", "x":5, "y":0.25}, {"label":"%", "x":6, "y":0.25}, {"label":"^", "x":7, "y":0.25}, {"label":"&", "x":10, "y":0.25}, {"label":"*", "x":11, "y":0.25}, {"label":"(", "x":12, "y":0.25}, {"label":")", "x":13, "y":0.25}, {"label":"_", "x":14.25, "y":0.25}, {"label":"+", "x":15.25, "y":0.25}, {"label":"~", "x":16.25, "y":0.25}, {"label":"Back", "x":17.25, "y":0.25}, {"label":"PgUp", "x":19, "y":1}, {"label":"Tab", "x":0.5, "y":1.25, "w":1.5}, {"label":"Q", "x":2, "y":1.25}, {"label":"W", "x":3.5, "y":1.25}, {"label":"E", "x":4.5, "y":1.25}, {"label":"R", "x":5.5, "y":1.25}, {"label":"T", "x":6.5, "y":1.25}, {"label":"Y", "x":9.5, "y":1.25}, {"label":"U", "x":10.5, "y":1.25}, {"label":"I", "x":11.5, "y":1.25}, {"label":"O", "x":12.5, "y":1.25}, {"label":"P", "x":14, "y":1.25}, {"label":"{", "x":15, "y":1.25}, {"label":"}", "x":16, "y":1.25}, {"label":"|", "x":17, "y":1.25, "w":1.5}, {"label":"PgDn", "x":19.25, "y":2}, {"label":"Caps Lock", "x":0.25, "y":2.25, "w":1.75}, {"label":"A", "x":2, "y":2.25}, {"label":"S", "x":3.75, "y":2.25}, {"label":"D", "x":4.75, "y":2.25}, {"label":"F", "x":5.75, "y":2.25}, {"label":"G", "x":6.75, "y":2.25}, {"label":"H", "x":9.75, "y":2.25}, {"label":"J", "x":10.75, "y":2.25}, {"label":"K", "x":11.75, "y":2.25}, {"label":"L", "x":12.75, "y":2.25}, {"label":":", "x":14.5, "y":2.25}, {"label":"\"", "x":15.5, "y":2.25}, {"label":"Enter", "x":16.5, "y":2.25, "w":2.25}, {"label":"Shift", "x":0, "y":3.25, "w":2.25}, {"label":"Z", "x":2.25, "y":3.25}, {"label":"X", "x":4.25, "y":3.25}, {"label":"C", "x":5.25, "y":3.25}, {"label":"V", "x":6.25, "y":3.25}, {"label":"B", "x":7.25, "y":3.25}, {"label":"B", "x":9.25, "y":3.25}, {"label":"N", "x":10.25, "y":3.25}, {"label":"M", "x":11.25, "y":3.25}, {"label":"<", "x":12.25, "y":3.25}, {"label":">", "x":14, "y":3.25}, {"label":"?", "x":15, "y":3.25}, {"label":"Shift", "x":16, "y":3.25, "w":1.75}, {"label":"\u2191", "x":17.75, "y":3.25}, {"label":"Ctrl", "x":0.25, "y":4.25, "w":1.5}, {"label":"Alt", "x":4, "y":4.25, "w":1.25}, {"label":"Space", "x":5.25, "y":4.25, "w":2.25}, {"label":"Layer 2", "x":7.5, "y":4.25}, {"label":"Space", "x":9, "y":4.25, "w":2}, {"x":11, "y":4.25}, {"label":"Right Alt", "x":12, "y":4.25}, {"label":"Win", "x":15.25, "y":4.25, "w":1.5}, {"label":"\u2190", "x":16.75, "y":4.25}, {"label":"\u2193", "x":17.75, "y":4.25}, {"label":"\u2192", "x":18.75, "y":4.25}]
+ },
+ "LAYOUT_split_bksp_275_rspace": {
+ "layout": [{"label":"Delete", "x":18.75, "y":0}, {"label":"Esc", "x":0.75, "y":0.25}, {"label":"!", "x":1.75, "y":0.25}, {"label":"@", "x":2.75, "y":0.25}, {"label":"#", "x":4, "y":0.25}, {"label":"$", "x":5, "y":0.25}, {"label":"%", "x":6, "y":0.25}, {"label":"^", "x":7, "y":0.25}, {"label":"&", "x":10, "y":0.25}, {"label":"*", "x":11, "y":0.25}, {"label":"(", "x":12, "y":0.25}, {"label":")", "x":13, "y":0.25}, {"label":"_", "x":14.25, "y":0.25}, {"label":"+", "x":15.25, "y":0.25}, {"label":"~", "x":16.25, "y":0.25}, {"label":"Back", "x":17.25, "y":0.25}, {"label":"PgUp", "x":19, "y":1}, {"label":"Tab", "x":0.5, "y":1.25, "w":1.5}, {"label":"Q", "x":2, "y":1.25}, {"label":"W", "x":3.5, "y":1.25}, {"label":"E", "x":4.5, "y":1.25}, {"label":"R", "x":5.5, "y":1.25}, {"label":"T", "x":6.5, "y":1.25}, {"label":"Y", "x":9.5, "y":1.25}, {"label":"U", "x":10.5, "y":1.25}, {"label":"I", "x":11.5, "y":1.25}, {"label":"O", "x":12.5, "y":1.25}, {"label":"P", "x":14, "y":1.25}, {"label":"{", "x":15, "y":1.25}, {"label":"}", "x":16, "y":1.25}, {"label":"|", "x":17, "y":1.25, "w":1.5}, {"label":"PgDn", "x":19.25, "y":2}, {"label":"Caps Lock", "x":0.25, "y":2.25, "w":1.75}, {"label":"A", "x":2, "y":2.25}, {"label":"S", "x":3.75, "y":2.25}, {"label":"D", "x":4.75, "y":2.25}, {"label":"F", "x":5.75, "y":2.25}, {"label":"G", "x":6.75, "y":2.25}, {"label":"H", "x":9.75, "y":2.25}, {"label":"J", "x":10.75, "y":2.25}, {"label":"K", "x":11.75, "y":2.25}, {"label":"L", "x":12.75, "y":2.25}, {"label":":", "x":14.5, "y":2.25}, {"label":"\"", "x":15.5, "y":2.25}, {"label":"Enter", "x":16.5, "y":2.25, "w":2.25}, {"label":"Shift", "x":0, "y":3.25, "w":2.25}, {"label":"Z", "x":2.25, "y":3.25}, {"label":"X", "x":4.25, "y":3.25}, {"label":"C", "x":5.25, "y":3.25}, {"label":"V", "x":6.25, "y":3.25}, {"label":"B", "x":7.25, "y":3.25}, {"label":"B", "x":9.25, "y":3.25}, {"label":"N", "x":10.25, "y":3.25}, {"label":"M", "x":11.25, "y":3.25}, {"label":"<", "x":12.25, "y":3.25}, {"label":">", "x":14, "y":3.25}, {"label":"?", "x":15, "y":3.25}, {"label":"Shift", "x":16, "y":3.25, "w":1.75}, {"label":"\u2191", "x":17.75, "y":3.25}, {"label":"Ctrl", "x":0.25, "y":4.25, "w":1.5}, {"label":"Alt", "x":4, "y":4.25, "w":1.25}, {"label":"Space", "x":5.25, "y":4.25, "w":2.25}, {"label":"Layer 2", "x":7.5, "y":4.25}, {"label":"Space", "x":9, "y":4.25, "w":2.75}, {"label":"Right Alt", "x":11.75, "y":4.25, "w":1.25}, {"label":"Win", "x":15.25, "y":4.25, "w":1.5}, {"label":"\u2190", "x":16.75, "y":4.25}, {"label":"\u2193", "x":17.75, "y":4.25}, {"label":"\u2192", "x":18.75, "y":4.25}]
+ },
+ "LAYOUT_full_bksp_275_rspace": {
+ "layout": [{"label":"Delete", "x":18.75, "y":0}, {"label":"Esc", "x":0.75, "y":0.25}, {"label":"!", "x":1.75, "y":0.25}, {"label":"@", "x":2.75, "y":0.25}, {"label":"#", "x":4, "y":0.25}, {"label":"$", "x":5, "y":0.25}, {"label":"%", "x":6, "y":0.25}, {"label":"^", "x":7, "y":0.25}, {"label":"&", "x":10, "y":0.25}, {"label":"*", "x":11, "y":0.25}, {"label":"(", "x":12, "y":0.25}, {"label":")", "x":13, "y":0.25}, {"label":"_", "x":14.25, "y":0.25}, {"label":"+", "x":15.25, "y":0.25}, {"label":"Back", "x":16.25, "y":0.25, "w":2}, {"label":"PgUp", "x":19, "y":1}, {"label":"Tab", "x":0.5, "y":1.25, "w":1.5}, {"label":"Q", "x":2, "y":1.25}, {"label":"W", "x":3.5, "y":1.25}, {"label":"E", "x":4.5, "y":1.25}, {"label":"R", "x":5.5, "y":1.25}, {"label":"T", "x":6.5, "y":1.25}, {"label":"Y", "x":9.5, "y":1.25}, {"label":"U", "x":10.5, "y":1.25}, {"label":"I", "x":11.5, "y":1.25}, {"label":"O", "x":12.5, "y":1.25}, {"label":"P", "x":14, "y":1.25}, {"label":"{", "x":15, "y":1.25}, {"label":"}", "x":16, "y":1.25}, {"label":"|", "x":17, "y":1.25, "w":1.5}, {"label":"PgDn", "x":19.25, "y":2}, {"label":"Caps Lock", "x":0.25, "y":2.25, "w":1.75}, {"label":"A", "x":2, "y":2.25}, {"label":"S", "x":3.75, "y":2.25}, {"label":"D", "x":4.75, "y":2.25}, {"label":"F", "x":5.75, "y":2.25}, {"label":"G", "x":6.75, "y":2.25}, {"label":"H", "x":9.75, "y":2.25}, {"label":"J", "x":10.75, "y":2.25}, {"label":"K", "x":11.75, "y":2.25}, {"label":"L", "x":12.75, "y":2.25}, {"label":":", "x":14.5, "y":2.25}, {"label":"\"", "x":15.5, "y":2.25}, {"label":"Enter", "x":16.5, "y":2.25, "w":2.25}, {"label":"Shift", "x":0, "y":3.25, "w":2.25}, {"label":"Z", "x":2.25, "y":3.25}, {"label":"X", "x":4.25, "y":3.25}, {"label":"C", "x":5.25, "y":3.25}, {"label":"V", "x":6.25, "y":3.25}, {"label":"B", "x":7.25, "y":3.25}, {"label":"B", "x":9.25, "y":3.25}, {"label":"N", "x":10.25, "y":3.25}, {"label":"M", "x":11.25, "y":3.25}, {"label":"<", "x":12.25, "y":3.25}, {"label":">", "x":14, "y":3.25}, {"label":"?", "x":15, "y":3.25}, {"label":"Shift", "x":16, "y":3.25, "w":1.75}, {"label":"\u2191", "x":17.75, "y":3.25}, {"label":"Ctrl", "x":0.25, "y":4.25, "w":1.5}, {"label":"Alt", "x":4, "y":4.25, "w":1.25}, {"label":"Space", "x":5.25, "y":4.25, "w":2.25}, {"label":"Layer 2", "x":7.5, "y":4.25}, {"label":"Space", "x":9, "y":4.25, "w":2.75}, {"label":"Right Alt", "x":11.75, "y":4.25, "w":1.25}, {"label":"Win", "x":15.25, "y":4.25, "w":1.5}, {"label":"\u2190", "x":16.75, "y":4.25}, {"label":"\u2193", "x":17.75, "y":4.25}, {"label":"\u2192", "x":18.75, "y":4.25}]
+ },
+ "LAYOUT_full_bksp_200_rspace": {
+ "layout": [{"label":"Delete", "x":18.75, "y":0}, {"label":"Esc", "x":0.75, "y":0.25}, {"label":"!", "x":1.75, "y":0.25}, {"label":"@", "x":2.75, "y":0.25}, {"label":"#", "x":4, "y":0.25}, {"label":"$", "x":5, "y":0.25}, {"label":"%", "x":6, "y":0.25}, {"label":"^", "x":7, "y":0.25}, {"label":"&", "x":10, "y":0.25}, {"label":"*", "x":11, "y":0.25}, {"label":"(", "x":12, "y":0.25}, {"label":")", "x":13, "y":0.25}, {"label":"_", "x":14.25, "y":0.25}, {"label":"+", "x":15.25, "y":0.25}, {"label":"Back", "x":16.25, "y":0.25, "w":2}, {"label":"PgUp", "x":19, "y":1}, {"label":"Tab", "x":0.5, "y":1.25, "w":1.5}, {"label":"Q", "x":2, "y":1.25}, {"label":"W", "x":3.5, "y":1.25}, {"label":"E", "x":4.5, "y":1.25}, {"label":"R", "x":5.5, "y":1.25}, {"label":"T", "x":6.5, "y":1.25}, {"label":"Y", "x":9.5, "y":1.25}, {"label":"U", "x":10.5, "y":1.25}, {"label":"I", "x":11.5, "y":1.25}, {"label":"O", "x":12.5, "y":1.25}, {"label":"P", "x":14, "y":1.25}, {"label":"{", "x":15, "y":1.25}, {"label":"}", "x":16, "y":1.25}, {"label":"|", "x":17, "y":1.25, "w":1.5}, {"label":"PgDn", "x":19.25, "y":2}, {"label":"Caps Lock", "x":0.25, "y":2.25, "w":1.75}, {"label":"A", "x":2, "y":2.25}, {"label":"S", "x":3.75, "y":2.25}, {"label":"D", "x":4.75, "y":2.25}, {"label":"F", "x":5.75, "y":2.25}, {"label":"G", "x":6.75, "y":2.25}, {"label":"H", "x":9.75, "y":2.25}, {"label":"J", "x":10.75, "y":2.25}, {"label":"K", "x":11.75, "y":2.25}, {"label":"L", "x":12.75, "y":2.25}, {"label":":", "x":14.5, "y":2.25}, {"label":"\"", "x":15.5, "y":2.25}, {"label":"Enter", "x":16.5, "y":2.25, "w":2.25}, {"label":"Shift", "x":0, "y":3.25, "w":2.25}, {"label":"Z", "x":2.25, "y":3.25}, {"label":"X", "x":4.25, "y":3.25}, {"label":"C", "x":5.25, "y":3.25}, {"label":"V", "x":6.25, "y":3.25}, {"label":"B", "x":7.25, "y":3.25}, {"label":"B", "x":9.25, "y":3.25}, {"label":"N", "x":10.25, "y":3.25}, {"label":"M", "x":11.25, "y":3.25}, {"label":"<", "x":12.25, "y":3.25}, {"label":">", "x":14, "y":3.25}, {"label":"?", "x":15, "y":3.25}, {"label":"Shift", "x":16, "y":3.25, "w":1.75}, {"label":"\u2191", "x":17.75, "y":3.25}, {"label":"Ctrl", "x":0.25, "y":4.25, "w":1.5}, {"label":"Alt", "x":4, "y":4.25, "w":1.25}, {"label":"Space", "x":5.25, "y":4.25, "w":2.25}, {"label":"Layer 2", "x":7.5, "y":4.25}, {"label":"Space", "x":9, "y":4.25, "w":2}, {"x":11, "y":4.25}, {"label":"Right Alt", "x":12, "y":4.25}, {"label":"Win", "x":15.25, "y":4.25, "w":1.5}, {"label":"\u2190", "x":16.75, "y":4.25}, {"label":"\u2193", "x":17.75, "y":4.25}, {"label":"\u2192", "x":18.75, "y":4.25}]
+ }
+ }
+}
diff --git a/keyboards/hineybush/physix/keymaps/default/keymap.c b/keyboards/hineybush/physix/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2e0cf3155c
--- /dev/null
+++ b/keyboards/hineybush/physix/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2019 hineybush
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* #define LAYOUT_split_bksp_275_rspace( \
+ k000, k001, k002, k003, k004, k005, k403, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k214, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k400, k402, k404, k405, k406, K409, k410, k411, k412, k413 \
+) \ */
+ [_BASE] = LAYOUT_split_bksp_275_rspace(
+ 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_GRAVE, 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_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_ENT, KC_PGDN,
+ 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, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_FN), KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT_split_bksp_275_rspace(
+ KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_BRTG, BL_TOGG, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_INS,
+ 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_HOME,
+ KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/hineybush/physix/keymaps/default/readme.md b/keyboards/hineybush/physix/keymaps/default/readme.md
new file mode 100644
index 0000000000..0127c70d35
--- /dev/null
+++ b/keyboards/hineybush/physix/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for physix
diff --git a/keyboards/hineybush/physix/physix.c b/keyboards/hineybush/physix/physix.c
new file mode 100644
index 0000000000..99614aeb78
--- /dev/null
+++ b/keyboards/hineybush/physix/physix.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 hineybush
+ *
+ * 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 "physix.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ setPinOutput(D3);
+ setPinOutput(D5);
+ matrix_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ bool res = led_update_user(led_state);
+ if(res) {
+ // writePin sets the pin high for 1 and low for 0.
+ // In this example the pins are inverted, setting
+ // it low/0 turns it on, and high/1 turns the LED off.
+ // This behavior depends on whether the LED is between the pin
+ // and VCC or the pin and GND.
+ writePin(D3, led_state.caps_lock);
+ writePin(D5, led_state.scroll_lock);
+ }
+ return res;
+ return led_update_user(led_state);
+}
+
+
+
diff --git a/keyboards/hineybush/physix/physix.h b/keyboards/hineybush/physix/physix.h
new file mode 100644
index 0000000000..c081a53806
--- /dev/null
+++ b/keyboards/hineybush/physix/physix.h
@@ -0,0 +1,87 @@
+/* Copyright 2019 hineybush
+ *
+ * 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 is 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_all( \
+ k000, k001, k002, k003, k004, k005, k403, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k214, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k400, k402, k404, k405, k406, k408, k409, k410, k411, k412, k413 \
+) \
+{ \
+ {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, k110, k111, k112, k113, k114}, \
+ {k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, KC_NO, k214}, \
+ {k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO}, \
+ {k400, KC_NO,k402, k403, k404, k405, k406, KC_NO,k408, k409 ,k410, k411, k412, k413, KC_NO} \
+}
+
+#define LAYOUT_split_bksp_275_rspace( \
+ k000, k001, k002, k003, k004, k005, k403, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k214, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k400, k402, k404, k405, k406, k409, k410, k411, k412, k413 \
+) \
+{ \
+ {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, k110, k111, k112, k113, k114}, \
+ {k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, KC_NO, k214}, \
+ {k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO}, \
+ {k400, KC_NO,k402, k403, k404, k405, k406, KC_NO,KC_NO,k409 ,k410, k411, k412, k413, KC_NO} \
+}
+
+#define LAYOUT_full_bksp_275_rspace( \
+ k000, k001, k002, k003, k004, k005, k403, k006, k007, k008, k009, k010, k011, k013, k014, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k214, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k400, k402, k404, k405, k406, k409, k410, k411, k412, k413 \
+) \
+{ \
+ {k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, KC_NO,k013, k014}, \
+ {k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114}, \
+ {k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, KC_NO, k214}, \
+ {k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO}, \
+ {k400, KC_NO,k402, k403, k404, k405, k406, KC_NO,KC_NO,k409 ,k410, k411, k412, k413, KC_NO} \
+}
+
+#define LAYOUT_full_bksp_200_rspace( \
+ k000, k001, k002, k003, k004, k005, k403, k006, k007, k008, k009, k010, k011, k013, k014, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k214, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k400, k402, k404, k405, k406, k408, k409, k410, k411, k412, k413 \
+) \
+{ \
+ {k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, KC_NO,k013, k014}, \
+ {k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114}, \
+ {k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, KC_NO, k214}, \
+ {k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, KC_NO}, \
+ {k400, KC_NO,k402, k403, k404, k405, k406, KC_NO,k408, k409 ,k410, k411, k412, k413, KC_NO} \
+}
diff --git a/keyboards/hineybush/physix/readme.md b/keyboards/hineybush/physix/readme.md
new file mode 100644
index 0000000000..c95a8dc284
--- /dev/null
+++ b/keyboards/hineybush/physix/readme.md
@@ -0,0 +1,15 @@
+# physix
+
+![PhysiX](https://geekhack.org/index.php?topic=103049.0)
+
+The PhysiX Ergonomic Keyboard by Life Zone
+
+* Keyboard Maintainer: [hineybush](https://github.com/hineybush)
+* Hardware Supported: LZ PhysiX
+* Hardware Availability: Group Buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hineybush/physix: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/hineybush/physix/rules.mk b/keyboards/hineybush/physix/rules.mk
new file mode 100644
index 0000000000..010cb024d0
--- /dev/null
+++ b/keyboards/hineybush/physix/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/hineybush/sm68/rules.mk b/keyboards/hineybush/sm68/rules.mk
index 49f5ca7fdc..28e24020af 100644
--- a/keyboards/hineybush/sm68/rules.mk
+++ b/keyboards/hineybush/sm68/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
diff --git a/keyboards/hotdox/rules.mk b/keyboards/hotdox/rules.mk
index be21552055..b5b1483c72 100644
--- a/keyboards/hotdox/rules.mk
+++ b/keyboards/hotdox/rules.mk
@@ -25,7 +25,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
USB_6KRO_ENABLE = no # USB 6key Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-KEYMAP_SECTION_ENABLE = no # Fixed address keymap for keymap editor
SWAP_HANDS_ENABLE = no # Disable Onehand
RGBLIGHT_ENABLE = no
MIDI_ENABLE = no
diff --git a/keyboards/hs60/v2/config.h b/keyboards/hs60/v2/config.h
index 02df0074cc..91fdf60809 100644
--- a/keyboards/hs60/v2/config.h
+++ b/keyboards/hs60/v2/config.h
@@ -134,21 +134,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+32)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 69
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (69+(4*5*14*2)) = (69+560)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 629
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 396
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
+
diff --git a/keyboards/hs60/v2/keymaps/ansi_via/rules.mk b/keyboards/hs60/v2/keymaps/ansi_via/rules.mk
index b8311f5e7f..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/ansi_via/rules.mk
+++ b/keyboards/hs60/v2/keymaps/ansi_via/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/keymaps/default_via/rules.mk b/keyboards/hs60/v2/keymaps/default_via/rules.mk
index b8311f5e7f..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/default_via/rules.mk
+++ b/keyboards/hs60/v2/keymaps/default_via/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/keymaps/goatmaster/rules.mk b/keyboards/hs60/v2/keymaps/goatmaster/rules.mk
index b8311f5e7f..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/goatmaster/rules.mk
+++ b/keyboards/hs60/v2/keymaps/goatmaster/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/keymaps/hhkb_via/rules.mk b/keyboards/hs60/v2/keymaps/hhkb_via/rules.mk
index b8311f5e7f..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/hhkb_via/rules.mk
+++ b/keyboards/hs60/v2/keymaps/hhkb_via/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/keymaps/iso_andys8/rules.mk b/keyboards/hs60/v2/keymaps/iso_andys8/rules.mk
index b8311f5e7f..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/iso_andys8/rules.mk
+++ b/keyboards/hs60/v2/keymaps/iso_andys8/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/keymaps/stanrc85/rules.mk b/keyboards/hs60/v2/keymaps/stanrc85/rules.mk
index 69592d06c7..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/stanrc85/rules.mk
+++ b/keyboards/hs60/v2/keymaps/stanrc85/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk b/keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk
index 1dc96d04be..1e5b99807c 100644
--- a/keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk
+++ b/keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk
@@ -1,67 +1 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-BOOTMAGIC_ENABLE = yes # 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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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
+VIA_ENABLE = yes
diff --git a/keyboards/hs60/v2/rules.mk b/keyboards/hs60/v2/rules.mk
index 6c32342589..37deb63be7 100644
--- a/keyboards/hs60/v2/rules.mk
+++ b/keyboards/hs60/v2/rules.mk
@@ -21,8 +21,6 @@ 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 = no
-DYNAMIC_KEYMAP_ENABLE = no
CIE1931_CURVE = yes
LAYOUTS = 60_ansi 60_iso
diff --git a/keyboards/hs60/v2/v2.h b/keyboards/hs60/v2/v2.h
index da32c3026a..e770764862 100644
--- a/keyboards/hs60/v2/v2.h
+++ b/keyboards/hs60/v2/v2.h
@@ -19,7 +19,7 @@
#include "quantum.h"
#include "../../wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "../../wilba_tech/via_keycodes.h"
+#include "via.h"
// This a shortcut to help you visually see your layout.
diff --git a/keyboards/idb_60/config.h b/keyboards/idb/idb_60/config.h
index 0120e470e5..f7904cf604 100644
--- a/keyboards/idb_60/config.h
+++ b/keyboards/idb/idb_60/config.h
@@ -20,10 +20,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x6060 // 24672
-#define PRODUCT_ID 0x6060 // 24672
-#define DEVICE_VER 0x0001
-#define MANUFACTURER pngu
+#define VENDOR_ID 0x494B // "IB" for idb Keyboards
+#define PRODUCT_ID 0x0001 // idb 60
+#define DEVICE_VER 0x0001
+#define MANUFACTURER idb Keyboards
#define PRODUCT idb 60
#define DESCRIPTION QMK keyboard firmware for idb 60
@@ -48,7 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+/* Debounce reduces chatter (unintended double-presses) - see https://docs.qmk.fm/#/feature_debounce_type for more information */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
@@ -148,23 +148,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
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 677 // **** CHANGE THIS BASED ON MATRIX_ROWS & MATRIX_COLS ****
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 347 // **** CHANGE THIS BASED ON 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR ****
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/idb_60/idb_60.c b/keyboards/idb/idb_60/idb_60.c
index d280f644b5..d280f644b5 100644
--- a/keyboards/idb_60/idb_60.c
+++ b/keyboards/idb/idb_60/idb_60.c
diff --git a/keyboards/idb/idb_60/idb_60.h b/keyboards/idb/idb_60/idb_60.h
new file mode 100644
index 0000000000..c47d6b2927
--- /dev/null
+++ b/keyboards/idb/idb_60/idb_60.h
@@ -0,0 +1,60 @@
+#pragma once
+
+#include "quantum.h"
+
+inline void _idb_60_caps_led_on(void) {
+ writePinLow(C5);
+}
+
+inline void _idb_60_esc_led_on(void) {
+ writePinLow(C4);
+}
+
+inline void _idb_60_caps_led_off(void) {
+ writePinLow(C5);
+}
+
+inline void _idb_60_esc_led_off(void) {
+ writePinLow(C4);
+}
+
+#define LAYOUT( \
+ K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07,\
+ K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36,\
+ K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56,\
+ K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76,\
+ K80, K90, K81, K93, K95, K86, K96\
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16 }, \
+ { K20, K21, K22, K23, K24, K25, K26 }, \
+ { K30, K31, K32, K33, K34, K35, K36 }, \
+ { K40, K41, K42, K43, K44, K45, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56 }, \
+ { K60, K61, K62, K63, K64, K65, K66 }, \
+ { K70, K71, K72, K73, K74, K75, K76 }, \
+ { K80, K81, KC_NO, KC_NO, KC_NO, KC_NO, K86 }, \
+ { K90, KC_NO, KC_NO, K93, KC_NO, K95, K96 } \
+}
+
+#define LAYOUT_all LAYOUT
+
+#define LAYOUT_default( \
+ K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16,\
+ K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36,\
+ K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56,\
+ K60, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76,\
+ K80, K81, K93, K95, K96\
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO }, \
+ { K10, K11, K12, K13, K14, K15, K16 }, \
+ { K20, K21, K22, K23, K24, K25, K26 }, \
+ { K30, K31, K32, K33, K34, K35, K36 }, \
+ { K40, K41, K42, K43, K44, K45, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56 }, \
+ { K60, K61, K62, K63, K64, K65, K66 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76 }, \
+ { K80, K81, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, K93, KC_NO, K95, K96 } \
+}
+
diff --git a/keyboards/idb/idb_60/info.json b/keyboards/idb/idb_60/info.json
new file mode 100644
index 0000000000..86574e9d9d
--- /dev/null
+++ b/keyboards/idb/idb_60/info.json
@@ -0,0 +1,141 @@
+{
+ "keyboard_name": "idb 60",
+ "url": "https://idb-keyboards.xyz/60",
+ "maintainer": "pngu",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_default": {
+ "key_count": 59,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"!\n1", "x":1, "y":0},
+ {"label":"@\n2", "x":2, "y":0},
+ {"label":"#\n3", "x":3, "y":0},
+ {"label":"$\n4", "x":4, "y":0},
+ {"label":"%\n5", "x":5, "y":0},
+ {"label":"^\n6", "x":6, "y":0},
+ {"label":"&\n7", "x":7, "y":0},
+ {"label":"*\n8", "x":8, "y":0},
+ {"label":"(\n9", "x":9, "y":0},
+ {"label":")\n0", "x":10, "y":0},
+ {"label":"_\n-", "x":11, "y":0},
+ {"label":"+\n=", "x":12, "y":0},
+ {"label":"BS", "x":13, "y":0, "w":2.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":"{\n[", "x":11.5, "y":1},
+ {"label":"}\n]", "x":12.5, "y":1},
+ {"label":"|\n\\", "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":":\n;", "x":10.75, "y":2},
+ {"label":"\"\n'", "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":"<\n,", "x":9.25, "y":3},
+ {"label":">\n.", "x":10.25, "y":3},
+ {"label":"?\n/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+ {"label":"Space", "x":4, "y":4, "w":7},
+ {"label":"Alt", "x":11, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_all": {
+ "key_count": 63,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"!\n1", "x":1, "y":0},
+ {"label":"@\n2", "x":2, "y":0},
+ {"label":"#\n3", "x":3, "y":0},
+ {"label":"$\n4", "x":4, "y":0},
+ {"label":"%\n5", "x":5, "y":0},
+ {"label":"^\n6", "x":6, "y":0},
+ {"label":"&\n7", "x":7, "y":0},
+ {"label":"*\n8", "x":8, "y":0},
+ {"label":"(\n9", "x":9, "y":0},
+ {"label":")\n0", "x":10, "y":0},
+ {"label":"_\n-", "x":11, "y":0},
+ {"label":"+\n=", "x":12, "y":0},
+ {"label":"BS", "x":13, "y":0},
+ {"label":"~\n`", "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":"{\n[", "x":11.5, "y":1},
+ {"label":"}\n]", "x":12.5, "y":1},
+ {"label":"|\n\\", "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":":\n;", "x":10.75, "y":2},
+ {"label":"\"\n'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":">\n<\n\n|", "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":"<\n,", "x":9.25, "y":3},
+ {"label":">\n.", "x":10.25, "y":3},
+ {"label":"?\n/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"Win", "x":1.5, "y":4},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+ {"label":"Space", "x":4, "y":4, "w":7},
+ {"label":"Alt", "x":11, "y":4, "w":1.5},
+ {"label":"Win", "x":12.5, "y":4},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/idb_60/keymaps/default/keymap.c b/keyboards/idb/idb_60/keymaps/all_keys/keymap.c
index 48c9987749..9f2ef36a1f 100644
--- a/keyboards/idb_60/keymaps/default/keymap.c
+++ b/keyboards/idb/idb_60/keymaps/all_keys/keymap.c
@@ -2,20 +2,34 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = 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_BSPC, 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_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_NUBS, 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_MENU, KC_RCTL
),
- [1] = 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, _______, _______,
+ [1] = LAYOUT_all(
+ 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, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
- )
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
};
diff --git a/keyboards/idb/idb_60/keymaps/default/keymap.c b/keyboards/idb/idb_60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..22f208caac
--- /dev/null
+++ b/keyboards/idb/idb_60/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_default(
+ 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, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_default(
+ 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, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+
+};
+
+// Layer LED indicators
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (layer_state_cmp(state, 1)) {
+ _idb_60_esc_led_on();
+ } else {
+ _idb_60_esc_led_off();
+ }
+
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/idb_60/keymaps/pngu/keymap.c b/keyboards/idb/idb_60/keymaps/pngu/keymap.c
index de336e5fa4..de336e5fa4 100644
--- a/keyboards/idb_60/keymaps/pngu/keymap.c
+++ b/keyboards/idb/idb_60/keymaps/pngu/keymap.c
diff --git a/keyboards/idb/idb_60/keymaps/via/keymap.c b/keyboards/idb/idb_60/keymaps/via/keymap.c
new file mode 100644
index 0000000000..22f208caac
--- /dev/null
+++ b/keyboards/idb/idb_60/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_default(
+ 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, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_default(
+ 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, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+
+};
+
+// Layer LED indicators
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (layer_state_cmp(state, 1)) {
+ _idb_60_esc_led_on();
+ } else {
+ _idb_60_esc_led_off();
+ }
+
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/idb/idb_60/keymaps/via/rules.mk b/keyboards/idb/idb_60/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/idb/idb_60/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/idb/idb_60/readme.md b/keyboards/idb/idb_60/readme.md
new file mode 100644
index 0000000000..13a4841b4a
--- /dev/null
+++ b/keyboards/idb/idb_60/readme.md
@@ -0,0 +1,26 @@
+# idb 60 PCB
+
+Firmware for the idb 60 PCB
+
+* Keyboard Maintainer: [/u/omgitspngu](https://github.com/itspngu)
+* Hardware Supported: idb 60 PCB
+* Hardware Availability: [/u/omgitspngu](https://www.reddit.com/user/omgitspngu/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idb/idb_60:default
+
+Or to make and flash:
+
+ make idb/idb_60:default:flash
+
+To compile VIA firmware:
+
+ make idb/idb_60:via
+
+LAYOUT_* Macros:
+
+ * *LAYOUT_default*: ANSI WKL with full Backspace
+ * *LAYOUT_all*: All split keys are available
+
+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/idb/idb_60/rules.mk b/keyboards/idb/idb_60/rules.mk
new file mode 100644
index 0000000000..289e77f771
--- /dev/null
+++ b/keyboards/idb/idb_60/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# Comment out to disable the options.
+BOOTMAGIC_ENABLE = lite
+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
+KEYBOARD_LOCK_ENABLE = no # Allow locking of keyboard via magic key
+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
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+DEBOUNCE_TYPE = eager_pk # Eager debounce type
diff --git a/keyboards/idb_60/idb_60.h b/keyboards/idb_60/idb_60.h
deleted file mode 100644
index e9045f6642..0000000000
--- a/keyboards/idb_60/idb_60.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-inline void _idb_60_caps_led_on(void) {
- writePinLow(C5);
-}
-
-inline void _idb_60_esc_led_on(void) {
- writePinLow(C4);
-}
-
-inline void _idb_60_caps_led_off(void) {
- writePinLow(C5);
-}
-
-inline void _idb_60_esc_led_off(void) {
- writePinLow(C4);
-}
-
-#define LAYOUT( \
- K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07,\
- K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36,\
- K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56,\
- K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76,\
- K80, K90, K81, K93, K95, K86, K96\
-) { \
- { K00, K01, K02, K03, K04, K05, K06, K07 }, \
- { K10, K11, K12, K13, K14, K15, K16 }, \
- { K20, K21, K22, K23, K24, K25, K26 }, \
- { K30, K31, K32, K33, K34, K35, K36 }, \
- { K40, K41, K42, K43, K44, K45, KC_NO }, \
- { K50, K51, K52, K53, K54, K55, K56 }, \
- { K60, K61, K62, K63, K64, K65, K66 }, \
- { K70, K71, K72, K73, K74, K75, K76 }, \
- { K80, K81, KC_NO, KC_NO, KC_NO, KC_NO, K86 }, \
- { K90, KC_NO, KC_NO, K93, KC_NO, K95, K96 } \
-}
diff --git a/keyboards/idb_60/info.json b/keyboards/idb_60/info.json
deleted file mode 100644
index 9bbe580bf1..0000000000
--- a/keyboards/idb_60/info.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "keyboard_name": "idb_60",
- "url": "https://idb-keyboards.xyz/60",
- "maintainer": "pngu",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label":"Esc","x":0,"y":0},
- {"label":"!\n1","x":1,"y":0},
- {"label":"@\n2","x":2,"y":0},
- {"label":"#\n3","x":3,"y":0},
- {"label":"$\n4","x":4,"y":0},
- {"label":"%\n5","x":5,"y":0},
- {"label":"^\n6","x":6,"y":0},
- {"label":"&\n7","x":7,"y":0},
- {"label":"*\n8","x":8,"y":0},
- {"label":"(\n9","x":9,"y":0},
- {"label":")\n0","x":10,"y":0},
- {"label":"_\n-","x":11,"y":0},
- {"label":"+\n=","x":12,"y":0},
- {"label":"BS","x":13,"y":0},
- {"label":"~\n`","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":"{\n[","x":11.5,"y":1},
- {"label":"}\n]","x":12.5,"y":1},
- {"label":"|\n\\","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":":\n;","x":10.75,"y":2},
- {"label":"\"\n'","x":11.75,"y":2},
- {"label":"Enter","x":12.75,"y":2,"w":2.25},
- {"label":"Shift","x":0,"y":3,"w":1.25},
- {"label":">\n<\n\n|","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":"<\n,","x":9.25,"y":3},
- {"label":">\n.","x":10.25,"y":3},
- {"label":"?\n/","x":11.25,"y":3},
- {"label":"Shift","x":12.25,"y":3,"w":1.75},
- {"label":"Fn","x":14,"y":3},
- {"label":"Ctrl","x":0,"y":4,"w":1.5},
- {"label":"Win","x":1.5,"y":4},
- {"label":"Alt","x":2.5,"y":4,"w":1.5},
- {"label":"","x":4,"y":4,"w":7},
- {"label":"Alt","x":11,"y":4,"w":1.5},
- {"label":"Win","x":12.5,"y":4},
- {"label":"Ctrl","x":13.5,"y":4,"w":1.5}
- ]
- }
- }
-}
diff --git a/keyboards/idb_60/rules.mk b/keyboards/idb_60/rules.mk
deleted file mode 100644
index b57f12db6a..0000000000
--- a/keyboards/idb_60/rules.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# MCU name
-MCU = atmega32u2
-
-# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
-BOOTLOADER = atmel-dfu
-
-# 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
-# KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality
-# MIDI_ENABLE = YES # MIDI controls
-# UNICODE_ENABLE = YES # Unicode
-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/illuminati/is0/keymaps/via/keymap.c b/keyboards/illuminati/is0/keymaps/via/keymap.c
new file mode 100644
index 0000000000..6b8df505ed
--- /dev/null
+++ b/keyboards/illuminati/is0/keymaps/via/keymap.c
@@ -0,0 +1,31 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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_ENT
+ ),
+ [1] = LAYOUT(
+ KC_TRNS
+ ),
+ [2] = LAYOUT(
+ KC_TRNS
+ ),
+ [3] = LAYOUT(
+ KC_TRNS
+ ),
+};
diff --git a/keyboards/illuminati/is0/keymaps/via/readme.md b/keyboards/illuminati/is0/keymaps/via/readme.md
new file mode 100644
index 0000000000..1c12e45303
--- /dev/null
+++ b/keyboards/illuminati/is0/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The VIA keymap for is0
diff --git a/keyboards/illuminati/is0/keymaps/via/rules.mk b/keyboards/illuminati/is0/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/illuminati/is0/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/infinity60/keymaps/default/keymap.c b/keyboards/infinity60/keymaps/default/keymap.c
index 4882469c00..f64e7c899a 100644
--- a/keyboards/infinity60/keymaps/default/keymap.c
+++ b/keyboards/infinity60/keymaps/default/keymap.c
@@ -1,6 +1,6 @@
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
@@ -41,13 +41,3 @@ const uint16_t 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,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) {
-
-};
diff --git a/keyboards/j80/config.h b/keyboards/j80/config.h
new file mode 100644
index 0000000000..3a5328ac41
--- /dev/null
+++ b/keyboards/j80/config.h
@@ -0,0 +1,55 @@
+/*
+Copyright 2019 JER
+
+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"
+
+#define VENDOR_ID 0x20A0
+#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER JER
+#define PRODUCT J80
+
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 14
+
+#define MATRIX_ROW_PINS { B1, B2, B3, B5, B6, B7, B0 }
+#define MATRIX_COL_PINS { A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, A0 }
+#define UNUSED_PINS { B4, C1, C0, D0, D1, D2, D3, D4, D5, D6, D7 }
+
+#define DIODE_DIRECTION COL2ROW
+#define DEBOUNCE 5
+
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_PIN D4
+
+#define NO_UART 1
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#endif
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/j80/info.json b/keyboards/j80/info.json
new file mode 100644
index 0000000000..b31b443ede
--- /dev/null
+++ b/keyboards/j80/info.json
@@ -0,0 +1,397 @@
+{
+ "keyboard_name": "J80",
+ "url": "",
+ "maintainer": "oeywil",
+ "width": 18.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":13.5, "y":2.25, "w":1.5},
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25, "w":2.25},
+
+ {"x":0, "y":4.25, "w":2.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":2.75},
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.25},
+ {"x":1.25, "y":5.25, "w":1.25},
+ {"x":2.5, "y":5.25, "w":1.25},
+ {"x":3.75, "y":5.25, "w":6.25},
+ {"x":10, "y":5.25, "w":1.25},
+ {"x":11.25, "y":5.25, "w":1.25},
+ {"x":12.5, "y":5.25, "w":1.25},
+ {"x":13.75, "y":5.25, "w":1.25},
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":13.5, "y":2.25, "w":1.5},
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25, "w":2.25},
+
+ {"x":0, "y":4.25, "w":2.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":1.75},
+ {"x":14, "y":4.25},
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.25},
+ {"x":1.25, "y":5.25, "w":1.25},
+ {"x":2.5, "y":5.25, "w":1.25},
+ {"x":3.75, "y":5.25, "w":6.25},
+ {"x":10, "y":5.25, "w":1.25},
+ {"x":11.25, "y":5.25, "w":1.25},
+ {"x":12.5, "y":5.25, "w":1.25},
+ {"x":13.75, "y":5.25, "w":1.25},
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25},
+ {"x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"x":0, "y":4.25, "w":1.25},
+ {"x":1.25, "y":4.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":2.75},
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.25},
+ {"x":1.25, "y":5.25, "w":1.25},
+ {"x":2.5, "y":5.25, "w":1.25},
+ {"x":3.75, "y":5.25, "w":6.25},
+ {"x":10, "y":5.25, "w":1.25},
+ {"x":11.25, "y":5.25, "w":1.25},
+ {"x":12.5, "y":5.25, "w":1.25},
+ {"x":13.75, "y":5.25, "w":1.25},
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_split_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25},
+ {"x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"x":0, "y":4.25, "w":1.25},
+ {"x":1.25, "y":4.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":1.75},
+ {"x":14, "y":4.25},
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.25},
+ {"x":1.25, "y":5.25, "w":1.25},
+ {"x":2.5, "y":5.25, "w":1.25},
+ {"x":3.75, "y":5.25, "w":6.25},
+ {"x":10, "y":5.25, "w":1.25},
+ {"x":11.25, "y":5.25, "w":1.25},
+ {"x":12.5, "y":5.25, "w":1.25},
+ {"x":13.75, "y":5.25, "w":1.25},
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/j80/j80.c b/keyboards/j80/j80.c
new file mode 100644
index 0000000000..4ac0200a28
--- /dev/null
+++ b/keyboards/j80/j80.c
@@ -0,0 +1,26 @@
+/* Copyright 2019 JER
+ *
+ * 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 "j80.h"
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(D1, led_state.caps_lock);
+ writePin(D0, led_state.num_lock);
+ writePin(D6, led_state.scroll_lock);
+ }
+ return true;
+}
diff --git a/keyboards/j80/j80.h b/keyboards/j80/j80.h
new file mode 100644
index 0000000000..a528c70c7d
--- /dev/null
+++ b/keyboards/j80/j80.h
@@ -0,0 +1,115 @@
+/* Copyright 2019 JER
+ *
+ * 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 ____ KC_NO
+
+/* This is 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_all( \
+ k00, k02, k03, k04, k05, k07, k08, k09, k0A, k0B, k0D, k0C, k01, k61, k62, k6D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1D, k1C, k66, k65, k64, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, k2C, k6C, k68, k67, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, \
+ k40, k3C, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4D, k4C, \
+ k50, k51, k52, k54, k58, k59, k5A, k5B, k5D, k5C, k57 \
+ ){ \
+ { k00, k01, k02, k03, k04, k05, ____, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+ { 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, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D }, \
+ { k50, k51, k52, ____, k54, ____, ____, k57, k58, k59, k5A, k5B, k5C, k5D }, \
+ { ____, k61, k62, ____, k64, k65, k66, k67, k68, ____, ____, ____, k6C, k6D }, \
+ }
+
+ #define LAYOUT_tkl_iso( \
+ k00, k02, k03, k04, k05, k07, k08, k09, k0A, k0B, k0D, k0C, k01, k61, k62, k6D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1D, k1C, k66, k65, k64, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, k6C, k68, k67, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k2C, k3D, \
+ k40, k3C, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, \
+ k50, k51, k52, k54, k58, k59, k5A, k5B, k5D, k5C, k57 \
+ ){ \
+ { k00, k01, k02, k03, k04, k05, ____, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+ { 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, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, ____ }, \
+ { k50, k51, k52, ____, k54, ____, ____, k57, k58, k59, k5A, k5B, k5C, k5D }, \
+ { ____, k61, k62, ____, k64, k65, k66, k67, k68, ____, ____, ____, k6C, k6D }, \
+ }
+
+#define LAYOUT_tkl_iso_split_rshift( \
+ k00, k02, k03, k04, k05, k07, k08, k09, k0A, k0B, k0D, k0C, k01, k61, k62, k6D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1D, k1C, k66, k65, k64, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, k6C, k68, k67, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k2C, k3D, \
+ k40, k3C, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4D, k4C, \
+ k50, k51, k52, k54, k58, k59, k5A, k5B, k5D, k5C, k57 \
+){ \
+ { k00, k01, k02, k03, k04, k05, ____, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+ { 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, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D }, \
+ { k50, k51, k52, ____, k54, ____, ____, k57, k58, k59, k5A, k5B, k5C, k5D }, \
+ { ____, k61, k62, ____, k64, k65, k66, k67, k68, ____, ____, ____, k6C, k6D }, \
+}
+
+#define LAYOUT_tkl_ansi( \
+ k00, k02, k03, k04, k05, k07, k08, k09, k0A, k0B, k0D, k0C, k01, k61, k62, k6D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1D, k1C, k66, k65, k64, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, k2C, k6C, k68, k67, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, \
+ k50, k51, k52, k54, k58, k59, k5A, k5B, k5D, k5C, k57 \
+){ \
+ { k00, k01, k02, k03, k04, k05, ____, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+ { 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, ____, k3D }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, ____ }, \
+ { k50, k51, k52, ____, k54, ____, ____, k57, k58, k59, k5A, k5B, k5C, k5D }, \
+ { ____, k61, k62, ____, k64, k65, k66, k67, k68, ____, ____, ____, k6C, k6D }, \
+}
+
+#define LAYOUT_tkl_ansi_split_rshift( \
+ k00, k02, k03, k04, k05, k07, k08, k09, k0A, k0B, k0D, k0C, k01, k61, k62, k6D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1D, k1C, k66, k65, k64, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, k2C, k6C, k68, k67, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4D, k4C, \
+ k50, k51, k52, k54, k58, k59, k5A, k5B, k5D, k5C, k57 \
+){ \
+ { k00, k01, k02, k03, k04, k05, ____, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+ { 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, ____, k3D }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D }, \
+ { k50, k51, k52, ____, k54, ____, ____, k57, k58, k59, k5A, k5B, k5C, k5D }, \
+ { ____, k61, k62, ____, k64, k65, k66, k67, k68, ____, ____, ____, k6C, k6D }, \
+}
diff --git a/keyboards/j80/keymaps/default/keymap.c b/keyboards/j80/keymaps/default/keymap.c
new file mode 100644
index 0000000000..6926da8ea1
--- /dev/null
+++ b/keyboards/j80/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2019 JER
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT_tkl_ansi_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_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, MO(_FN), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[_FN] = LAYOUT_tkl_ansi_split_rshift(
+ 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, QMKBEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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;
+ }
+ return true;
+}
diff --git a/keyboards/j80/keymaps/default/readme.md b/keyboards/j80/keymaps/default/readme.md
new file mode 100644
index 0000000000..21ad7d5aba
--- /dev/null
+++ b/keyboards/j80/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for J80
diff --git a/keyboards/j80/keymaps/default_iso/keymap.c b/keyboards/j80/keymaps/default_iso/keymap.c
new file mode 100644
index 0000000000..4253454f79
--- /dev/null
+++ b/keyboards/j80/keymaps/default_iso/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2019 JER
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT_tkl_iso_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_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_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_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, MO(_FN), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[_FN] = LAYOUT_tkl_iso_split_rshift(
+ 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, QMKBEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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;
+ }
+ return true;
+}
diff --git a/keyboards/j80/keymaps/default_iso/readme.md b/keyboards/j80/keymaps/default_iso/readme.md
new file mode 100644
index 0000000000..db7bdb4157
--- /dev/null
+++ b/keyboards/j80/keymaps/default_iso/readme.md
@@ -0,0 +1 @@
+# The default ISO keymap for J80
diff --git a/keyboards/j80/readme.md b/keyboards/j80/readme.md
new file mode 100644
index 0000000000..44ed46fe45
--- /dev/null
+++ b/keyboards/j80/readme.md
@@ -0,0 +1,21 @@
+# J80
+
+JER PLANT - J80 (JER-A06) Round 2
+The J80 is a OG Cherry style(no plate) custom 80% kit.
+It is characterized by the fact that the hoisting PCB has no steel plate and can fully reflect the elasticity of the linear shaft. Tested by the buyer, its feel and typing sound are different from other custom keyboards and are satisfactory. It has a simple and elegant original cherry-like shape, the author's original intention is to start from the touching feel, let everyone have a comfortable tapping experience. The light stick module in the upper right corner is detachable, it could be switches (3 keys) or the light stick module. When using light stick module, PrtScr Scrolllock and Pause are achieved by pressing FN+ Insert / Home / Page Up.
+
+* Keyboard Maintainer: [oeywil](https://github.com/oeywil)
+* Hardware Supported: J80 PCB (atmega32a)
+* Hardware Availability: [J80 R2 GB](https://geekhack.org/index.php?topic=101401.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make j80:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make j80:default:flash
+
+**Reset Key**: Hold down the key located at *TOP RIGHT*, commonly programmed as *PAUSE* while plugging in the keyboard. The key definition for the reset key is k6D. Bootmagic Lite is enabled so holding down Escape while plugging in the keyboard will also jump to bootloader, after QMK is flashed.
+
+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/j80/rules.mk b/keyboards/j80/rules.mk
new file mode 100644
index 0000000000..1ceafc9c01
--- /dev/null
+++ b/keyboards/j80/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32a
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = bootloadHID
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+
+OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/j80/usbconfig.h b/keyboards/j80/usbconfig.h
new file mode 100644
index 0000000000..0c377f4b7e
--- /dev/null
+++ b/keyboards/j80/usbconfig.h
@@ -0,0 +1,373 @@
+#pragma once
+
+#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_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_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 (DEVICE_VER & 0xFF), ((DEVICE_VER >> 8) & 0xFF)
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'J', 'E', '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 'J', '8', '0'
+#define USB_CFG_DEVICE_NAME_LEN 3
+/* 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
diff --git a/keyboards/jae/j01/config.h b/keyboards/jae/j01/config.h
new file mode 100644
index 0000000000..8faa651aa7
--- /dev/null
+++ b/keyboards/jae/j01/config.h
@@ -0,0 +1,225 @@
+/*
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4705
+#define PRODUCT_ID 0x0143
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Maartenwut
+#define PRODUCT J-01
+#define DESCRIPTION A custom 65%ish keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 17
+
+/*
+ * 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 {B2, B1, B3, B0, D0}
+#define MATRIX_COL_PINS {D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1}
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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 4
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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 2
diff --git a/keyboards/jae/j01/info.json b/keyboards/jae/j01/info.json
new file mode 100644
index 0000000000..20b558b3de
--- /dev/null
+++ b/keyboards/jae/j01/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "J01",
+ "url": "",
+ "maintainer": "MechMerlin",
+ "width": 19,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0}, {"x":16.5, "y":0}, {"x":18, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2.5, "y":1, "w":1.5}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":16, "y":1, "w":1.5}, {"x":18, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2.5, "y":2, "w":1.75}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"x":11.25, "y":2}, {"x":12.25, "y":2}, {"x":13.25, "y":2}, {"x":14.25, "y":2}, {"x":15.25, "y":2, "w":2.25}, {"x":18, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2.5, "y":3, "w":2.25}, {"x":4.75, "y":3}, {"x":5.75, "y":3}, {"x":6.75, "y":3}, {"x":7.75, "y":3}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}, {"x":12.75, "y":3}, {"x":13.75, "y":3}, {"x":14.75, "y":3, "w":1.75}, {"x":16.75, "y":3.25}, {"x":18, "y":3}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":1.25}, {"x":5, "y":4, "w":1.25}, {"x":6.25, "y":4, "w":6.25}, {"x":12.5, "y":4, "w":1.5}, {"x":14, "y":4, "w":1.5}, {"x":15.75, "y":4.25}, {"x":16.75, "y":4.25}, {"x":17.75, "y":4.25}]
+ },
+
+ "LAYOUT_iso": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0}, {"x":16.5, "y":0}, {"x":18, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2.5, "y":1, "w":1.5}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":18, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2.5, "y":2, "w":1.75}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"x":11.25, "y":2}, {"x":12.25, "y":2}, {"x":13.25, "y":2}, {"x":14.25, "y":2}, {"x":15.25, "y":2}, {"x":16.25, "y":1, "w":1.25, "h":2}, {"x":18, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2.5, "y":3, "w":1.25}, {"x":3.75, "y":3}, {"x":4.75, "y":3}, {"x":5.75, "y":3}, {"x":6.75, "y":3}, {"x":7.75, "y":3}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}, {"x":12.75, "y":3}, {"x":13.75, "y":3}, {"x":14.75, "y":3, "w":1.75}, {"x":16.75, "y":3.25}, {"x":18, "y":3}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":1.25}, {"x":5, "y":4, "w":1.25}, {"x":6.25, "y":4, "w":6.25}, {"x":12.5, "y":4, "w":1.5}, {"x":14, "y":4, "w":1.5}, {"x":15.75, "y":4.25}, {"x":16.75, "y":4.25}, {"x":17.75, "y":4.25}]
+ }
+ }
+}
diff --git a/keyboards/jae/j01/j01.c b/keyboards/jae/j01/j01.c
new file mode 100644
index 0000000000..a72279b35c
--- /dev/null
+++ b/keyboards/jae/j01/j01.c
@@ -0,0 +1,52 @@
+/* Copyright 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/>.
+ */
+
+#include "j01.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+ setPinOutput(E6);
+}
+
+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);
+}
+
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(E6, !led_state.caps_lock);
+ }
+
+ return true;
+}
diff --git a/keyboards/jae/j01/j01.h b/keyboards/jae/j01/j01.h
new file mode 100644
index 0000000000..b5636c384c
--- /dev/null
+++ b/keyboards/jae/j01/j01.h
@@ -0,0 +1,61 @@
+/* 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 "quantum.h"
+
+/* This is 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 XXX KC_NO
+
+#define LAYOUT_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k1f, k0g, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k2e, k1g, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2f, k2g, \
+ k30, k31, k32, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, k3g, \
+ k42, k43, k44, k48, k4c, k4d, k4e, k4f, k4g \
+) \
+{ \
+ {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, k1b, k1c, k1d, k1e, k1f, k1g}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g}, \
+ {k30, k31, k32, XXX, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, k3g}, \
+ {XXX, XXX, k42, k43, k44, XXX, XXX, XXX, k48, XXX, XXX, XXX, k4c, k4d, k4e, k4f, k4g} \
+}
+
+#define LAYOUT_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k1f, k0g, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1g, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, k3g, \
+ k42, k43, k44, k48, k4c, k4d, k4e, k4f, k4g \
+) \
+{ \
+ {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, k1b, k1c, k1d, k1e, k1f, k1g}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, k3f, k3g}, \
+ {XXX, XXX, k42, k43, k44, XXX, XXX, XXX, k48, XXX, XXX, XXX, k4c, k4d, k4e, k4f, k4g} \
+}
+
diff --git a/keyboards/jae/j01/keymaps/default/keymap.c b/keyboards/jae/j01/keymaps/default/keymap.c
new file mode 100644
index 0000000000..edb195b271
--- /dev/null
+++ b/keyboards/jae/j01/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* 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/>.
+ */
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = 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_GRV, 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, MO(1), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = 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, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, 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_HOME, \
+ KC_TRNS, KC_TRNS, BL_BRTG, 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_END, \
+ 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, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/jae/j01/keymaps/default/readme.md b/keyboards/jae/j01/keymaps/default/readme.md
new file mode 100644
index 0000000000..cd7209ec74
--- /dev/null
+++ b/keyboards/jae/j01/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for j01
diff --git a/keyboards/jae/j01/readme.md b/keyboards/jae/j01/readme.md
new file mode 100644
index 0000000000..8ed94f04f4
--- /dev/null
+++ b/keyboards/jae/j01/readme.md
@@ -0,0 +1,13 @@
+# J-01
+
+A 65% with the arrow keys and right most column exploded away, with macro keys on the left hand side. Only 15 manufactured.
+
+* Keyboard Maintainer: [Maartenwut](https://github.com/maartenwut)
+* Hardware Supported: J-01 PCB
+* Hardware Availability: Private Group Buy and [Charity Raffle](https://novelkeys.xyz/collections/frontpage/products/j-01-raffle-ticket)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jae/j01: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/jae/j01/rules.mk b/keyboards/jae/j01/rules.mk
new file mode 100644
index 0000000000..b45d822c0f
--- /dev/null
+++ b/keyboards/jae/j01/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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 = 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/jc65/v32a/config.h b/keyboards/jc65/v32a/config.h
index 444ebad077..5439dbe396 100644
--- a/keyboards/jc65/v32a/config.h
+++ b/keyboards/jc65/v32a/config.h
@@ -26,8 +26,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT JC65 PS2AVRGB
/* matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 16
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_LEVELS 1
#define RGBLED_NUM 16
diff --git a/keyboards/jc65/v32a/matrix.c b/keyboards/jc65/v32a/matrix.c
deleted file mode 100644
index 57aa36b5ff..0000000000
--- a/keyboards/jc65/v32a/matrix.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-#define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_user();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/jc65/v32a/readme.md b/keyboards/jc65/v32a/readme.md
index 5027f83613..8a139ca664 100644
--- a/keyboards/jc65/v32a/readme.md
+++ b/keyboards/jc65/v32a/readme.md
@@ -1,32 +1,25 @@
-JC65 ps2avrGB
-=======
+# JC65
![JC65](https://i.imgur.com/9cJ9UbX.jpg)
A 65% keyboard with RGB
-Keyboard Maintainer: [Jason Barnachea](https://github.com/nautxx)
-
-Hardware Supported: JC65 rev.ps2avrgb
-
-Hardware Availability: [keyclack.com](https://keyclack.com/)
-
The JC65 PCB actually has two revisions: A QMK native version, and a PS2AVRGB version. Jchan offered both PCBs as options during the M65-A Round 1 group buy, and were also available choices for the 65% acrylic case group buy.
-Please note that there have been issues with QMK and PS2AVRGB boards. Random shutdowns and overheating have been reported. As of now, the cause has not been discovered.
-
These docs are for the PS2AVRGB version of the PCB. More info on qmk.fm
+* Keyboard Maintainer: [Jason Barnachea](https://github.com/nautxx)
+* Hardware Supported: JC65 rev.ps2avrgb
+* Hardware Availability: [keyclack.com](https://keyclack.com/)
+
Make example for this keyboard (after setting up your build environment):
make jc65/v32a:default
-
-Flash example for this keyboard:
- bootloadHID -r jc65_v32a_default.hex
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-Flashing on Windows can be accomplished by downloading [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash)
+ make jc65/v32a:default:flash
-To put the PS2AVRGB board into reset, hold down the left control key while plugging in the keyboard.
+**Reset Key**: Hold down the key commonly programmed as *left control* while plugging in the keyboard.
-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
+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/jc65/v32a/rules.mk b/keyboards/jc65/v32a/rules.mk
index 18e7f1de9d..a8fea7efa7 100644
--- a/keyboards/jc65/v32a/rules.mk
+++ b/keyboards/jc65/v32a/rules.mk
@@ -22,7 +22,3 @@ RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
diff --git a/keyboards/jc65/v32a/v32a.c b/keyboards/jc65/v32a/v32a.c
index 9b1e07274c..2a289872fe 100644
--- a/keyboards/jc65/v32a/v32a.c
+++ b/keyboards/jc65/v32a/v32a.c
@@ -17,9 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "v32a.h"
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
#ifdef BACKLIGHT_ENABLE
void backlight_init_ports(void) {
setPinOutput(D0);
diff --git a/keyboards/jc65/v32a/v32a.h b/keyboards/jc65/v32a/v32a.h
index ba91d80a64..b319ba80af 100644
--- a/keyboards/jc65/v32a/v32a.h
+++ b/keyboards/jc65/v32a/v32a.h
@@ -27,14 +27,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K01,K30,K11,K21,K31,K41,K51,K46,KE6,KE7,K47,KA1, KB1,K86,K77, \
K00,K10,K20, K40,K56,K50, K57,KB0,KC0,K96,K76,K66 \
){ \
- { K00, K10, K20, K30, K40, K50,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KB0, KC0, KD0,KC_NO,KC_NO }, \
- { K01, K11, K21, K31, K41, K51,KC_NO,KC_NO,KC_NO,KC_NO, KA1, KB1,KC_NO,KC_NO,KC_NO,KC_NO }, \
- { K02, K12, K22, K32, K42, K52,KC_NO,KC_NO,KC_NO,KC_NO, KA2, KB2, KC2, KD2,KC_NO,KC_NO }, \
- { K03, K13, K23, K33, K43, K53,KC_NO,KC_NO,KC_NO,KC_NO, KA3, KB3, KC3, KD3,KC_NO,KC_NO }, \
- { K04, K14, K24, K34, K44, K54,KC_NO,KC_NO,KC_NO,KC_NO, KA4, KB4, KC4, KD4, KE4,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, K16, K26, K36, K46, K56, K66, K76, K86, K96,KC_NO, KB6, KC6, KD6, KE6,KC_NO }, \
- { KC_NO, K17, K27, K37, K47, K57, K67, K77, K87,KC_NO,KC_NO, KB7, KC7, KD7, KE7,KC_NO } \
+ { K00, K10, K20, K30, K40, K50,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KB0, KC0, KD0,KC_NO }, \
+ { K01, K11, K21, K31, K41, K51,KC_NO,KC_NO,KC_NO,KC_NO, KA1, KB1,KC_NO,KC_NO,KC_NO }, \
+ { K02, K12, K22, K32, K42, K52,KC_NO,KC_NO,KC_NO,KC_NO, KA2, KB2, KC2, KD2,KC_NO }, \
+ { K03, K13, K23, K33, K43, K53,KC_NO,KC_NO,KC_NO,KC_NO, KA3, KB3, KC3, KD3,KC_NO }, \
+ { K04, K14, K24, K34, K44, K54,KC_NO,KC_NO,KC_NO,KC_NO, KA4, KB4, KC4, KD4, KE4 }, \
+ { KC_NO, K16, K26, K36, K46, K56, K66, K76, K86, K96,KC_NO, KB6, KC6, KD6, KE6 }, \
+ { KC_NO, K17, K27, K37, K47, K57, K67, K77, K87,KC_NO,KC_NO, KB7, KC7, KD7, KE7 } \
}
#define LAYOUT_kc( \
@@ -45,14 +44,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K00,K10,K20, K40,K56,K50, K57,KB0,KC0,K96,K76,K66 \
) \
{ \
- { KC_##K00,KC_##K10,KC_##K20,KC_##K30,KC_##K40,KC_##K50, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KB0,KC_##KC0,KC_##KD0, KC_NO,KC_NO }, \
- { KC_##K01,KC_##K11,KC_##K21,KC_##K31,KC_##K41,KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA1,KC_##KB1, KC_NO, KC_NO, KC_NO,KC_NO }, \
- { KC_##K02,KC_##K12,KC_##K22,KC_##K32,KC_##K42,KC_##K52, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA2,KC_##KB2,KC_##KC2,KC_##KD2, KC_NO,KC_NO }, \
- { KC_##K03,KC_##K13,KC_##K23,KC_##K33,KC_##K43,KC_##K53, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA3,KC_##KB3,KC_##KC3,KC_##KD3, KC_NO,KC_NO }, \
- { KC_##K04,KC_##K14,KC_##K24,KC_##K34,KC_##K44,KC_##K54, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA4,KC_##KB4,KC_##KC4,KC_##KD4,KC_##KE4,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_##K16,KC_##K26,KC_##K36,KC_##K46,KC_##K56,KC_##K66,KC_##K76,KC_##K86,KC_##K96, KC_NO,KC_##KB6,KC_##KC6,KC_##KD6,KC_##KE6,KC_NO }, \
- { KC_NO,KC_##K17,KC_##K27,KC_##K37,KC_##K47,KC_##K57,KC_##K67,KC_##K77,KC_##K87, KC_NO, KC_NO,KC_##KB7,KC_##KC7,KC_##KD7,KC_##KE7,KC_NO } \
+ { KC_##K00,KC_##K10,KC_##K20,KC_##K30,KC_##K40,KC_##K50, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KB0,KC_##KC0,KC_##KD0, KC_NO }, \
+ { KC_##K01,KC_##K11,KC_##K21,KC_##K31,KC_##K41,KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA1,KC_##KB1, KC_NO, KC_NO, KC_NO }, \
+ { KC_##K02,KC_##K12,KC_##K22,KC_##K32,KC_##K42,KC_##K52, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA2,KC_##KB2,KC_##KC2,KC_##KD2, KC_NO }, \
+ { KC_##K03,KC_##K13,KC_##K23,KC_##K33,KC_##K43,KC_##K53, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA3,KC_##KB3,KC_##KC3,KC_##KD3, KC_NO }, \
+ { KC_##K04,KC_##K14,KC_##K24,KC_##K34,KC_##K44,KC_##K54, KC_NO, KC_NO, KC_NO, KC_NO,KC_##KA4,KC_##KB4,KC_##KC4,KC_##KD4,KC_##KE4 }, \
+ { KC_NO,KC_##K16,KC_##K26,KC_##K36,KC_##K46,KC_##K56,KC_##K66,KC_##K76,KC_##K86,KC_##K96, KC_NO,KC_##KB6,KC_##KC6,KC_##KD6,KC_##KE6 }, \
+ { KC_NO,KC_##K17,KC_##K27,KC_##K37,KC_##K47,KC_##K57,KC_##K67,KC_##K77,KC_##K87, KC_NO, KC_NO,KC_##KB7,KC_##KC7,KC_##KD7,KC_##KE7 } \
}
#endif
diff --git a/keyboards/jj40/README.md b/keyboards/jj40/README.md
index 7d3612554b..5f4d2c8a99 100644
--- a/keyboards/jj40/README.md
+++ b/keyboards/jj40/README.md
@@ -4,81 +4,18 @@
A compact 40% (12x4) ortholinear keyboard kit made and KPRepublic on AliExpress.
-Keyboard Maintainer: [QMK Community](https://github.com/qmk)
-Hardware Supported: Atmega32A
-Hardware Availability: [AliExpress](https://www.aliexpress.com/store/product/jj40-Custom-Mechanical-Keyboard-40-PCB-programmed-40-planck-layouts-bface-firmware-gh40/3034003_32828781103.html)
+* Keyboard Maintainer: [QMK Community](https://github.com/qmk)
+* Hardware Supported: Atmega32A
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/store/product/jj40-Custom-Mechanical-Keyboard-40-PCB-programmed-40-planck-layouts-bface-firmware-gh40/3034003_32828781103.html)
Make example for this keyboard (after setting up your build environment):
- make jj40:default:program
+ make jj40: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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-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.
+ make jj40:default:flash
-In addition you may need the AVR toolchain and `bootloadHID` ([GitHub repo](https://github.com/whiteneon/bootloadHID)) for flashing:
+**Reset Key**: Hold down the *Top Right Key* key, commonly programmed as *Backspace* while plugging in the keyboard.
-For macOS:
-```
-$ brew cask install crosspack-avr
-$ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
-```
-
-For Linux:
-```
-$ sudo apt install libusb-dev
-$ wget https://www.obdev.at/downloads/vusb/bootloadHID.2012-12-08.tar.gz
-$ tar -xzf bootloadHID.2012-12-08.tar.gz
-$ cd bootloadHID.2012-12-08/commandline
-$ make
-$ sudo cp bootloadHID /usr/bin
-```
-
-In order to use the `././util/atmega32a_program.py` script, which can reboot the board into
-the bootloader, you'll need Python 2 with PyUSB installed:
-
-```
-$ pip install pyusb
-```
-
-If you prefer (or are having issues with a `program` flash), you can just build it (`make jj40:<keymap-name>` and flash the firmware (`.hex` file) directly with
-`bootloadHID` if you boot the board while holding down `Backspace` (`Top Right Key`) to keep it
-in the bootloader:
-
-```
-$ make jj40
-$ bootloadHID -r jj40_default.hex
-```
-
-For Windows 10:
-Windows sometimes doesn't recognize the jj40. The easiest way of flashing a new layout is probably using [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
-1. Go to Windows Device Manager and find the keyboard (plug it in while holding down `Backspace` (`Top Right Key`)). It can be found under Human Interface Devices or under Keyboards.
-2. Go to properties and the Details tab to find the hardware ID. You want the VID and the PID (code after the underscore). Plug them into HIDBootFlash and hit Find Device.
-3. Use `make jj40:<keymap-name>` to generate the .hex file in the qmk basis folder. Select the .hex file in HIDBootFlash and press Flash Device.
-
-
-## Troubleshooting
-
-1. Try plugging the board in while pressing `Backspace` (`Top Right 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.
-3. If you get an error such as "Resource Unavailable" when attemting to flash
- on Linux, you may want to compile and run `tools/usb_detach.c`. See `tools/README.md`
- for more info.
-
-## Recovery
-If you flash a bad hex (e.g. you have a V1 board without RGB and compile/flash blindly without editing your rules.mk), your jj40 is now semi-bricked and you're stuck unless you have access to an ISP. The [ISP Flashing Guide](https://docs.qmk.fm/#/isp_flashing_guide) contains very good (but somewhat generalized) information. However, the instructions below should get you up and running provided you have an Arduino or clone.
-
-### Arduino Setup
-1. Upload the ArduinoISP sketch onto your Arduino board (https://www.arduino.cc/en/Tutorial/ArduinoISP).
-2. Wire the Arduino to the jj40. Match the data pins on the Arduino to those on the jj40. "RST" usually goes to D10 on the Arduino. I didn't need a capacitor when using my Uno.
-![Imgur](https://i.imgur.com/oLWJOkQ.jpg)
-3. Get a working bootloader from https://blog.winkeyless.kr/m/152. The file is called "main.hex" from the archive called "ps2avrGB_bootloader_161215.zip" Copy "main.hex" to your qmk folder.
-4. Burn the bootloader with the following command
-` avrdude -b 19200 -c avrisp -p atmega32 -v -e -U hfuse:w:0xD0:m -U lfuse:w:0x0F:m -U flash:w:main.hex:i -P comPORT`
-Change `comPORT` to whatever port is used by the Arduino (e.g. `com11` in Windows or `/dev/ttyACM0` in Linux). Use Device Manager in Windows to find the port being used. Use `ls /dev/tty*` in Linux.
-5. If this process is successful, you should now be able to upload normally.
+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/jj40/keymaps/default/keymap.c b/keyboards/jj40/keymaps/default/keymap.c
index 47c6bada68..f54eac20af 100644
--- a/keyboards/jj40/keymaps/default/keymap.c
+++ b/keyboards/jj40/keymaps/default/keymap.c
@@ -99,6 +99,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/jj40/rules.mk b/keyboards/jj40/rules.mk
index 8e0e8c8647..c53a6804c0 100644
--- a/keyboards/jj40/rules.mk
+++ b/keyboards/jj40/rules.mk
@@ -1,18 +1,3 @@
-# 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
diff --git a/keyboards/jj4x4/README.md b/keyboards/jj4x4/README.md
index 29dc2605de..a7c93c930f 100644
--- a/keyboards/jj4x4/README.md
+++ b/keyboards/jj4x4/README.md
@@ -2,70 +2,20 @@
![jj4x4](https://cdn.shopify.com/s/files/1/2711/4238/products/JJ4x4case-1_1024x1024.jpg?v=1532325339)
-A 4x4 keypad kit made and KPRepublic on AliExpress. This is a chopped off version of the jj40 with rearranged keys.
+A 4x4 keypad kit made and KPRepublic on AliExpress. This is a chopped off version of the jj40 with rearranged keys.
-Keyboard Maintainer: [QMK Community](https://github.com/qmk)
-Hardware Supported: Atmega32A
-Hardware Availability: [AliExpress](https://www.aliexpress.com/item/jj4x4-jj4X4-16-keys-Custom-Mechanical-Keyboard-PCB-programmed-numpad-layouts-bface-firmware-with-rgb-bottom/32901955446.html?spm=2114.search0104.3.7.3ebf431ae1d9ic&ws_ab_test=searchweb0_0,searchweb201602_4_10065_10130_10068_10547_319_317_10548_10545_10696_453_10084_454_10083_433_10618_431_10307_537_536_10902_10059_10884_10887_321_322_10103,searchweb201603_6,ppcSwitch_0&algo_expid=9d1891dd-80af-4793-a889-5a62e1fdfdd8-1&algo_pvid=9d1891dd-80af-4793-a889-5a62e1fdfdd8&transAbTest=ae803_5)
+* Keyboard Maintainer: [QMK Community](https://github.com/qmk)
+* Hardware Supported: Atmega32A
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/jj4x4-jj4X4-16-keys-Custom-Mechanical-Keyboard-PCB-programmed-numpad-layouts-bface-firmware-with-rgb-bottom/32901955446.html)
Make example for this keyboard (after setting up your build environment):
- make jj4x4:default:program
+ make jj4x4: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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-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.
+ make jj4x4:default:flash
-In addition you may need the AVR toolchain and `bootloadHID` ([GitHub repo](https://github.com/whiteneon/bootloadHID)) for flashing:
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *8* while plugging in the keyboard.
-For macOS:
-```
-$ brew cask install crosspack-avr
-$ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
-```
-
-For Linux:
-```
-$ sudo apt install libusb-dev
-$ wget https://www.obdev.at/downloads/vusb/bootloadHID.2012-12-08.tar.gz
-$ tar -xzf bootloadHID.2012-12-08.tar.gz
-$ cd bootloadHID.2012-12-08/commandline
-$ make
-$ sudo cp bootloadHID /usr/bin
-```
-
-In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
-the bootloader, you'll need Python 2 with PyUSB installed:
-
-```
-$ pip install pyusb
-```
-
-If you prefer (or are having issues with a `program` flash), you can just build it (`make jj40:<keymap-name>` and flash the firmware (`.hex` file) directly with
-`bootloadHID` if you boot the board while holding down `8` (second from top, second from left, with usb plug is at the top) to keep it
-in the bootloader:
-
-```
-$ make jj40
-$ bootloadHID -r jj4x4_default.hex
-```
-
-For Windows 10:
-Windows sometimes doesn't recognize the jj4x4. The easiest way of flashing a new layout is probably using [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
-1. Go to Windows Device Manager and find the keyboard (plug it in while holding down `8` (second from top, second from left, with usb plug is at the top)). It can be found under Human Interface Devices or under Keyboards.
-2. Go to properties and the Details tab to find the hardware ID. You want the VID and the PID (code after the underscore). Plug them into HIDBootFlash and hit Find Device.
-3. Use `make jj4x4:<keymap-name>` to generate the .hex file in the qmk basis folder. Select the .hex file in HIDBootFlash and press Flash Device.
-
-
-## Troubleshooting
-
-1. Try plugging the board in while pressing `8` (usb plug at top, second from top, second from left). 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.
-3. If you get an error such as "Resource Unavailable" when attemting to flash
- on Linux, you may want to compile and run `tools/usb_detach.c`. See `tools/README.md`
- for more info.
+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/jj50/README.md b/keyboards/jj50/README.md
index f7b8acc641..2d3e711bec 100644
--- a/keyboards/jj50/README.md
+++ b/keyboards/jj50/README.md
@@ -1,83 +1,19 @@
-JJ50
-==========================
+# JJ50
-This is a port of the QMK firmware for boards that are based on the
-ps2avrGB firmware, like the [ps2avrGB keyboard](https://www.keyclack.com/product/gb-ps2avrgb/), for use on the JJ50, a preonic-like board.
+A preonic-like board
-Most of the code was taken and amended from YMD96, which in itself was taken from ps2avrGB and amended by Andrew Novak.
-
-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.
-
-Hardware Supported: JJ50 with the ATmega32a chip.
-Hardware Availability: [KPrepublic on AliExpress](https://www.aliexpress.com/item/jj50-v1-0-Custom-Mechanical-Keyboard-50-PCB-programmed-50-preonic-layouts-bface-firmware-with-rgb/32848915277.html)
-
-This version by [Wayne K. Jones](github.com/WarmCatUK).
-
-
-## Installing and Building
+* Keyboard Maintainer: [Wayne K. Jones](github.com/WarmCatUK)
+* Hardware Supported: JJ50 with the ATmega32a chip.
+* Hardware Availability: [KPrepublic on AliExpress](https://www.aliexpress.com/item/jj50-v1-0-Custom-Mechanical-Keyboard-50-PCB-programmed-50-preonic-layouts-bface-firmware-with-rgb/32848915277.html)
Make example for this keyboard (after setting up your build environment):
-```
-$ 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/#/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
-USB report options are supported.
-In addition you may need 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
-```
-
-In order to use the `././util/atmega32a_program.py` script, which can reboot the board into
-the bootloader, you'll need Python 2 with PyUSB installed:
-
-```
-$ pip install pyusb
-```
-
-If you prefer, you can just build it and flash the firmware directly with
-`bootloadHID` if you boot the board while holding down `Backspace` (`key below top right key`) to keep it
-in the bootloader:
-
-```
-$ make jj50
-$ bootloadHID -r jj50_default.hex
-```
-I dont use windows personally, but the following is from ymd96 regarding flashing the atmega32a:
-
-Since the JJ50 uses an ATmega32a chip instead of the 32u4, you need to download [HIDBootFlash v.1.0](http://vusb.wikidot.com/project:hidbootflash) for Windows. If anyone knows of a Linux/Mac bootflasher that works, edit this readme!
-On Windows, I use [MINGw](http://www.mingw.org/) to compile the keymaps. On Linux or OSX you can simply use the terminal.
-
-Once you have those two pieces of software:
-Build the keyboard with
-```
-$ make jj50:default
-```
-If you make your own layout, change the `default` word to whatever your layout is.
-
-And flash the compiled hex file with `HIDBootFlash`. Simply put the board in flashing mode by plugging it in while holding the key below the top right key, and click `find device`. Then you can specify the .hex file and flash it to the device.
-
-
-## Troubleshooting
+ make jj50:default
-1. Try plugging the board in while pressing `Backspace` (`Key below the top right 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.
-3. If you get an error such as "Resource Unavailable" when attemting to flash on Linux, you may want to compile and run `tools/usb_detach.c`. See `tools/README.md` for more info.
-4. I was occasionally finding that I wasn't flashing changes that I was making to my keymap. If that happens, remove the previous build and simply force rebuild by making with:
-```
-$ rm jj50_default.hex
-$ make -B jj50:default
-$ make -B jj50:default:program
-```
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make jj50:default:flash
+**Reset Key**: Hold down the key `Backspace` (`Key below the top right key`) while plugging in the keyboard.
+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/jj50/config.h b/keyboards/jj50/config.h
index dfd8a4a8fb..884a28d506 100644
--- a/keyboards/jj50/config.h
+++ b/keyboards/jj50/config.h
@@ -32,9 +32,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DESCRIPTION Preonic-like clone
/* matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 15
-#define DIODE_DIRECTION ROW2COL
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4 }
+#define DIODE_DIRECTION COL2ROW
//#define BACKLIGHT_PIN D4
#define BACKLIGHT_LEVELS 12
diff --git a/keyboards/jj50/jj50.c b/keyboards/jj50/jj50.c
index 7c3cee95d1..a302adf405 100644
--- a/keyboards/jj50/jj50.c
+++ b/keyboards/jj50/jj50.c
@@ -20,16 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "backlight.h"
#include "backlight_custom.h"
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
#ifdef BACKLIGHT_ENABLE
void backlight_init_ports(void) {
b_led_init_ports();
diff --git a/keyboards/jj50/jj50.h b/keyboards/jj50/jj50.h
index 8a904897e6..6b1c7eacf3 100644
--- a/keyboards/jj50/jj50.h
+++ b/keyboards/jj50/jj50.h
@@ -25,8 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "keycode.h"
#include "action.h"
-void matrix_init_user(void);
-
#define LAYOUT_ortho_5x12( \
K011, K010, K009, K008, K004, K005, K006, K007, K003, K002, K201, K000, \
K111, K110, K109, K108, K104, K105, K106, K107, K103, K102, K001, K100, \
diff --git a/keyboards/jj50/keymaps/abstractkb/config.h b/keyboards/jj50/keymaps/abstractkb/config.h
new file mode 100644
index 0000000000..9439a929e9
--- /dev/null
+++ b/keyboards/jj50/keymaps/abstractkb/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define RGBLIGHT_SLEEP \ No newline at end of file
diff --git a/keyboards/jj50/keymaps/abstractkb/keymap.c b/keyboards/jj50/keymaps/abstractkb/keymap.c
index 456adeee4b..2de5ce6b99 100644
--- a/keyboards/jj50/keymaps/abstractkb/keymap.c
+++ b/keyboards/jj50/keymaps/abstractkb/keymap.c
@@ -44,7 +44,7 @@ void keyboard_post_init_user(void) {
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _RAISE:
- rgblight_sethsv_noeeprom(240,255,255);
+ rgblight_sethsv_noeeprom(170,255,255);
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
break;
case _LOWER:
diff --git a/keyboards/jj50/keymaps/abstractkb_gergomatch/config.h b/keyboards/jj50/keymaps/abstractkb_gergomatch/config.h
new file mode 100644
index 0000000000..9439a929e9
--- /dev/null
+++ b/keyboards/jj50/keymaps/abstractkb_gergomatch/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define RGBLIGHT_SLEEP \ No newline at end of file
diff --git a/keyboards/jj50/keymaps/abstractkb_gergomatch/keymap.c b/keyboards/jj50/keymaps/abstractkb_gergomatch/keymap.c
new file mode 100644
index 0000000000..9c129ba9ab
--- /dev/null
+++ b/keyboards/jj50/keymaps/abstractkb_gergomatch/keymap.c
@@ -0,0 +1,135 @@
+/*
+Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Modified 2017 Andrew Novak <ndrw.nvk@gmail.com>
+Modified 2018 Wayne Jones (WarmCatUK) <waynekjones@gmail.com>
+Modified 2019 AbstractKB
+
+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
+
+enum layers {
+ _DEFLT,
+ _FUNC,
+ _SYM,
+ _META
+};
+
+enum custom_keycodes {
+ MYRGB_TG = SAFE_RANGE
+};
+
+bool rgbinit = true;
+bool rgbon = true;
+
+const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {1,5,5}; //only using the first one
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ led_set_user(host_keyboard_leds());
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _FUNC:
+ rgblight_sethsv_noeeprom(170,255,255);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ break;
+ case _SYM:
+ rgblight_sethsv_noeeprom(0,255,255);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ break;
+ case _META:
+ rgblight_sethsv_noeeprom(0,255,255);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
+ break;
+ default: //_DEFLT
+ rgblight_sethsv_noeeprom(0,0,255);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ break;
+ }
+
+ return state;
+}
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_ALTERNATING);
+ } else {
+ layer_state_set_user(layer_state);
+ }
+}
+
+void myrgb_toggle(void) {
+ if (rgbon) {
+ rgblight_disable_noeeprom();
+ rgbon = false;
+ } else {
+ rgblight_enable_noeeprom();
+ layer_state_set_user(layer_state);
+ led_set_user(host_keyboard_leds());
+ rgbon = true;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case MYRGB_TG:
+ if (record->event.pressed) {
+ myrgb_toggle();
+ }
+ return false;
+ default:
+ return true;
+ }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_DEFLT] = 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT, \
+ KC_BSPC, 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, \
+ KC_LCTL, MO(_META), KC_LGUI, KC_LALT, MO(_SYM),KC_SPC,KC_SPC,MO(_FUNC),KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+
+ [_FUNC] = 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, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, LCTL(LGUI(KC_LEFT)), LGUI(KC_L), LCTL(LGUI(KC_RGHT)), _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_CAPS, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+
+ [_SYM] = 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, \
+ _______,S(KC_1),S(KC_2),S(KC_LBRC),S(KC_RBRC),S(KC_BSLS),_______, S(KC_MINS), _______, _______, _______, _______, \
+ _______, S(KC_3), S(KC_4), S(KC_9), S(KC_0), KC_GRV, S(KC_EQL), KC_MINS, KC_BSLS, S(KC_8), _______, _______, \
+ _______, S(KC_5), S(KC_6), KC_LBRC,KC_RBRC,S(KC_GRV), S(KC_7),KC_EQL, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+
+ [_META] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MYRGB_TG \
+ )
+};
diff --git a/keyboards/jj50/keymaps/abstractkb_gergomatch/readme.md b/keyboards/jj50/keymaps/abstractkb_gergomatch/readme.md
new file mode 100644
index 0000000000..a45ece7ff7
--- /dev/null
+++ b/keyboards/jj50/keymaps/abstractkb_gergomatch/readme.md
@@ -0,0 +1,4 @@
+# My personal layout for the JJ50
+
+It is an approximation of a cross between a 60% the gergo function layout
+It also uses layer based rgb underglow, and the underglow flashes when capslock is enabled \ No newline at end of file
diff --git a/keyboards/jj50/matrix.c b/keyboards/jj50/matrix.c
deleted file mode 100644
index 95c6057e7c..0000000000
--- a/keyboards/jj50/matrix.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-Modified 2018 by Wayne K Jones <github.com/WarmCatUK>
-
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- //----> DDRD &= ~(1<<PIND7);
- // Port D not used on this keyboard
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- //PORTD |= (1<<PIND7);
- // Port D not used on this keyboard
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
- matrix_init_quantum(); // missing from original port by Luiz
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
- matrix_scan_quantum(); // also missing in original PS2AVRGB implementation
- //matrix_scan_user();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/jj50/rules.mk b/keyboards/jj50/rules.mk
index 40473e6ecc..62b21e4df2 100644
--- a/keyboards/jj50/rules.mk
+++ b/keyboards/jj50/rules.mk
@@ -29,8 +29,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
#OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c backlight.c
+SRC = backlight.c
LAYOUTS = ortho_5x12
diff --git a/keyboards/just60/config.h b/keyboards/just60/config.h
new file mode 100644
index 0000000000..ef0af7c610
--- /dev/null
+++ b/keyboards/just60/config.h
@@ -0,0 +1,54 @@
+/*
+Copyright 2019 Jianfei Wang
+
+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 0x1960
+#define DEVICE_VER 0x0001
+#define MANUFACTURER YDKB
+#define PRODUCT Just60
+#define DESCRIPTION Just60 Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#define MATRIX_ROW_PINS { E2, C7, B3, B2, B1 }
+#define MATRIX_COL_PINS { D6, D7, B4, B6, B5, B7, F7, F6, F5, F4, F1, F0, E6, B0 }
+#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+
+#define QMK_ESC_OUTPUT D6 // usually COL
+#define QMK_ESC_INPUT E2 // usually ROW
+
+/* 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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#endif
diff --git a/keyboards/just60/just60.h b/keyboards/just60/just60.h
new file mode 100644
index 0000000000..426324fe02
--- /dev/null
+++ b/keyboards/just60/just60.h
@@ -0,0 +1,41 @@
+/* Copyright 2019 Jianfei Wang
+ *
+ * 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 is 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, K48 , \
+ 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, K2D , \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, \
+ K40, K41, K42, K44, K45, K47, K49, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO }, \
+ { 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, KC_NO, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, K3C, KC_NO }, \
+ { K40, K41, K42, KC_NO, K44, K45, KC_NO, K47, K48, K49, K4A, K4B, K4C, K4D }, \
+}
diff --git a/keyboards/just60/keymaps/default/keymap.c b/keyboards/just60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..da034e0e44
--- /dev/null
+++ b/keyboards/just60/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2019 Jianfei Wang
+ *
+ * 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 names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN,
+ _COMMAND
+};
+
+#define FN_SPC LT(_FN, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = 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_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,
+ MO(_FN), 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_LALT, KC_LGUI, FN_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+ [_FN] = 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_CAPS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, MO(_COMMAND),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+ ),
+ [_COMMAND] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/just60/keymaps/default/readme.md b/keyboards/just60/keymaps/default/readme.md
new file mode 100644
index 0000000000..927618c910
--- /dev/null
+++ b/keyboards/just60/keymaps/default/readme.md
@@ -0,0 +1,19 @@
+# The default keymap for Just60
+
+Just60 could be customized to many layouts, and this is just one of them.
+
+This layout is an ANSI layout with a Minila spacebar row.
+
+```
+ +-------------------------------------------------------------------------+
+ | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP |
+ +-------------------------------------------------------------------------+
+ | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ +-------------------------------------------------------------------------+
+ | FN | A | S | D | F | G | H | J | K | L | ; | ' | RETURN |
+ +-------------------------------------------------------------------------+
+ | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT |
+ +-------------------------------------------------------------------------+
+ | LCMD | LALT | LGUI | FN | SPACE | RGUI | RALT | LEFT | DOWN | UP | RGHT |
+ +-------------------------------------------------------------------------+
+```
diff --git a/keyboards/just60/readme.md b/keyboards/just60/readme.md
new file mode 100644
index 0000000000..f78adcd529
--- /dev/null
+++ b/keyboards/just60/readme.md
@@ -0,0 +1,17 @@
+# Just60
+
+Just60 keyboard produced by Yang. The keyboard comes with a custom Mass Storage Device bootloader and a TMK based firmware from ydkb.io.
+
+To use a QMK based firmware, you might want to install a QMK bootloader. The PCB exposes 6 pins for ISP(In-System Programming), and they are located just under the ATMega32U4 chip. From left to right, the pins are `VCC`, `SCLK`, `MOSI`, `MISO`, `RESET`, `GND`. The `GND` is the square one. You could program the flash with any AVR programmer, or a Raspberry Pi with `avrdude`.
+
+Backlight LEDs and Bluetooth are not working yet.
+
+* Keyboard Maintainer: [Jianfei Wang](https://github.com/thinxer)
+* Hardware Supported: Just60 (atmega32u4)
+* Hardware Availability: https://item.taobao.com/item.htm?id=564176654249
+
+Make example for this keyboard (after setting up your build environment):
+
+ make just60: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/just60/rules.mk b/keyboards/just60/rules.mk
new file mode 100644
index 0000000000..3aaf101543
--- /dev/null
+++ b/keyboards/just60/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = lufa-ms
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/k_type/keymaps/default/keymap.c b/keyboards/k_type/keymaps/default/keymap.c
index 331d331552..4f304b0120 100644
--- a/keyboards/k_type/keymaps/default/keymap.c
+++ b/keyboards/k_type/keymaps/default/keymap.c
@@ -1,6 +1,6 @@
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = 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_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, \
@@ -9,13 +9,3 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
};
-
-// 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) {
-
-};
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/readme.md b/keyboards/kbdfans/kbd67/mkii_soldered/readme.md
index 313f244e14..d864c9e99b 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/readme.md
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/readme.md
@@ -5,9 +5,9 @@
A simple 65% keyboard
This is for the solderable PCB for the MKII. For hotswap PCB firmware, please check the other directories.
-Keyboard Maintainer: [ai03](https://github.com/ai03-2725) / [KBDfans](https://kbdfans.cn/)
-Hardware Supported: KBD67 MKII Soldered PCB (Not hotswap)
-Hardware Availability: KBDfans
+* Keyboard Maintainer: [ai03](https://github.com/ai03-2725) / [KBDfans](https://kbdfans.cn/)
+* Hardware Supported: KBD67 MKII Soldered PCB (Not hotswap)
+* Hardware Availability: KBDfans
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/keymap.c b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/keymap.c
new file mode 100644
index 0000000000..4ad4663ca8
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/keymap.c
@@ -0,0 +1,41 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base layer
+ * ,--------------------------------------------------------------------------------------------------.
+ * |Esc ~| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace | Home |
+ * |-------------------------------------------------------------------------------------------+------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | End |
+ * |-------------------------------------------------------------------------------------------+------+
+ * | CtrlCaps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | PgUp |
+ * |-------------------------------------------------------------------------------------------+------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | MO(2) | Up | PgDn |
+ * +-------------------------------------------------------------------------┬---┬-------------+------+
+ * | LCtrl | LGUI | LAlt | Space | Btn2 | MO(1)| | Left |Down | Right|
+ * `-------------------------------------------------------------------------┘ └-------------+------´
+ */
+ [0] = LAYOUT_65_ansi_blocker( /* Base */
+ 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_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_BSLASH, KC_END,
+ CTL_T(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, MO(2), KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BTN2, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_65_ansi_blocker( /* MO(1) - Fn */
+ 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_HOME,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,
+ CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, _______,_______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, KC_PGDN,
+ KC_LSFT, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+
+ [2] = LAYOUT_65_ansi_blocker( /* MO(2) - RShift */
+ KC_GESC, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ LCTL(KC_L), _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/rules.mk b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/rules.mk
new file mode 100644
index 0000000000..a4a9db461b
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/codecoffeecode/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/import-for-qmk-configurator/kemmeldev-4-layered-layout.json b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/import-for-qmk-configurator/kemmeldev-4-layered-layout.json
new file mode 100644
index 0000000000..65797f216d
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/import-for-qmk-configurator/kemmeldev-4-layered-layout.json
@@ -0,0 +1 @@
+{"keyboard":"kbdfans/kbd67/mkiirgb","keymap":"default_37b6a2a","layout":"LAYOUT_65_ansi_blocker","layers":[["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_CALC","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","MO(1)","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","KC_RCTL","KC_LEFT","KC_DOWN","KC_RGHT"],["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_CALC","KC_CAPS","KC_BTN1","KC_MS_U","KC_BTN2","KC_WH_U","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_UP","KC_PSCR","KC_SLCK","KC_PAUS","RESET","KC_MYCM","KC_TRNS","KC_MS_L","KC_MS_D","KC_MS_R","KC_WH_D","KC_TRNS","RGB_SAI","RGB_SAD","KC_LEFT","KC_DOWN","KC_RGHT","KC_TRNS","EEP_RST","KC_HOME","KC_LSFT","RGB_TOG","RGB_MOD","RGB_VAI","RGB_VAD","RGB_SPI","RGB_SPD","RGB_HUI","RGB_HUD","KC_TRNS","KC_TRNS","KC_TRNS","KC_VOLU","KC_MUTE","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","TO(2)","KC_MPRV","KC_VOLD","KC_MNXT"],["KC_GESC","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11","KC_F12","KC_BSPC","KC_CALC","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","MO(3)","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","KC_TRNS","KC_LEFT","KC_DOWN","KC_RGHT"],["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_DEL","KC_CALC","KC_CAPS","KC_BTN1","KC_MS_U","KC_BTN2","KC_WH_U","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_UP","KC_PSCR","KC_SLCK","KC_PAUS","RESET","KC_MYCM","KC_TRNS","KC_MS_L","KC_MS_D","KC_MS_R","KC_WH_D","KC_TRNS","RGB_SAI","RGB_SAD","KC_LEFT","KC_DOWN","KC_RGHT","KC_TRNS","EEP_RST","KC_HOME","KC_LSFT","RGB_TOG","RGB_MOD","RGB_VAI","RGB_VAD","RGB_SPI","RGB_SPD","RGB_HUI","RGB_HUD","KC_TRNS","KC_TRNS","KC_TRNS","KC_VOLU","KC_MUTE","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","TO(0)","KC_MPRV","KC_VOLD","KC_MNXT"]],"author":"","notes":""} \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/keymap.c b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/keymap.c
new file mode 100644
index 0000000000..0aabb6d6fd
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/keymap.c
@@ -0,0 +1,8 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(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_CALC, 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, MO(1), 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, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT_65_ansi_blocker(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_CALC, KC_CAPS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_MYCM, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_TRNS, RGB_SAI, RGB_SAD, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, EEP_RST, KC_HOME, KC_LSFT, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(2), KC_MPRV, KC_VOLD, KC_MNXT),
+ [2] = LAYOUT_65_ansi_blocker(KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_CALC, 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, MO(3), 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, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT),
+ [3] = LAYOUT_65_ansi_blocker(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_DEL, KC_CALC, KC_CAPS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_MYCM, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_TRNS, RGB_SAI, RGB_SAD, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, EEP_RST, KC_HOME, KC_LSFT, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_MPRV, KC_VOLD, KC_MNXT)
+};
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/layers.json b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/layers.json
new file mode 100644
index 0000000000..9711685d4b
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/layers.json
@@ -0,0 +1 @@
+[["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_CALC", "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", "MO(1)", "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", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"], ["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_CALC", "KC_CAPS", "KC_BTN1", "KC_MS_U", "KC_BTN2", "KC_WH_U", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_UP", "KC_PSCR", "KC_SLCK", "KC_PAUS", "RESET", "KC_MYCM", "KC_TRNS", "KC_MS_L", "KC_MS_D", "KC_MS_R", "KC_WH_D", "KC_TRNS", "RGB_SAI", "RGB_SAD", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_TRNS", "EEP_RST", "KC_HOME", "KC_LSFT", "RGB_TOG", "RGB_MOD", "RGB_VAI", "RGB_VAD", "RGB_SPI", "RGB_SPD", "RGB_HUI", "RGB_HUD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_VOLU", "KC_MUTE", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "TO(2)", "KC_MPRV", "KC_VOLD", "KC_MNXT"], ["KC_GESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_BSPC", "KC_CALC", "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", "MO(3)", "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", "KC_TRNS", "KC_LEFT", "KC_DOWN", "KC_RGHT"], ["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_DEL", "KC_CALC", "KC_CAPS", "KC_BTN1", "KC_MS_U", "KC_BTN2", "KC_WH_U", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_UP", "KC_PSCR", "KC_SLCK", "KC_PAUS", "RESET", "KC_MYCM", "KC_TRNS", "KC_MS_L", "KC_MS_D", "KC_MS_R", "KC_WH_D", "KC_TRNS", "RGB_SAI", "RGB_SAD", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_TRNS", "EEP_RST", "KC_HOME", "KC_LSFT", "RGB_TOG", "RGB_MOD", "RGB_VAI", "RGB_VAD", "RGB_SPI", "RGB_SPD", "RGB_HUI", "RGB_HUD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_VOLU", "KC_MUTE", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "TO(0)", "KC_MPRV", "KC_VOLD", "KC_MNXT"]] \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/readme.md b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/readme.md
new file mode 100644
index 0000000000..8a7b230dbf
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/kemmeldev/readme.md
@@ -0,0 +1,54 @@
+# Layout description
+
+* This layout features 4 layers. The caps lock key has been replaced by the FN key.
+* The first layer features ESC/~ and numbers and symbols on the top row of the keyboard.
+* The top right key launches calculator.
+* Pressing the FN key activates a temporary second layer. This layer contains:
+ * ESC/~ is now `/~
+ * WASD to move your mouse up, left, down, right respectively.
+ * Q and E click left and right mouse respectively.
+ * R and F scroll mousewheel up and down respectively.
+ * IJKL act as up, left, down, right arrows respectively.
+ * UP/DOWN keys act as volume UP/DOWN
+ * LEFT/RIGHT keys act as previous/next track.
+ * The key below the calculator key launches 'This PC'
+ * RGB Controls
+ * Z toggles ON/OFF
+ * X toggles RGB_MODE
+ * C and V increase/decrease brightness
+ * B and N increase/decrease effect
+ * M and , increase/decrease hue
+ * H and J increase/decrease saturation
+* Pressing RIGHT CTRL whilst holding the FN key allows you to swap to the third layer.
+ * This layer can switch to the fourth layer by holding the FN key.
+* The third and fourth layer are essentially copies of the first and second layer and offer the same functionalities, however the third and fourth layer have the F-keys and Num/Symbol keys swapped.
+
+## Layer 0
+
+![](https://i.imgur.com/9U9PaTw.png)
+
+## Layer 1
+
+![](https://i.imgur.com/rqqjiyn.png)
+
+## Layer 2
+
+![](https://i.imgur.com/A7YkrTF.png)
+
+## Layer 3
+
+![](https://i.imgur.com/sxJ1ocF.png)
+
+# Generated Keymap Layout
+
+This layout was generated by the QMK API. You can find the JSON data used to
+generate this keymap in the file layers.json.
+
+To make use of this file you will need follow the following steps:
+
+* Download or Clone QMK Firmware: <https://github.com/qmk/qmk_firmware/>
+* Extract QMK Firmware to a location on your hard drive
+* Copy this folder into %s
+* You are now ready to compile or use your keymap with the source
+
+More information can be found in the QMK docs: <https://docs.qmk.fm> \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/keymap.c b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/keymap.c
new file mode 100644
index 0000000000..bda8fbc7a8
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/keymap.c
@@ -0,0 +1,19 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ 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_INS,
+ 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_HOME,
+ 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_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi_blocker(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, KC_TRNS, RGB_SAI, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END,
+ KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI, KC_TRNS, RGB_SAD, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, RGB_RMOD, RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_PGUP, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ )
+};
+
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/readme.md b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/readme.md
new file mode 100644
index 0000000000..7e681294f2
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/mikefightsbears/readme.md
@@ -0,0 +1 @@
+# The default keymap for hotswap
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/readme.md b/keyboards/kbdfans/kbd67/mkiirgb/readme.md
index 71c2ffad2b..3a5621d844 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/readme.md
+++ b/keyboards/kbdfans/kbd67/mkiirgb/readme.md
@@ -1,14 +1,19 @@
-# KBD67 Mk.II RGB
+# KBD67 Mk.II RGB (Hotswap)
A customizable 65% RGB keyboard.
-Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
-Hardware Supported: KBD67 Mk.II RGB
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: KBD67 Mk.II RGB V1 and V2
+* Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+There are two versions of the KBD67 MKII RGB. Please use the appropriate firmware for your board.
+
+* V1: STM32F303 (Arm), takes `.bin` files
+* V2: ATmega32U4 (AVR), takes `.hex` files
Make example for this keyboard (after setting up your build environment):
- make kbdfans/kbd67/mkiirgb:default
+ make kbdfans/kbd67/mkiirgb/v1:default # Arm (STM32F303)
+ make kbdfans/kbd67/mkiirgb/v2:default # AVR (ATmega32U4)
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/kbdfans/kbd67/mkiirgb/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h
index b60685e2b0..b60685e2b0 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/config.h
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v1/readme.md b/keyboards/kbdfans/kbd67/mkiirgb/v1/readme.md
new file mode 100644
index 0000000000..94550ef320
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/readme.md
@@ -0,0 +1,13 @@
+# KBD67 Mk.II RGB V1 (Hotswap)
+
+A hotswap 65% keyboard with USB C and inswitch RGB.
+
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: KBD67 Mk.II RGB V1
+* Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdfans/kbd67/mkiirgb/v1: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/kbdfans/kbd67/mkiirgb/rules.mk b/keyboards/kbdfans/kbd67/mkiirgb/v1/rules.mk
index ea3746069f..ea3746069f 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/rules.mk
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/rules.mk
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h
new file mode 100644
index 0000000000..bd6827ab05
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h
@@ -0,0 +1,48 @@
+#pragma once
+#include "config_common.h"
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1224
+#define DEVICE_VER 0x0002
+#define MANUFACTURER KBDfans
+#define PRODUCT kbd67mkiirgb
+#define DESCRIPTION kbd67mkii rgb keyboard
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS {F0, F1, F4, E6, C6 }
+#define MATRIX_COL_PINS {F7, F6, F5, C7, B0, B1, B2, B3, B4, D7, D6, D4, D5, D3, D2}
+#define DIODE_DIRECTION COL2ROW
+#ifdef RGB_MATRIX_ENABLE
+#define RGB_MATRIX_LED_PROCESS_LIMIT 4
+#define RGB_MATRIX_LED_FLUSH_LIMIT 26
+#define DEBOUNCE 3
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+#define RGB_MATRIX_KEYPRESSES
+#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define DISABLE_RGB_MATRIX_BAND_SAT
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define DISABLE_RGB_MATRIX_SPLASH
+#define DISABLE_RGB_MATRIX_MULTISPLASH
+#define DISABLE_RGB_MATRIX_SOLID_SPLASH
+#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+#define DISABLE_RGB_MATRIX_CYCLE_ALL
+#define DISABLE_RGB_MATRIX_RAINDROPS
+#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 160
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 35
+#define DRIVER_2_LED_TOTAL 32
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#endif
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v2/readme.md b/keyboards/kbdfans/kbd67/mkiirgb/v2/readme.md
new file mode 100644
index 0000000000..57683caab9
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/readme.md
@@ -0,0 +1,13 @@
+# KBD67 Mk.II RGB V2 (Hotswap)
+
+A hotswap 65% keyboard with USB C, inswitch RGB, and ESD protection.
+
+* Keyboard Maintainer: [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: KBD67 Mk.II RGB V2
+* Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdfans/kbd67/mkiirgb/v2: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/kbdfans/kbd67/mkiirgb/v2/rules.mk b/keyboards/kbdfans/kbd67/mkiirgb/v2/rules.mk
new file mode 100644
index 0000000000..e10c4010a5
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+MIDI_ENABLE = no # MIDI support
+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
+RGB_MATRIX_ENABLE = yes # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/kbdfans/kbd67/readme.md b/keyboards/kbdfans/kbd67/readme.md
index f1490d5bf1..2f5d10fa07 100644
--- a/keyboards/kbdfans/kbd67/readme.md
+++ b/keyboards/kbdfans/kbd67/readme.md
@@ -1,22 +1,28 @@
# KBD67
-A 65% keyboard sold in four variants.
-1. Rev1: Typical keyboard that had to be soldered together, supporting multiple layouts. The rev1 PCB is sold under the name "KBD65".
-2. HotSwap: Released in late 2018, Hotswap single layout keyboard.
-3. Rev2: Released in April/May 2019, the Rev2 also needs to be soldered together and supports multiple layouts.
-4. MKII RGB: Released in September 2019. ARM powered hotswap board.
+A 65% keyboard sold in several variants.
+
+1. [Rev1](rev1/): Released in early 2018. Atmega32u4 soldered keyboard. Sold under the name "KBD65".
+2. [HotSwap](hotswap/): Released in late 2018. Atmega32U4 hotswap single layout keyboard.
+3. [Rev2](rev2/): Released in April/May 2019. Atmega32u4 soldered keyboard.
+4. [MKII](mkii_soldered/): Released in September 2019, designed by ai03. Atmega32u4 soldered keyboard. ESD Protected
+5. [MKII RGB V1](mkiirgb/v1/): Released in September 2019. Arm hotswap board.
+6. [MKII RGB V2](mkiirgb/v2/): Released in December 2019. Atmega32u4 hotswap board. ESD Protected.
+
**Firmware files are SPECIFIC to each board. Firmware files from one, will not work on the other.** Please use the `.hex` or `.bin` appropriate for your board.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [moyi4681](https://github.com/moyi4681)
-Hardware Supported: KBD67 rev1, rev2, hotswap, mkiirgb
-Hardware Availability: KBDFans
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [moyi4681](https://github.com/moyi4681)
+* Hardware Supported: KBD67 rev1, rev2, hotswap, mkii, mkiirgb v1, mkiirgb v2
+* Hardware Availability: KBDFans
Make examples for this keyboard (after setting up your build environment):
make kbdfans/kbd67/rev1:default
make kbdfans/kbd67/rev2:default
make kbdfans/kbd67/hotswap:default
- make kbdfans/kbd67/mkiirgb:default
+ make kbdfans/kbd67/mkii_soldered:default
+ make kbdfans/kbd67/mkiirgb/v1:default
+ make kbdfans/kbd67/mkiirgb/v2: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/kbdfans/kbd67/rev2/keymaps/adi/keymap.c b/keyboards/kbdfans/kbd67/rev2/keymaps/adi/keymap.c
new file mode 100644
index 0000000000..807b67d6f1
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/adi/keymap.c
@@ -0,0 +1,18 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = 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,
+ 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,
+ LCTL_T(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_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = 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_DEL, KC_HOME,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_PGUP,
+ KC_TRNS, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_MPLY, KC_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_VOLD, KC_MFFD
+ )
+};
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/adi/readme.md b/keyboards/kbdfans/kbd67/rev2/keymaps/adi/readme.md
new file mode 100644
index 0000000000..638b067cb9
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/adi/readme.md
@@ -0,0 +1,8 @@
+# Adi's KBD67 Layout
+![Layout Visual](https://i.imgur.com/xuFkvVI.png)
+
+This layout modifies the extra row on the right and makes some of the key bindings easier to reach on Layer 1.
+
+Build and flash your firmware: press reset button below keyboard and run build command in directory:
+
+```make kbdfans/kbd67/rev2:adi:flash```
diff --git a/keyboards/kbdfans/kbd8x_mk2/info.json b/keyboards/kbdfans/kbd8x_mk2/info.json
index 06d69efe8f..e390fc4b0b 100644
--- a/keyboards/kbdfans/kbd8x_mk2/info.json
+++ b/keyboards/kbdfans/kbd8x_mk2/info.json
@@ -7,97 +7,280 @@
"layouts": {
"LAYOUT": {
"layout": [
- {"label":"Esc", "x":0, "y":0},
- {"label":"F1", "x":2, "y":0},
- {"label":"F2", "x":3, "y":0},
- {"label":"F3", "x":4, "y":0},
- {"label":"F4", "x":5, "y":0},
- {"label":"F5", "x":6.5, "y":0},
- {"label":"F6", "x":7.5, "y":0},
- {"label":"F7", "x":8.5, "y":0},
- {"label":"F8", "x":9.5, "y":0},
- {"label":"F9", "x":11, "y":0},
- {"label":"F10", "x":12, "y":0},
- {"label":"F11", "x":13, "y":0},
- {"label":"F12", "x":14, "y":0},
- {"label":"PrtSc", "x":15.25, "y":0},
- {"label":"Scroll Lock", "x":16.25, "y":0},
- {"label":"Pause", "x":17.25, "y":0},
- {"label":"~", "x":0, "y":1.25},
- {"label":"!", "x":1, "y":1.25},
- {"label":"@", "x":2, "y":1.25},
- {"label":"#", "x":3, "y":1.25},
- {"label":"$", "x":4, "y":1.25},
- {"label":"%", "x":5, "y":1.25},
- {"label":"^", "x":6, "y":1.25},
- {"label":"&", "x":7, "y":1.25},
- {"label":"*", "x":8, "y":1.25},
- {"label":"(", "x":9, "y":1.25},
- {"label":")", "x":10, "y":1.25},
- {"label":"_", "x":11, "y":1.25},
- {"label":"+", "x":12, "y":1.25},
- {"label":"Back Space", "x":13, "y":1.25},
- {"label":"Delete", "x":14, "y":1.25},
- {"label":"Insert", "x":15.25, "y":1.25},
- {"label":"Home", "x":16.25, "y":1.25},
- {"label":"PgUp", "x":17.25, "y":1.25},
- {"label":"Tab", "x":0, "y":2.25, "w":1.5},
- {"label":"Q", "x":1.5, "y":2.25},
- {"label":"W", "x":2.5, "y":2.25},
- {"label":"E", "x":3.5, "y":2.25},
- {"label":"R", "x":4.5, "y":2.25},
- {"label":"T", "x":5.5, "y":2.25},
- {"label":"Y", "x":6.5, "y":2.25},
- {"label":"U", "x":7.5, "y":2.25},
- {"label":"I", "x":8.5, "y":2.25},
- {"label":"O", "x":9.5, "y":2.25},
- {"label":"P", "x":10.5, "y":2.25},
- {"label":"{", "x":11.5, "y":2.25},
- {"label":"}", "x":12.5, "y":2.25},
- {"label":"|", "x":13.5, "y":2.25, "w":1.5},
- {"label":"Delete", "x":15.25, "y":2.25},
- {"label":"End", "x":16.25, "y":2.25},
- {"label":"PgDn", "x":17.25, "y":2.25},
- {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
- {"label":"A", "x":1.75, "y":3.25},
- {"label":"S", "x":2.75, "y":3.25},
- {"label":"D", "x":3.75, "y":3.25},
- {"label":"F", "x":4.75, "y":3.25},
- {"label":"G", "x":5.75, "y":3.25},
- {"label":"H", "x":6.75, "y":3.25},
- {"label":"J", "x":7.75, "y":3.25},
- {"label":"K", "x":8.75, "y":3.25},
- {"label":"L", "x":9.75, "y":3.25},
- {"label":":", "x":10.75, "y":3.25},
- {"label":"\"", "x":11.75, "y":3.25},
- {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
- {"label":"Shift", "x":0, "y":4.25, "w":1.25},
- {"label":"|", "x":1.25, "y":4.25},
- {"label":"Z", "x":2.25, "y":4.25},
- {"label":"X", "x":3.25, "y":4.25},
- {"label":"C", "x":4.25, "y":4.25},
- {"label":"V", "x":5.25, "y":4.25},
- {"label":"B", "x":6.25, "y":4.25},
- {"label":"N", "x":7.25, "y":4.25},
- {"label":"M", "x":8.25, "y":4.25},
- {"label":"<", "x":9.25, "y":4.25},
- {"label":">", "x":10.25, "y":4.25},
- {"label":"?", "x":11.25, "y":4.25},
- {"label":"Shift", "x":12.25, "y":4.25, "w":1.75},
- {"label":"Fn", "x":14, "y":4.25},
- {"label":"\u2191", "x":16.25, "y":4.25},
- {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
- {"label":"Win", "x":1.25, "y":5.25, "w":1.25},
- {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
- {"x":3.75, "y":5.25, "w":6.25},
- {"label":"Alt", "x":10, "y":5.25, "w":1.25},
- {"label":"Win", "x":11.25, "y":5.25, "w":1.25},
- {"label":"Menu", "x":12.5, "y":5.25, "w":1.25},
- {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
- {"label":"\u2190", "x":15.25, "y":5.25},
- {"label":"\u2193", "x":16.25, "y":5.25},
- {"label":"\u2192", "x":17.25, "y":5.25}
- ]
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"~", "x":0, "y":1.25},
+ {"label":"!", "x":1, "y":1.25},
+ {"label":"@", "x":2, "y":1.25},
+ {"label":"#", "x":3, "y":1.25},
+ {"label":"$", "x":4, "y":1.25},
+ {"label":"%", "x":5, "y":1.25},
+ {"label":"^", "x":6, "y":1.25},
+ {"label":"&", "x":7, "y":1.25},
+ {"label":"*", "x":8, "y":1.25},
+ {"label":"(", "x":9, "y":1.25},
+ {"label":")", "x":10, "y":1.25},
+ {"label":"_", "x":11, "y":1.25},
+ {"label":"+", "x":12, "y":1.25},
+ {"label":"Back Space", "x":13, "y":1.25},
+ {"label":"Delete", "x":14, "y":1.25},
+ {"label":"Insert", "x":15.25, "y":1.25},
+ {"label":"Home", "x":16.25, "y":1.25},
+ {"label":"PgUp", "x":17.25, "y":1.25},
+ {"label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"{", "x":11.5, "y":2.25},
+ {"label":"}", "x":12.5, "y":2.25},
+ {"label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.25},
+ {"label":"End", "x":16.25, "y":2.25},
+ {"label":"PgDn", "x":17.25, "y":2.25},
+ {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":":", "x":10.75, "y":3.25},
+ {"label":"\"", "x":11.75, "y":3.25},
+ {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.25, "w":1.25},
+ {"label":"|", "x":1.25, "y":4.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":"<", "x":9.25, "y":4.25},
+ {"label":">", "x":10.25, "y":4.25},
+ {"label":"?", "x":11.25, "y":4.25},
+ {"label":"Shift", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"Fn", "x":14, "y":4.25},
+ {"label":"\u2191", "x":16.25, "y":4.25},
+ {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"x":3.75, "y":5.25, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"label":"Win", "x":11.25, "y":5.25, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.25, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"label":"\u2190", "x":15.25, "y":5.25},
+ {"label":"\u2193", "x":16.25, "y":5.25},
+ {"label":"\u2192", "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"~", "x":0, "y":1.25},
+ {"label":"!", "x":1, "y":1.25},
+ {"label":"@", "x":2, "y":1.25},
+ {"label":"#", "x":3, "y":1.25},
+ {"label":"$", "x":4, "y":1.25},
+ {"label":"%", "x":5, "y":1.25},
+ {"label":"^", "x":6, "y":1.25},
+ {"label":"&", "x":7, "y":1.25},
+ {"label":"*", "x":8, "y":1.25},
+ {"label":"(", "x":9, "y":1.25},
+ {"label":")", "x":10, "y":1.25},
+ {"label":"_", "x":11, "y":1.25},
+ {"label":"+", "x":12, "y":1.25},
+ {"label":"Backspace", "x":13, "y":1.25, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.25},
+ {"label":"Home", "x":16.25, "y":1.25},
+ {"label":"PgUp", "x":17.25, "y":1.25},
+ {"label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"{", "x":11.5, "y":2.25},
+ {"label":"}", "x":12.5, "y":2.25},
+ {"label":"|", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.25},
+ {"label":"End", "x":16.25, "y":2.25},
+ {"label":"PgDn", "x":17.25, "y":2.25},
+ {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":":", "x":10.75, "y":3.25},
+ {"label":"\"", "x":11.75, "y":3.25},
+ {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.25, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":"<", "x":9.25, "y":4.25},
+ {"label":">", "x":10.25, "y":4.25},
+ {"label":"?", "x":11.25, "y":4.25},
+ {"label":"Shift", "x":12.25, "y":4.25, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.25},
+ {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.25, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.25, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.25},
+ {"label":"Down", "x":16.25, "y":5.25},
+ {"label":"Right", "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"\u00ac", "x":0, "y":1.25},
+ {"label":"!", "x":1, "y":1.25},
+ {"label":"\"", "x":2, "y":1.25},
+ {"label":"\u00a3", "x":3, "y":1.25},
+ {"label":"$", "x":4, "y":1.25},
+ {"label":"%", "x":5, "y":1.25},
+ {"label":"^", "x":6, "y":1.25},
+ {"label":"&", "x":7, "y":1.25},
+ {"label":"*", "x":8, "y":1.25},
+ {"label":"(", "x":9, "y":1.25},
+ {"label":")", "x":10, "y":1.25},
+ {"label":"_", "x":11, "y":1.25},
+ {"label":"+", "x":12, "y":1.25},
+ {"label":"Backspace", "x":13, "y":1.25, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.25},
+ {"label":"Home", "x":16.25, "y":1.25},
+ {"label":"PgUp", "x":17.25, "y":1.25},
+ {"label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"{", "x":11.5, "y":2.25},
+ {"label":"}", "x":12.5, "y":2.25},
+ {"label":"Delete", "x":15.25, "y":2.25},
+ {"label":"End", "x":16.25, "y":2.25},
+ {"label":"PgDn", "x":17.25, "y":2.25},
+ {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":":", "x":10.75, "y":3.25},
+ {"label":"@", "x":11.75, "y":3.25},
+ {"label":"~", "x":12.75, "y":3.25},
+ {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":4.25, "w":1.25},
+ {"label":"|", "x":1.25, "y":4.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":"<", "x":9.25, "y":4.25},
+ {"label":">", "x":10.25, "y":4.25},
+ {"label":"?", "x":11.25, "y":4.25},
+ {"label":"Shift", "x":12.25, "y":4.25, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.25},
+ {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.25, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.25, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.25, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.25},
+ {"label":"Down", "x":16.25, "y":5.25},
+ {"label":"Right", "x":17.25, "y":5.25}
+ ]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h b/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h
index 86d8b35ea3..75e340375c 100644
--- a/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h
+++ b/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h
@@ -48,4 +48,48 @@
{ K110, KC_NO, KC_NO, KC_NO, KC_NO, K115, K116, K117, KC_NO } \
}
+#define LAYOUT_tkl_ansi( \
+ K000, K001, K011, K002, K012, K003, K013, K004, K014, K005, K015, K006, K016, K007, K017, K008, \
+ K020, K030, K021, K031, K022, K032, K023, K033, K024, K034, K025, K035, K026, K036, K027, K037, K028, \
+ K040, K050, K041, K051, K042, K052, K043, K053, K044, K054, K045, K055, K046, K056, K047, K057, K048, \
+ K060, K070, K061, K071, K062, K072, K063, K073, K064, K074, K065, K075, K076, \
+ K080, K081, K091, K082, K092, K083, K093, K084, K094, K085, K095, K086, K097, \
+ K100, K110, K101, K103, K105, K115, K106, K116, K107, K117, K108 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008 }, \
+ { KC_NO, K011, K012, K013, K014, K015, K016, K017, KC_NO }, \
+ { K020, K021, K022, K023, K024, K025, K026, K027, K028 }, \
+ { K030, K031, K032, K033, K034, K035, K036, K037, KC_NO }, \
+ { K040, K041, K042, K043, K044, K045, K046, K047, K048 }, \
+ { K050, K051, K052, K053, K054, K055, K056, K057, KC_NO }, \
+ { K060, K061, K062, K063, K064, K065, KC_NO, KC_NO, KC_NO }, \
+ { K070, K071, K072, K073, K074, K075, K076, KC_NO, KC_NO }, \
+ { K080, K081, K082, K083, K084, K085, K086, KC_NO, KC_NO }, \
+ { KC_NO, K091, K092, K093, K094, K095, KC_NO, K097, KC_NO }, \
+ { K100, K101, KC_NO, K103, KC_NO, K105, K106, K107, K108 }, \
+ { K110, KC_NO, KC_NO, KC_NO, KC_NO, K115, K116, K117, KC_NO } \
+}
+#define LAYOUT_tkl_iso( \
+ K000, K001, K011, K002, K012, K003, K013, K004, K014, K005, K015, K006, K016, K007, K017, K008, \
+ K020, K030, K021, K031, K022, K032, K023, K033, K024, K034, K025, K035, K026, K036, K027, K037, K028, \
+ K040, K050, K041, K051, K042, K052, K043, K053, K044, K054, K045, K055, K046, K047, K057, K048, \
+ K060, K070, K061, K071, K062, K072, K063, K073, K064, K074, K065, K075, K056, K076, \
+ K080, K090, K081, K091, K082, K092, K083, K093, K084, K094, K085, K095, K086, K097, \
+ K100, K110, K101, K103, K105, K115, K106, K116, K107, K117, K108 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008 }, \
+ { KC_NO, K011, K012, K013, K014, K015, K016, K017, KC_NO }, \
+ { K020, K021, K022, K023, K024, K025, K026, K027, K028 }, \
+ { K030, K031, K032, K033, K034, K035, K036, K037, KC_NO }, \
+ { K040, K041, K042, K043, K044, K045, K046, K047, K048 }, \
+ { K050, K051, K052, K053, K054, K055, K056, K057, KC_NO }, \
+ { K060, K061, K062, K063, K064, K065, KC_NO, KC_NO, KC_NO }, \
+ { K070, K071, K072, K073, K074, K075, K076, KC_NO, KC_NO }, \
+ { K080, K081, K082, K083, K084, K085, K086, KC_NO, KC_NO }, \
+ { K090, K091, K092, K093, K094, K095, KC_NO, K097, KC_NO }, \
+ { K100, K101, KC_NO, K103, KC_NO, K105, K106, K107, K108 }, \
+ { K110, KC_NO, KC_NO, KC_NO, KC_NO, K115, K116, K117, KC_NO } \
+}
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c
deleted file mode 100644
index 69d04852c9..0000000000
--- a/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2019 Ryota Goto
- *
- * 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_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_DEL, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL, KC_UP, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
- ),
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/readme.md
deleted file mode 100644
index 87527897df..0000000000
--- a/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# The ANSI 6.25U keymap for KBD8X MKII
-
-A typical setup for the 1.25/6.25U bottom row. \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/keymap.c
new file mode 100644
index 0000000000..84f419ba04
--- /dev/null
+++ b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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_tkl_ansi( /* Base */
+ 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, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+};
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/readme.md
new file mode 100644
index 0000000000..d3e716f58a
--- /dev/null
+++ b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_ansi/readme.md
@@ -0,0 +1,3 @@
+# The ANSI 6.25U keymap for KBD8X MKII
+
+A typical ANSI setup for the 1.25/6.25U bottom row. \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/keymap.c
new file mode 100644
index 0000000000..c33e92d06f
--- /dev/null
+++ b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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_tkl_iso( /* Base */
+ 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_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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+};
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/readme.md
new file mode 100644
index 0000000000..489a2b7b98
--- /dev/null
+++ b/keyboards/kbdfans/kbd8x_mk2/keymaps/default_iso/readme.md
@@ -0,0 +1,3 @@
+# The ISO 6.25U keymap for KBD8X MKII
+
+A typical ISO setup for the 1.25/6.25U bottom row. \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/rules.mk b/keyboards/kbdfans/kbd8x_mk2/rules.mk
index ba8b8ee875..97261becd7 100644
--- a/keyboards/kbdfans/kbd8x_mk2/rules.mk
+++ b/keyboards/kbdfans/kbd8x_mk2/rules.mk
@@ -14,10 +14,10 @@ BOOTLOADER = atmel-dfu
# 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 = no # Console for debug(+400)
+BOOTMAGIC_ENABLE = lite # 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 = 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
@@ -25,9 +25,11 @@ 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 # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+MIDI_ENABLE = no # MIDI support
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)
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/kbdfans/kbdpad/mk1/readme.md b/keyboards/kbdfans/kbdpad/mk1/readme.md
index e808d89347..2424d4d4d6 100644
--- a/keyboards/kbdfans/kbdpad/mk1/readme.md
+++ b/keyboards/kbdfans/kbdpad/mk1/readme.md
@@ -1,47 +1,19 @@
# KBDPad MKI
-Custom numpad.
-
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: KBDPad MKI
-Hardware Availability: [KBDfans](https://kbdfans.com/products/kbdfans-pad-custom-mechanical-keyboard-diy-kit)
+Custom numpad.
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: KBDPad MKI
+* Hardware Availability: [KBDfans](https://kbdfans.com/products/kbdfans-pad-custom-mechanical-keyboard-diy-kit)
Make example for this keyboard (after setting up your build environment):
make kbdfans/kbdpad/mk1:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make kbdfans/kbdpad/mk1:default:flash
**Reset Key:** Hold down the key located at `K00`, commonly programmed as `0` while plugging in the keyboard.
-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 python3
- pip3 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/keebio/bdn9/keymaps/hbbisenieks/keymap.c b/keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c
new file mode 100644
index 0000000000..1eaee012af
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c
@@ -0,0 +1,85 @@
+/* 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
+
+#define _AUDACITY 0
+#define _LIGHTS 1
+
+enum custom_keycodes {
+ AUDACITY = SAFE_RANGE,
+ LIGHTS,
+};
+
+#define KC_ KC_TRNS
+#define KC_AUD AUDACITY
+#define KC_LITE LIGHTS
+#define KC_ZNRM LCTL(KC_2) // zoom normal
+#define KC_SAVE LCTL(KC_S) // save
+#define KC_SYNC LALT(KC_S) // sync-lock tracks
+#define KC_SLNC LCTL(KC_L) // silence selection
+#define KC_BL_S BL_STEP
+#define KC_RGBM RGB_MOD
+#define KC_RGBT RGB_TOG
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ | Knob 1: Vol Dn/Up | | Knob 2: Page Dn/Up |
+ | Press: Mute | Home | Press: Play/Pause |
+ | Hold: Layer 2 | Up | RGB Mode |
+ | Left | Down | Right |
+ */
+ [_AUDACITY] = LAYOUT(
+ //,-------+-------+-------.
+ KC_LITE,KC_SAVE,KC_ZNRM,
+ //|-------+-------+-------|
+ KC_SYNC,KC_SLNC,KC_BSPC,
+ //|-------+-------+-------|
+ KC_SPC , KC_F1 , KC_F2
+ //`-------+-------+-------'
+ ),
+ /*
+ | RESET | N/A | Media Stop |
+ | Held: Layer 2 | Home | RGB Mode |
+ | Media Previous | End | Media Next |
+ */
+ [_LIGHTS] = LAYOUT(
+ //,-------+-------+-------.
+ KC_ ,KC_BL_S,KC_STOP,
+ //|-------+-------+-------|
+ KC_RGBM,KC_HOME,KC_RGBT,
+ //|-------+-------+-------|
+ KC_MPRV,KC_END ,KC_MNXT
+ //`-------+-------+-------'
+ ),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_RGHT);
+ } else {
+ tap_code(KC_LEFT);
+ }
+ }
+ else if (index == 1) {
+ if (clockwise) {
+ SEND_STRING(SS_LCTRL("1")); // audacity zoom in
+ } else {
+ SEND_STRING(SS_LCTRL("3")); // audacity zoom out
+ }
+ }
+}
diff --git a/keyboards/keebio/ergodicity/ergodicity.h b/keyboards/keebio/ergodicity/ergodicity.h
index 156ad828a3..a6a9cf4d7a 100644
--- a/keyboards/keebio/ergodicity/ergodicity.h
+++ b/keyboards/keebio/ergodicity/ergodicity.h
@@ -37,5 +37,5 @@
{ kB1, kB2, kB3, kB4, kB5, kB6, kB7, kB8, kB9, kB10, kB11, kB12, kB13, kB14, kB15 }, \
{ kC1, kC2, kC3, kC4, kC5, kC6, kC7, kC8, kC9, kC10, kC11, kC12, kC13, KC_NO, kC15 }, \
{ KC_NO, kD2, kD3, kD4, kD5, kD6, kD7, kD8, kD9, kD10, kD11, kD12, kD13, kD14, kD15 }, \
- { KC_NO, kE2, kE3, kE4, KC_NO, kE6, kE7, KC_NO, kE9, KC_NO, kE11, KC_NO, KC_NO, kE15 } \
+ { KC_NO, kE2, kE3, kE4, KC_NO, kE6, kE7, KC_NO, kE9, KC_NO, kE11, KC_NO, KC_NO, KC_NO, kE15 } \
}
diff --git a/keyboards/keebio/iris/iris.h b/keyboards/keebio/iris/iris.h
index 5e6bc5b582..878d57897b 100644
--- a/keyboards/keebio/iris/iris.h
+++ b/keyboards/keebio/iris/iris.h
@@ -13,7 +13,7 @@
#endif
#include "quantum.h"
-#include "../../wilba_tech/via_keycodes.h"
+#include "via.h"
// Used to create a keymap using only KC_ prefixed keys
#define LAYOUT_kc( \
diff --git a/keyboards/keebio/iris/keymaps/csc027/config.h b/keyboards/keebio/iris/keymaps/csc027/config.h
new file mode 100644
index 0000000000..5d201a6f10
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/csc027/config.h
@@ -0,0 +1,28 @@
+/*
+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
+
+#define USE_I2C
+#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/keebio/iris/keymaps/csc027/keymap.c b/keyboards/keebio/iris/keymaps/csc027/keymap.c
new file mode 100644
index 0000000000..82a0773914
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/csc027/keymap.c
@@ -0,0 +1,70 @@
+#include QMK_KEYBOARD_H
+#include "csc027.h"
+
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT_wrapper(
+ _____________________QWERTY_L1_____________________, _____________________QWERTY_R1_____________________,
+ _____________________QWERTY_L2_____________________, _____________________QWERTY_R2_____________________,
+ _____________________QWERTY_L3_____________________, _____________________QWERTY_R3_____________________,
+ _____________________QWERTY_L4_____________________, KC_SPC, KC_SPC, _____________________QWERTY_R4_____________________,
+ KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI
+ ),
+
+ [_RS] = LAYOUT_wrapper(
+ ______________________RAISE_L1_____________________, ______________________RAISE_R1_____________________,
+ ______________________RAISE_L2_____________________, ______________________RAISE_R2_____________________,
+ ______________________RAISE_L3_____________________, ______________________RAISE_R3_____________________,
+ ______________________RAISE_L4_____________________, _______, _______, ______________________RAISE_R4_____________________,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_LW] = LAYOUT_wrapper(
+ ______________________LOWER_L1_____________________, ______________________LOWER_R1_____________________,
+ ______________________LOWER_L2_____________________, ______________________LOWER_R2_____________________,
+ ______________________LOWER_L3_____________________, ______________________LOWER_R3_____________________,
+ ______________________LOWER_L4_____________________, _______, _______, ______________________LOWER_R4_____________________,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_MS] = LAYOUT_wrapper(
+ ______________________MOUSE_L1_____________________, ______________________MOUSE_R1_____________________,
+ ______________________MOUSE_L2_____________________, ______________________MOUSE_R2_____________________,
+ ______________________MOUSE_L3_____________________, ______________________MOUSE_R3_____________________,
+ ______________________MOUSE_L4_____________________, _______, _______, ______________________MOUSE_R4_____________________,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_GT] = LAYOUT_wrapper(
+ _______________________GIT_L1______________________, _______________________GIT_R1______________________,
+ _______________________GIT_L2______________________, _______________________GIT_R2______________________,
+ _______________________GIT_L3______________________, _______________________GIT_R3______________________,
+ _______________________GIT_L4______________________, _______, _______, _______________________GIT_R4______________________,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_CN] = LAYOUT_wrapper(
+ ___________________CONVENIENCE_L1__________________, ___________________CONVENIENCE_R1__________________,
+ ___________________CONVENIENCE_L2__________________, ___________________CONVENIENCE_R2__________________,
+ ___________________CONVENIENCE_L3__________________, ___________________CONVENIENCE_R3__________________,
+ ___________________CONVENIENCE_L4__________________, _______, _______, ___________________CONVENIENCE_R4__________________,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_GW] = LAYOUT(
+ KC_Y, KC_GRV, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_B, KC_TAB, KC_T, KC_W, KC_4, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_M, MC_LSEC, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_I, KC_LCTL, KC_Z, KC_LALT, KC_V, KC_SPC, KC_SPC, _______, KC_N, KC_M, KC_COMM, KC_DOT, TO(_CS), TO(_QW),
+ KC_X, KC_C, KC_SPC, _______, KC_M, KC_B
+ ),
+
+ [_CS] = LAYOUT(
+ XXXXXXX, KC_5, KC_1, KC_2, KC_3, KC_4, KC_6, KC_P7, KC_P8, KC_P9, KC_0, KC_BSPC,
+ XXXXXXX, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_P4, KC_P5, KC_P6, XXXXXXX, KC_NLCK,
+ KC_G, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_H, KC_P1, KC_P2, KC_P3, KC_PENT, KC_ESC,
+ XXXXXXX, KC_LCTL, XXXXXXX, KC_X, XXXXXXX, XXXXXXX, KC_SPC, _______, KC_N, KC_P0, KC_P0, KC_PDOT, TO(_QW), TO(_QW),
+ KC_B, KC_SPC, KC_SPC, _______, KC_N, KC_P0
+ )
+};
diff --git a/keyboards/keebio/iris/keymaps/csc027/rules.mk b/keyboards/keebio/iris/keymaps/csc027/rules.mk
new file mode 100644
index 0000000000..e922161e3c
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/csc027/rules.mk
@@ -0,0 +1,6 @@
+BACKLIGHT_ENABLE = yes
+CONSOLE_ENABLE = no
+EXTRAKEY_ENABLE = no
+LTO_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
diff --git a/keyboards/keebio/iris/keymaps/drashna/config.h b/keyboards/keebio/iris/keymaps/drashna/config.h
index 25678bd67d..49381b60a5 100644
--- a/keyboards/keebio/iris/keymaps/drashna/config.h
+++ b/keyboards/keebio/iris/keymaps/drashna/config.h
@@ -46,11 +46,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef AUDIO_ENABLE
# define C6_AUDIO
# ifdef RGBLIGHT_ENABLE
-# define NO_MUSIC_MODE
+# ifndef __arm__
+# define NO_MUSIC_MODE
+# endif
# endif // RGBLIGHT_ENABLE
#endif // AUDIO_ENABLE
-#ifndef KEYBOARD_keebio_iris_rev3
+#if defined(KEYBOARD_keebio_iris_rev1) || defined(KEYBOARD_keebio_iris_rev2)
# define QMK_ESC_OUTPUT F6 // usually COL
# define QMK_ESC_INPUT D7 // usually ROW
# define QMK_LED B0
@@ -58,10 +60,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
#undef PRODUCT
-#ifdef KEYBOARD_keebio_iris_rev2
-# define PRODUCT Drashna Hacked Iris Rev .2
+#if defined(KEYBOARD_keebio_iris_rev2)
+# define PRODUCT Drashna Hacked Iris Rev 2
#elif defined(KEYBOARD_keebio_iris_rev3)
-# define PRODUCT Drashna Hacked Iris Rev .3
+# define PRODUCT Drashna Hacked Iris Rev 3
+#elif defined(KEYBOARD_keebio_iris_rev4)
+# define PRODUCT Drashna Hacked Iris Rev 4
#endif
#define SHFT_LED1 6
diff --git a/keyboards/keebio/iris/keymaps/hbbisenieks/config.h b/keyboards/keebio/iris/keymaps/hbbisenieks/config.h
new file mode 100644
index 0000000000..48f448fa22
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/hbbisenieks/config.h
@@ -0,0 +1,41 @@
+/*
+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
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_TERM 150
+
+#define TAPPING_TOGGLE 2
+#define PERMISSIVE_HOLD
+
+#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/keebio/iris/keymaps/hbbisenieks/keymap.c b/keyboards/keebio/iris/keymaps/hbbisenieks/keymap.c
new file mode 100644
index 0000000000..9916fc5ee5
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/hbbisenieks/keymap.c
@@ -0,0 +1,161 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ GUSR,
+ HGRP,
+ CHUS,
+};
+
+#define KC_ KC_TRNS
+
+#define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen
+#define KC_CPYW LGUI(LSFT(LCTL(KC_3))) // Copy whole screen
+#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen
+#define KC_CPYP LGUI(LSFT(LCTL(KC_4))) // Copy portion of screen
+#define KC_ESCC MT(MOD_LCTL, KC_ESC)
+#define KC_LOWR LOWER
+#define KC_RASE RAISE
+#define KC_RST RESET
+#define KC_BL_S BL_STEP
+
+// Left and right shift as mot-tap square braces
+#define KC_LSBR MT(MOD_LSFT, KC_LBRC)
+#define KC_RSBR MT(MOD_RSFT, KC_RBRC)
+
+// mod-tap shift/minus
+#define KC_SMIN MT(MOD_LSFT, KC_MINS)
+
+// Tap-toggle layers
+#define KC_TT_L TT(1)
+#define KC_TT_R TT(2)
+
+#define KC_RGBM RGB_MOD
+#define KC_RGBT RGB_TOG
+
+#define KC_SLOK LGUI(LCTL(KC_Q)) // mojave lock screen
+#define KC_GUSR GUSR // "gam info user" macro
+#define KC_HGRP HGRP // "history | grep" macro
+#define KC_CHUS CHUS // "thisisunsafe" chrome browser macro
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ESC , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LSBR, Z , X , C , V , B ,TT_L, TT_R, N , M ,COMM,DOT ,SLSH,RSBR,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ LCTL,SMIN,LGUI, ENT ,SPC ,LALT
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,MINS,EQL , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,SLOK, , UP , ,RGBT, P7 , P8 , P9 , E , F ,LPRN,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ DEL , ,LEFT,DOWN,RGHT,GUSR, P4 , P5 , P6 , C , D ,RPRN,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ BL_S, , , ,HGRP,CHUS, , , P1 , P2 , P3 , A , B , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , DOT , P0 ,COLN
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,RGBT,RGBM, , , , ,AMPR,MUTE, , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,CAPW,CPYW,CAPP,CPYP,PGUP, EQL ,HOME,VOLU,MRWD,MFFD, ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , , , , ,PGDN, , ,PLUS,END ,VOLD,MPLY,MSTP, ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RESET , DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------' `--------+--------+--------'
+ )
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ 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;
+ case GUSR:
+ if (record->event.pressed) {
+ SEND_STRING("gam info user ");
+ }
+ break;
+ case HGRP:
+ if (record->event.pressed) {
+ SEND_STRING("history|grep ");
+ }
+ break;
+ case CHUS:
+ if (record->event.pressed) {
+ SEND_STRING("thisisunsafe");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/iris/keymaps/hbbisenieks/readme.md b/keyboards/keebio/iris/keymaps/hbbisenieks/readme.md
new file mode 100644
index 0000000000..57b9491da6
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/hbbisenieks/readme.md
@@ -0,0 +1,6 @@
+# HBBisenieks' Iris Layout
+
+A modified Iris layout with toggle-tap layers and a hexidecimal
+numpad. Other features include Space-Cadet-like shift keys that can do
+square or curly braces and a home-row escape key.
+
diff --git a/keyboards/keebio/iris/keymaps/hbbisenieks/rules.mk b/keyboards/keebio/iris/keymaps/hbbisenieks/rules.mk
new file mode 100644
index 0000000000..f8de3b808c
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/hbbisenieks/rules.mk
@@ -0,0 +1,6 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+
+# Comment out for pro-micro board
+BOOTLOADER = atmel-dfu
+
diff --git a/keyboards/keebio/iris/keymaps/jhelvy/README.md b/keyboards/keebio/iris/keymaps/jhelvy/README.md
new file mode 100644
index 0000000000..5d5ff12471
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jhelvy/README.md
@@ -0,0 +1,7 @@
+# jhelvy Keymap for [Iris Rev 2](https://docs.keeb.io/iris-build-guide/)
+
+## Keymap
+
+This is a custom keymap with the following layout:
+
+<img src="https://github.com/jhelvy/qmkJsonConverter/raw/master/keymaps/keebio_iris_rev2_jhelvy.png" width="800">
diff --git a/keyboards/keebio/iris/keymaps/jhelvy/config.h b/keyboards/keebio/iris/keymaps/jhelvy/config.h
new file mode 100644
index 0000000000..2285c3f9af
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jhelvy/config.h
@@ -0,0 +1,33 @@
+/*
+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
+
+// #define USE_I2C
+#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
+
+#define TAPPING_FORCE_HOLD
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
+#define AUTO_SHIFT_TIMEOUT 150
diff --git a/keyboards/keebio/iris/keymaps/jhelvy/keymap.c b/keyboards/keebio/iris/keymaps/jhelvy/keymap.c
new file mode 100644
index 0000000000..58ce3206dd
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jhelvy/keymap.c
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+ LALT(KC_A),KC_LGUI, MO(1), KC_SPC, MO(2), KC_PGDN),
+
+[_LOWER] = LAYOUT( \
+ KC_ESC,LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5), KC_SCLN, KC_PIPE, KC_COLN,LCTL(KC_9),LCTL(KC_0), KC_F12, \
+ LCTL(KC_TAB),LGUI(KC_Q),LGUI(KC_W), KC_ESC,LGUI(KC_R),LGUI(KC_T), LCTL(KC_Y),LGUI(KC_LEFT), KC_UP,LGUI(KC_RGHT), KC_TILD, KC_F11, \
+ LGUI(KC_BSPC),MO(2),LGUI(KC_S),LGUI(KC_C),LGUI(KC_V),LGUI(KC_X), KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_GRV, KC_ENT, \
+ KC_F15,LGUI(KC_A),LGUI(KC_D), KC_F13,LGUI(KC_Z),LGUI(KC_Y), KC_NO, KC_NO,KC_BSPC,LGUI(KC_F), SGUI(KC_G),LGUI(KC_G), KC_BSLS, KC_F23, \
+ KC_LALT,KC_LGUI, KC_TRNS, KC_SPC,KC_RGUI, KC_PGUP),
+
+[_RAISE] = LAYOUT( \
+ KC_VOLU,LGUI(LALT(KC_1)),LGUI(LALT(KC_2)), KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PLUS, \
+ KC_VOLD, KC_NO, KC_NO, KC_NO,SGUI(KC_R), KC_F14, SGUI(KC_K),SGUI(KC_LEFT),LSFT(KC_UP),SGUI(KC_RGHT), KC_F18, KC_UNDS, \
+ KC_MUTE,KC_TRNS, KC_NO, KC_LBRC, KC_RBRC, KC_TAB, KC_F21,LSFT(KC_LEFT),LSFT(KC_DOWN),LSFT(KC_RGHT), KC_F20, KC_F16, \
+ KC_LSPO,KC_ASTG, KC_NO, KC_LCBR, KC_RCBR,LCTL(KC_U), KC_NO, KC_NO,KC_F22,LCTL(LGUI(KC_A)),LALT(LSFT(KC_LEFT)),LALT(LSFT(KC_RIGHT)), KC_F17, KC_F19, \
+ KC_CAPS,LALT(KC_SPC), KC_LGUI, KC_SPC,KC_TRNS, KC_NO)
+
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
diff --git a/keyboards/keebio/iris/keymaps/jhelvy/rules.mk b/keyboards/keebio/iris/keymaps/jhelvy/rules.mk
new file mode 100644
index 0000000000..c34fd4b1fa
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jhelvy/rules.mk
@@ -0,0 +1,3 @@
+AUTO_SHIFT_ENABLE = yes # Autoshift by holding down a key
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/iris/keymaps/osiris/rules.mk b/keyboards/keebio/iris/keymaps/osiris/rules.mk
index f2788b5f75..45c570a3b6 100644
--- a/keyboards/keebio/iris/keymaps/osiris/rules.mk
+++ b/keyboards/keebio/iris/keymaps/osiris/rules.mk
@@ -1,8 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
MOUSEKEY_ENABLE = yes
-
-# VIA Support - Comment these 3 lines out to disable
-# RAW_ENABLE = yes
-# DYNAMIC_KEYMAP_ENABLE = yes
-# SRC += keyboards/wilba_tech/wt_main.c \ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/sethBarberee/config.h b/keyboards/keebio/iris/keymaps/sethBarberee/config.h
index fd5bda8666..c031c03261 100644
--- a/keyboards/keebio/iris/keymaps/sethBarberee/config.h
+++ b/keyboards/keebio/iris/keymaps/sethBarberee/config.h
@@ -35,6 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+#undef RGBLED_SPLIT
#define RGBLED_SPLIT { RGBLED_NUM, 0} // defined to sync animations
#define FORCE_NKRO // force NKRO on by default
diff --git a/keyboards/keebio/iris/keymaps/sethBarberee/rules.mk b/keyboards/keebio/iris/keymaps/sethBarberee/rules.mk
index d7bc1927dc..5df198b7bc 100644
--- a/keyboards/keebio/iris/keymaps/sethBarberee/rules.mk
+++ b/keyboards/keebio/iris/keymaps/sethBarberee/rules.mk
@@ -1,8 +1,9 @@
BOOTMAGIC_ENABLE = no
+CONSOLE_ENABLE = no
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
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 my Red LEDS
RGBLIGHT_ENABLE = yes # Enable my RGBS
VELOCIKEY_ENABLE = yes # I like RGB
TAP_DANCE_ENABLE = yes # fancy fancy Caps
-LINK_TIME_OPTIMIZATION = yes # Enable link time optimization
+LTO_ENABLE = yes # Enable link time optimization
diff --git a/keyboards/keebio/iris/keymaps/via/rules.mk b/keyboards/keebio/iris/keymaps/via/rules.mk
index ca2680325e..1e5b99807c 100644
--- a/keyboards/keebio/iris/keymaps/via/rules.mk
+++ b/keyboards/keebio/iris/keymaps/via/rules.mk
@@ -1,7 +1 @@
-RGBLIGHT_ENABLE = yes
-BACKLIGHT_ENABLE = yes
-
-# VIA Support - Comment these 3 lines out to disable
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-SRC += keyboards/wilba_tech/wt_main.c
+VIA_ENABLE = yes
diff --git a/keyboards/keebio/iris/rev1/config.h b/keyboards/keebio/iris/rev1/config.h
index 12b4e098b3..a6b14138e4 100644
--- a/keyboards/keebio/iris/rev1/config.h
+++ b/keyboards/keebio/iris/rev1/config.h
@@ -17,8 +17,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1256
@@ -62,23 +60,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLED_NUM 12 // Number of LEDs
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 517
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 507 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/keebio/iris/rev1_led/config.h b/keyboards/keebio/iris/rev1_led/config.h
index 3b3c999b82..5f93a61dfc 100644
--- a/keyboards/keebio/iris/rev1_led/config.h
+++ b/keyboards/keebio/iris/rev1_led/config.h
@@ -17,8 +17,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1256
@@ -62,23 +60,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLED_NUM 12 // Number of LEDs
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 517
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 507 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/keebio/iris/rev2/config.h b/keyboards/keebio/iris/rev2/config.h
index 938ff05f09..ab55bf77b2 100644
--- a/keyboards/keebio/iris/rev2/config.h
+++ b/keyboards/keebio/iris/rev2/config.h
@@ -17,8 +17,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1256
@@ -62,23 +60,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLED_NUM 12 // Number of LEDs
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 517
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 507 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/keebio/iris/rev3/config.h b/keyboards/keebio/iris/rev3/config.h
index 6576ff6838..8c6f4ad085 100644
--- a/keyboards/keebio/iris/rev3/config.h
+++ b/keyboards/keebio/iris/rev3/config.h
@@ -17,8 +17,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1256
@@ -71,23 +69,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN F7
#define RGBLED_NUM 12 // Number of LEDs
#define RGBLED_SPLIT { 6, 6 }
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 517
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 507 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/keebio/iris/rev4/config.h b/keyboards/keebio/iris/rev4/config.h
index b4bcd6139b..87fdafcd5b 100644
--- a/keyboards/keebio/iris/rev4/config.h
+++ b/keyboards/keebio/iris/rev4/config.h
@@ -73,23 +73,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN D6
#define RGBLED_NUM 12 // Number of LEDs
#define RGBLED_SPLIT { 6, 6 }
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 517
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 507 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/keebio/levinson/keymaps/ksamborski/config.h b/keyboards/keebio/levinson/keymaps/ksamborski/config.h
new file mode 100644
index 0000000000..7a21830f2d
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/ksamborski/config.h
@@ -0,0 +1,27 @@
+/*
+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
+
+/* Select hand configuration */
+#define MASTER_LEFT
+
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+
diff --git a/keyboards/keebio/levinson/keymaps/ksamborski/keymap.c b/keyboards/keebio/levinson/keymaps/ksamborski/keymap.c
new file mode 100644
index 0000000000..4fc77fb830
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/ksamborski/keymap.c
@@ -0,0 +1,151 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QW,
+ _LW,
+ _RS,
+ _AD,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ MKITPNK
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Esc | Q | W | E | R | T | | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | | H | J | K | L | ; | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | \ | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Meta | Alt | Lower| Enter| | Space| Raise| Alt | Meta | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_QW] = LAYOUT_ortho_4x12(
+ 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_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_BSPC,
+ KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_BSLS, KC_EQL ,
+ KC_LCTL , _______, KC_LGUI, KC_LALT, LOWER , KC_ENT , KC_SPC , RAISE , KC_RALT, KC_LGUI, _______, _______
+ ),
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | , | 1 | 2 | 3 | + | - | | { | } | ( | ) | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | . | 4 | 5 | 6 | # | * | | F1 | F2 | F3 | F4 | F5 | F6 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| 7 | 8 | 9 | / | = | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | 0 | |Adjust| | | | RAISE| | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RS] = LAYOUT_ortho_4x12(
+ KC_COMM , KC_1 , KC_2 , KC_3 , KC_PLUS, KC_MINS, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, _______, _______,
+ KC_DOT , KC_4 , KC_5 , KC_6 , KC_HASH, KC_ASTR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
+ KC_LSFT , KC_7 , KC_8 , KC_9 , KC_SLSH, KC_EQL , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
+ _______ , _______, KC_0 , _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | ! | @ | # | $ | % | | Home| PgDn| PgUp| End | ( | ) |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Vol+ | Mute | Play | | Ins | | Left| Down| Up | Right| { | } |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Vol- | < M | M > | | | | ^ | & | * | ' | [ | ] |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |LOWER | | | Shift|Adjust| | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_LW] = LAYOUT_ortho_4x12(
+ KC_GRV , KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_HOME , KC_PGDN, KC_PGUP, KC_END , KC_LPRN, KC_RPRN,
+ _______ , KC_VOLU, KC_MUTE, KC_MPLY, _______, KC_INS , KC_LEFT , KC_DOWN, KC_UP , KC_RIGHT, KC_LCBR, KC_RCBR,
+ _______ , KC_VOLD, KC_MPRV, KC_MNXT, _______, _______, KC_CIRC , KC_AMPR, KC_ASTR, KC_QUOT , KC_LBRC, KC_RBRC ,
+ _______ , _______, _______, _______, _______, _______, KC_LSFT , _______, _______, _______ , _______, _______
+ ),
+
+/* Adjust
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Reset| | Up | | | Rec1 | | Rec2 | Plain| Snake|Gradnt| | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Caps | Left | Down | Right|MkItPk| Play1| | Play2| RGB | HUE+ | SAT+ | BRI+ | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | Stop1| | Stop2| MODE | HUE- | SAT- | BRI- | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_AD] = LAYOUT_ortho_4x12(
+ RESET , XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, DM_REC1, DM_REC2, RGB_M_P, RGB_M_SN,RGB_M_G, XXXXXXX, KC_DEL ,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, MKITPNK, DM_PLY1, DM_PLY2, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DM_RSTP, DM_RSTP, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+void make_it_pink_blue(void) {
+ uint16_t blue_hue = 210;
+ uint16_t pink_hue = 315;
+
+ /* key is pressed */
+ uint16_t hue = rgblight_get_hue();
+ uint8_t sat = rgblight_get_sat();
+ uint8_t val = rgblight_get_val();
+
+ if (hue != blue_hue)
+ rgblight_sethsv(blue_hue, sat, val);
+ else
+ rgblight_sethsv(pink_hue, sat, val);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QW);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LW);
+ update_tri_layer(_LW, _RS, _AD);
+ } else {
+ layer_off(_LW);
+ update_tri_layer(_LW, _RS, _AD);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RS);
+ update_tri_layer(_LW, _RS, _AD);
+ } else {
+ layer_off(_RS);
+ update_tri_layer(_LW, _RS, _AD);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_AD);
+ } else {
+ layer_off(_AD);
+ }
+ return false;
+ break;
+ case MKITPNK:
+ if (record->event.pressed)
+ make_it_pink_blue();
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/levinson/keymaps/ksamborski/rules.mk b/keyboards/keebio/levinson/keymaps/ksamborski/rules.mk
new file mode 100644
index 0000000000..1ce3f222fd
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/ksamborski/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE=yes
+BOOTMAGIC_ENABLE=no
+DYNAMIC_MACRO_ENABLE=yes
diff --git a/keyboards/keebio/levinson/keymaps/numpad/config.h b/keyboards/keebio/levinson/keymaps/numpad/config.h
new file mode 100644
index 0000000000..7e10bc445c
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/numpad/config.h
@@ -0,0 +1,34 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 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
+
+// #define USE_I2C
+// Need to flip the rows
+#undef MATRIX_COL_PINS
+#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6 }
+
+/* Select hand configuration */
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+/* Time in ms until oneshot layer times out */
+#define ONESHOT_TIMEOUT 3000
diff --git a/keyboards/keebio/levinson/keymaps/numpad/keymap.c b/keyboards/keebio/levinson/keymaps/numpad/keymap.c
new file mode 100644
index 0000000000..32a1113c5d
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/numpad/keymap.c
@@ -0,0 +1,123 @@
+#include QMK_KEYBOARD_H
+
+/* Add the stings you want to send as macros, see
+ * https://docs.qmk.fm/#/feature_macros for what all can be used
+ */
+#define MACRO_0 "zero"
+#define MACRO_1 "one"
+#define MACRO_2 "two"
+#define MACRO_3 "three"
+#define MACRO_4 "four"
+#define MACRO_5 "five"
+#define MACRO_6 "six"
+#define MACRO_7 "seven"
+#define MACRO_8 "eight"
+#define MACRO_9 "nine"
+
+enum macro_keycodes {
+ M0 = SAFE_RANGE,
+ M1,
+ M2,
+ M3,
+ M4,
+ M5,
+ M6,
+ M7,
+ M8,
+ M9
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Numpad
+ * ,-----------------------------------------------------------------------------------.
+ * | 0 | 1 | 4 | 7 | BkSp |OSL(1)| | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | , | 2 | 5 | 8 | / | Down | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | . | 3 | 6 | 9 | * | Up | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Enter | + | - | = | MO(1)| | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[0] = LAYOUT_ortho_4x12( \
+ KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_BSPACE, OSL(1), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_COMMA, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, KC_DOWN, KC_NO, KC_A, KC_B, KC_C, KC_D, KC_NO, \
+ KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, KC_UP, KC_NO, KC_E, KC_F, KC_G, KC_H, KC_NO, \
+ KC_KP_ENTER, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_EQUAL, MO(1), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \
+),
+/* Macro layer - the number keys are macros,
+ * other functions on remaining keys
+ * ,-----------------------------------------.
+ * | M(0) | M(1) | M(4) | M(7) | | Esc |
+ * |------+------+------+------+------+------|
+ * | Left | M(2) | M(5) | M(8) | | |
+ * |------+------+------+------+------+------|
+ * | Right| M(3) | M(6) | M(9) | | |
+ * |------+------+------+------+------+------|
+ * | NumLock | RESET| | | Calc |
+ * `-----------------------------------------'
+ */
+[1] = LAYOUT_ortho_4x12( \
+ M0, M1, M4, M7, KC_NO, KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_LEFT, M2, M5, M8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_RIGHT, M3, M6, M8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NUMLOCK, RESET, KC_NO, KC_NO, KC_CALC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case M0:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_0);
+ }
+ break;
+ case M1:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_1);
+ }
+ break;
+ case M2:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_2);
+ }
+ break;
+ case M3:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_3);
+ }
+ break;
+ case M4:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_4);
+ }
+ break;
+ case M5:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_5);
+ }
+ break;
+ case M6:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_6);
+ }
+ break;
+ case M7:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_7);
+ }
+ break;
+ case M8:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_8);
+ }
+ break;
+ case M9:
+ if (record->event.pressed) {
+ SEND_STRING(MACRO_9);
+ }
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/keebio/levinson/keymaps/numpad/readme.md b/keyboards/keebio/levinson/keymaps/numpad/readme.md
new file mode 100644
index 0000000000..0c15ac54d3
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/numpad/readme.md
@@ -0,0 +1,4 @@
+# Numpad Layout
+[Layout Example](http://www.keyboard-layout-editor.com/##@@_c=%23ffd100&a:7%3B&=&_c=%23909596&f:5%3B&=&=&=%3B&@_c=%23c4c8c5&st=MX1A-L1xx&f:6%3B&=Esc&=%2F%2F&=*&=%3F%3B&@=7&=8&=9&=%E2%80%93%3B&@=4&_n:true%3B&=5&=6&=+%3B&@=1&=2&=3&_c=%23ffd100&h:2%3B&=%3B&@_c=%23c4c8c5%3B&=0&_a:5%3B&=%3C%0A,&=%3E%0A.)
+
+Uses a single half of the Levinson a vertical 4x6 numpad/macropad.
diff --git a/keyboards/keebio/levinson/keymaps/numpad/rules.mk b/keyboards/keebio/levinson/keymaps/numpad/rules.mk
new file mode 100644
index 0000000000..639c76834c
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/numpad/rules.mk
@@ -0,0 +1,3 @@
+# Build Options
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
diff --git a/keyboards/keebio/levinson/keymaps/rossman360/keymap.c b/keyboards/keebio/levinson/keymaps/rossman360/keymap.c
new file mode 100644
index 0000000000..efb5f9cfa4
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/rossman360/keymap.c
@@ -0,0 +1,135 @@
+#include QMK_KEYBOARD_H
+
+#define PGMOD LT(_NUM, KC_PGDN)
+#define TABMOD LT(_FN1, KC_TAB)
+#define SPCMOD LT(_FN1, KC_SPACE)
+#define ENTMOD LT(_FN2, KC_ENTER)
+#define ESCMOD LT(_NUM, KC_ESC)
+#define RSMOD LT(_FN1, KC_RSHIFT)
+#define CMDBSP MT(MOD_LGUI, KC_BSPC)
+#define ALTDEL MT(MOD_LALT, KC_DEL)
+#define CTRLSP MT(MOD_LCTL, KC_SPACE)
+#define BWORD LCTL(KC_BSPC)
+#define JUMPBACK LSFT(KC_TAB)
+#define LWORD LCTL(KC_LEFT)
+#define RWORD LCTL(KC_RIGHT)
+#define UNDO LCTL(KC_Z)
+#define NTAB LCTL(KC_T)
+#define CTAB LCTL(KC_W)
+#define XPANDR LCTL(LSFT(KC_X))
+#define TAB1 LCTL(KC_1)
+#define TAB2 LCTL(KC_2)
+#define TAB3 LCTL(KC_3)
+#define TAB4 LCTL(KC_4)
+#define RVOLU LCTL(KC_RBRC)
+#define RVOLD LCTL(KC_LBRC)
+
+enum layer_names {
+ _BASE,
+ _DEL,
+ _FN1,
+ _FN2,
+ _NUM,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ CSPEAK,
+ PARADOWN,
+ PMERGE,
+ WREFRESH,
+ REMCAPS,
+ SPEAK1,
+ SPEAK2,
+ SPEAK3,
+ SPEAK4
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+switch (keycode) {
+ case CSPEAK:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
+ }
+ break;
+ case SPEAK1:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_1)));
+ }
+ break;
+ case SPEAK2:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_2)));
+ }
+ break;
+ case SPEAK3:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_3)));
+ }
+ break;
+ case SPEAK4:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_4)));
+ }
+ break;
+ case PARADOWN:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
+ }
+ break;
+ case PMERGE:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_HOME) SS_TAP(X_BSPACE) SS_TAP(X_SPACE) SS_LCTRL(SS_TAP(X_BSPACE)) SS_TAP(X_SPACE));
+ }
+ break;
+ case WREFRESH:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_SPACE) SS_TAP(X_BSPACE));
+ }
+ break;
+ case REMCAPS:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_LCTRL(SS_TAP(X_LEFT)) SS_TAP(X_DELETE));
+ }
+ break;
+};
+return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_BASE] = LAYOUT_ortho_4x12(
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , NTAB ,
+ JUMPBACK, 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_MINS,
+ CMDBSP , ALTDEL , KC_NO , CTRLSP , TABMOD , PGMOD , ENTMOD , SPCMOD , MO(_DEL),KC_NO , KC_BSPC, KC_DEL
+ ),
+
+[_FN1] = LAYOUT_ortho_4x12(
+ _______, TAB1 , TAB2 , TAB3 , TAB4 , _______, _______, UNDO , _______, _______, _______, CTAB ,
+ KC_CAPS, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_UP , KC_RIGHT,KC_END , KC_NO ,
+ _______, _______, XPANDR , _______, _______, _______, _______, PMERGE , KC_DOWN, _______, _______, _______,
+ WREFRESH,_______, _______, _______, LWORD , RWORD , RVOLD , RVOLU , _______, _______, _______, _______
+ ),
+
+[_FN2] = LAYOUT_ortho_4x12(
+ _______, SPEAK1 , SPEAK2 , SPEAK3 , SPEAK4 , _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, PARADOWN, CSPEAK, _______, _______, _______, _______, _______, _______
+ ),
+
+[_DEL] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, _______, UNDO , _______, _______, _______, CTAB ,
+ REMCAPS, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP ,KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, KC_DEL , KC_BSPC, BWORD , _______, _______, _______, _______, _______, _______
+ ),
+
+[_NUM] = LAYOUT_ortho_4x12(
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_MINS, KC_EQL,
+ KC_CAPS, _______, _______, _______, _______, _______, KC_MINS, KC_4 , KC_5 , KC_6 , KC_COLN, _______,
+ _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_1 , KC_2 , KC_3 , KC_BSLS, _______,
+ _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_0 , _______, _______, _______
+ )
+};
diff --git a/keyboards/keebio/levinson/readme.md b/keyboards/keebio/levinson/readme.md
index 8cb4ff1cf7..f328aa4205 100644
--- a/keyboards/keebio/levinson/readme.md
+++ b/keyboards/keebio/levinson/readme.md
@@ -9,11 +9,11 @@ Hardware Availability: [Keebio](https://keeb.io)
Make example for this keyboard (after setting up your build environment):
- make levinson/rev2:default
+ make keebio/levinson/rev3:default
Example of flashing this keyboard with Pro micro:
- make levinson/rev2:default:avrdude
+ make keebio/levinson/rev3:default:avrdude
Example of flashing this keyboard with Elite-C:
@@ -21,7 +21,7 @@ You'll need to add `BOOTLOADER = atmel-dfu` to your `rules.mk` to ensure that re
Hold the reset button on the Elite-C board, or the reset button on the keyboard if already assembled, then release the button and run:
- make levinson/rev2:default:dfu
+ make keebio/levinson/rev3:default:dfu
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/keebio/levinson/rev1/config.h b/keyboards/keebio/levinson/rev1/config.h
index 52cf7baf7a..a34c8bdcc5 100644
--- a/keyboards/keebio/levinson/rev1/config.h
+++ b/keyboards/keebio/levinson/rev1/config.h
@@ -19,8 +19,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1146
diff --git a/keyboards/keebio/levinson/rev2/config.h b/keyboards/keebio/levinson/rev2/config.h
index 1365ae792c..9d69471253 100644
--- a/keyboards/keebio/levinson/rev2/config.h
+++ b/keyboards/keebio/levinson/rev2/config.h
@@ -19,8 +19,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1146
diff --git a/keyboards/keebio/quefrency/rev1/config.h b/keyboards/keebio/quefrency/rev1/config.h
index 9778ef4709..1d726a0fc3 100644
--- a/keyboards/keebio/quefrency/rev1/config.h
+++ b/keyboards/keebio/quefrency/rev1/config.h
@@ -18,8 +18,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1257
diff --git a/keyboards/keebio/rorschach/rev1/config.h b/keyboards/keebio/rorschach/rev1/config.h
index bcfce2bee8..4dae31f8c5 100644
--- a/keyboards/keebio/rorschach/rev1/config.h
+++ b/keyboards/keebio/rorschach/rev1/config.h
@@ -17,8 +17,6 @@ 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 0xCB10
#define PRODUCT_ID 0x1246
diff --git a/keyboards/keebio/tragicforce68/info.json b/keyboards/keebio/tragicforce68/info.json
index 550040a3a1..3ff0b3678f 100644
--- a/keyboards/keebio/tragicforce68/info.json
+++ b/keyboards/keebio/tragicforce68/info.json
@@ -5,7 +5,7 @@
"width": 17.25,
"height": 5,
"layouts": {
- "LAYOUT": {
+ "LAYOUT_68_ansi": {
"layout": [
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
diff --git a/keyboards/keebio/tragicforce68/keymaps/default/keymap.c b/keyboards/keebio/tragicforce68/keymaps/default/keymap.c
index 69255e080b..12d738b3ad 100644
--- a/keyboards/keebio/tragicforce68/keymaps/default/keymap.c
+++ b/keyboards/keebio/tragicforce68/keymaps/default/keymap.c
@@ -4,7 +4,7 @@
#define _FN1 1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT(
+ [_QWERTY] = LAYOUT_68_ansi(
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┠┌────────┬────────â”
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_INS, KC_PGUP,
//├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
@@ -18,7 +18,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘
),
- [_FN1] = LAYOUT(
+ [_FN1] = LAYOUT_68_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_HOME,
//├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
diff --git a/keyboards/keebio/tragicforce68/keymaps/rossman360/keymap.c b/keyboards/keebio/tragicforce68/keymaps/rossman360/keymap.c
new file mode 100755
index 0000000000..127a0fd1ee
--- /dev/null
+++ b/keyboards/keebio/tragicforce68/keymaps/rossman360/keymap.c
@@ -0,0 +1,71 @@
+#include QMK_KEYBOARD_H
+#include "rossman360.h"
+
+#define PGMOD LT(_MOD, KC_PGDN)
+#define SPCMOD LT(_MOD, KC_SPACE)
+#define VOLMOD LT(_MOD, KC__MUTE)
+
+enum layer_names {
+ _BASE,
+ _REV,
+ _MOD,
+ _DEL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT_split_space(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┠┌────────┬────────â”
+ 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, NTAB,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ 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, MO(_MOD),CTAB,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ 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_ENTER,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────â”
+ 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,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴─────┬───┴────────┴───┬─────┴────────┴┬────────┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────â”
+ CMDBSP, ALTDEL, KC_LCTRL, KC_SPACE, SPCMOD, SPCMOD, MO(_DEL), KC_LCTL, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT
+ //└──────────┴──────────┴──────────┴──────────────────┴────────────────┴───────────────┴─────────────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+
+[_REV] = LAYOUT_split_space(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┠┌────────┬────────â”
+ _______, _______, _______, _______, _______, _______,_______, _______,_______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ KC_LEFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,KC_HOME, KC_END, KC_RIGHT, _______, _______,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ JUMPBACK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────â”
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CSPEAK, _______,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴──────┬──┴────────┴────┬────┴────────┴┬────────┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────â”
+ _______, _______, _______, KC_TAB, PGMOD, _______, _______, _______, _______, _______, _______, _______
+ //└──────────┴──────────┴──────────┴───────────────────┴────────────────┴──────────────┴─────────────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+
+[_MOD] = LAYOUT_split_space(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┠┌────────┬────────â”
+ RESET, _______, _______, _______, _______, _______,_______, _______,KC_F8 , _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ _______, _______, WREFRESH,_______, DF(_REV), _______, _______, UNDO, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ KC_CAPS, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_UP, KC_RIGHT, KC_END, _______, PARADOWN,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────â”
+ _______, _______, XPANDR, _______, _______, _______, _______, PMERGE, KC_DOWN, _______, _______, _______, KC_F1 ,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴──────┬──┴────────┴────┬────┴────────┴┬────────┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────â”
+ _______, _______, _______, LWORD, RWORD, LWORD, RWORD, _______, _______, _______, KC_F2 , _______
+ //└──────────┴──────────┴──────────┴───────────────────┴────────────────┴──────────────┴─────────────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+
+[_DEL] = LAYOUT_split_space(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┠┌────────┬────────â”
+ _______, SPEAK1, SPEAK2, SPEAK3, SPEAK4, _______,_______, _______,_______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ REMCAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────â”
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴──────┬──┴────────┴────┬────┴────────┴┬────────┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────â”
+ _______, _______, KC_DEL, KC_BSPC, BWORD, _______, _______, _______, _______, _______, _______, _______
+ //└──────────┴──────────┴──────────┴───────────────────┴────────────────┴──────────────┴─────────────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+};
diff --git a/keyboards/keebio/tragicforce68/keymaps/rossman360/readme.md b/keyboards/keebio/tragicforce68/keymaps/rossman360/readme.md
new file mode 100644
index 0000000000..95e76d6308
--- /dev/null
+++ b/keyboards/keebio/tragicforce68/keymaps/rossman360/readme.md
@@ -0,0 +1,3 @@
+#Rossman360's Tragicforce68 Layout
+
+This is a split-space layout that, like a lot of my layouts, has a lot of macros specific to the transcription service Rev. Moving back through text, deleting characters or whole words and returning to the end of the document can all be done using thumbs.
diff --git a/keyboards/keebio/tragicforce68/keymaps/rossman360/rules.mk b/keyboards/keebio/tragicforce68/keymaps/rossman360/rules.mk
new file mode 100644
index 0000000000..d10eda0fbe
--- /dev/null
+++ b/keyboards/keebio/tragicforce68/keymaps/rossman360/rules.mk
@@ -0,0 +1,2 @@
+MACROS_ENABLED = yes
+BOOTLOADER = atmel-dfu
diff --git a/keyboards/keebio/tragicforce68/rules.mk b/keyboards/keebio/tragicforce68/rules.mk
index 2118d3fc27..f9f487a2a6 100644
--- a/keyboards/keebio/tragicforce68/rules.mk
+++ b/keyboards/keebio/tragicforce68/rules.mk
@@ -28,3 +28,5 @@ 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
+
+LAYOUTS = 68_ansi
diff --git a/keyboards/keebio/tragicforce68/tragicforce68.h b/keyboards/keebio/tragicforce68/tragicforce68.h
index a63ce50a5e..cdecc55d96 100644
--- a/keyboards/keebio/tragicforce68/tragicforce68.h
+++ b/keyboards/keebio/tragicforce68/tragicforce68.h
@@ -2,7 +2,7 @@
#include "quantum.h"
-#define LAYOUT( \
+#define LAYOUT_68_ansi( \
A1, A2, A3, A4, A5, A6, A7, A8, E1, E2, E3, E4, E5, E6, E7, E8, \
B1, B2, B3, B4, B5, B6, B7, B8, F1, F2, F3, F4, F5, F6, F7, F8, \
C1, C2, C3, C4, C5, C6, C7, C8, G1, G2, G3, G4, G5, \
@@ -72,3 +72,5 @@
KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \
KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \
)
+
+#define LAYOUT LAYOUT_68_ansi
diff --git a/keyboards/keebio/viterbi/keymaps/met/keymap.c b/keyboards/keebio/viterbi/keymaps/met/keymap.c
new file mode 100644
index 0000000000..45427018a7
--- /dev/null
+++ b/keyboards/keebio/viterbi/keymaps/met/keymap.c
@@ -0,0 +1,321 @@
+#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 CANCEL LCTL(KC_C)
+#define TERM LCTL(LALT(KC_T))
+#define ALPHAMOD LT(_ALPHA, KC_VOLD)
+#define CTLBSP MT(MOD_LCTL, KC_BSPC)
+#define GUIDEL MT(MOD_LGUI, KC_DEL)
+#define ALTSPC MT(MOD_LALT, KC_SPACE)
+#define SPCMOD LT(_MOD, KC_SPACE)
+#define JUMPBACK LSFT(KC_TAB)
+#define NTAB LCTL(KC_T)
+#define CTAB LCTL(KC_W)
+#define TAB1 LCTL(KC_1)
+#define TAB2 LCTL(KC_2)
+#define TAB3 LCTL(KC_3)
+#define TAB4 LCTL(KC_4)
+#define BWORD LCTL(KC_BSPC)
+#define LWORD LCTL(KC_LEFT)
+#define RWORD LCTL(KC_RIGHT)
+#define TABMOD LT(_MOD, KC_TAB)
+#define ENTMOD LT(_ENT, KC_ENTER)
+
+enum layer_names {
+ _BASE,
+ _PLAYING,
+ _PLAYED,
+ _NUMS,
+ _FN,
+ _TEST,
+ _ALPHA,
+ _QWERTY,
+ _REV,
+ _DEL,
+ _MOD,
+ _ENT
+};
+
+enum custom_keycodes {
+ MET = SAFE_RANGE,
+ SET,
+ GO,
+ STOP,
+ RESUME,
+ NEWRESUME,
+ SYNC,
+ SHUTDOWN,
+ REBOOT,
+ SOURCE,
+ PUSH,
+ TEST,
+ TST,
+ ENAME,
+ SNAME,
+ LNAME,
+ BUS,
+ PMERGE,
+ CSPEAK
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SET:
+ if (record->event.pressed) {
+ layer_on(_NUMS);
+ SEND_STRING("met ");
+}
+ break;
+ case GO:
+ if (record->event.pressed) {
+ layer_off(_NUMS);
+ layer_off(_ALPHA);
+ layer_off(_PLAYED);
+ layer_on(_PLAYING);
+ SEND_STRING(SS_TAP(X_ENTER));
+}
+ break;
+ case STOP:
+ if (record->event.pressed) {
+ layer_off(_PLAYING);
+ layer_on(_PLAYED);
+ layer_off(_NUMS);
+ layer_off(_ALPHA);
+ SEND_STRING(SS_TAP(X_N));
+ SEND_STRING(SS_TAP(X_N));
+ SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
+}
+ break;
+ case RESUME:
+ if (record->event.pressed) {
+ layer_off(_PLAYED);
+ layer_on(_PLAYING);
+ SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
+ SEND_STRING(SS_TAP(X_UP));
+ SEND_STRING(SS_TAP(X_ENTER));
+}
+ break;
+ case NEWRESUME:
+ if (record->event.pressed) {
+ layer_off(_NUMS);
+ layer_off(_ALPHA);
+ layer_off(_PLAYED);
+ layer_on(_PLAYING);
+ SEND_STRING(SS_TAP(X_R));
+ SEND_STRING(SS_TAP(X_ENTER));
+}
+ break;
+ case SYNC:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_N));
+}
+ break;
+ case SHUTDOWN:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
+ SEND_STRING("shutdown now");
+ SEND_STRING(SS_TAP(X_ENTER));
+}
+ break;
+ case REBOOT:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
+ SEND_STRING("reboot");
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ break;
+ case SOURCE:
+ if (record->event.pressed) {
+ SEND_STRING("source .bashrc");
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ break;
+ case PUSH:
+ if (record->event.pressed) {
+ SEND_STRING("ftp rossmontsinger.net");
+ _delay_ms(250);
+ SEND_STRING(SS_TAP(X_ENTER));
+ _delay_ms(2250);
+ SEND_STRING("met@rossmontsinger.net");
+ _delay_ms(250);
+ SEND_STRING(SS_TAP(X_ENTER));
+ _delay_ms(2500);
+ SEND_STRING("metboard");
+ _delay_ms(250);
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ break;
+ case TEST:
+ if (record->event.pressed) {
+ layer_off(_NUMS);
+ layer_off(_ALPHA);
+ layer_off(_PLAYED);
+ layer_on(_PLAYING);
+ SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
+ _delay_ms(250);
+ SEND_STRING("play Desktop/met/a_lazoom.mp3");
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ case TST:
+ if (record->event.pressed) {
+ SEND_STRING("tst");
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ break;
+ case ENAME:
+ if (record->event.pressed) {
+ SEND_STRING("sname ");
+ layer_on(_NUMS);
+ layer_on(_ALPHA);
+ }
+ break;
+ case SNAME:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_ENTER));
+ layer_off(_NUMS);
+ layer_off(_ALPHA);
+ }
+ break;
+ case LNAME:
+ if (record->event.pressed) {
+ SEND_STRING("met $");
+ layer_off(_NUMS);
+ layer_on(_ALPHA);
+ }
+ break;
+ case BUS:
+ if (record->event.pressed) {
+ SEND_STRING("met $bus");
+ layer_off(_NUMS);
+ layer_off(_ALPHA);
+ layer_off(_PLAYED);
+ layer_on(_PLAYING);
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ break;
+ case PMERGE:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_HOME));
+ SEND_STRING(SS_TAP(X_BSPACE));
+ SEND_STRING(SS_TAP(X_SPACE));
+ SEND_STRING(SS_LCTRL(SS_TAP(X_BSPACE)));
+ SEND_STRING(SS_TAP(X_SPACE));
+ }
+break;
+case CSPEAK:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN));
+ SEND_STRING(SS_TAP(X_ENTER));
+ SEND_STRING(SS_TAP(X_ENTER));
+ SEND_STRING(SS_TAP(X_PGDOWN));
+}
+ break;
+};
+
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_ortho_5x14(
+ KC_NO, STOP , TST , _______, _______, _______, BUS , _______, _______, _______, _______, _______, _______, _______, \
+ KC_NO, _______, SET , SET , SET , _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_NO, _______, SET , SET , SET , _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_NO, LNAME , SET , SET , SET , _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_NO, MO(_FN), _______, SET , _______, _______, _______, TG(_QWERTY),KC_B, _______, _______, _______, _______, _______ \
+ ),
+
+ [_PLAYING] = LAYOUT_ortho_5x14(
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, STOP , _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_PLAYED] = LAYOUT_ortho_5x14(
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______,_______, _______, _______, _______,NEWRESUME, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_NUMS] = LAYOUT_ortho_5x14(
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, KC_7 , KC_8 , KC_9 , _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, KC_4 , KC_5 , KC_6 , _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, KC_1 , KC_2 , KC_3 , _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, KC_0 , _______, _______, GO , _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN] = LAYOUT_ortho_5x14(
+ KC_NO, SHUTDOWN,_______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, REBOOT , _______, _______, _______, _______, KC_VOLD, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, ENAME , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, SOURCE , _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_TEST] = LAYOUT_ortho_5x14(
+ KC_NO, TST , TST , TST , TST , TST , TST , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, TST , TST , TST , TST , TST , TST , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, TST , TST , TST , TST , TST , TST , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, TST , TST , TST , TST , TST , TST , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, TST , TST , TST , TST , TST , TST , _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ALPHA] = LAYOUT_ortho_5x14(
+ KC_NO, _______, KC_Y , KC_U , KC_I , KC_O , KC_P , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, KC_N , KC_Q , KC_W , KC_E , KC_R , KC_T , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, KC_M , KC_A , KC_S , KC_D , KC_F , KC_G , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, KC_H , KC_J , KC_K , KC_L , GO , _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_QWERTY] = LAYOUT_ortho_5x14(
+ KC_NO, 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_NO, KC_CAPS, 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_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_PGUP ,
+ 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_UP, KC_PGDN ,
+ KC_NO, CTLBSP , GUIDEL , KC_ENTER, ALTSPC, TABMOD , KC_BSPC, ENTMOD , SPCMOD ,MO(_DEL), KC_BSLS, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+
+ [_REV] = LAYOUT_ortho_5x14(
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, KC_TAB , KC_PGDN, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+
+ [_DEL] = LAYOUT_ortho_5x14(
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, KC_BSPC, BWORD , _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_MOD] = LAYOUT_ortho_5x14(
+ KC_NO , KC_GRAVE,KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , NTAB ,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CTAB,
+ KC_NO , _______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_UP ,KC_RIGHT, KC_END , _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, PMERGE , KC_DOWN, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, LWORD , RWORD , TG(_QWERTY),_______,_______,_______,_______, _______, _______
+ ),
+
+ [_ENT] = LAYOUT_ortho_5x14(
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO , _______, _______, _______, _______, _______, CSPEAK , _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/keebio/viterbi/keymaps/met/rules.mk b/keyboards/keebio/viterbi/keymaps/met/rules.mk
new file mode 100644
index 0000000000..1e3cebb145
--- /dev/null
+++ b/keyboards/keebio/viterbi/keymaps/met/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keycapsss/plaid_pad/config.h b/keyboards/keycapsss/plaid_pad/config.h
new file mode 100644
index 0000000000..c4d22b6636
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xAF12
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Keycapsss
+#define PRODUCT Plaid-Pad
+#define DESCRIPTION 4x4 numpad with through hole components
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 4
+
+#define MATRIX_ROW_PINS { C0, C1, C2, C3 }
+#define MATRIX_COL_PINS { B0, D7, D6, D5 }
+#define UNUSED_PINS { B3, B4, B5, D4}
+
+#define ENCODERS_PAD_A { D0, B1 }
+#define ENCODERS_PAD_B { D1, B2 }
+#define ENCODER_RESOLUTION 4
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
+
+/* 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
diff --git a/keyboards/keycapsss/plaid_pad/info.json b/keyboards/keycapsss/plaid_pad/info.json
new file mode 100644
index 0000000000..cbc2b5210d
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/info.json
@@ -0,0 +1,31 @@
+{
+ "keyboard_name": "Plaid-Pad",
+ "keyboard_folder": "plaid_pad",
+ "url": "https://keycapsss.com/diy-kits/104/plaid-pad-4x4-numpad",
+ "maintainer": "BenRoe",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x4": {
+ "key_count": 16,
+ "layout": [
+ {"w": 1,"x": 0,"y": 0},
+ {"w": 1,"x": 1,"y": 0},
+ {"w": 1,"x": 2,"y": 0},
+ {"w": 1,"x": 3,"y": 0},
+ {"w": 1,"x": 0,"y": 1},
+ {"w": 1,"x": 1,"y": 1},
+ {"w": 1,"x": 2,"y": 1},
+ {"w": 1,"x": 3,"y": 1},
+ {"w": 1,"x": 0,"y": 2},
+ {"w": 1,"x": 1,"y": 2},
+ {"w": 1,"x": 2,"y": 2},
+ {"w": 1,"x": 3,"y": 2},
+ {"w": 1,"x": 0,"y": 3},
+ {"w": 1,"x": 1,"y": 3},
+ {"w": 1,"x": 2,"y": 3},
+ {"w": 1,"x": 3,"y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/config.h b/keyboards/keycapsss/plaid_pad/keymaps/default/config.h
new file mode 100644
index 0000000000..271f48d001
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c b/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
new file mode 100644
index 0000000000..bdfd7fb780
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
@@ -0,0 +1,44 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*
+ * ,-----------------------,
+ * | 7 | 8 | 9 | / |
+ * |-----+-----+-----+-----|
+ * | 4 | 5 | 6 | * |
+ * |-----+-----+-----+-----|
+ * | 1 | 2 | 3 | - |
+ * |-----+-----+-----+-----|
+ * | 0 | . | = | + |
+ * `-----------------------'
+ */
+LAYOUT_ortho_4x4(
+ KC_P7, KC_P8, KC_P9, KC_PSLS,
+ KC_P4, KC_P5, KC_P6, KC_PAST,
+ KC_P1, KC_P2, KC_P3, KC_PMNS,
+ KC_P0, KC_PDOT, KC_PEQL, KC_PPLS
+)
+
+};
+
+// Set led state during powerup
+void keyboard_post_init_user(void) {
+ writePinHigh(LED_RED);
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { // First encoder - top left
+ if (clockwise) {
+ tap_code(KC_UP);
+ } else {
+ tap_code(KC_DOWN);
+ }
+ } else if (index == 1) { // Second encoder - top right
+ if (clockwise) {
+ tap_code(KC_UP);
+ } else {
+ tap_code(KC_DOWN);
+ }
+ }
+}
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/readme.md b/keyboards/keycapsss/plaid_pad/keymaps/default/readme.md
new file mode 100644
index 0000000000..1c1b1513dd
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/readme.md
@@ -0,0 +1,11 @@
+
+<img src="https://i.imgur.com/V82cMqq.png" width="200">
+
+# Default Plaid-Pad Layout
+
+This is the default layout that comes flashed on every Plaid-Pad.
+The upper left (7) and right (/) switch, can be replaced by a rotary encoder.
+They do "Up Arrow" (KC_UP) and "Down Arrow" (KC_DOWN).
+Encoder with build-in switch are supported.
+
+
diff --git a/keyboards/keycapsss/plaid_pad/plaid_pad.c b/keyboards/keycapsss/plaid_pad/plaid_pad.c
new file mode 100644
index 0000000000..befddf42a9
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/plaid_pad.c
@@ -0,0 +1 @@
+#include "plaid_pad.h"
diff --git a/keyboards/keycapsss/plaid_pad/plaid_pad.h b/keyboards/keycapsss/plaid_pad/plaid_pad.h
new file mode 100644
index 0000000000..fae9b132a8
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/plaid_pad.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#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 } \
+}
+
+#define LED_RED C5 // LED1
+#define LED_GREEN C4 // LED2
diff --git a/keyboards/keycapsss/plaid_pad/readme.md b/keyboards/keycapsss/plaid_pad/readme.md
new file mode 100644
index 0000000000..ad38f119ce
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/readme.md
@@ -0,0 +1,25 @@
+# Plaid-Pad
+<img src="https://i.imgur.com/Jovhxpr.jpg" width="400">
+<img src="https://i.imgur.com/V82cMqq.png" width="400">
+
+A 4x4 numpad with only through hole components.
+It's a great companion to the Plaid keyboard by [hsgw](https://github.com/hsgw/) and heavily inspired by it.
+
+* Keyboard Maintainer: BenRoe [Github](https://github.com/BenRoe) / [Twitter](https://twitter.com/keycapsss)
+* Hardware Supported: ATmega328P with VUSB ([see Bootloader section](#Bootloader))
+* Hardware Availability: [Keycapsss.com](https://keycapsss.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keycapsss/plaid_pad:default
+
+Flashing example for this keyboard:
+
+ make keycapsss/plaid_pad:default:flash
+
+## Bootloader
+- same usbasploader as Plaid ([Instruction](https://github.com/hsgw/plaid/blob/master/doc/en/bootloader.md), [Repository](https://github.com/hsgw/USBaspLoader/tree/plaid))
+
+---
+
+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/keycapsss/plaid_pad/rules.mk b/keyboards/keycapsss/plaid_pad/rules.mk
new file mode 100644
index 0000000000..f62833ca6b
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rules.mk
@@ -0,0 +1,41 @@
+# MCU name
+MCU = atmega328p
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = USBasp
+
+# disable debug code
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+
+# Build Options
+# change yes to no to disable
+#
+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
+# 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
+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
+ENCODER_ENABLE = yes
+
+LAYOUTS = ortho_4x4
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/keycapsss/plaid_pad/usbconfig.h b/keyboards/keycapsss/plaid_pad/usbconfig.h
new file mode 100644
index 0000000000..e208e99f2e
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/usbconfig.h
@@ -0,0 +1,383 @@
+/* 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 $
+ */
+
+#pragma once
+
+#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_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_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 0
+/* 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 (DEVICE_VER & 0xFF), ((DEVICE_VER >> 8) & 0xFF)
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'K','e','y','c','a','p','s','s','s'
+#define USB_CFG_VENDOR_NAME_LEN 9
+/* 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 'P', 'l', 'a', 'i', 'd', '-', 'P', 'a', 'd'
+#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
diff --git a/keyboards/kinesis/alvicstep/rules.mk b/keyboards/kinesis/alvicstep/rules.mk
index e69de29bb2..232ff719c8 100644
--- a/keyboards/kinesis/alvicstep/rules.mk
+++ b/keyboards/kinesis/alvicstep/rules.mk
@@ -0,0 +1,4 @@
+CUSTOM_MATRIX = yes # need to do our own thing with the matrix
+
+# Project specific files
+SRC += matrix.c
diff --git a/keyboards/kinesis/keymaps/xyverz/keymap.c b/keyboards/kinesis/keymaps/xyverz/keymap.c
index 1144d7924a..18fdb2e08f 100644
--- a/keyboards/kinesis/keymaps/xyverz/keymap.c
+++ b/keyboards/kinesis/keymaps/xyverz/keymap.c
@@ -12,6 +12,7 @@ enum custom_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK, KEYPAD };
// Aliases to make the keymap more uniform
#define GUI_END GUI_T(KC_END)
#define KPD_ENT LT(_KEYPAD, KC_ENT)
+#define MACLOCK LGUI(LCTL(KC_Q))
// clang-format off
@@ -98,11 +99,11 @@ enum custom_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK, KEYPAD };
| |QWERTY|Colemk|Dvorak| | | | KP . |KP Ent|
`---------------------------' `---------------------------'
,-------------.,-------------.
- | | || | |
+ | | || |MacLck|
,------|------|------||------+------+------.
| | | || | | |
| | |------||------| | KP 0 |
- | | | || | | |
+ | | |MacLck|| | | |
`--------------------'`--------------------'
*/
@@ -197,7 +198,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Left Thumb
_______, _______,
_______,
- _______, _______, _______,
+ _______, _______, MACLOCK,
// Right Hand
_______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -207,7 +208,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
_______, _______, KC_PDOT, KC_PENT,
// Right Thumb
- _______, _______,
+ _______, MACLOCK,
_______,
_______, _______, KC_P0
)
diff --git a/keyboards/kinesis/keymaps/xyverz/readme.md b/keyboards/kinesis/keymaps/xyverz/readme.md
index f8896934c0..702af4474a 100644
--- a/keyboards/kinesis/keymaps/xyverz/readme.md
+++ b/keyboards/kinesis/keymaps/xyverz/readme.md
@@ -101,9 +101,9 @@ Removed the Media layer 2018-12-07
| |QWERTY|Colemk|Dvorak| | | | KP . |KP Ent|
`---------------------------' `---------------------------'
,-------------.,-------------.
- | | || | |
+ | | || |MacLck|
,------|------|------||------+------+------.
| | | || | | |
| | |------||------| | KP 0 |
- | | | || | | |
+ | | |MacLck|| | | |
`--------------------'`--------------------'
diff --git a/keyboards/kinesis/rules.mk b/keyboards/kinesis/rules.mk
index 295054d755..faa3e454c9 100644
--- a/keyboards/kinesis/rules.mk
+++ b/keyboards/kinesis/rules.mk
@@ -28,9 +28,5 @@ 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 should be port E6, current quantum library hardcodes C6, which we use for programming
-CUSTOM_MATRIX=yes # need to do our own thing with the matrix
DEFAULT_FOLDER = kinesis/alvicstep
-
-# Project specific files
-SRC = matrix.c
diff --git a/keyboards/kingly_keys/romac/config.h b/keyboards/kingly_keys/romac/config.h
index da236c5004..59b084e8c9 100644
--- a/keyboards/kingly_keys/romac/config.h
+++ b/keyboards/kingly_keys/romac/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 0x4b4b // "KK"
+#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER TheRoyalSweatshirt
#define PRODUCT romac
diff --git a/keyboards/kingly_keys/romac/keymaps/via/keymap.c b/keyboards/kingly_keys/romac/keymaps/via/keymap.c
new file mode 100644
index 0000000000..833336b531
--- /dev/null
+++ b/keyboards/kingly_keys/romac/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_KP_7, KC_KP_8, KC_KP_9, \
+ KC_KP_4, KC_KP_5, KC_KP_6, \
+ KC_KP_1, KC_KP_2, KC_KP_3, \
+ MO(1), KC_KP_0, KC_KP_DOT \
+ ),
+ [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 \
+ ),
+ [2] = 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 \
+ ),
+ [3] = 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 \
+ )
+};
diff --git a/keyboards/kingly_keys/romac/keymaps/via/rules.mk b/keyboards/kingly_keys/romac/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/kingly_keys/romac/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/kmac/keymaps/default/keymap.c b/keyboards/kmac/keymaps/default/keymap.c
index 05ccd1bcb1..a67a4d10d3 100644
--- a/keyboards/kmac/keymaps/default/keymap.c
+++ b/keyboards/kmac/keymaps/default/keymap.c
@@ -73,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break;
case MCR_04:
if (record->event.pressed) {
- SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
+ SEND_STRING(SS_LCTL("c") SS_TAP(X_RIGHT) SS_LCTL("v"));
}
break;
}
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c b/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c
index 05ccd1bcb1..a67a4d10d3 100644
--- a/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c
+++ b/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c
@@ -73,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break;
case MCR_04:
if (record->event.pressed) {
- SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
+ SEND_STRING(SS_LCTL("c") SS_TAP(X_RIGHT) SS_LCTL("v"));
}
break;
}
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c
index 42be547649..6b49585560 100644
--- a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c
+++ b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c
@@ -73,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break;
case MCR_04:
if (record->event.pressed) {
- SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
+ SEND_STRING(SS_LCTL("c") SS_TAP(X_RIGHT) SS_LCTL("v"));
}
break;
}
diff --git a/keyboards/knops/mini/keymaps/mverteuil/config.h b/keyboards/knops/mini/keymaps/mverteuil/config.h
new file mode 100644
index 0000000000..f72145c5a8
--- /dev/null
+++ b/keyboards/knops/mini/keymaps/mverteuil/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2017 Pawnerd, 2019 Matthew de Verteuil
+ *
+ * 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
+
+#if defined(AUDIO_ENABLE)
+ #define AUDIO_CLICKY
+ #define B5_AUDIO
+ #define C6_AUDIO
+ #define STARTUP_SONG SONG(ZELDA_PUZZLE)
+ #define GOODBYE_SONG SONG(COIN_SOUND)
+#endif
diff --git a/keyboards/knops/mini/keymaps/mverteuil/keymap.c b/keyboards/knops/mini/keymaps/mverteuil/keymap.c
new file mode 100644
index 0000000000..5ecba0d5a1
--- /dev/null
+++ b/keyboards/knops/mini/keymaps/mverteuil/keymap.c
@@ -0,0 +1,306 @@
+#include QMK_KEYBOARD_H
+
+#define MAXIMIZ A(G(KC_F))
+#define NXTDSPL C(A(G(KC_RIGHT)))
+#define BTMHALF A(G(KC_DOWN))
+#define TOPHALF A(G(KC_UP))
+#define NXTTHRD SS_LCTL(SS_LALT(SS_TAP(X_RIGHT)))
+#define PRVTHRD C(A(KC_LEFT))
+
+#define LT_MSTP LT(_LAYER_SELECT, KC_MSTP)
+#define LT_ESC LT(_LAYER_SELECT, KC_ESC)
+#define LT_NXTH TD(TD_SPEC)
+
+#define writeLayerLedState(layer) writePin(layer)
+#define layer_led_0_off B6, false
+#define layer_led_1_off D5, true
+#define layer_led_2_off B0, false
+#define layer_led_0_on B6, true
+#define layer_led_1_on D5, false
+#define layer_led_2_on B0, true
+
+void led_init_animation(void);
+void led_set_layer(int layer);
+void td_spectacles_finish(qk_tap_dance_state_t *state, void *user_data);
+void td_spectacles_reset(qk_tap_dance_state_t *state, void *user_data);
+
+enum layer_led_mode {
+ ALL_LAYERS_OFF = -1,
+ LAYER_0,
+ LAYER_1,
+ LAYER_2,
+ LAYER_3,
+ LAYER_4,
+ LAYER_5,
+ ALL_LAYERS_ON,
+};
+
+enum mini_layers {
+ _MEDIA,
+ _COPYPASTA,
+ _SPECTACLES,
+ _LAYER_3,
+ _LAYER_4,
+ _LAYER_5,
+ _LAYER_SELECT,
+};
+
+enum { TD_SPEC = 0 };
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once for spectacles macro, hold for layer toggle */
+ [TD_SPEC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_spectacles_finish, td_spectacles_reset),
+};
+
+/*
+ * Key Layout
+ * _____ _____ _____
+ * | | | | | |
+ * | 1 | | 2 | | 3 |
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * | | | | | |
+ * | 4 | | 5 | | 6 |
+ * |_____| |_____| |_____|
+ *
+ * Hold 1 and:
+ * - press 4, 5, or 6 to change layers
+ * - press 3 to reset, or press and hold 3 to enter DFU programming mode
+ *
+ * If something prevents you from using the above to reprogram, you can hold 3 while powering on as a fallback.
+ */
+
+/* clang-format off */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * Layer 0 (Media Keys)
+ * _____ _____ _____
+ * | | | | | |
+ * |Stop | |VolUp| |Play |
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * | | | | | |
+ * |Prev | |VolDn| |Next |
+ * |_____| |_____| |_____|
+ *
+ */
+ [_MEDIA] = LAYOUT(
+ LT_MSTP, KC_VOLU, KC_MPLY,
+ KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+
+ /*
+ * Layer 1 (Copy and Paste Macros)
+ * _____ _____ _____
+ * | | | | | |
+ * | ESC | |Ctl+Z| |CSf+Z|
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * | | | | | |
+ * |Ctl+X| |Ctl+C| |Ctl+V|
+ * |_____| |_____| |_____|
+ *
+ */
+
+ [_COPYPASTA] = LAYOUT(
+ LT_ESC, C(KC_Z), C(S(KC_Z)),
+ C(KC_X), C(KC_C), C(KC_V)
+ ),
+
+ /*
+ * Layer 2 (Spectacles Macros)
+ * _LT&_ _____ _____
+ * | Win | | Win | | Win |
+ * | Next| | Top | |Mximze
+ * |_1/3_| |_1/2_| |_____|
+ * _____ _____ _____
+ * | Win | | Win | | Win |
+ * | Prev| | Bot | | Next|
+ * |_1/3_| |_1/2_| |Displ|
+ *
+ */
+ [_SPECTACLES] = LAYOUT(
+ LT_NXTH,TOPHALF,MAXIMIZ,
+ PRVTHRD,BTMHALF,NXTDSPL
+ ),
+
+ /*
+ * Layer 6 (Layer Select/Reset)
+ * _____ _____ _____
+ * | | | | | |
+ * |None | |None | |Reset|
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * |Layer| |Layer| |Layer|
+ * | 0 | | 1 | | 2 |
+ * |_____| |_____| |_____|
+ *
+ * Layers 0, 1, and 2 have the top left button held to activate this layer.
+ * Then press the specific layer to switch to it.
+ *
+ */
+ [_LAYER_SELECT] = LAYOUT(
+ _______, _______, RESET,
+ TO(_MEDIA),TO(_COPYPASTA),TO(_SPECTACLES)
+ )
+};
+/* clang-format on */
+
+/*
+ * Knops Mini LED Numbers:
+ * _____ _____ _____
+ * | | | | | |
+ * | 1 | | 2 | | 3 | <---
+ * |_____| |_____| |_____| | These LEDs are called 'Switch LEDs'
+ * _____ _____ _____ |----- To turn on/off these leds, use:
+ * | | | | | | | set_switch_led( [1-6], [true/false]);
+ * | 4 | | 5 | | 6 | <---
+ * |_____| |_____| |_____|
+ *
+ * < 0 > < 1 > < 2 > <--- These front-LEDs are called 'Layer LEDs'
+ * To turn on/off these leds, use:
+ * set_layer_led( [0-2], [true/false] );
+ */
+
+void set_switch_led(int ledId, bool state) {
+ switch (ledId) {
+ case 1:
+ writePin(D7, state);
+ break;
+ case 2:
+ writePin(readPin(B7) ? C6 : C7, state);
+ break;
+ case 3:
+ writePin(D4, state);
+ break;
+ case 4:
+ writePin(E6, state);
+ break;
+ case 5:
+ writePin(B4, state);
+ break;
+ case 6:
+ writePin(D6, state);
+ break;
+ }
+}
+
+void set_layer_led(int layerLedMode) {
+ writeLayerLedState(layer_led_0_off);
+ writeLayerLedState(layer_led_1_off);
+ writeLayerLedState(layer_led_2_off);
+
+ switch (layerLedMode) {
+ case ALL_LAYERS_OFF:
+ break;
+ case LAYER_0:
+ writeLayerLedState(layer_led_0_on);
+ break;
+ case LAYER_1:
+ writeLayerLedState(layer_led_1_on);
+ break;
+ case LAYER_2:
+ writeLayerLedState(layer_led_2_on);
+ break;
+ case LAYER_3:
+ writeLayerLedState(layer_led_0_on);
+ writeLayerLedState(layer_led_1_on);
+ break;
+ case LAYER_4:
+ writeLayerLedState(layer_led_1_on);
+ writeLayerLedState(layer_led_2_on);
+ break;
+ case LAYER_5:
+ writeLayerLedState(layer_led_0_on);
+ writeLayerLedState(layer_led_2_on);
+ break;
+ default:
+ writeLayerLedState(layer_led_0_on);
+ writeLayerLedState(layer_led_1_on);
+ writeLayerLedState(layer_led_2_on);
+ break;
+ }
+}
+
+void led_init_animation() {
+ for (int i = ALL_LAYERS_OFF; i <= ALL_LAYERS_ON; i++) {
+ led_set_layer(i);
+ }
+
+ led_set_layer(LAYER_0);
+}
+
+/*
+ * This function led_set_layer gets called when you switch between layers.
+ * It allows you to turn on and off leds for each different layer and do
+ * other cool stuff.
+ */
+void led_set_layer(int layer) {
+ switch (layer) {
+ case ALL_LAYERS_OFF:
+ set_switch_led(1, false);
+ set_switch_led(2, false);
+ set_switch_led(3, false);
+ set_switch_led(4, false);
+ set_switch_led(5, false);
+ set_switch_led(6, false);
+
+ case _LAYER_SELECT:
+ set_switch_led(1, false);
+ set_switch_led(2, false);
+ set_switch_led(3, false);
+ set_switch_led(4, true);
+ set_switch_led(5, true);
+ set_switch_led(6, true);
+ break;
+
+ default:
+ set_switch_led(1, true);
+ set_switch_led(2, true);
+ set_switch_led(3, true);
+ set_switch_led(4, true);
+ set_switch_led(5, true);
+ set_switch_led(6, true);
+ break;
+ }
+
+ set_layer_led(layer);
+}
+
+/*
+ * Prepare all LED ports for output
+ */
+void led_init_ports() {
+ setPinOutput(D7); // Switch 1 LED
+ setPinOutput(C6); // Switch 2 LED Pin1
+ setPinOutput(C7); // Switch 2 LED Pin2
+ setPinOutput(D4); // Switch 3 LED
+ setPinOutput(E6); // Switch 4 LED
+ setPinOutput(B4); // Switch 5 LED
+ setPinOutput(D6); // Switch 6 LED
+ setPinOutput(D5); // Layer 0 LED
+ setPinOutput(B6); // Layer 1 LED
+ setPinOutput(B0); // Layer 2 LED
+}
+
+// Runs on layer change, no matter where the change was initiated
+layer_state_t layer_state_set_user(layer_state_t state) {
+ set_layer_led(get_highest_layer(state));
+ led_set_layer(get_highest_layer(state));
+ return state;
+}
+
+void matrix_init_user(void) {
+ led_init_ports();
+ led_init_animation();
+}
+
+void td_spectacles_finish(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->pressed) {
+ layer_on(_LAYER_SELECT);
+ } else {
+ SEND_STRING(NXTTHRD);
+ }
+}
+
+void td_spectacles_reset(qk_tap_dance_state_t *state, void *user_data) { layer_off(_LAYER_SELECT); }
diff --git a/keyboards/knops/mini/keymaps/mverteuil/readme.md b/keyboards/knops/mini/keymaps/mverteuil/readme.md
new file mode 100644
index 0000000000..46ea015832
--- /dev/null
+++ b/keyboards/knops/mini/keymaps/mverteuil/readme.md
@@ -0,0 +1 @@
+# mverteuil does knops mini
diff --git a/keyboards/knops/mini/keymaps/mverteuil/rules.mk b/keyboards/knops/mini/keymaps/mverteuil/rules.mk
new file mode 100644
index 0000000000..91a53d56ac
--- /dev/null
+++ b/keyboards/knops/mini/keymaps/mverteuil/rules.mk
@@ -0,0 +1,6 @@
+BACKLIGHT_ENABLE = no
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+MOUSEKEY_ENABLE = no
+AUDIO_ENABLE = no
+
diff --git a/keyboards/kv/revt/config.h b/keyboards/kv/revt/config.h
new file mode 100644
index 0000000000..8aa5a1d310
--- /dev/null
+++ b/keyboards/kv/revt/config.h
@@ -0,0 +1,39 @@
+/* Copyright 2020 Hybrid65
+ *
+ * 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 0x6565
+#define PRODUCT_ID 0x6520
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Hybrid
+#define PRODUCT KVT
+#define DESCRIPTION SouthPaw Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 21
+#define MATRIX_ROW_PINS { A6, B13, B8, A0, A1, A2 }
+#define MATRIX_COL_PINS { B7, B6, B5, B4, B3, B2, B14, B1, B15, B0, B9, B10, B11, B12, A14, A13, A4, A5, A7, A8, A15 }
+#define UNUSED_PINS { }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/kv/revt/keymaps/default/keymap.c b/keyboards/kv/revt/keymaps/default/keymap.c
new file mode 100644
index 0000000000..c1f9c6b5c0
--- /dev/null
+++ b/keyboards/kv/revt/keymaps/default/keymap.c
@@ -0,0 +1,64 @@
+/* Copyright 2020 Hybrid65
+ *
+ * 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] = {
+/* Keymap (Base Layer) Default Layer
+ *.----------------------------------------------------------------------------------------------------------------.
+ *| |Esc| | F1| F2| F3| F4| | F5| F6| F7| F8| | F9|F10|F12|F12| |Pscr| Slck | Pause|
+ *| Nlck| / | * | - | | ~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| - | = |Backsp | | Inc| Home | PgUp|
+ *|----------------------------------------------------------------------------------------------------------------|
+ *| NP7 | NP8| NP9| | |Tab | Q| W| E| R| T| Y| U| I| O| P| [ | ] | \ | | Del| End | PgDw|
+ *|---------------| + |------------------------------------------------------------------------------------------|
+ *| NP4 | NP5| NP6| | |CAPS | A| S| D| F| G| H| J| K| L| ; | ' |Return | |
+ *|---------------|-----|------------------------------------------------------------------------------------------|
+ *| NP1 | NP2| NP3| | |Shift | Z| X| C| V| B| N| M| , | . | / | Shift | | Up | |
+ *|---------------|Enter|------------------------------------------------------------------------------------------|
+ *| 0 | Del| | |Ctrl|Win |Alt | Space |Alt | Win |FN |Ctrl | |Left| Down | Right|
+ *`----------------------------------------------------------------------------------------------------------------'
+ */
+[0] = 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_PSCR, KC_SLCK, KC_PAUS, \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 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_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, 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_KP_4, KC_KP_5, KC_KP_6, 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_KP_1, KC_KP_2, KC_KP_3, KC_PENT, 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_KP_0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT), \
+
+/* Keymap Fn Layer
+ *.-----------------------------------------------------------------------------------------------------------------.
+ *| | | |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24| | | | |
+ *| | | | | | | | | | | | | | | | | | | | |Pl/Pa| Next| Vol+|
+ *|-----------------------------------------------------------------------------------------------------------------|
+ *| | | | | | |MB1|MBU|MB2|MWU| | | | | | | | | | | Stop| Prev| Vol-|
+ *|---------------| |-------------------------------------------------------------------------------------------|
+ *| | | | | | |MBL|MBD|MBR|MWD| | | |Rst| | | | | |
+ *|---------------|-----|-------------------------------------------------------------------------------------------|
+ *| | | | | | | | |Calc| | | |Mute| | | | | | | |
+ *|---------------| |-------------------------------------------------------------------------------------------|
+ *| | | | | | | | | | | | | | | | |
+ *'-----------------------------------------------------------------------------------------------------------------'
+ */
+[1] = LAYOUT_default(
+ _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______, \
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_VOLU, \
+_______, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, KC_MPRV, KC_VOLD, \
+_______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, _______, _______, RESET, _______, _______, _______, _______, \
+_______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, \
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \
+
+};
diff --git a/keyboards/kv/revt/keymaps/default/readme.md b/keyboards/kv/revt/keymaps/default/readme.md
new file mode 100644
index 0000000000..63fb4e78df
--- /dev/null
+++ b/keyboards/kv/revt/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The Default keymap for KVT
diff --git a/keyboards/kv/revt/readme.md b/keyboards/kv/revt/readme.md
new file mode 100644
index 0000000000..e2f463b37d
--- /dev/null
+++ b/keyboards/kv/revt/readme.md
@@ -0,0 +1,18 @@
+# KVT
+
+![KVT default layout](https://i.imgur.com/nPwxzdU.jpg)
+
+A open source southpaw keyboard. The Default layer is a standard 104 ANSI keyboard just the numpad is on the left.
+There is a fn layer (its not in the layout image but in the keymap file) it adds media keys, f13-f24, and mouse keys.
+
+[More info on KVT github](https://github.com/Hybrid65/KVT)
+
+* Keyboard Maintainer: [Neil Feagan](https://github.com/Hybrid65)
+* Hardware Supported: KVT, Proton C
+* Hardware Availability: [List of vendors](https://qmk.fm/proton-c)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kv/revt: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/kv/revt/revt.c b/keyboards/kv/revt/revt.c
new file mode 100644
index 0000000000..443a814015
--- /dev/null
+++ b/keyboards/kv/revt/revt.c
@@ -0,0 +1,25 @@
+/* Copyright 2020 Hybrid65
+ *
+ * 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 "revt.h"
+
+void matrix_init_kb(void) {
+ // Turn status LED on
+ setPinOutput(C14);
+ writePinHigh(C14);
+
+ matrix_init_user();
+}
diff --git a/keyboards/kv/revt/revt.h b/keyboards/kv/revt/revt.h
new file mode 100644
index 0000000000..ed98f4aabe
--- /dev/null
+++ b/keyboards/kv/revt/revt.h
@@ -0,0 +1,36 @@
+/* Copyright 2020 Hybrid65
+ *
+ * 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_default( \
+ K04, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J, K0K, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, \
+ K30, K31, K32, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3H, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4H, K4J, \
+ K50, K52, K54, K55, K56, K59, K5E, K5F, K5G, K5H, K5I, K5J, K5K \
+) \
+{ \
+ { KC_NO, KC_NO, KC_NO, KC_NO, K04, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J, K0K, }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, }, \
+ { K30, K31, K32, KC_NO, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, KC_NO, K3H, KC_NO, KC_NO, KC_NO, }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, KC_NO, KC_NO, K4H, KC_NO, K4J, KC_NO, }, \
+ { K50, KC_NO, K52, KC_NO, K54, K55, K56, KC_NO, KC_NO, K59, KC_NO, KC_NO, KC_NO, KC_NO, K5E, K5F, K5G, K5H, K5I, K5J, K5K }, \
+}
diff --git a/keyboards/kv/revt/rules.mk b/keyboards/kv/revt/rules.mk
new file mode 100644
index 0000000000..3a09683c37
--- /dev/null
+++ b/keyboards/kv/revt/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = STM32F303
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = full # 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 = 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 = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/kyria/info.json b/keyboards/kyria/info.json
index 916367f47a..a2bfd578ce 100644
--- a/keyboards/kyria/info.json
+++ b/keyboards/kyria/info.json
@@ -1,23 +1,63 @@
{
- "keyboard_name": "Kyria",
- "url": "https://splitkb.com",
- "maintainer": "splitkb.com",
- "width": 16.5,
- "height": 5.5,
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"x":3, "y":0.25}, {"x":12.5, "y":0.25}, {"x":2, "y":0.5}, {"x":4, "y":0.5}, {"x":11.5, "y":0.5},
- {"x":13.5, "y":0.5}, {"x":5, "y":0.75}, {"x":10.5, "y":0.75}, {"x":0, "y":1}, {"x":1, "y":1},
- {"x":14.5, "y":1}, {"x":15.5, "y":1}, {"x":3, "y":1.25}, {"x":12.5, "y":1.25}, {"x":2, "y":1.5},
- {"x":4, "y":1.5}, {"x":11.5, "y":1.5}, {"x":13.5, "y":1.5}, {"x":5, "y":1.75}, {"x":10.5, "y":1.75},
- {"x":0, "y":2}, {"x":1, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2}, {"x":3, "y":2.25},
- {"x":12.5, "y":2.25}, {"x":2, "y":2.5}, {"x":4, "y":2.5}, {"x":11.5, "y":2.5}, {"x":13.5, "y":2.5},
- {"x":5, "y":2.75}, {"x":10.5, "y":2.75}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":14.5, "y":3},
- {"x":15.5, "y":3}, {"x":6, "y":3.25}, {"x":9.5, "y":3.25}, {"x":2.5, "y":3.5}, {"x":3.5, "y":3.5},
- {"x":7, "y":3.5}, {"x":8.5, "y":3.5}, {"x":12, "y":3.5}, {"x":13, "y":3.5}, {"x":4.5, "y":3.75},
- {"x":11, "y":3.75}, {"x":5.5, "y":4.25}, {"x":10, "y":4.25}, {"x":6.5, "y":4.5}, {"x":9, "y":4.5}
- ]
- }
+ "keyboard_name": "Kyria",
+ "url": "https://splitkb.com",
+ "maintainer": "splitkb.com",
+ "width": 16.5,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x":0, "y":0.75},
+ {"x":1, "y":0.75},
+ {"x":2, "y":0.25},
+ {"x":3, "y":0},
+ {"x":4, "y":0.25},
+ {"x":5, "y":0.5},
+ {"x":10.5, "y":0.5},
+ {"x":11.5, "y":0.25},
+ {"x":12.5, "y":0},
+ {"x":13.5, "y":0.25},
+ {"x":14.5, "y":0.75},
+ {"x":15.5, "y":0.75},
+ {"x":0, "y":1.75},
+ {"x":1, "y":1.75},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.5},
+ {"x":10.5, "y":1.5},
+ {"x":11.5, "y":1.25},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1.25},
+ {"x":14.5, "y":1.75},
+ {"x":15.5, "y":1.75},
+ {"x":0, "y":2.75},
+ {"x":1, "y":2.75},
+ {"x":2, "y":2.25},
+ {"x":3, "y":2},
+ {"x":4, "y":2.25},
+ {"x":5, "y":2.5},
+ {"x":6, "y":3},
+ {"x":7, "y":3.25},
+ {"x":8.5, "y":3.25},
+ {"x":9.5, "y":3},
+ {"x":10.5, "y":2.5},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2},
+ {"x":13.5, "y":2.25},
+ {"x":14.5, "y":2.75},
+ {"x":15.5, "y":2.75},
+ {"x":2.5, "y":3.25},
+ {"x":3.5, "y":3.25},
+ {"x":4.5, "y":3.5},
+ {"x":5.5, "y":4},
+ {"x":6.5, "y":4.25},
+ {"x":9, "y":4.25},
+ {"x":10, "y":4},
+ {"x":11, "y":3.5},
+ {"x":12, "y":3.25},
+ {"x":13, "y":3.25}
+ ]
}
- } \ No newline at end of file
+ }
+}
diff --git a/keyboards/kyria/keymaps/drashna/config.h b/keyboards/kyria/keymaps/drashna/config.h
index 83d6283f56..e566b16d5c 100644
--- a/keyboards/kyria/keymaps/drashna/config.h
+++ b/keyboards/kyria/keymaps/drashna/config.h
@@ -31,6 +31,7 @@
# define RGBLIGHT_HUE_STEP 8
# define RGBLIGHT_SAT_STEP 8
# define RGBLIGHT_VAL_STEP 8
+# define RGBLIGHT_SPLIT
#endif
// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
diff --git a/keyboards/kyria/keymaps/drashna/keymap.c b/keyboards/kyria/keymaps/drashna/keymap.c
index bdb00e5967..5604f1a692 100644
--- a/keyboards/kyria/keymaps/drashna/keymap.c
+++ b/keyboards/kyria/keymaps/drashna/keymap.c
@@ -52,7 +52,7 @@ void add_keylog(uint16_t keycode);
LAYOUT_wrapper( \
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
- OS_LSFT, CTL_T(K21), K22, K23, K24, K25, KC_NO, KC_NO, KC_NO, KC_NO, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
+ OS_LSFT, CTL_T(K21), K22, K23, K24, K25, KC_NO, KC_NO, MEH(KC_MINS), KC_NO, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
KC_MUTE, OS_LALT, KC_GRV, KC_SPC, BK_LWER, DL_RAIS, KC_ENT, OS_RGUI, UC(0x03A8), UC(0x2E2E) \
)
/* Re-pass though to allow templates to be used */
@@ -191,30 +191,14 @@ void render_keylogger_status(void) {
void render_default_layer_state(void) {
oled_write_P(PSTR("Layout: "), false);
switch (get_highest_layer(default_layer_state)) {
- case _QWERTY:
- oled_write_ln_P(PSTR("Qwerty "), false);
- break;
- case _COLEMAK:
- oled_write_ln_P(PSTR("Colemak"), false);
- break;
- case _DVORAK:
- oled_write_ln_P(PSTR("Dvorak"), false);
- break;
- case _WORKMAN:
- oled_write_ln_P(PSTR("Workman"), false);
- break;
- case _NORMAN:
- oled_write_ln_P(PSTR("Norman"), false);
- break;
- case _MALTRON:
- oled_write_ln_P(PSTR("Maltron"), false);
- break;
- case _EUCALYN:
- oled_write_ln_P(PSTR("Eucalyn"), false);
- break;
- case _CARPLAX:
- oled_write_ln_P(PSTR("Carplax"), false);
- break;
+ case _QWERTY: oled_write_ln_P(PSTR("Qwerty"), false); break;
+ case _COLEMAK: oled_write_ln_P(PSTR("Colemak"), false); break;
+ case _DVORAK: oled_write_ln_P(PSTR("Dvorak"), false); break;
+ case _WORKMAN: oled_write_ln_P(PSTR("Workman"), false); break;
+ case _NORMAN: oled_write_ln_P(PSTR("Norman"), false); break;
+ case _MALTRON: oled_write_ln_P(PSTR("Maltron"), false); break;
+ case _EUCALYN: oled_write_ln_P(PSTR("Eucalyn"), false); break;
+ case _CARPLAX: oled_write_ln_P(PSTR("Carplax"), false); break;
}
}
@@ -230,11 +214,11 @@ void render_layer_state(void) {
void render_keylock_status(uint8_t led_usb_state) {
oled_write_P(PSTR("Lock: "), false);
- oled_write_P(PSTR("NUM"), led_usb_state & (1 << USB_LED_NUM_LOCK));
+ oled_write_P(PSTR("NUML"), led_usb_state & (1 << USB_LED_NUM_LOCK));
oled_write_P(PSTR(" "), false);
oled_write_P(PSTR("CAPS"), led_usb_state & (1 << USB_LED_CAPS_LOCK));
oled_write_P(PSTR(" "), false);
- oled_write_ln_P(PSTR("SCL"), led_usb_state & (1 << USB_LED_SCROLL_LOCK));
+ oled_write_ln_P(PSTR("SCLK"), led_usb_state & (1 << USB_LED_SCROLL_LOCK));
}
void render_mod_status(uint8_t modifiers) {
@@ -255,15 +239,21 @@ void render_bootmagic_status(void) {
{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
};
oled_write_P(PSTR("Boot "), false);
- oled_write_P(logo[0][0], !keymap_config.swap_lctl_lgui);
- oled_write_P(logo[1][0], keymap_config.swap_lctl_lgui);
+ if (keymap_config.swap_lctl_lgui) {
+ oled_write_P(logo[1][0], false);
+ } else {
+ oled_write_P(logo[0][0], false);
+ }
oled_write_P(PSTR(" "), false);
oled_write_P(PSTR("NKRO"), keymap_config.nkro);
oled_write_P(PSTR(" "), false);
oled_write_ln_P(PSTR("GUI"), !keymap_config.no_gui);
oled_write_P(PSTR("Magic "), false);
- oled_write_P(logo[0][1], !keymap_config.swap_lctl_lgui);
- oled_write_P(logo[1][1], keymap_config.swap_lctl_lgui);
+ if (keymap_config.swap_lctl_lgui) {
+ oled_write_P(logo[1][1], false);
+ } else {
+ oled_write_P(logo[0][1], false);
+ }
oled_write_P(PSTR(" "), false);
oled_write_P(PSTR("GRV"), keymap_config.swap_grave_esc);
oled_write_P(PSTR(" "), false);
diff --git a/keyboards/kyria/keymaps/drashna/rules.mk b/keyboards/kyria/keymaps/drashna/rules.mk
index c1a37f5c59..e835340bbf 100644
--- a/keyboards/kyria/keymaps/drashna/rules.mk
+++ b/keyboards/kyria/keymaps/drashna/rules.mk
@@ -1,7 +1,7 @@
OLED_DRIVER_ENABLE = yes # Enables the use of OLED displays
ENCODER_ENABLE = yes # ENables the use of one or more encoders
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-RGBLIGHT_STARTUP_ANIMATION = yes
+RGBLIGHT_STARTUP_ANIMATION = no
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
diff --git a/keyboards/kyria/keymaps/tessachka/config.h b/keyboards/kyria/keymaps/tessachka/config.h
new file mode 100644
index 0000000000..a5529128da
--- /dev/null
+++ b/keyboards/kyria/keymaps/tessachka/config.h
@@ -0,0 +1,29 @@
+/* Copyright 2019 Thomas Baart <thomas@splitkb.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
+
+#ifdef OLED_DRIVER_ENABLE
+ #define OLED_DISPLAY_128X64
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+ #define RGBLIGHT_ANIMATIONS
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_SLEEP
+#endif
diff --git a/keyboards/kyria/keymaps/tessachka/keymap.c b/keyboards/kyria/keymaps/tessachka/keymap.c
new file mode 100644
index 0000000000..38307f9644
--- /dev/null
+++ b/keyboards/kyria/keymaps/tessachka/keymap.c
@@ -0,0 +1,241 @@
+/* Copyright 2019 Thomas Baart <thomas@splitkb.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
+
+
+enum layers {
+ QWERTY = 0,
+ LOWER,
+ RAISE,
+ ADJUST
+};
+
+enum custom_keycodes {
+ RGBRST = SAFE_RANGE,
+ KC_RACL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * Base Layer: QWERTY
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | ESC | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | TAB/ADJ| A | S | D | F | G | | H | J | K | L | ; : | ENTER |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LSHIFT | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | F16 |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | Space| | MYCM | Calc | F15 | | |
+ * | | | Ctrl | LAlt | Lower| | Raise| | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [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_BSPC,
+ LT(ADJUST,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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_F16,
+ XXXXXXX, XXXXXXX, KC_LCTL, KC_LALT, LT(LOWER,KC_SPC), LT(RAISE,KC_MYCM), KC_CALC, KC_F15, XXXXXXX, XXXXXXX
+ ),
+/*
+ * Lower Layer: Numbers and symbols
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | ` | 1 ! | 2 @ | 3 # | 4 $ | 5 % | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | DEL |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | CAPS | - _ | = + | [ { | ] } | | | | | | | ' " | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LSHIFT | TAB | | | | | | | | | | Home | PgDn | PgUp | End | \ | | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | Space| | Space| | | | |
+ * | | | Ctrl | LAlt | Lower| | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [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_DEL,
+ KC_CAPS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_QUOT, KC_NO,
+ KC_LSFT, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_BSLS, KC_NO,
+ _______, _______, _______, _______, _______, KC_SPC, KC_NO, KC_NO, _______, _______
+ ),
+/*
+ * Raise Layer: Function Keys
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | |EEPRST| | | | | | | | | | F12 |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LSHIFT | TAB | RESET| | | | | | | | | Play | | | | | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | Space| | MYCM | Prev | Next | | |
+ * | | | Ctrl | LAlt | | | Raise| | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [RAISE] = LAYOUT(
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_NO, KC_NO, EEP_RST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ KC_LSFT, KC_TAB, RESET, KC_NO, KC_NO, KC_NO, _______, _______, _______, _______, KC_MPLY, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ _______, _______, _______, _______, KC_SPC , KC_MPRV, KC_MNXT, _______, _______, _______
+ ),
+/*
+ * Adjust Layer: Arrow keys, RGB
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | BTN2 | Up | BTN1 |RGBMOD|RGBTOG| | | | | | | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | Left | Down | Right|RGBSAI|RGBHUI| | | | | | | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | RGBRST | |RGBVAI|RGBVAD|RGBSAD|RGBHUD| | | | | | | | | | | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | WBAK | BTN3 | WFWD | | MYCM | Calc | F15 | | |
+ * | | | | | | | Raise| | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [ADJUST] = LAYOUT(
+ KC_NO, KC_BTN2, KC_UP, KC_BTN1, RGB_MOD, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, RGB_SAI, RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ RGBRST, KC_NO, RGB_VAI, RGB_VAD, RGB_SAD, RGB_HUD, _______, _______, _______, _______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ _______, _______, KC_WBAK, KC_BTN3, KC_WFWD, _______, _______, _______, _______, _______
+ ),
+// /*
+// * Layer template
+// *
+// * ,-------------------------------------------. ,-------------------------------------------.
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | | | | | |
+// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * `----------------------------------' `----------------------------------'
+// */
+// [LAYERINDEX] = LAYOUT(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ),
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, LOWER, RAISE, ADJUST);
+}
+
+// bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+// switch (keycode) {
+// case MyCustomKeycode:
+// if (record->event.pressed) {
+// // What to do if the button was pressed
+// } else {
+// // What to do if the button was released
+// }
+// break;
+// }
+// return true;
+// }
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_180;
+}
+
+static void render_kyria_logo(void) {
+ static const char PROGMEM kyria_logo[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,192,224,240,124, 62, 31, 15, 7, 3, 1,128,192,224,240,120, 56, 60, 28, 30, 14, 14, 7, 7,135,231,127, 31,255,255, 31,127,231,135, 7, 7, 14, 14, 30, 28, 60, 56,120,240,224,192,128, 1, 3, 7, 15, 31, 62,124,240,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,240,252,255, 31, 7, 1, 0, 0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135, 1, 0, 0,255,255, 0, 0, 1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192, 0, 0, 1, 7, 31,255,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,254,255,255, 1, 1, 7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30, 7, 1, 1,255,255,254, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,255,255, 0, 0,192,192, 48, 48, 0, 0,240,240, 0, 0, 0, 0, 0, 0,240,240, 0, 0,240,240,192,192, 48, 48, 48, 48,192,192, 0, 0, 48, 48,243,243, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,192,192, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31, 7,255,255, 7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 63, 63, 3, 3, 12, 12, 48, 48, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 15, 15, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 63, 63, 48, 48, 0, 0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 63,255,248,224,128, 0, 0, 3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128, 0, 0,255,255, 0, 0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15, 3, 0, 0,128,224,248,255, 63, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 62,124,248,240,224,192,128, 1, 3, 7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15, 7, 3, 1,128,192,224,240,248,124, 62, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+ oled_write_raw_P(kyria_logo, sizeof(kyria_logo));
+}
+
+static void render_tessachka_logo(void) {
+ static const char PROGMEM Tessachka_OLED_Logo_Inverted[] =
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 64, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 64, 0, 0,
+ 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, 64, 0, 0, 128, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 64, 0, 0, 0, 0, 0, 0, 192, 192, 0, 0,
+ 0, 0, 0, 0, 0, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 0,
+ 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 128, 192, 0, 192, 128, 0, 0,
+ 0, 0, 128, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 192, 192, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 255, 255, 255, 127, 1, 1, 1, 0, 24, 126, 255, 255, 219,
+ 219, 153, 153, 153, 137, 128, 128, 0, 135, 143, 159, 153, 153, 153, 153, 153, 153,
+ 249, 240, 224, 0, 135, 143, 159, 153, 153, 153, 153, 153, 153, 249, 240, 224, 0,
+ 0, 192, 240, 252, 159, 135, 135, 159, 124, 240, 192, 0, 60, 255, 255, 231, 195,
+ 129, 0, 0, 0, 129, 195, 195, 195, 0, 255, 255, 255, 24, 24, 24, 24, 24,
+ 24, 255, 255, 255, 0, 255, 255, 255, 28, 62, 127, 247, 227, 193, 128, 0, 0,
+ 0, 192, 240, 252, 159, 135, 135, 159, 124, 240, 192, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 3, 3, 1, 0, 0,
+ 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0, 0, 0, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 1, 0, 0, 3, 3, 3, 3, 3, 3, 1, 0,
+ 0, 1, 3, 3, 0, 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0,
+ 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 1, 3,
+ 0, 0, 0, 0, 1, 3, 3, 1, 0, 3, 3, 3, 3, 3, 3, 1, 0,
+ 0, 1, 3, 3, 0, 0, 0, 0, 0, 0
+ };
+ oled_write_raw_P(Tessachka_OLED_Logo_Inverted, sizeof(Tessachka_OLED_Logo_Inverted));
+ oled_advance_page(false);
+ oled_advance_page(false);
+ oled_advance_page(false);
+}
+
+static void render_status(void) {
+ // Logo and version information
+ render_tessachka_logo();
+ oled_write_P(PSTR("Kyria rev1.0\n\n"), false);
+
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+ switch (get_highest_layer(layer_state)) {
+ case QWERTY:
+ oled_write_P(PSTR("Default\n"), false);
+ break;
+ case LOWER:
+ oled_write_P(PSTR("Lower\n"), false);
+ break;
+ case RAISE:
+ oled_write_P(PSTR("Raise\n"), false);
+ break;
+ case ADJUST:
+ oled_write_P(PSTR("Adjust\n"), false);
+ break;
+ default:
+ oled_write_P(PSTR("Undefined\n"), false);
+ }
+
+ // Host Keyboard LED Status
+ uint8_t led_usb_state = host_keyboard_leds();
+ oled_write_P(IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
+ oled_write_P(IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
+ oled_write_P(IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
+}
+
+void oled_task_user(void) {
+ if (is_keyboard_master()) {
+ render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+ render_kyria_logo();
+ }
+}
+#endif
diff --git a/keyboards/kyria/keymaps/tessachka/rules.mk b/keyboards/kyria/keymaps/tessachka/rules.mk
new file mode 100644
index 0000000000..b7d691efd9
--- /dev/null
+++ b/keyboards/kyria/keymaps/tessachka/rules.mk
@@ -0,0 +1,3 @@
+OLED_DRIVER_ENABLE = yes # Enables the use of OLED displays
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/kyria/readme.md b/keyboards/kyria/readme.md
index f63a8f6551..ed4b145081 100644
--- a/keyboards/kyria/readme.md
+++ b/keyboards/kyria/readme.md
@@ -18,4 +18,4 @@ Example of flashing this keyboard:
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).
-A build guide for the Kyria can be found at [docs.splitkb.com](https://docs.splitkb.com/docs/kyria-build-log/).
+A build guide for the Kyria can be found at [docs.splitkb.com](https://docs.splitkb.com/hc/en-us/articles/360010552059-Kyria-Build-Guide-Introduction).
diff --git a/keyboards/lazydesigners/dimple/keymaps/default/keymap.c b/keyboards/lazydesigners/dimple/keymaps/default/keymap.c
index e5a9c8466a..d23c8e8a6e 100644
--- a/keyboards/lazydesigners/dimple/keymaps/default/keymap.c
+++ b/keyboards/lazydesigners/dimple/keymaps/default/keymap.c
@@ -116,9 +116,9 @@ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
}
}
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
- switch (biton32(state)) {
+ switch (get_highest_layer(state)) {
case _LOWER:
rgblight_sethsv_noeeprom(HSV_GREEN);
break;
diff --git a/keyboards/leeku/finger65/config.h b/keyboards/leeku/finger65/config.h
index 3e6eebb324..584db4ad31 100644
--- a/keyboards/leeku/finger65/config.h
+++ b/keyboards/leeku/finger65/config.h
@@ -37,6 +37,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { C3, C4, C5, C6, C7 }
#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
diff --git a/keyboards/leeku/finger65/readme.md b/keyboards/leeku/finger65/readme.md
index c800f3af3a..c27ce5d489 100644
--- a/keyboards/leeku/finger65/readme.md
+++ b/keyboards/leeku/finger65/readme.md
@@ -1,16 +1,16 @@
-# Leeku Finger65 PCB
+# Leeku Finger65
+
+**This PCB is not QMK ready by default**. If you want to use your Leeku Finger65 PCB with QMK, you **must** ISP Flash the Leeku PCB using the bootloader for the atmega32a that resides in the `util/` folder.
* Keyboard Maintainer: [sidcarter](https://github.com/sidcarter)
* Hardware Supported: LeeKu Finger65 PCB, atmega32a
-* Make example for this keyboard (after setting up your build environment):
+Make example for this keyboard (after setting up your build environment):
make leeku/finger65:default
-* This PCB is not QMK ready by default. If you want to use your Leeku Finger65 PCB with QMK, you must:
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
- * ISP Flash the Leeku PCB using the bootloader for the atmega32a that resides in the `util/` folder
- * Build and install [bootloadHID](https://www.obdev.at/products/vusb/bootloadhid.html) on your system
- * You can then do a `make leeku/finger65:default:flash` to flash your PCB with QMK
+ make leeku/finger65:default:flash
-* 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).
+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/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c
index 05f9bda8d8..8b24a4131f 100644
--- a/keyboards/lets_split/keymaps/default/keymap.c
+++ b/keyboards/lets_split/keymaps/default/keymap.c
@@ -133,7 +133,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/lets_split/keymaps/geripgeri/config.h b/keyboards/lets_split/keymaps/geripgeri/config.h
new file mode 100644
index 0000000000..6e71ea2b93
--- /dev/null
+++ b/keyboards/lets_split/keymaps/geripgeri/config.h
@@ -0,0 +1,37 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2019 Gergely Peidl
+
+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 AUTO_SHIFT_TIMEOUT 200
+#define NO_AUTO_SHIFT_NUMERIC
+
+// RGB lighting
+#define RGBLIGHT_SLEEP
+#undef RGBLED_NUM
+#define RGBLED_NUM 32
+
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+
+#define TAPPING_TERM 200
diff --git a/keyboards/lets_split/keymaps/geripgeri/keymap.c b/keyboards/lets_split/keymaps/geripgeri/keymap.c
new file mode 100644
index 0000000000..b268fb90c2
--- /dev/null
+++ b/keyboards/lets_split/keymaps/geripgeri/keymap.c
@@ -0,0 +1,368 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _NUMPAD,
+ _GAMING,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ NUMPAD = SAFE_RANGE,
+ SLIGHTLY,
+ SMILE,
+ JOY,
+ RELAXED,
+ HEART,
+ SAD,
+ CRY,
+ NETRURAL,
+ SCREAM,
+ THUMBSUP
+};
+
+enum td_extra_keys {
+ U,
+ O,
+ NEXTPREV,
+ SLASH
+};
+
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ DOUBLE_HOLD = 4,
+ DOUBLE_SINGLE_TAP = 5, //send two single taps
+ TRIPLE_TAP = 6,
+ TRIPLE_HOLD = 7
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+int cur_dance (qk_tap_dance_state_t *state);
+
+void u_finished (qk_tap_dance_state_t *state, void *user_data);
+void o_finished (qk_tap_dance_state_t *state, void *user_data);
+
+uint8_t rgb_mode = RGBLIGHT_MODE_BREATHING + 1;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | ALT |Numpad| GUI |Lower | Space| | Bksp |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINUS,
+ 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, TD(SLASH), KC_ENT,
+ KC_LCTL, KC_LALT, MO(_NUMPAD), KC_LGUI, LOWER, KC_SPC, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | :) | :D | :'D | :$ | <3 | | | Home | Pgup | | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | :( | :'( | :| | :O | +1 | | | End |Pgdown| | [ | ] |PrntSc|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | |Insert| | Del | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_EQL,
+ SLIGHTLY, SMILE, JOY, RELAXED, HEART, _______, KC_HOME, KC_PGUP, _______, KC_LCBR, KC_RCBR, KC_PIPE,
+ SAD, CRY, NETRURAL, SCREAM, THUMBSUP, _______, KC_END, KC_PGDOWN,_______, KC_LBRC, KC_RBRC, KC_PSCREEN,
+ _______, _______, _______, _______, _______, KC_INSERT, KC_DEL, _______, TD(NEXTPREV), KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12(
+ 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Reset|EEPRST| | EE | | | | | UE | IE | OE | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | AE | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TGLAS| | | | | | | | | | | |GAMING|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12(
+ RESET, EEP_RST, _______, RALT(KC_SCLN), _______, _______, _______, TD(U), RALT(KC_Z), TD(O), _______, _______,
+ _______, RALT(KC_QUOT), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_ASTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_GAMING)
+),
+
+/* Numpad
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | 7 | 8 | 9 | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | 4 | 5 | 6 | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | VAI | SAI | HUI | | | | | 3 | 2 | 1 | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |RGBMOD|RGBTGL| | Calc | 0 | + | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______,
+ RGB_VAI, RGB_SAI, RGB_HUI, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______,
+ _______, _______, _______, _______, RGB_MOD, RGB_TOG, KC_CALC, KC_0, KC_PPLS, _______, _______, _______
+),
+
+/* Gaming
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | RAISE| | | | LOWER| | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+[_GAMING] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RAISE, _______, _______, LOWER, _______, _______, _______, _______
+)};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case RGB_VAI:
+ if(record->event.pressed) {
+ rgblight_increase_val_noeeprom();
+ }
+ break;
+ case RGB_VAD:
+ if(record->event.pressed) {
+ rgblight_decrease_val_noeeprom();
+ }
+ break;
+ case RGB_SAI:
+ if(record->event.pressed) {
+ rgblight_increase_sat_noeeprom();
+ }
+ break;
+ case RGB_SAD:
+ if(record->event.pressed) {
+ rgblight_decrease_sat_noeeprom();
+ }
+ break;
+ case RGB_HUI:
+ if(record->event.pressed) {
+ rgblight_increase_hue_noeeprom();
+ }
+ break;
+ case RGB_HUD:
+ if(record->event.pressed) {
+ rgblight_decrease_hue_noeeprom();
+ }
+ break;
+ case RGB_TOG:
+ if(record->event.pressed) {
+ rgblight_toggle_noeeprom();
+ }
+ break;
+ case RGB_MOD:
+ if(record->event.pressed) {
+ rgblight_step_noeeprom();
+ rgb_mode = rgblight_get_mode();
+ }
+ break;
+ case RGB_RMOD:
+ if(record->event.pressed) {
+ rgblight_step_reverse_noeeprom();
+ rgb_mode = rgblight_get_mode();
+ }
+ break;
+
+ case SLIGHTLY:
+ if(record->event.pressed) {
+ SEND_STRING(":slightly_smiling_face:");
+ }
+ break;
+ case SMILE:
+ if(record->event.pressed) {
+ SEND_STRING(":smile:");
+ }
+ break;
+ case JOY:
+ if(record->event.pressed) {
+ SEND_STRING(":joy:");
+ }
+ break;
+ case RELAXED:
+ if(record->event.pressed) {
+ SEND_STRING(":relaxed:");
+ }
+ break;
+ case HEART:
+ if(record->event.pressed) {
+ SEND_STRING(":heart:");
+ }
+ break;
+ case SAD:
+ if(record->event.pressed) {
+ SEND_STRING(":white_frowning_face:");
+ }
+ break;
+ case CRY:
+ if(record->event.pressed) {
+ SEND_STRING(":cry:");
+ }
+ break;
+ case NETRURAL:
+ if(record->event.pressed) {
+ SEND_STRING(":neutral_face:");
+ }
+ break;
+ case SCREAM:
+ if(record->event.pressed) {
+ SEND_STRING(":scream:");
+ }
+ break;
+ case THUMBSUP:
+ if(record->event.pressed) {
+ SEND_STRING(":+1:");
+ }
+ break;
+ default:
+ return true;
+ }
+ return false;
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+ writePin(B0, !(state & (1UL << (_NUMPAD))));
+
+ switch(biton32(state)) {
+ case _RAISE:
+ rgblight_setrgb_at(255, 255, 255, RGBLED_NUM / 2);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ break;
+ case _LOWER:
+ rgblight_setrgb_at(255, 255, 255, RGBLED_NUM / 2 - 1);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ break;
+ case _NUMPAD:
+ rgblight_setrgb_at(0,255,0, 0);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ break;
+ case _GAMING:
+ rgb_mode = RGBLIGHT_MODE_RAINBOW_SWIRL + 5;
+ autoshift_disable();
+ break;
+ default:
+ rgb_mode = RGBLIGHT_MODE_BREATHING + 1;
+ rgblight_mode_noeeprom(rgb_mode);
+ autoshift_enable();
+ break;
+ }
+ return state;
+}
+
+void led_set_user(uint8_t usb_led) {
+ rgblight_sethsv_noeeprom(0, 255, 255);
+ rgblight_mode_noeeprom(rgb_mode);
+}
+
+int cur_dance (qk_tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) return SINGLE_TAP;
+ //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
+ else return SINGLE_HOLD;
+ }
+ else if (state->count == 2) {
+ /*
+ * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
+ * action when hitting 'pp'. Suggested use case for this return value is when you want to send two
+ * keystrokes of the key, and not the 'double tap' action/macro.
+ */
+ if (state->interrupted) return DOUBLE_SINGLE_TAP;
+ else if (state->pressed) return DOUBLE_HOLD;
+ else return DOUBLE_TAP;
+ }
+ //Assumes no one is trying to type the same letter three times (at least not quickly).
+ //If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add
+ //an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP'
+ if (state->count == 3) {
+ if (state->interrupted || !state->pressed) return TRIPLE_TAP;
+ else return TRIPLE_HOLD;
+ }
+ else return 8; //magic number. At some point this method will expand to work for more presses
+}
+
+static tap utap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+static tap otap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+void u_finished (qk_tap_dance_state_t *state, void *user_data) {
+ utap_state.state = cur_dance(state);
+ switch(utap_state.state) {
+ case SINGLE_TAP: SEND_STRING(SS_RALT("]")); break;
+ case DOUBLE_TAP: SEND_STRING(SS_RALT("-")); break;
+ case TRIPLE_TAP: SEND_STRING(SS_RALT("\\")); break;
+ }
+}
+
+void o_finished (qk_tap_dance_state_t *state, void *user_data) {
+ otap_state.state = cur_dance(state);
+ switch(otap_state.state) {
+ case SINGLE_TAP: SEND_STRING(SS_RALT("=")); break;
+ case DOUBLE_TAP: SEND_STRING(SS_RALT("0")); break;
+ case TRIPLE_TAP: SEND_STRING(SS_RALT("[")); break;
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [U] = ACTION_TAP_DANCE_FN(u_finished),
+ [O] = ACTION_TAP_DANCE_FN(o_finished),
+ [NEXTPREV] = ACTION_TAP_DANCE_DOUBLE(KC_MNXT, KC_MPRV),
+ [SLASH] = ACTION_TAP_DANCE_DOUBLE(KC_SLASH, KC_BSLS)
+ };
diff --git a/keyboards/lets_split/keymaps/geripgeri/readme.md b/keyboards/lets_split/keymaps/geripgeri/readme.md
new file mode 100644
index 0000000000..09f1bedee7
--- /dev/null
+++ b/keyboards/lets_split/keymaps/geripgeri/readme.md
@@ -0,0 +1,3 @@
+# Personal Layout
+
+[Layout](http://www.keyboard-layout-editor.com/#/gists/8eae83bfb830d847c94c7ff423bbdc84)
diff --git a/keyboards/lets_split/keymaps/geripgeri/rules.mk b/keyboards/lets_split/keymaps/geripgeri/rules.mk
new file mode 100644
index 0000000000..5cefc00177
--- /dev/null
+++ b/keyboards/lets_split/keymaps/geripgeri/rules.mk
@@ -0,0 +1,5 @@
+AUTO_SHIFT_ENABLE = yes
+AUTO_SHIFT_MODIFIERS = no
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+
diff --git a/keyboards/lets_split/keymaps/hvp/config.h b/keyboards/lets_split/keymaps/hvp/config.h
new file mode 100644
index 0000000000..df24c53cde
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hvp/config.h
@@ -0,0 +1,40 @@
+/*
+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
+
+ // place overrides here
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+
+/* 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 10
diff --git a/keyboards/lets_split/keymaps/hvp/keymap.c b/keyboards/lets_split/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..e9ebd46d64
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hvp/keymap.c
@@ -0,0 +1,65 @@
+#include QMK_KEYBOARD_H
+#include "hvp.c"
+
+// 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 _NAVI 5
+#define _ADJUST 6
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE
+};
+
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+
+#define LT3_ESC LT(5, KC_ESC)
+#define LT4_TAB LT(6, KC_TAB)
+#define F_NAVI LT(5, KC_F)
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_ortho_4x12(
+ LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_ESC, KC_A, KC_S, KC_D, F_NAVI, LT(6,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT ,
+ KC_LCTL, KC_APP, KC_LGUI, KC_LALT, LT(3,KC_SPC), SFT_T(KC_SPC), KC_SFTENT, LT(4,KC_SPC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+[_RAISE] = LAYOUT_ortho_4x12( /* Right */
+ 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+[_LOWER] = LAYOUT_ortho_4x12( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_BSPC,
+ KC_DEL, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TILD,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+[_NAVI] = LAYOUT_ortho_4x12( /* 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,
+ _______, _______, _______, D_NAVI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, _______,KC_MUTE, KC_MPLY, KC_MSTP, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+[_ADJUST] = LAYOUT_ortho_4x12( /* Tab */
+ _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, RGB_M_P, RGB_HUD, RGB_HUI, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______,
+ KC_PSCR, _______, RGB_SAD, RGB_SAI, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______,
+ RESET, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______
+)};
diff --git a/keyboards/lets_split/keymaps/hvp/readme.md b/keyboards/lets_split/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..a43b9d52ec
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: Lets split!
+Keys: 48key ortho 40% keyboard
+Layout: Swedish characters on main layer using tapdance. Built for eurkey keyboard layout.
+Flash instructions: Flash using avrdude, will req the hvp user space to compile.
+
+> make lets_split/rev2:hvp:avrdude
+
+Links:
+Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/lets_split
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/lets_split/keymaps/hvp/rules.mk b/keyboards/lets_split/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..1c1ed316a0
--- /dev/null
+++ b/keyboards/lets_split/keymaps/hvp/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/lets_split/sockets/config.h b/keyboards/lets_split/sockets/config.h
index e8459494be..eb8092a8f4 100644
--- a/keyboards/lets_split/sockets/config.h
+++ b/keyboards/lets_split/sockets/config.h
@@ -78,14 +78,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#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
diff --git a/keyboards/lets_split/sockets/rules.mk b/keyboards/lets_split/sockets/rules.mk
index da04decf40..7ca5886150 100644
--- a/keyboards/lets_split/sockets/rules.mk
+++ b/keyboards/lets_split/sockets/rules.mk
@@ -2,4 +2,4 @@ BACKLIGHT_ENABLE = no
AUDIO_ENABLE = yes
RGBLIGHT_ENABLE = yes #Don't enable this along with I2C
-EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+LTO_ENABLE = yes
diff --git a/keyboards/lets_split_eh/keymaps/default/keymap.c b/keyboards/lets_split_eh/keymaps/default/keymap.c
index fe5ca0c8c8..366c4ee3cc 100644
--- a/keyboards/lets_split_eh/keymaps/default/keymap.c
+++ b/keyboards/lets_split_eh/keymaps/default/keymap.c
@@ -115,6 +115,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/lily58/keymaps/bcat/keymap.c b/keyboards/lily58/keymaps/bcat/keymap.c
index 9a85a55e1b..b0378d19a7 100644
--- a/keyboards/lily58/keymaps/bcat/keymap.c
+++ b/keyboards/lily58/keymaps/bcat/keymap.c
@@ -25,25 +25,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Lower layer: http://www.keyboard-layout-editor.com/#/gists/19ad0d3b5d745fbb2818db09740f5a11 */
[LAYER_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, KC_PIPE, KC_TILD, KC_DEL, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
- _______, _______, _______, KC_BSLS, KC_GRV, KC_INS, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, KC_DEL, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
+ _______, _______, _______, _______, _______, KC_APP, _______, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
/* Raise layer: http://www.keyboard-layout-editor.com/#/gists/912be7955f781cdaf692cc4d4c0b5823 */
[LAYER_RAISE] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_HOME, KC_PGUP,
- _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, KC_F11, KC_F12, _______, _______, KC_END, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F11, _______,
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_F12, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
/* Adjust layer: http://www.keyboard-layout-editor.com/#/gists/8f6a3f08350a9bbe1d414b22bca4e6c7 */
[LAYER_ADJUST] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_CAPS, _______, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+ KC_CAPS, _______, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, _______, _______, _______, _______,
_______, _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
diff --git a/keyboards/lily58/keymaps/bcat/readme.md b/keyboards/lily58/keymaps/bcat/readme.md
index f90c5110bc..fd3ba9b8ec 100644
--- a/keyboards/lily58/keymaps/bcat/readme.md
+++ b/keyboards/lily58/keymaps/bcat/readme.md
@@ -6,25 +6,26 @@ around the ESDF cluster in the adjust (raise + lower) layer. A few general
principles went into this layout:
* The number row is optional, as are the outermost bottom row keys and the
-"extra" keys on the innnermost columns below the controllers. This will enable
-easy translation to a Crkbd or similar 40% ortho if I go that route.
+"extra" keys on the innnermost columns below the controllers. This allows me to
+switch between this keyboard and a 40% like the
+[Crkbd](https://github.com/qmk/qmk_firmware/tree/master/keyboards/lily58/keymaps/bcat)
+without breaking muscle memory.
-* Space and Enter are on the big thumb keys so they're easy to press
-(particularly with G20 or other low-profile keycaps there).
+* Space and Enter are on the big thumb keys so they're easy to press.
-* There are two shift keys because really, Right Shift is important.
+* There are two shift keys because Right Shift is all that important, but just
+because I don't have any better ideas for what to put there.
* Arrow keys are on VIM-style HJKL keys.
-* Home/End and Page Up/Page Down are easy to reach and in a square kind of like
-on the HHKB.
+* Home/End and Page Up/Page Down are equivalent to the arrow keys, but
+translated down one row.
-* Navigation should be usable with just the right hand, to enable left-handed
-mousing at the same time. Additionally, Web page scrolling (Space, Shift+Space)
-should be possible with just the left hand, for writing at the same time as
-scrolling.
+* Navigation is usable with just the right hand, to enable left-handed mousing
+at the same time. Additionally, Web page scrolling (Space, Shift+Space) is
+possible with just the left hand, for writing at the same time as scrolling.
-* Escape is easy to reach because Vim.
+* Escape is easy to reach because Vim is life.
* Since most of the modifiers are on the left half, keys frequently pressed
together with mods (e.g., numbers, function keys, etc.) are on the Raise layer
@@ -40,8 +41,9 @@ allow typing numbers with thousand separators and decimal points without
releasing the layer key.
* Brackets and braces are on or near the home row for quick access when coding.
+They're positioned below the parens on the Raise layer for easy recall.
-* Other than Right Shift (sorry), modifiers aren't rebound on layers.
+* For consistency, mods aren't rebound on layers (except for the Tab key).
## Default layer
@@ -51,18 +53,18 @@ releasing the layer key.
## Lower layer
-![Lower layer layout](https://i.imgur.com/ytNFySG.png)
+![Lower layer layout](https://i.imgur.com/6ms2ll7.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/19ad0d3b5d745fbb2818db09740f5a11))
## Raise layer
-![Raise layer layout](https://i.imgur.com/S7S29G6.png)
+![Raise layer layout](https://i.imgur.com/HBowZ0w.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/912be7955f781cdaf692cc4d4c0b5823))
## Adjust layer
-![Adjust layer layout](https://i.imgur.com/fCIySG2.png)
+![Adjust layer layout](https://i.imgur.com/udhzfON.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/8f6a3f08350a9bbe1d414b22bca4e6c7))
diff --git a/keyboards/lily58/keymaps/curry/config.h b/keyboards/lily58/keymaps/curry/config.h
new file mode 100644
index 0000000000..a4c697df42
--- /dev/null
+++ b/keyboards/lily58/keymaps/curry/config.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#define EE_HANDS
+#define USE_SERIAL_PD2
+
+#define OLED_DISABLE_TIMEOUT
+#define TAPPING_TERM_PER_KEY
+
+#if defined(RGBLIGHT_ENABLE)
+# undef RGBLED_NUM
+# define RGBLED_NUM 27
+
+# define RGBLIGHT_HUE_STEP 8
+# define RGBLIGHT_SAT_STEP 8
+# define RGBLIGHT_VAL_STEP 5
+# define RGBLIGHT_LIMIT_VAL 120
+#endif
diff --git a/keyboards/lily58/keymaps/curry/keymap.c b/keyboards/lily58/keymaps/curry/keymap.c
new file mode 100644
index 0000000000..bc779305a2
--- /dev/null
+++ b/keyboards/lily58/keymaps/curry/keymap.c
@@ -0,0 +1,71 @@
+#include "curry.h"
+
+#define LAYOUT_lily58_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
+ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A \
+ ) \
+ LAYOUT_wrapper( \
+ KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_GRV, \
+ KC_TAB, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_BSLS, \
+ KC_LCTL, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, KC_QUOT, \
+ OS_LSFT, K31, K32, K33, K34, K35, KC_LBRC, KC_RBRC, K36, K37, K38, K39, K3A, OS_RSFT, \
+ KC_LEAD, OS_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_BSPC, OS_RGUI \
+ )
+#define LAYOUT_lily58_base_wrapper(...) LAYOUT_lily58_base(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_lily58_base_wrapper(
+ ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
+ ),
+
+ [_COLEMAK] = LAYOUT_lily58_base_wrapper(
+ ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
+ ),
+
+ [_DVORAK] = LAYOUT_lily58_base_wrapper(
+ ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________,
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
+ ),
+
+ [_MODS] = LAYOUT_wrapper(
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_LSFT, ___________________BLANK___________________, _______, _______, ___________________BLANK___________________, KC_RSFT,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_LOWER] = LAYOUT_wrapper( \
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F12,
+ _______, _________________LOWER_L2__________________, _________________LOWER_R2__________________, _______,
+ _______, _________________LOWER_L3__________________, _______, _______, _________________LOWER_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_RAISE] = LAYOUT_wrapper( \
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
+ _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, _______,
+ _______, _________________RAISE_L3__________________, _______, _______, _________________RAISE_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT_wrapper( \
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST,
+ VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
+ MG_NKRO, _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________, RGB_IDL,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/lily58/keymaps/curry/rules.mk b/keyboards/lily58/keymaps/curry/rules.mk
new file mode 100644
index 0000000000..2137a15074
--- /dev/null
+++ b/keyboards/lily58/keymaps/curry/rules.mk
@@ -0,0 +1,16 @@
+# 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
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = no
+
+OLED_DRIVER_ENABLE = yes
+
+BOOTLOADER = atmel-dfu
+SPLIT_TRANSPORT = mirror
diff --git a/keyboards/lily58/keymaps/hvp/config.h b/keyboards/lily58/keymaps/hvp/config.h
new file mode 100644
index 0000000000..3367748de8
--- /dev/null
+++ b/keyboards/lily58/keymaps/hvp/config.h
@@ -0,0 +1,56 @@
+/*
+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_TERM 100
+#undef TAPPING_TERM
+#define TAPPING_TERM 150
+
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#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
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+*/ \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/hvp/keymap.c b/keyboards/lily58/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..67e2541f6b
--- /dev/null
+++ b/keyboards/lily58/keymaps/hvp/keymap.c
@@ -0,0 +1,181 @@
+#include QMK_KEYBOARD_H
+#include "hvp.c"
+
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+#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
+#define _ADJUST 3
+#define _NAVI 4
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ NAVI,
+ ADJUST
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ LT(3,KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ LT(_NAVI,KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
+ KC_LSFT, KC_A, KC_S, KC_D, LT(4,KC_F), LT(3,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2),
+ KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, MT(MOD_LSFT,KC_BSPC), MT(MOD_LSFT,KC_ENTER), KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), MT(MOD_RSFT,KC_ENT),
+ KC_LALT, KC_LGUI, LOWER,LT(1,KC_SPC), LT(2,KC_SPC), RAISE, KC_RALT, KC_RGUI
+),
+[_RAISE] = LAYOUT( /* Right */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, MT(MOD_LCTL,KC_LBRC), MT(MOD_LALT,KC_RBRC), _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_LOWER] = LAYOUT( /* Left */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______,
+ 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_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, MT(MOD_LCTL,KC_LCBR), MT(MOD_LALT,KC_RCBR), _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TILD,
+ _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+ [_NAVI] = LAYOUT( /* Tab */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, D_NAVI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, KC_VOLD, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_VOLU, _______
+ ),
+
+ [_ADJUST] = LAYOUT( /* Esc */
+ _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, RGB_M_P, RGB_HUD, RGB_HUI, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______,
+ KC_PSCR, _______, RGB_SAD, RGB_SAI, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______,
+ RESET, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_VOLU, _______
+ )
+};
+
+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) {
+
+}
+
+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);
+
+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) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ 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;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/hvp/readme.md b/keyboards/lily58/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..971bd2800e
--- /dev/null
+++ b/keyboards/lily58/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: Lily58
+Keys: Lily58 is 6×4+5keys column-staggered split keyboard.
+Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
+Flash instructions: Flash using dfu, will req the hvp user space to compile.
+
+> make lily58:hvp:dfu
+
+Links:
+Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/lily58
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/lily58/keymaps/hvp/rules.mk b/keyboards/lily58/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..b1ee4e8318
--- /dev/null
+++ b/keyboards/lily58/keymaps/hvp/rules.mk
@@ -0,0 +1,13 @@
+EXTRAKEY_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+
+# 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 \ \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/jhelvy/README.md b/keyboards/lily58/keymaps/jhelvy/README.md
new file mode 100644
index 0000000000..e0b68f919e
--- /dev/null
+++ b/keyboards/lily58/keymaps/jhelvy/README.md
@@ -0,0 +1,7 @@
+# jhelvy Keymap for [Lily58 Pro](https://github.com/kata0510/Lily58)
+
+## Keymap
+
+This is a custom keymap with the following layout:
+
+<img src="https://github.com/jhelvy/qmkJsonConverter/raw/master/keymaps/lily58_rev1_jhelvy.png" width="800">
diff --git a/keyboards/lily58/keymaps/jhelvy/config.h b/keyboards/lily58/keymaps/jhelvy/config.h
new file mode 100644
index 0000000000..019f68ef56
--- /dev/null
+++ b/keyboards/lily58/keymaps/jhelvy/config.h
@@ -0,0 +1,55 @@
+/*
+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
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
+
+#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 AUTO_SHIFT_TIMEOUT 150
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+*/
diff --git a/keyboards/lily58/keymaps/jhelvy/keymap.c b/keyboards/lily58/keymaps/jhelvy/keymap.c
new file mode 100644
index 0000000000..a8dc5d8595
--- /dev/null
+++ b/keyboards/lily58/keymaps/jhelvy/keymap.c
@@ -0,0 +1,112 @@
+#include QMK_KEYBOARD_H
+
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+
+extern uint8_t is_master;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _UPPER 2
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ UPPER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+ LALT(KC_A), KC_LCTL,KC_LGUI, MO(1), KC_SPC, MO(2), KC_PGDN, KC_NO),
+
+[_LOWER] = LAYOUT( \
+ KC_ESC,LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5), KC_SCLN,LSFT(KC_BSLS), KC_NO,LCTL(KC_9),LCTL(KC_0), KC_F12, \
+LCTL(KC_TAB),LGUI(KC_Q),LGUI(KC_W), KC_ESC,LGUI(KC_R),LGUI(KC_T), LCTL(KC_Y),LGUI(KC_LEFT), KC_UP,LGUI(KC_RGHT),LSFT(KC_GRV), KC_F11, \
+LGUI(KC_BSPC),MO(2),LGUI(KC_S),LGUI(KC_C),LGUI(KC_V),LGUI(KC_X), KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_GRV,LSFT(KC_SCLN), \
+ KC_F15,LGUI(KC_A),LGUI(KC_D), KC_F13,LGUI(KC_Z),LGUI(KC_Y),LSFT(KC_LBRC),LSFT(KC_RBRC),KC_BSPC,LGUI(KC_F), SGUI(KC_G),LGUI(KC_G), KC_BSLS, KC_F23, \
+ KC_NO, KC_NO,KC_NO,KC_TRNS, KC_NO, KC_RGUI, KC_PGUP, KC_NO),
+
+[_UPPER] = LAYOUT( \
+ KC__VOLUP,LGUI(LALT(KC_1)),LGUI(LALT(KC_2)), KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,LSFT(KC_EQL), \
+ KC_VOLD, KC_NO, KC_NO, KC_NO,SGUI(KC_R), KC_F14, SGUI(KC_K),SGUI(KC_LEFT),LSFT(KC_UP),SGUI(KC_RGHT), KC_F18,LSFT(KC_MINS), \
+ KC_MUTE,KC_TRNS, KC_NO, KC_LGUI, KC_TAB, KC_F21, KC_NO,LSFT(KC_LEFT),LSFT(KC_DOWN),LSFT(KC_RGHT), KC_F20, KC_F16, \
+ KC_ASTG, KC_NO, KC_NO, KC_NO, KC_F22,LCTL(KC_U),LGUI(KC_LBRC),LGUI(KC_RBRC),LGUI(KC_N), KC_NO,LALT(LSFT(KC_LEFT)),LALT(LSFT(KC_RIGHT)), KC_F17, KC_F19, \
+ KC_NO, KC_NO,KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO)
+
+};
+
+void matrix_init_user(void) {
+ //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();
+ }
+ return true;
+}
diff --git a/keyboards/lily58/keymaps/jhelvy/rules.mk b/keyboards/lily58/keymaps/jhelvy/rules.mk
new file mode 100644
index 0000000000..817d445f45
--- /dev/null
+++ b/keyboards/lily58/keymaps/jhelvy/rules.mk
@@ -0,0 +1,16 @@
+# 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
+#
+AUTO_SHIFT_ENABLE = yes # Autoshift by holding down a key
+EXTRAKEY_ENABLE = yes # Audio control and System control
+
+# 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/mikefightsbears/config.h b/keyboards/lily58/keymaps/mikefightsbears/config.h
new file mode 100644
index 0000000000..58bbdc5e9d
--- /dev/null
+++ b/keyboards/lily58/keymaps/mikefightsbears/config.h
@@ -0,0 +1,52 @@
+/*
+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
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+*/ \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/mikefightsbears/keymap.c b/keyboards/lily58/keymaps/mikefightsbears/keymap.c
new file mode 100644
index 0000000000..51f2ee8b3e
--- /dev/null
+++ b/keyboards/lily58/keymaps/mikefightsbears/keymap.c
@@ -0,0 +1,232 @@
+#include QMK_KEYBOARD_H
+
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC/`| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ESC |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGui | LAlt |LOWER | /Space / \Enter \ |RAISE | - | = |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_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_BSLS, \
+ KC_LCTRL, 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_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_MINS, KC_EQL \
+),
+/* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | DEL |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | | | up | | | | | | pgup | | PSCR | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | left | dn | rght | |-------. ,-------| | home | pgdn | end | | INS |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | mute | prev | next | play |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | | | | / / \ \ | | vol- | vol+ |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_GRV, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_DEL, \
+ KC_F1, _______, _______, KC_UP, _______, _______, _______, _______, KC_PGUP, _______, KC_PSCR, KC_F12, \
+ _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, _______, \
+ _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU \
+),
+/* RAISE
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | DEL |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | | | up | | | | | | pgup | | PSCR | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | left | dn | rght | |-------. ,-------| | home | pgdn | end | | INS |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | mute | prev | next | play |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | | | | / / \ \ | | vol- | vol+ |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+
+[_RAISE] = LAYOUT( \
+ KC_GRV, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_DEL, \
+ KC_F1, _______, _______, KC_UP, _______, _______, _______, _______, KC_PGUP, _______, KC_PSCR, KC_F12, \
+ _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, _______, \
+ _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU \
+),
+/* ADJUST
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | |RGB ON| HUE+ | SAT+ | VAL+ |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | MODE | HUE- | SAT- | VAL- |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | | | | / / \ \ | | | |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 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 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;
+ }
+ return true;
+}
+
diff --git a/keyboards/lily58/keymaps/mikefightsbears/rules.mk b/keyboards/lily58/keymaps/mikefightsbears/rules.mk
new file mode 100644
index 0000000000..10793d9a53
--- /dev/null
+++ b/keyboards/lily58/keymaps/mikefightsbears/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
+#
+EXTRAKEY_ENABLE = yes # Audio control and System control
+NKRO_ENABLE = yes # 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.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# 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/rules.mk b/keyboards/lily58/rules.mk
index af25531ecd..fce62532f5 100644
--- a/keyboards/lily58/rules.mk
+++ b/keyboards/lily58/rules.mk
@@ -36,6 +36,11 @@ SRC += i2c.c
SRC += serial.c
SRC += ssd1306.c
+# A workaround until #7089 is merged.
+# serial.c must not be compiled with the -lto option.
+# The current LIB_SRC has a side effect with the -fno-lto option, so use it.
+LIB_SRC += serial.c
+
# if firmware size over limit, try this option
# CFLAGS += -flto
diff --git a/keyboards/maartenwut/atom47/keymaps/junonum_a47/keymap.c b/keyboards/maartenwut/atom47/keymaps/junonum_a47/keymap.c
new file mode 100644
index 0000000000..ebd52ffd03
--- /dev/null
+++ b/keyboards/maartenwut/atom47/keymaps/junonum_a47/keymap.c
@@ -0,0 +1,150 @@
+#include QMK_KEYBOARD_H
+
+/* enum custom_keycodes {
+ SHIFTEN = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ SPACFNL,
+ SPACFNR,
+ MAIN,
+ ADJUST
+}; */
+
+#define _MAIN 0
+#define _SPLEFT 1
+#define _SPRIGHT 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 5
+
+#define _DPAD 6
+#define _DPADNUM 7
+
+
+#define SHIFTEN RSFT_T(KC_ENT)
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define SPACFNL LT(_SPLEFT, KC_SPC)
+#define SPACFNR LT(_SPRIGHT, KC_SPC)
+
+#define DP_ON TO(_DPAD)
+#define DP_OFF TO(_MAIN)
+#define DPADNUM MO(_DPADNUM)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Primary layer
+ [_MAIN] = 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_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, SHIFTEN,
+ KC_LCTL, KC_LGUI, KC_LALT, LOWER, SPACFNL, SPACFNR, RAISE, KC_RALT, KC_APP, KC_RCTRL
+ ),
+
+ // Main Fn navigation layer
+ [_SPLEFT] = LAYOUT(
+ _______, KC_VOLU, KC_PGUP, KC_UP, KC_PGDN, KC_INS, _______, _______, KC_UP, _______, KC_PSCR, _______, _______,
+ _______, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL ,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ // Primary numeric layer using right Spacebar
+ [_SPRIGHT] = LAYOUT(
+ KC_GRV, _______, _______, KC_LBRC, KC_RBRC, _______, _______, KC_7, KC_8, KC_9, KC_0, _______, _______,
+ _______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, KC_4, KC_5, KC_6, KC_MINUS, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_EQUAL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ // Secondary symbol layer, also Lower
+ [_LOWER] = LAYOUT(
+ KC_TILD, _______, _______, _______, _______, _______, _______, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_SLCK, KC_PAUS,
+ KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_DLR, KC_PERC, KC_CIRC, KC_UNDS, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_EXLM, KC_AT, KC_HASH, KC_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ // Numpad layer // Also a homage to Planck with the media player/pause button
+ [_RAISE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ // Safety layer for special functions
+ [_ADJUST] = LAYOUT(
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DP_ON,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_DPAD] = 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_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_UP, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, DPADNUM, KC_SPC, DP_OFF, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_DPADNUM] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______,
+ _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______,
+ _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+/* case MAIN:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_MAIN);
+ }
+ 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 led_set_user(uint8_t usb_led) {
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ // Turn capslock on
+ writePinLow(E6);
+
+
+ } else {
+ // Turn capslock off
+ writePinHigh(E6);
+ }
+}
diff --git a/keyboards/maartenwut/atom47/keymaps/junonum_a47/readme.md b/keyboards/maartenwut/atom47/keymaps/junonum_a47/readme.md
new file mode 100644
index 0000000000..42d8370231
--- /dev/null
+++ b/keyboards/maartenwut/atom47/keymaps/junonum_a47/readme.md
@@ -0,0 +1 @@
+Juno's junonum keymap adapted for Atom47. \ No newline at end of file
diff --git a/keyboards/maartenwut/eon40/config.h b/keyboards/maartenwut/eon40/config.h
new file mode 100644
index 0000000000..e786255ffb
--- /dev/null
+++ b/keyboards/maartenwut/eon40/config.h
@@ -0,0 +1,254 @@
+/* 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4705
+#define PRODUCT_ID 0x0140
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Maartenwut
+#define PRODUCT Eon40
+#define DESCRIPTION A 40% ortholinear PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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 {B7,D5,F5,F6}
+#define MATRIX_COL_PINS {F0,F1,F4,D3,D4,D6,D7,B4,B5,B6,C6,C7}
+#define UNUSED_PINS {B1,B2,B3}
+
+#define ENCODERS_PAD_A { E6, B0, D1 }
+#define ENCODERS_PAD_B { F7, D0, D2 }
+
+/* COL2ROW, ROW2COL*/
+#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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+#define QMK_ESC_OUTPUT F0 // usually COL
+#define QMK_ESC_INPUT B7 // usually ROW
diff --git a/keyboards/maartenwut/eon40/eon40.c b/keyboards/maartenwut/eon40/eon40.c
new file mode 100644
index 0000000000..5a6fe4b204
--- /dev/null
+++ b/keyboards/maartenwut/eon40/eon40.c
@@ -0,0 +1,16 @@
+/* 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/>.
+ */
+#include "eon40.h"
diff --git a/keyboards/maartenwut/eon40/eon40.h b/keyboards/maartenwut/eon40/eon40.h
new file mode 100644
index 0000000000..194e470327
--- /dev/null
+++ b/keyboards/maartenwut/eon40/eon40.h
@@ -0,0 +1,67 @@
+/* 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 "quantum.h"
+#define XXX KC_NO
+
+/* 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_ortho_4x12( \
+ 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 \
+) \
+{ \
+ { 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 } \
+}
+
+#define LAYOUT_planck_mit( \
+ 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, k37, k38, k39, k3a, k3b \
+) \
+{ \
+ { 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, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12_2x2u( \
+ 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, k37, k38, k39, k3a, k3b \
+) \
+{ \
+ { 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, XXX, XXX, k37, k38, k39, k3a, k3b } \
+}
diff --git a/keyboards/maartenwut/eon40/info.json b/keyboards/maartenwut/eon40/info.json
new file mode 100644
index 0000000000..056be65d0d
--- /dev/null
+++ b/keyboards/maartenwut/eon40/info.json
@@ -0,0 +1,18 @@
+{
+ "keyboard_name": "Eon40",
+ "url": "https://maartenwut.com/product/eon40/",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x12": {
+ "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"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}]
+ },
+ "LAYOUT_planck_mit": {
+ "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3, "w":2}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
+ },
+ "LAYOUT_ortho_4x12_2x2u": {
+ "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3, "w":2}, {"x":6, "y":3, "w":2}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/maartenwut/eon40/keymaps/default/keymap.c b/keyboards/maartenwut/eon40/keymaps/default/keymap.c
new file mode 100644
index 0000000000..e9b3642307
--- /dev/null
+++ b/keyboards/maartenwut/eon40/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/* 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/>.
+ */
+#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 //Main layer
+#define _LO 1 //Low
+#define _HI 2 //High
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_MA] = LAYOUT_ortho_4x12(
+ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ 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_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_RALT, MO(_LO), KC_SPC, KC_BSPC, MO(_HI), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
+
+[_LO] = LAYOUT_ortho_4x12(
+ 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, KC_QUOT, KC_LBRC, KC_RBRC, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET),
+
+[_HI] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+}; \ No newline at end of file
diff --git a/keyboards/maartenwut/eon40/keymaps/default/readme.md b/keyboards/maartenwut/eon40/keymaps/default/readme.md
new file mode 100644
index 0000000000..7185afb0e0
--- /dev/null
+++ b/keyboards/maartenwut/eon40/keymaps/default/readme.md
@@ -0,0 +1 @@
+This is the default keymap for the Eon40.
diff --git a/keyboards/maartenwut/eon40/readme.md b/keyboards/maartenwut/eon40/readme.md
new file mode 100644
index 0000000000..05dffd7afa
--- /dev/null
+++ b/keyboards/maartenwut/eon40/readme.md
@@ -0,0 +1,21 @@
+# Eon40
+
+## Support
+* Keyboard Maintainer: [Maarten Dekkers](https://github.com/maartenwut)
+* Hardware Supported: Eon40
+* Hardware Availability: [maartenwut.com](https://maartenwut.com)
+
+
+## Features
+- QMK Firmware
+- 19mm switch spacing
+- USB-C Connector
+- Up to three rotary encoders
+- No leds
+
+## Build
+Make example for this keyboard (after setting up your build environment):
+
+ make maartenwut/eon40: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/maartenwut/eon40/rules.mk b/keyboards/maartenwut/eon40/rules.mk
new file mode 100644
index 0000000000..5161f8d071
--- /dev/null
+++ b/keyboards/maartenwut/eon40/rules.mk
@@ -0,0 +1,37 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+ENCODER_ENABLE = yes
+
+LAYOUTS = ortho_4x12 planck_mit
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/maartenwut/minitomic/config.h b/keyboards/maartenwut/minitomic/config.h
new file mode 100644
index 0000000000..8a6eed5416
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/config.h
@@ -0,0 +1,252 @@
+/* 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4705
+#define PRODUCT_ID 0x0145
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Maartenwut
+#define PRODUCT Minitomic
+#define DESCRIPTION A 45% staggered keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/*
+ * 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 {B1,B3,D4,D6}
+#define MATRIX_COL_PINS {C6,B6,B5,B4,D7,F0,F1,F4,F5,F6,F7,B7,E6}
+#define UNUSED_PINS {B2,D0,D1,D2,D3,D5}
+
+/* COL2ROW, ROW2COL*/
+#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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+#define QMK_ESC_OUTPUT C6 // usually COL
+#define QMK_ESC_INPUT B1 // usually ROW
+#define QMK_LED C7
diff --git a/keyboards/maartenwut/minitomic/info.json b/keyboards/maartenwut/minitomic/info.json
new file mode 100644
index 0000000000..4af72b36e1
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Minitomic",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_split_space": {
+ "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":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1, "w":1.75}, {"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, "w":1.25}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3, "w":1.25}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3, "w":1.75}, {"x":6.25, "y":3, "w":2}, {"x":8.25, "y":3}, {"x":9.25, "y":3, "w":1.25}, {"x":10.5, "y":3, "w":1.25}, {"x":11.75, "y":3, "w":1.25}]
+ },
+ "LAYOUT_full_space": {
+ "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":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1, "w":1.75}, {"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, "w":1.25}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3, "w":6.25}, {"x":9.5, "y":3}, {"x":10.5, "y":3, "w":1.25}, {"x":11.75, "y":3, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/maartenwut/minitomic/keymaps/default/keymap.c b/keyboards/maartenwut/minitomic/keymaps/default/keymap.c
new file mode 100644
index 0000000000..4d9a69fec4
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/* 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/>.
+ */
+#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 //Main layer
+#define _LO 1 //Low
+#define _HI 2 //High
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_MA] = LAYOUT_split_space(
+ KC_GESC, 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_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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, MO(_LO), KC_SPC, KC_SPC, MO(_HI), KC_RALT, KC_APP, KC_RCTRL), \
+
+[_LO] = LAYOUT_split_space(
+ 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, KC_QUOT, KC_LBRC, KC_RBRC, KC_BSLS, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET), \
+
+[_HI] = LAYOUT_split_space(
+ _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, _______, _______, \
+ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_PSCR, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \
+
+}; \ No newline at end of file
diff --git a/keyboards/maartenwut/minitomic/keymaps/default/readme.md b/keyboards/maartenwut/minitomic/keymaps/default/readme.md
new file mode 100644
index 0000000000..0ec508ffa3
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/keymaps/default/readme.md
@@ -0,0 +1 @@
+This is the default keymap for the Minitomic.
diff --git a/keyboards/maartenwut/minitomic/minitomic.c b/keyboards/maartenwut/minitomic/minitomic.c
new file mode 100644
index 0000000000..71447b1966
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/minitomic.c
@@ -0,0 +1,50 @@
+/* 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/>.
+ */
+#include "minitomic.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) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+void led_init_ports(void) {
+ //Set led pin as output, then high (off)
+ writePinHigh(C7);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ // writePin sets the pin high for 1 and low for 0.
+ // In this example the pins are inverted, setting
+ // it low/0 turns it on, and high/1 turns the LED off.
+ // This behavior depends on whether the LED is between the pin
+ // and VCC or the pin and GND.
+ writePin(C7, !led_state.caps_lock);
+ }
+ return res;
+}
+
diff --git a/keyboards/maartenwut/minitomic/minitomic.h b/keyboards/maartenwut/minitomic/minitomic.h
new file mode 100644
index 0000000000..ad2e8330b8
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/minitomic.h
@@ -0,0 +1,53 @@
+/* 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 "quantum.h"
+#define XXX KC_NO
+
+/* 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_split_space( \
+ 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, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k36, k37, k39, k3a, k3b \
+) \
+{ \
+ { 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, XXX }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX }, \
+ { k30, k31, k32, k33, k34, XXX, k36, k37, XXX, k39, k3a, k3b, XXX } \
+}
+
+#define LAYOUT_full_space( \
+ 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, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k36, k39, k3a, k3b \
+) \
+{ \
+ { 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, XXX }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX }, \
+ { k30, k31, k32, XXX, XXX, XXX, k36, XXX, XXX, k39, k3a, k3b, XXX } \
+}
diff --git a/keyboards/maartenwut/minitomic/readme.md b/keyboards/maartenwut/minitomic/readme.md
new file mode 100644
index 0000000000..df0a611f89
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/readme.md
@@ -0,0 +1,23 @@
+# Minitomic
+
+![Minitomic](https://i.imgur.com/wGtNokW.jpg)
+
+## Support
+* Keyboard Maintainer: [Maarten Dekkers](https://github.com/maartenwut)
+* Hardware Supported: Minitomic
+* Hardware Availability: [maartenwut.com](https://maartenwut.com)
+
+
+## Features
+- QMK Firmware
+- European switch spacing (19mm)
+- USB-C Connector
+- Capslock indicator under tab key
+- Reset button under left shift key
+
+## Build
+Make example for this keyboard (after setting up your build environment):
+
+ make maartenwut/minitomic: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/maartenwut/minitomic/rules.mk b/keyboards/maartenwut/minitomic/rules.mk
new file mode 100644
index 0000000000..d483b8db71
--- /dev/null
+++ b/keyboards/maartenwut/minitomic/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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 \ No newline at end of file
diff --git a/keyboards/maartenwut/plain60/config.h b/keyboards/maartenwut/plain60/config.h
index d17481617f..af4fb62311 100644
--- a/keyboards/maartenwut/plain60/config.h
+++ b/keyboards/maartenwut/plain60/config.h
@@ -47,24 +47,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 637
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 387 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/maartenwut/plain60/keymaps/audio/config.h b/keyboards/maartenwut/plain60/keymaps/audio/config.h
new file mode 100644
index 0000000000..9a43b7fbe3
--- /dev/null
+++ b/keyboards/maartenwut/plain60/keymaps/audio/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define B7_AUDIO
diff --git a/keyboards/maartenwut/plain60/keymaps/audio/keymap.c b/keyboards/maartenwut/plain60/keymaps/audio/keymap.c
new file mode 100644
index 0000000000..91ac37501c
--- /dev/null
+++ b/keyboards/maartenwut/plain60/keymaps/audio/keymap.c
@@ -0,0 +1,27 @@
+#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 _layers {
+ _MA,
+ _FN
+};
+
+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, LT(_FN, KC_UP), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(_FN, KC_APP), KC_RCTRL),
+
+[_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ AU_TOG, MU_TOG, MU_MOD, CK_TOGG, _______, _______, _______, _______)
+};
diff --git a/keyboards/maartenwut/plain60/keymaps/audio/rules.mk b/keyboards/maartenwut/plain60/keymaps/audio/rules.mk
new file mode 100644
index 0000000000..600978d17e
--- /dev/null
+++ b/keyboards/maartenwut/plain60/keymaps/audio/rules.mk
@@ -0,0 +1,4 @@
+AUDIO_ENABLE = yes
+RAW_ENABLE = no
+DYNAMIC_KEYMAP_ENABLE = no
+
diff --git a/keyboards/maartenwut/plain60/keymaps/default/keymap.c b/keyboards/maartenwut/plain60/keymaps/default/keymap.c
index 7e8cfff354..2e23dece01 100644
--- a/keyboards/maartenwut/plain60/keymaps/default/keymap.c
+++ b/keyboards/maartenwut/plain60/keymaps/default/keymap.c
@@ -4,7 +4,10 @@
// 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
+enum _layer {
+ _MA,
+ _FN
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -12,6 +15,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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)
+ 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, LT(_FN, KC_UP), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(_FN, KC_APP), KC_RCTRL),
+
+[_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______)
};
diff --git a/keyboards/maartenwut/plain60/keymaps/RGB/config.h b/keyboards/maartenwut/plain60/keymaps/kwerdenker/config.h
index 5fadcf821a..5fadcf821a 100644
--- a/keyboards/maartenwut/plain60/keymaps/RGB/config.h
+++ b/keyboards/maartenwut/plain60/keymaps/kwerdenker/config.h
diff --git a/keyboards/maartenwut/plain60/keymaps/RGB/keymap.c b/keyboards/maartenwut/plain60/keymaps/kwerdenker/keymap.c
index 25370823df..25370823df 100644
--- a/keyboards/maartenwut/plain60/keymaps/RGB/keymap.c
+++ b/keyboards/maartenwut/plain60/keymaps/kwerdenker/keymap.c
diff --git a/keyboards/maartenwut/plain60/keymaps/RGB/rules.mk b/keyboards/maartenwut/plain60/keymaps/kwerdenker/rules.mk
index 793bd869ae..facc9dc7e6 100644
--- a/keyboards/maartenwut/plain60/keymaps/RGB/rules.mk
+++ b/keyboards/maartenwut/plain60/keymaps/kwerdenker/rules.mk
@@ -16,8 +16,7 @@
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
-RAW_ENABLE = no
-DYNAMIC_KEYMAP_ENABLE = no
+
diff --git a/keyboards/maartenwut/plain60/keymaps/rgb/config.h b/keyboards/maartenwut/plain60/keymaps/rgb/config.h
new file mode 100644
index 0000000000..8426938120
--- /dev/null
+++ b/keyboards/maartenwut/plain60/keymaps/rgb/config.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#define RGB_DI_PIN B0
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 20 // limit to 20 otherwise brownouts
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/maartenwut/plain60/keymaps/rgb/keymap.c b/keyboards/maartenwut/plain60/keymaps/rgb/keymap.c
new file mode 100644
index 0000000000..abfb5f6b15
--- /dev/null
+++ b/keyboards/maartenwut/plain60/keymaps/rgb/keymap.c
@@ -0,0 +1,27 @@
+#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 _layers {
+ _MA,
+ _FN
+};
+
+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, LT(_FN, KC_UP), \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(_FN, KC_APP), KC_RCTRL),
+
+[_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______)
+};
diff --git a/keyboards/maartenwut/plain60/keymaps/rgb/rules.mk b/keyboards/maartenwut/plain60/keymaps/rgb/rules.mk
new file mode 100644
index 0000000000..b6cd87b7d4
--- /dev/null
+++ b/keyboards/maartenwut/plain60/keymaps/rgb/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+RAW_ENABLE = no
+DYNAMIC_KEYMAP_ENABLE = no
diff --git a/keyboards/maartenwut/plain60/keymaps/via/rules.mk b/keyboards/maartenwut/plain60/keymaps/via/rules.mk
index 2b23b188b4..1e5b99807c 100644
--- a/keyboards/maartenwut/plain60/keymaps/via/rules.mk
+++ b/keyboards/maartenwut/plain60/keymaps/via/rules.mk
@@ -1,5 +1 @@
-# rules.mk overrides to enable VIA
-SRC += keyboards/wilba_tech/wt_main.c
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/maartenwut/plain60/rules.mk b/keyboards/maartenwut/plain60/rules.mk
index 77b5a3eb95..398b59227d 100644
--- a/keyboards/maartenwut/plain60/rules.mk
+++ b/keyboards/maartenwut/plain60/rules.mk
@@ -14,14 +14,14 @@ BOOTLOADER = qmk-dfu
# 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)
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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)
+RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/maartenwut/wasdat/config.h b/keyboards/maartenwut/wasdat/config.h
index b5c4d3bc2d..ffd33d8534 100644
--- a/keyboards/maartenwut/wasdat/config.h
+++ b/keyboards/maartenwut/wasdat/config.h
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
+#define PRODUCT_ID 0xC474
#define DEVICE_VER 0x0001
#define MANUFACTURER Maartenwut
#define PRODUCT Wasdat
diff --git a/keyboards/maartenwut/wasdat/matrix.c b/keyboards/maartenwut/wasdat/matrix.c
index 04d2219713..6dd79b5330 100644
--- a/keyboards/maartenwut/wasdat/matrix.c
+++ b/keyboards/maartenwut/wasdat/matrix.c
@@ -17,34 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include <stdbool.h>
#include "wait.h"
-#include "print.h"
-#include "debug.h"
#include "util.h"
#include "matrix.h"
#include "debounce.h"
#include "quantum.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)
-#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
-
-#ifdef MATRIX_MASKED
- extern const matrix_row_t matrix_mask[];
-#endif
-
#ifdef DIRECT_PINS
static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
#elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
@@ -52,150 +29,58 @@ static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
//static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
#endif
-/* matrix state(1:on, 0:off) */
-static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
-static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
-
-__attribute__ ((weak))
-void matrix_init_quantum(void) {
- matrix_init_kb();
-}
-
-__attribute__ ((weak))
-void matrix_scan_quantum(void) {
- matrix_scan_kb();
-}
-
-__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;
-}
-
-//Deprecated.
-bool matrix_is_modified(void)
-{
- if (debounce_active()) 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)
-{
- // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
- // switch blocker installed and the switch is always pressed.
-#ifdef MATRIX_MASKED
- return matrix[row] & matrix_mask[row];
-#else
- return matrix[row];
-#endif
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-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;
-}
-
+// matrix code
#ifdef DIRECT_PINS
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);
- }
+ 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);
+ }
+ }
}
- }
}
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;
+ 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++) {
- pin_t pin = direct_pins[current_row][col_index];
- if (pin != NO_PIN) {
- current_matrix[current_row] |= readPin(pin) ? 0 : (ROW_SHIFTER << col_index);
+ 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 : (MATRIX_ROW_SHIFTER << col_index);
+ }
}
- }
- return (last_row_value != current_matrix[current_row]);
+ return (last_row_value != current_matrix[current_row]);
}
#elif (DIODE_DIRECTION == COL2ROW)
-static void select_row(uint8_t row)
-{
+static void select_row(uint8_t row) {
setPinOutput(row_pins[row]);
writePinLow(row_pins[row]);
}
-static void unselect_row(uint8_t row)
-{
- setPinInputHigh(row_pins[row]);
-}
+static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
setPinInputHigh(row_pins[x]);
}
}
static void init_pins(void) {
- unselect_rows();
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- setPinInputHigh(col_pins[x]);
- }
+ unselect_rows();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
}
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
+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];
@@ -207,13 +92,13 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
wait_us(30);
// For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
// Select the col pin to read (active low)
uint8_t pin_state = readPin(col_pins[col_index]);
// Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
}
// Unselect row
@@ -245,8 +130,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
* col 14: B7
* col 15: B3
*/
-static void select_col(uint8_t col)
-{
+static void select_col(uint8_t col) {
switch (col) {
case 0:
writePinLow(C7);
@@ -304,8 +188,7 @@ static void select_col(uint8_t col)
}
}
-static void unselect_col(uint8_t col)
-{
+static void unselect_col(uint8_t col) {
switch (col) {
case 0:
writePinHigh(C7);
@@ -363,8 +246,7 @@ static void unselect_col(uint8_t col)
}
}
-static void unselect_cols(void)
-{
+static void unselect_cols(void) {
//Native
setPinOutput(D3);
setPinOutput(D7);
@@ -397,14 +279,13 @@ static void unselect_cols(void)
}
static void init_pins(void) {
- unselect_cols();
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInputHigh(row_pins[x]);
- }
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
}
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
+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
@@ -412,27 +293,21 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
wait_us(30);
// For each row...
- for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++)
- {
-
+ for (uint8_t row_index = 0; row_index < MATRIX_ROWS; 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 (readPin(row_pins[row_index]) == 0)
- {
+ if (readPin(row_pins[row_index]) == 0) {
// Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
+ current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
+ } else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
}
// Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) {
matrix_changed = true;
}
}
@@ -445,40 +320,25 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
#endif
-void matrix_init(void) {
-
+void matrix_init_custom(void) {
// initialize key pins
init_pins();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- raw_matrix[i] = 0;
- matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
-
- matrix_init_quantum();
}
-uint8_t matrix_scan(void)
-{
- bool changed = false;
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
- // 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);
- }
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(current_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);
- }
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(current_matrix, current_col);
+ }
#endif
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
- matrix_scan_quantum();
- return (uint8_t)changed;
+ return changed;
}
diff --git a/keyboards/maartenwut/wasdat/readme.md b/keyboards/maartenwut/wasdat/readme.md
index 1cb42cc011..65ae6231e8 100644
--- a/keyboards/maartenwut/wasdat/readme.md
+++ b/keyboards/maartenwut/wasdat/readme.md
@@ -4,9 +4,9 @@
A drop-in replacement controller for the WASD v2 TKL and fullsize models.
-Keyboard Maintainer: [Maartenwut](https://github.com/Maartenwut)
-Hardware Supported: WASD v2 TKL/Fullsize ANSI & ISO with Wasdat controller
-Hardware Availability: [maartenwut.com](https://maartenwut.com/product/wasdat/)
+* Keyboard Maintainer: [Maartenwut](https://github.com/Maartenwut)
+* Hardware Supported: WASD v2 TKL/Fullsize ANSI & ISO with Wasdat controller
+* Hardware Availability: [maartenwut.com](https://maartenwut.com/product/wasdat/)
## Flashing
@@ -16,6 +16,6 @@ The WASD has no reset button, but it does have a bank of DIP switches on the bot
Make example for this keyboard (after setting up your build environment):
- make wasdat:default
+ make maartenwut/wasdat: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/maartenwut/wasdat/rules.mk b/keyboards/maartenwut/wasdat/rules.mk
index 059e84a1a5..db9728623e 100644
--- a/keyboards/maartenwut/wasdat/rules.mk
+++ b/keyboards/maartenwut/wasdat/rules.mk
@@ -14,24 +14,24 @@ BOOTLOADER = qmk-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)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
-UNICODE_ENABLE = no # Unicode
+MIDI_ENABLE = no # MIDI support
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)
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = lite
SRC += matrix.c
+
LAYOUTS = fullsize_ansi fullsize_iso tkl_ansi tkl_iso
diff --git a/keyboards/maartenwut/wasdat/wasdat.h b/keyboards/maartenwut/wasdat/wasdat.h
index 508ada4853..d9f1f95a2d 100644
--- a/keyboards/maartenwut/wasdat/wasdat.h
+++ b/keyboards/maartenwut/wasdat/wasdat.h
@@ -19,7 +19,7 @@
#define XXX KC_NO
-/* This a shortcut to help you visually see your layout.
+/* This is 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.
diff --git a/keyboards/maartenwut/wonderland/keymaps/default/keymap.c b/keyboards/maartenwut/wonderland/keymaps/default/keymap.c
index ccb022f684..da03d7615e 100755
--- a/keyboards/maartenwut/wonderland/keymaps/default/keymap.c
+++ b/keyboards/maartenwut/wonderland/keymaps/default/keymap.c
@@ -22,3 +22,33 @@ RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
_______, KC_LALT, _______, _______, _______, KC_RALT, _______ \
)
};
+
+#ifdef USE_LEDS_FOR_LAYERS
+// example of how to use LEDs as layer indicators
+static uint8_t top = 1;
+static uint8_t middle = 0;
+static uint8_t bottom = 0;
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ top = middle = bottom = 0;
+ switch (get_highest_layer(state)) {
+ case _BASE:
+ top = 1;
+ break;
+ case _FUNC:
+ middle = 1;
+ break;
+ default: // for any other layers, or the default layer
+ break;
+ }
+ return state;
+}
+
+// override kb level function
+bool led_update_user(led_t usb_led) {
+ writePin(B1, !top);
+ writePin(B2, !middle);
+ writePin(B3, !bottom);
+ return false; // we are using LEDs for something else override kb
+}
+#endif
diff --git a/keyboards/maartenwut/wonderland/wonderland.c b/keyboards/maartenwut/wonderland/wonderland.c
index 9f3233e0f1..4415443816 100755
--- a/keyboards/maartenwut/wonderland/wonderland.c
+++ b/keyboards/maartenwut/wonderland/wonderland.c
@@ -1,5 +1,6 @@
#include "wonderland.h"
+__attribute__ ((weak))
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
@@ -7,12 +8,14 @@ void matrix_init_kb(void) {
led_init_ports();
};
+__attribute__ ((weak))
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
};
+__attribute__ ((weak))
void led_init_ports(void) {
// * Set our LED pins as output
setPinOutput(B1);
@@ -20,23 +23,12 @@ void led_init_ports(void) {
setPinOutput(B3);
}
-void led_set_kb(uint8_t usb_led) {
- if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- writePinLow(B1);
- } else {
- writePinHigh(B1);
+bool led_update_kb(led_t led_state) {
+ bool runDefault = led_update_user(led_state);
+ if (runDefault) {
+ writePin(B1, !led_state.num_lock);
+ writePin(B2, !led_state.caps_lock);
+ writePin(B3, !led_state.scroll_lock);
}
-
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinLow(B2);
- } else {
- writePinHigh(B2);
- }
-
- if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
- writePinLow(B3);
- } else {
- writePinHigh(B3);
- }
- led_set_user(usb_led);
+ return runDefault;
}
diff --git a/keyboards/massdrop/alt/keymaps/default/keymap.c b/keyboards/massdrop/alt/keymaps/default/keymap.c
index f1e9400331..52fd35b454 100644
--- a/keyboards/massdrop/alt/keymaps/default/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/default/keymap.c
@@ -10,8 +10,6 @@ enum alt_keycodes {
MD_BOOT, //Restart into bootloader after hold timeout
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -26,7 +24,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_MUTE, \
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
- _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
+ _______, RGB_TOG, _______, _______, _______, MD_BOOT, NK_TOGG, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
),
/*
diff --git a/keyboards/massdrop/alt/keymaps/default_md/keymap.c b/keyboards/massdrop/alt/keymaps/default_md/keymap.c
index 7969583df4..6523790f6d 100644
--- a/keyboards/massdrop/alt/keymaps/default_md/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/default_md/keymap.c
@@ -21,8 +21,6 @@ enum alt_keycodes {
MD_BOOT //Restart into bootloader after hold timeout //Working
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -37,7 +35,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_MUTE, \
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
- _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
+ _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
),
/*
diff --git a/keyboards/massdrop/alt/keymaps/mac/keymap.c b/keyboards/massdrop/alt/keymaps/mac/keymap.c
index 222d7e2c50..9f575b4f12 100644
--- a/keyboards/massdrop/alt/keymaps/mac/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/mac/keymap.c
@@ -10,8 +10,6 @@ enum alt_keycodes {
MD_BOOT, //Restart into bootloader after hold timeout
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -26,7 +24,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_MUTE, \
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
- _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
+ _______, RGB_TOG, _______, _______, _______, MD_BOOT, NK_TOGG, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
),
/*
diff --git a/keyboards/massdrop/alt/keymaps/mac_md/keymap.c b/keyboards/massdrop/alt/keymaps/mac_md/keymap.c
index 8a052cc250..439e793997 100644
--- a/keyboards/massdrop/alt/keymaps/mac_md/keymap.c
+++ b/keyboards/massdrop/alt/keymaps/mac_md/keymap.c
@@ -21,8 +21,6 @@ enum alt_keycodes {
MD_BOOT //Restart into bootloader after hold timeout //Working
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -37,7 +35,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_MUTE, \
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
- _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
+ _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
),
/*
diff --git a/keyboards/massdrop/ctrl/DOCUMENTATION.md b/keyboards/massdrop/ctrl/DOCUMENTATION.md
new file mode 100644
index 0000000000..6b3206ab91
--- /dev/null
+++ b/keyboards/massdrop/ctrl/DOCUMENTATION.md
@@ -0,0 +1,29 @@
+# Massdrop CTRL Documentation
+
+This is a WIP and will contine to be updated for some time in the future.
+
+This doc will include all currently available information, including low level information, for the CTRL keyboard collected from code committed by Drop, Inc. and freely available sources. It will also include a deprecation list of code committed by Drop, Inc. that is no longer needed and a TODO list for necessary code fixes and changes for existing protocol and a list of suggested improvements. This is the hopes of making MD CTRL fully QMK compatible by improving the existing protocol and/or perhaps working on a ChibiOS port at one point.
+
+**Note**: given that all Drop, Inc. keyboards to date have used the same MCU and the same protocol, the MCU and protocol documentation should apply to all keyboards in Massdrop folder. Most HID-related information however is product-specific and will not apply to other keyboards.
+
+### MCU
+
+* Microchip Technology SAMD51J18A
+* RISC 32-Bit
+* 120MHz Cortex®-M4
+* [Datasheet](https://www.datasheets360.com/pdf/3214995481162464753)
+
+### HID descriptor
+
+* VENDOR_ID 0x04D8
+* PRODUCT_ID 0xEED2
+* DEVICE_VER 0x0101
+* MANUFACTURER "Massdrop Inc."
+* PRODUCT "CTRL Keyboard"
+
+### USB Hub descriptor
+
+* VENDOR_ID 0x04D8
+* PRODUCT_ID 0xEEC5
+* MANUFACTURER "Massdrop Inc."
+* PRODUCT "Massdrop Hub"
diff --git a/keyboards/massdrop/ctrl/keymaps/default/keymap.c b/keyboards/massdrop/ctrl/keymaps/default/keymap.c
index 39122ee49c..9f111725c4 100644
--- a/keyboards/massdrop/ctrl/keymaps/default/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/default/keymap.c
@@ -10,8 +10,6 @@ enum ctrl_keycodes {
MD_BOOT, //Restart into bootloader after hold timeout
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -28,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \
- _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_TOG, _______, _______, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*
@@ -37,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
*/
diff --git a/keyboards/massdrop/ctrl/keymaps/default_md/keymap.c b/keyboards/massdrop/ctrl/keymaps/default_md/keymap.c
index 16f88ffe1d..93289f8aae 100644
--- a/keyboards/massdrop/ctrl/keymaps/default_md/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/default_md/keymap.c
@@ -21,8 +21,6 @@ enum ctrl_keycodes {
MD_BOOT //Restart into bootloader after hold timeout //Working
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -39,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, 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, _______, _______, _______, _______, _______, _______, \
+ _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*
@@ -48,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
*/
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/README.md b/keyboards/massdrop/ctrl/keymaps/endgame/README.md
new file mode 100644
index 0000000000..f65b70475f
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/README.md
@@ -0,0 +1,83 @@
+# Massdrop Ctrl Endgame
+
+This keymap is here to show some love to the MD Ctrl.
+
+## Layers
+
+### Typing Layer
+
+![Typing Layer](https://imgur.com/QUIU2SL.png)
+
+### Function Layer
+
+![Function Layer](https://imgur.com/4q4ld4X.png)
+
+### Mouse Layer
+
+![Mouse Layer](https://imgur.com/xXVFyEE.png)
+
+### Git Layer
+
+![Git Layer](https://imgur.com/WMMM0zz.png)
+
+## Features
+
+These are the features currently supported by this keymap:
+
+### RGB Time Out
+
+This allows setting a dynamic timeout for RGB to turn off. The following is supported:
+
+1. Restores on the first click of any key.
+2. Restores to its previous state before timeout. i.e. if it was edge only before timeout it will restore to edge only, same for all modes.
+3. Doesn't interfere with RGB modes. You can set keyboard to All, Edge Only or Off and timeout will not interfere with these modes.
+4. The time before RGB is turned off is dynamically adjustable using keycodes ROUT_VI to increase, ROUT_VD to decrease. They have a 10 second steps by default. Minimum value 10 seconds by default and maximum is 10 minutes.
+5. Can be toggled on or off dyncamically with the ROUT_TG keycode.
+6. Can be put in fast mode using ROUT_FM, for movie watching purposes. Default value is 3 seconds. Note that fast mode disabled ROUT_VD and ROUT_VI so to use them again you have to toggle fast mode off with ROUT_FM. It doesn't impact ROUT_TG and ROUT_TG will remember if fast mode was enabled when toggled back on, so it doesn't disable fast mode on its own, only ROUT_FM can disable or enable fast mode.
+
+### Tapdance Keys
+
+Not really a feature. I just want to document what tapdance keys this keymap has because there will be many of them.
+
+1. LGUI is used for both LGUI and toggle mouse layer for double tap.
+2. LCTRL sends LCTRL for single tap and LCTRL+LALT+T for double tap, which opens terminal in most environments.
+
+## Future Work
+
+By the time this is project has accomplished its original primary objectives, the following features will be available for the ctrl:
+
+1. Automatic RGB timeout with all the options you would need. **DONE**
+2. Macro and Shortcut layers for at least the following: Git **DONE**, IntelliJ, VIM **WIP**, Yakuake, KDE, Firefox, Slack, Discord. All using default program configuration. [This list may and probably will get longer]
+3. Custom LED configs that offer all the RGB layouts I deem useful or having a unique feature, look or feel. **DONE**
+4. Increased Dynamic Macro slots, because two simply isn't enough. This particular one falls outside Ctrl config and into QMK core modification. However, it is on the list of features I would like this keyboard to have and is a **TOP PRIORITY** for me. It won't be easy, but I will figure it out.
+5. Porting from the Drop, Inc. way of doing things to the QMK way of doing things, wherever possible. Full QMK support of this keyboard is the goal, not that it's possible, but I'd like to get as close as it gets. **WIP**
+6. An easier way to configure LED than both the QMK way and the Drop way. I'm thinking of a graphical LED config like Drop configurator that offers the advanced LED config features QMK offers. This may or may not get done depending on whether or not I get sick of QMK LED config at any point. If it does get done, it may or may not be added to QMK Configurator.
+7. Better documentation of the MD Ctrl specifications, features, etc. This will be included here in the form of C and doxygen comments. The bigger portion will be included in QMK docs if and where possible. **WIP**
+
+Additions:
+
+8. Implement Raw HID. **WIP**
+
+This list will most probably either expand or have some items removed if they're deemed not worthy, probably both. Nothing will be removed because it can't be done though, I am a firm believer in You Can Do It. Anything modified in this list will be clearly marked, for posterity.
+
+## Motivation
+
+I bought this keyboard because I believed and still believe that it offers the greatest possible value for money for any TKL fan. It was very disappointing to me after receiving it to see that this keyboard didn't get the love it should have in QMK, from either Drop, Inc. or users.
+Granted, this is a TKL RGB board which means it is hated by every single enthusiast in the community. That doesn't mean it shouldn't be getting love form its users, or most importantly its maker.
+
+Drop, Inc. have for some reason decided that they want to work on their own QMK stack. A stupid decision to say the least. Although having made this decision, they did very little actual work on this keyboard and have offered very little support and almost no time working on the firmware. To my knowledge, no one is currently working on it in a truly active fashion. A small handful of people work on the software and even then, they seem to think that their own way of doing things is better than the way chosen by the thousands in the community who have worked on QMK. Their QMK fork for the keyboard is abandoned for months. Updates are few and far between and it seems this keyboard has been forgotten in the annals of 2018 by both its maker and its users.
+
+To their credit, at least they decided to abandon their idiotic RGB setup and have opted after taking their sweet time to use QMK RGB and they did make some much needed changes to mdloader. That being said, Drop, Inc. still don't show love to this keyboard and whether or not they are actually able is questionable.
+
+So the aim of this work, starting with this Keymap, is to make the Massdrop Ctrl a true QMK keyboard instead of the marketing spiel "QMK Supported". As much as it can be made so of course within the bounds of what can be done with information openly available about the keyboard.
+
+I am not of the opinion that a mechanical keyboard is inherently superior. I am of the opinion that a mechanical keyboard is a tool that boosts productivity, enjoyment and efficiency, if it fails at that then it is no longer superior. Programmability is a huge part of that and I can no longer use any keyboard that doesn't have a level of programmability less than QMK offers.
+
+I will personally do my best for this keyboard for no reason other than it will likely be my main keyboard for years to come.
+
+## Credits
+
+RGB timeout functionality was originally inspired by the code in this [gist](https://gist.github.com/algernon/9182469e21894192017f2bb5d478c7df).
+LED config code was mostly transferred from [matthewrobo keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop/ctrl/keymaps/matthewrobo).
+
+Rest of the information about RGB matrix, scan matrix, and whatever information I have used was made publicly available by many other awesome members of the community.
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/config.h b/keyboards/massdrop/ctrl/keymaps/endgame/config.h
new file mode 100644
index 0000000000..0ef485591f
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/config.h
@@ -0,0 +1,116 @@
+#pragma once
+
+
+#define MODS_SHIFT (get_mods() & MOD_MASK_SHIFT)
+#define MODS_CTRL (get_mods() & MOD_MASK_CTRL)
+#define MODS_ALT (get_mods() & MOD_MASK_ALT)
+
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT) // Key combination that allows the use of magic commands (useful for debugging)
+
+// #define NO_DEBUG // Disable debugging
+// #define NO_PRINT // Disable printing/debugging using hid_listen
+// #define NO_ACTION_LAYER // Disable layers
+// #define NO_ACTION_TAPPING // Disable tap dance and other tapping features
+// #define NO_ACTION_ONESHOT // Disable one-shot modifiers
+// #define NO_ACTION_MACRO // Disable old style macro handling: MACRO() & action_get_macro
+#define TERMINAL_HELP
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 10
+#define MOUSEKEY_WHEEL_DELAY 0
+#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
+// #define QMK_KEYS_PER_SCAN 4 // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
+// #define STRICT_LAYER_RELEASE // Force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
+// #define LOCKING_SUPPORT_ENABLE // Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
+// #define LOCKING_RESYNC_ENABLE // Tries to keep switch state consistent with keyboard LED state
+#define TAPPING_TERM 200 // How long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
+// #define TAPPING_TERM_PER_KEY // Enables handling for per key TAPPING_TERM settings
+// #define RETRO_TAPPING // Tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
+#define TAPPING_TOGGLE 2 // How many taps before triggering the toggle
+// #define PERMISSIVE_HOLD // Makes tap and hold keys trigger the hold if another key is pressed before releasing, even if it hasn't hit the TAPPING_TERM. See Permissive Hold for details
+// #define IGNORE_MOD_TAP_INTERRUPT // Makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the TAPPING_TERM for both keys. See Mod tap interrupt for details
+// #define TAPPING_FORCE_HOLD // Makes it possible to use a dual role key as modifier shortly after having been tapped. See Hold after tap. 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.
+// #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 // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
+// #define ONESHOT_TIMEOUT 300 // How long before oneshot times out
+// #define ONESHOT_TAP_TOGGLE 2 // How many taps before oneshot toggle is triggered
+// #define COMBO_COUNT 2 // Set this to the number of combos that you're using in the Combo feature.
+// #define COMBO_TERM 200 // How long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
+// #define TAP_CODE_DELAY 100 // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
+// #define TAP_HOLD_CAPS_DELAY 80 // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPSLOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_ALPHAS_MODS // Sets the default mode, if none has been set
+// #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue
+// #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation
+// #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness)
+// #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_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+// #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+// #define RGBLIGHT_ANIMATIONS // Run RGB animations
+// #define RGBLIGHT_ANIMATIONS // Enable all additional animation modes.
+// #define RGBLIGHT_EFFECT_ALTERNATING // Enable alternating animation mode.
+// #define RGBLIGHT_EFFECT_BREATHING // Enable breathing animation mode.
+// #define RGBLIGHT_EFFECT_CHRISTMAS // Enable christmas animation mode.
+// #define RGBLIGHT_EFFECT_KNIGHT // Enable knight animation mode.
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD // Enable rainbow mood animation mode.
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL // Enable rainbow swirl animation mode.
+// #define RGBLIGHT_EFFECT_RGB_TEST // Enable RGB test animation mode.
+// #define RGBLIGHT_EFFECT_SNAKE // Enable snake animation mode.
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT // Enable static gradient mode.
+
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER // If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // The maximum brightness for the breathing mode. Valid values are 1 to 255
+// #define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 1000 // How long to wait between light changes for the "Christmas" animation, in milliseconds
+// #define RGBLIGHT_EFFECT_CHRISTMAS_STEP 2 // The number of LEDs to group the red/green colors by for the "Christmas" animation
+// #define RGBLIGHT_EFFECT_KNIGHT_LED_NUM RGBLED_NUM // The number of LEDs to have the "Knight" animation travel
+// #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3 // The number of LEDs to light up for the "Knight" animation
+// #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 0 // The number of LEDs to start the "Knight" animation from the start of the strip by
+// #define RGBLIGHT_RAINBOW_SWIRL_RANGE 255 // Range adjustment for the rainbow swirl effect to get different swirls
+// #define RGBLIGHT_EFFECT_SNAKE_LENGTH 4 // The number of LEDs to light up for the "Snake" animation
+
+// This list in in the correct mode order. Next mode is the following line, previous mode is previous line. Loops around.
+// #define DISABLE_RGB_MATRIX_SOLID_COLOR // Static single hue, no speed support
+// #define DISABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
+// #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
+#define DISABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation
+#define DISABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
+#define DISABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness
+#define DISABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient
+#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right
+#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
+#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in
+#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in
+#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradent Chevron shapped scrolling left to right
+#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard
+#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
+#define DISABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard
+#define DISABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard
+#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard
+// #define DISABLE_RGB_MATRIX_RAINDROPS // Randomly changes a single key's hue
+// #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
+// =================================================== Requires RGB_MATRIX_FRAMEBUFFER_EFFECTS =============================================================
+// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM!
+#define DISABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation
+// =================================================== RGB_MATRIX_KEYPRESSES OR RGB_MATRIX_KEYRELEASES =====================================================
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
+#define DISABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out
+#define DISABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out
+#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/config_led.c b/keyboards/massdrop/ctrl/keymaps/endgame/config_led.c
new file mode 100644
index 0000000000..448793cf5d
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/config_led.c
@@ -0,0 +1,82 @@
+#ifdef RGB_MATRIX_ENABLE
+#include "ctrl.h"
+
+#include "led_matrix.h"
+#include "rgb_matrix.h"
+#include "config_led.h"
+
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 16, 17, 18, 19, 20, 21, 22, 23 },
+ { 33, 34, 35, 36, 37, 38, 39, 40 },
+ { 50, 51, 52, 53, 54, 55, 56, 57 },
+ { 63, 64, 65, 66, 67, 68, 69, 70 },
+ { 76, 77, 78, 79, 80, 81, 82, 83 },
+ { 8, 9, 10, 11, 12, 13, 14, 15 },
+ { 24, 25, 26, 27, 28, 29, 30, 31 },
+ { 41, 42, 43, 44, 45, 46, 47, 48 },
+ { 58, 59, 60, 61, 62, 75, 49, 32 },
+ { 71, 72, 73, 74, 84, 85, 86, NO_LED }
+}, {
+ // 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
+ { 7, 5 }, { 31, 5 }, { 43, 5 }, { 55, 5 }, { 67, 5 }, { 85, 5 }, { 97, 5 }, { 109, 5 },
+ { 121, 5 }, { 139, 5 }, { 151, 5 }, { 163, 5 }, { 175, 5 }, { 193, 5 }, { 205, 5 }, { 217, 5 },
+ // KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP
+ { 7, 20 }, { 19, 20 }, { 31, 20 }, { 43, 20 }, { 55, 20 }, { 67, 20 }, { 79, 20 }, { 91, 20 },
+ { 103, 20 }, { 115, 20 }, { 127, 20 }, { 139, 20 }, { 151, 20 }, { 169, 20 }, { 193, 20 }, { 205, 20 },
+ { 217, 20 },
+ // KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN
+ { 10, 30 }, { 25, 30 }, { 37, 30 }, { 49, 30 }, { 61, 30 }, { 73, 30 }, { 85, 30 }, { 97, 30 },
+ { 109, 30 }, { 121, 30 }, { 133, 30 }, { 145, 30 }, { 157, 30 }, { 172, 30 }, { 193, 30 }, { 205, 30 },
+ { 217, 30 },
+ // 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
+ { 11, 39 }, { 28, 39 }, { 40, 39 }, { 52, 39 }, { 64, 39 }, { 76, 39 }, { 88, 39 }, { 100, 39 },
+ { 112, 39 }, { 124, 39 }, { 136, 39 }, { 148, 39 }, { 168, 39 },
+ // 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
+ { 14, 49 }, { 34, 49 }, { 46, 49 }, { 58, 49 }, { 70, 49 }, { 82, 49 }, { 94, 49 }, { 106, 49 },
+ { 118, 49 }, { 130, 49 }, { 142, 49 }, { 165, 49 }, { 205, 49 },
+ // KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ { 8, 59 }, { 23, 59 }, { 38, 59 }, { 83, 59 }, { 129, 59 }, { 144, 59 }, { 159, 59 }, { 174, 59 },
+ { 193, 59 }, { 205, 59 }, { 217, 59 },
+ // Underglow / Border
+ { 224, 64 }, { 204, 64 }, { 186, 64 }, { 167, 64 }, { 149, 64 }, { 130, 64 }, { 112, 64 }, { 94, 64 },
+ { 75, 64 }, { 57, 64 }, { 38, 64 }, { 20, 64 }, { 0, 64 }, { 0, 47 }, { 0, 32 }, { 0, 17 },
+ { 0, 0 }, { 20, 0 }, { 38, 0 }, { 57, 0 }, { 75, 0 }, { 94, 0 }, { 112, 0 }, { 130, 0 },
+ { 149, 0 }, { 167, 0 }, { 186, 0 }, { 204, 0 }, { 224, 0 }, { 224, 17 }, { 224, 32 }, { 224, 47 }
+}, {
+ // 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
+ 1, 4, 4, 4, 4, 1, 1, 1,
+ 1, 4, 4, 4, 4, 1, 1, 1,
+ // 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
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 1, 1, 1,
+ 1,
+ // 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
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 1, 1,
+ 1,
+ // 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
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 1,
+ // 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
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1,
+ // KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ 1, 1, 1, 4, 1, 1, 1, 1,
+ 1, 1, 1,
+ // Underglow / Border
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2
+} };
+
+
+#ifdef USB_LED_INDICATOR_ENABLE
+void rgb_matrix_indicators_kb(void)
+{
+ led_matrix_indicators();
+}
+#endif // USB_LED_INDICATOR_ENABLE
+
+#endif
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/keymap.c b/keyboards/massdrop/ctrl/keymaps/endgame/keymap.c
new file mode 100644
index 0000000000..c28434e06b
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/keymap.c
@@ -0,0 +1,394 @@
+#include "keymap.h"
+
+static uint16_t idle_timer; // Idle LED timeout timer
+static uint8_t idle_second_counter; // Idle LED seconds counter, counts seconds not milliseconds
+static uint8_t key_event_counter; // This counter is used to check if any keys are being held
+
+static const char * sendstring_commands[] = {
+ "git init ",
+ "git clone ",
+ "git config --global ",
+ "git add ",
+ "git diff ",
+ "git reset ",
+ "git rebase ",
+ "git branch -b \"",
+ "git checkout ",
+ "git merge ",
+ "git remote add ",
+ "git fetch ",
+ "git pull ",
+ "git push ",
+ "git commit ",
+ "git status ",
+ "git log ",
+};
+
+//Associate our tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_LGUI_ML] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_LGUI, _ML),
+ [TD_APP_YL] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_APP, _YL),
+ [TD_CTRL_TERM] = ACTION_TAP_DANCE_DOUBLE(KC_LCTRL, LCA(KC_T)),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ [DEFAULT] = 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
+ ),
+ */
+ [_KL] = 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_SFTENT, KC_UP,
+ TD(TD_CTRL_TERM), TD(TD_LGUI_ML), KC_LALT, KC_SPC, KC_RALT, TT(_FL), TD(TD_APP_YL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FL] = LAYOUT(
+ _______, DM_PLY1, DM_PLY2, _______, _______, DM_REC1, DM_REC2, _______, _______, DM_RSTP, _______, KC_WAKE, KC_SLEP, KC_MUTE, TERM_ON, TERM_OFF,
+ _______, _______, TG(_ML), TG(_GL), TG(_VL), TG(_YL), _______, _______, _______, ROUT_FM, ROUT_TG, ROUT_VD, ROUT_VI, _______, KC_MSTP, KC_MPLY, KC_VOLU,
+ RGB_M_P, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO, U_T_AGCR, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD,
+ _______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, COPY_ALL, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, KC_BRIU,
+ _______, _______, _______, _______, _______, TG(_FL), _______, _______, _______, KC_BRID, _______
+ ),
+ [_ML] = LAYOUT(
+ _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_BTN4, KC_BTN3, KC_BTN5, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, SEL_CPY, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U,
+ _______, TG(_ML), _______, _______, _______, TG(_ML), _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ ),
+ [_GL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, G_REMTE, G_RESET, G_REBAS, _______, G_INIT, _______, G_PULL, G_PUSH, _______, _______, _______, _______, _______,
+ _______, G_ADD, G_STAT, G_DIFF, G_FETCH, _______, _______, _______, _______, G_LOG, _______, _______, _______,
+ _______, G_CONF, G_CHECK, G_CLONE, G_COMM, G_BRANH, _______, G_MERGE, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, TG(_GL), _______, _______, _______, _______, _______
+ ),
+ // This layout doesn't have custom keycodes for now, just custom LED config
+ [_VL] = 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_SFTENT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TG(_VL), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ // Works with https://github.com/ash0x0/config/blob/master/yakuake.shortcuts
+ [_YL] = LAYOUT(
+ KC_ESC, 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_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP,
+ KC_NO, KC_Q, KC_NO, KC_E, KC_NO, KC_T, KC_NO, KC_NO, KC_I, KC_NO, KC_P, KC_NO, KC_RBRC, KC_BSLS, KC_NO, KC_END, KC_PGDN,
+ KC_NO, KC_A, KC_NO, KC_D, KC_NO, KC_G, KC_NO, KC_J, KC_K, KC_L, KC_SCLN, KC_NO, KC_NO,
+ KC_NO, KC_Z, KC_X, KC_NO, KC_NO, KC_NO, KC_NO, KC_M, KC_COMM, KC_DOT, KC_NO, KC_NO, KC_UP,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TG(_YL), KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ /*
+ [X] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [RGB] = LAYOUT(
+ ESC: 0, F1: 1, F2: 2, F3: 3, F4: 4, F5: 5, F6: 6, F7: 7, F8: 8, F9: 9, F10: 10, F11: 11, F12: 12, PSCR: 13, SLCK: 14, PAUS: 15,
+ GRV: 16, 1: 17, 2: 18, 3: 19, 4: 20, 5: 21, 6: 22, 7: 23, 8: 24, 9: 25, 0: 26, MINS: 27, EQL: 28, BSPC: 29, INS: 30, HOME: 31, PGUP: 32,
+ TAB: 33, Q: 34, W: 35, E: 36, R: 37, T: 38, Y: 39, U: 40, I: 41, O: 42, P: 43, LBRC: 44, RBRC: 45, BSLS: 46, DEL: 47, END: 48, PGDN: 49,
+ CAPS: 50, A: 51, S: 52, D: 53, F: 54, G: 55, H: 56, J: 57, K: 58, L: 59, SCLN: 60, QUOT: 61, ENT: 62,
+ LSFT: 63, Z: 64, X: 65, C: 66, V: 67, B: 68, N: 69, M: 70, COMM: 71, DOT: 72, SLSH: 73, RSFT: 74, UP: 75,
+ LCTL: 76, LGUI: 77, LALT: 78, SPC: 79, RALT: 80, Fn: 81, APP: 82, RCTL: 83, LEFT: 84, DOWN: 85, RGHT: 86
+ ),
+ [MATRIX] = LAYOUT(
+ 0, 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, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86
+ ),
+ */
+};
+
+#ifdef _______
+#undef _______
+#define _______ {0, 0, 0}
+
+const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = {
+ [_FL] = {
+ _______, CORAL, CORAL, _______, _______, CORAL, CORAL, _______, _______, CORAL, _______, YELLOW, YELLOW, TEAL, GOLD, GOLD,
+ _______, _______, PINK, PINK, PINK, PINK, _______, _______, _______, GREEN, GREEN, GREEN, GREEN, _______, TEAL, TEAL, TEAL,
+ ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, _______, AZURE, AZURE, _______, _______, _______, _______, _______, TEAL, TEAL, TEAL,
+ _______, ORANGE, ORANGE, ORANGE, ORANGE, ORANGE, _______, _______, _______, _______, _______, _______, _______,
+ _______, ORANGE, _______, CORAL, _______, AZURE, AZURE, _______, _______, _______, _______, AZURE, SPRING,
+ _______, _______, _______, _______, _______, PINK, _______, AZURE, _______, SPRING, _______
+ },
+ [_ML] = {
+ _______, GOLD, GOLD, GOLD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, MAGENT, MAGENT, MAGENT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, MAGENT, GOLD, MAGENT, GOLD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, GOLD, GOLD, GOLD, GOLD, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, CORAL, _______, _______, _______, _______, _______, _______, _______, _______, GOLD,
+ _______, PINK, _______, _______, _______, PINK, _______, _______, GOLD, GOLD, GOLD
+ },
+ [_GL] = {
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BLUE, AZURE, AZURE, _______, CYAN, _______, TURQ, PURPLE, _______, _______, _______, _______, _______,
+ _______, CORAL, GREEN, GREEN, TURQ, _______, _______, _______, _______, GREEN, _______, _______, _______,
+ _______, CYAN, CHART, TURQ, ORANGE, CHART, _______, CHART, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, PINK, _______, _______, _______, _______, _______
+ },
+ [_VL] = {
+ PURPLE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, TURQ, _______, _______, _______, _______, TURQ, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, AZURE, AZURE, AZURE, PURPLE, _______, BLUE, PURPLE, PURPLE, PURPLE, BLUE, _______, _______, _______, _______, _______, _______,
+ _______, PURPLE, _______, BLUE, _______, GOLD, GOLDEN, GOLDEN, GOLDEN, GOLDEN, _______, _______, _______,
+ _______, _______, BLUE, BLUE, _______, _______, TURQ, _______, _______, _______, TURQ, _______, _______,
+ _______, _______, _______, _______, _______, PINK, _______, _______, _______, _______, _______
+ },
+ [_YL] = {
+ RED, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ CHART, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, BLUE, _______, _______, _______, _______, PURPLE, PURPLE,
+ _______, RED, _______, BLUE, _______, GOLD, _______, _______, GREEN, _______, MAGENT, _______, GOLD, GOLD, _______, PURPLE, PURPLE,
+ _______, BLUE, _______, BLUE, _______, MAGENT, _______, GREEN, GREEN, GREEN, MAGENT, _______, _______,
+ _______, ORANGE, ORANGE, _______, _______, _______, _______, RED, MAGENT, MAGENT, _______, _______, GREEN,
+ _______, _______, _______, _______, _______, PINK, _______, _______, BLUE, GREEN, BLUE
+ },
+};
+
+#undef _______
+#define _______ KC_TRNS
+#endif
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+ // Enable or disable debugging
+ debug_enable=true;
+ debug_matrix=true;
+ debug_keyboard=true;
+ debug_mouse=true;
+
+ idle_second_counter = 0; // Counter for number of seconds keyboard has been idle.
+ key_event_counter = 0; // Counter to determine if keys are being held, neutral at 0.
+ rgb_time_out_seconds = RGB_DEFAULT_TIME_OUT; // RGB timeout initialized to its default configure in keymap.h
+ rgb_time_out_enable = false; // Disable RGB timeout by default. Enable using toggle key.
+ rgb_time_out_user_value = false; // Has to have the same initial value as rgb_time_out_enable.
+ rgb_enabled_flag = true; // Initially, keyboard RGB is enabled. Change to false config.h initializes RGB disabled.
+ rgb_time_out_fast_mode_enabled = false; // RGB timeout fast mode disabled initially.
+ rgb_time_out_saved_flag = rgb_matrix_get_flags(); // Save RGB matrix state for when keyboard comes back from ide.
+};
+
+void keyboard_post_init_user(void) {
+ rgb_matrix_enable();
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ if(rgb_time_out_enable && rgb_enabled_flag) {
+ // If the key event counter is not zero then some key was pressed down but not released, thus reset the timeout counter.
+ if (key_event_counter) {
+ idle_second_counter = 0;
+ } else if (timer_elapsed(idle_timer) > MILLISECONDS_IN_SECOND) {
+ idle_second_counter++;
+ idle_timer = timer_read();
+ }
+
+ if (idle_second_counter >= rgb_time_out_seconds) {
+ rgb_time_out_saved_flag = rgb_matrix_get_flags();
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_disable_noeeprom();
+ rgb_enabled_flag = false;
+ idle_second_counter = 0;
+ }
+ }
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ // Increment key event counter for every press and decrement for every release.
+ if (record->event.pressed) {
+ key_event_counter++;
+ } else {
+ key_event_counter--;
+ }
+
+ if (rgb_time_out_enable) {
+ idle_timer = timer_read();
+ // Reset the seconds counter. Without this, something like press> leave x seconds> press, would be x seconds on the effective counter not 0 as it should.
+ idle_second_counter = 0;
+ if (!rgb_enabled_flag) {
+ rgb_matrix_enable_noeeprom();
+ rgb_matrix_set_flags(rgb_time_out_saved_flag);
+ rgb_enabled_flag = true;
+ }
+ }
+
+ switch (keycode) {
+ 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 MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ }
+
+ if (record->event.pressed) {
+ // The Yakuake config uses LGUI+Ctrl+Shift+<keycode>. KC_NO used for undesired key, all mapped ones get mods.
+ if (get_highest_layer(layer_state) == _YL && keycode != TG(_YL)) {
+ tap_code16(C(G(S(keycode))));
+ return false;
+ }
+ switch (keycode) {
+ case DBG_TOG:
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ return false;
+ case DBG_MTRX:
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ return false;
+ case DBG_KBD:
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ return false;
+ case DBG_MOU:
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ return false;
+ case RGB_TOG:
+ rgb_time_out_enable = rgb_time_out_user_value;
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: {
+ rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case LED_FLAG_UNDERGLOW: {
+ // This line is for LED idle timer. It disables the toggle so you can turn off LED completely if you like
+ rgb_time_out_enable = false;
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_disable_noeeprom();
+ }
+ break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_enable_noeeprom();
+ }
+ break;
+ }
+ return false;
+ // ======================================================== CUSTOM KEYCOADS BELOW ========================================================
+ case COPY_ALL:
+ // Selects all and text and copy
+ SEND_STRING(SS_LCTRL("ac"));
+ return false;
+ case SEL_CPY:
+ // Select word under cursor and copy. Double mouse click then ctrl+c
+ tap_code16(KC_BTN1);
+ tap_code16(KC_BTN1);
+ tap_code16(C(KC_C));
+ return false;
+ case ROUT_TG:
+ // Toggle idle LED timeout on or off
+ rgb_time_out_enable = !rgb_time_out_enable;
+ rgb_time_out_user_value = rgb_time_out_enable;
+ return false;
+ case ROUT_VI:
+ // Increase idle LED timeout value in seconds
+ // Only increase if current value is lower than RGB_TIME_OUT_MAX. Don't care what value the result will be
+ // Modity RGB_TIME_OUT_STEP for bigger or smaller increments
+ if (!rgb_time_out_fast_mode_enabled && rgb_time_out_seconds <= RGB_TIME_OUT_MAX) {
+ rgb_time_out_seconds += RGB_TIME_OUT_STEP;
+ }
+ return false;
+ case ROUT_VD:
+ // Decrease idle LED timeout value in seconds
+ // Only decrease if current value is higher than minimum value and the result is larger than zero
+ // Modity RGB_TIME_OUT_STEP for bigger or smaller decrements
+ if (!rgb_time_out_fast_mode_enabled && rgb_time_out_seconds > RGB_TIME_OUT_MIN) {
+ rgb_time_out_seconds -= RGB_TIME_OUT_STEP;
+ }
+ return false;
+ case ROUT_FM:
+ if (rgb_time_out_fast_mode_enabled) {
+ rgb_time_out_seconds = rgb_time_out_saved_seconds;
+ } else {
+ rgb_time_out_saved_seconds = rgb_time_out_seconds;
+ rgb_time_out_seconds = RGB_FAST_MODE_TIME_OUT;
+ }
+ rgb_time_out_fast_mode_enabled = !rgb_time_out_fast_mode_enabled;
+ return false;
+ case G_INIT ... G_LOG:
+ send_string_with_delay(sendstring_commands[keycode - G_INIT], 5);
+ return false;
+ }
+ }
+ return true;
+}
+
+void set_layer_color(int layer) {
+ if (layer == 0) { return; }
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ HSV hsv = {
+ .h = pgm_read_byte(&ledmap[layer][i][0]),
+ .s = pgm_read_byte(&ledmap[layer][i][1]),
+ .v = pgm_read_byte(&ledmap[layer][i][2]),
+ };
+ if (hsv.h || hsv.s || hsv.v) {
+ RGB rgb = hsv_to_rgb(hsv);
+ float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
+ rgb_matrix_set_color(i, f * rgb.r, f * rgb.g, f * rgb.b);
+ } else if (layer != 1) {
+ // Only deactivate non-defined key LEDs at layers other than FN. Because at FN we have RGB adjustments and need to see them live.
+ // If the values are all false then it's a transparent key and deactivate LED at this layer
+ rgb_matrix_set_color(i, 0, 0, 0);
+ }
+ }
+}
+
+void rgb_matrix_indicators_user(void) {
+ if (g_suspend_state || disable_layer_color ||
+ rgb_matrix_get_flags() == LED_FLAG_NONE ||
+ rgb_matrix_get_flags() == LED_FLAG_UNDERGLOW) {
+ return;
+ }
+ set_layer_color(get_highest_layer(layer_state));
+}
+
+/* This is a test function for Raw HID, which is currently not implemented for this keyboard */
+/**
+void raw_hid_receive(uint8_t *data, uint8_t length) {
+ uint8_t response[RAW_EPSIZE];
+ memset(response+1, 'C', 1);
+ memset(response+2, 'T', 1);
+ memset(response+3, 'R', 1);
+ memset(response+4, 'L', 1);
+ raw_hid_send(data, length);
+}
+*/
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/keymap.h b/keyboards/massdrop/ctrl/keymaps/endgame/keymap.h
new file mode 100644
index 0000000000..1a204311d4
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/keymap.h
@@ -0,0 +1,100 @@
+#include QMK_KEYBOARD_H
+
+#include <print.h>
+#include <string.h>
+// HID has not yet been implemented for this keyboard
+// #include "raw_hid.h"
+
+#define MILLISECONDS_IN_SECOND 1000
+
+// These are just to make it neater to use builtin HSV values in the keymap
+#define RED {HSV_RED}
+#define CORAL {HSV_CORAL}
+#define ORANGE {HSV_ORANGE}
+#define GOLDEN {HSV_GOLDENROD}
+#define GOLD {HSV_GOLD}
+#define YELLOW {HSV_YELLOW}
+#define CHART {HSV_CHARTREUSE}
+#define GREEN {HSV_GREEN}
+#define SPRING {HSV_SPRINGGREEN}
+#define TURQ {HSV_TURQUOISE}
+#define TEAL {HSV_TEAL}
+#define CYAN {HSV_CYAN}
+#define AZURE {HSV_AZURE}
+#define BLUE {HSV_BLUE}
+#define PURPLE {HSV_PURPLE}
+#define MAGENT {HSV_MAGENTA}
+#define PINK {HSV_PINK}
+
+//========================================================== CONFIGURABLE DEFAULTS ==========================================================
+#define RGB_DEFAULT_TIME_OUT 30
+#define RGB_FAST_MODE_TIME_OUT 3
+#define RGB_TIME_OUT_MAX 600
+#define RGB_TIME_OUT_MIN 10
+#define RGB_TIME_OUT_STEP 10
+
+extern bool g_suspend_state;
+extern rgb_config_t rgb_matrix_config;
+bool disable_layer_color;
+
+bool rgb_enabled_flag; // Current LED state flag. If false then LED is off.
+bool rgb_time_out_enable; // Idle LED toggle enable. If false then LED will not turn off after idle timeout.
+bool rgb_time_out_fast_mode_enabled; // Enable flag for RGB timeout fast mode
+bool rgb_time_out_user_value; // This holds the toggle value set by user with ROUT_TG. It's necessary as RGB_TOG changes timeout enable.
+uint16_t rgb_time_out_seconds; // Idle LED timeout value, in seconds not milliseconds
+uint16_t rgb_time_out_saved_seconds; // The saved user config for RGB timeout period
+led_flags_t rgb_time_out_saved_flag; // Store LED flag before timeout so it can be restored when LED is turned on again.
+
+enum layout_names {
+ _KL=0, // Keys Layout: The main keyboard layout that has all the characters
+ _FL, // Function Layout: The function key activated layout with default functions and some added ones
+ _ML, // Mouse Layout: Mouse Keys and mouse movement
+ _GL, // GIT Layout: GIT shortcuts and macros
+ _VL, // VIM Layout: VIM shorcuts and macros
+ _YL, // Yakuake Layout: Yakuake drop-down terminal shortcuts and macros
+ _EL, // KDE Layout: Shortcuts for KDE desktop using default KDE shortcuts settings
+};
+
+enum tapdance_keycodes {
+ TD_LGUI_ML = 0, // Tap dance key to switch to mouse layer _ML
+ TD_APP_YL,
+ TD_CTRL_TERM, // Tap dance key to open terminal on LCTRL double press
+};
+
+enum ctrl_keycodes {
+ U_T_AUTO = SAFE_RANGE, // 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
+ SEL_CPY, // Select Copy. Select the word cursor is pointed at and copy, using double mouse click and ctrl+c
+ ROUT_TG, // Timeout Toggle. Toggle idle LED time out on or off
+ ROUT_VI, // Timeout Value Increase. Increase idle time out before LED disabled
+ ROUT_VD, // Timeout Value Decrease. Decrease idle time out before LED disabled
+ ROUT_FM, // RGB timeout fast mode toggle
+ COPY_ALL, // Copy all text using ctrl(a+c)
+ TERMINAL, // CTRL+ALT+T
+};
+
+enum string_macro_keycodes {
+ // The start of this enum should always be equal to end of ctrl_keycodes + 1
+ G_INIT = TERMINAL + 1, // git init
+ G_CLONE, // git clone
+ G_CONF, // git config --global
+ G_ADD, // git add
+ G_DIFF, // git diff
+ G_RESET, // git reset
+ G_REBAS, // git rebase
+ G_BRANH, // git branch
+ G_CHECK, // git checkout
+ G_MERGE, // git merge
+ G_REMTE, // git remote add
+ G_FETCH, // git fetch
+ G_PULL, // git pull
+ G_PUSH, // git push
+ G_COMM, // git commit
+ G_STAT, // git status
+ G_LOG, // git log
+};
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/rules.mk b/keyboards/massdrop/ctrl/keymaps/endgame/rules.mk
new file mode 100644
index 0000000000..09bf488dab
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/rules.mk
@@ -0,0 +1,16 @@
+# RGBLIGHT_ENABLE = no # Not for MD boards. This is here in case you forget.
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# BOOTMAGIC_ENABLE = full # Virtual DIP switch configuration
+# BOOTMAGIC_ENABLE = lite
+# AUTO_SHIFT_ENABLE = yes # Auto Shift
+NKRO_ENABLE = yes # USB Nkey Rollover
+DYNAMIC_MACRO_ENABLE = yes # Dynamic macro recording and play
+MOUSEKEY_ENABLE = yes # Enable mouse control keycodes. Increases firmware size.
+TAP_DANCE_ENABLE = yes # Enable tap dance keys
+CONSOLE_ENABLE = yes # Enable debugging console. Increases firmware size.
+SRC += config_led.c # Used to add files to the compilation/linking list.
+TERMINAL_ENABLE = yes
+EXTRAKEY_ENABLE = yes # Audio control and System control
+# RAW_ENABLE = yes # Raw HID has not yet been implemented for this keyboard
+# COMBO_ENABLE # Key combo feature
+# LEADER_ENABLE # Enable leader key chording
diff --git a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
index e5b194a343..0112824458 100644
--- a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
@@ -10,8 +10,6 @@ enum ctrl_keycodes {
MD_BOOT, //Restart into bootloader after hold timeout
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -28,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \
- _______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_TOG, _______, _______, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*
@@ -37,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
*/
diff --git a/keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c b/keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c
index 6dfc213786..ec2b3410ee 100644
--- a/keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c
@@ -21,8 +21,6 @@ enum ctrl_keycodes {
MD_BOOT //Restart into bootloader after hold timeout //Working
};
-#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
-
keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -39,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, 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, _______, _______, _______, _______, _______, _______, \
+ _______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*
@@ -48,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
*/
diff --git a/keyboards/matrix/m12og/config.h b/keyboards/matrix/m12og/config.h
new file mode 100644
index 0000000000..a29e54f4df
--- /dev/null
+++ b/keyboards/matrix/m12og/config.h
@@ -0,0 +1,38 @@
+/**
+ * config.h
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4D58 // MX
+#define PRODUCT_ID 0x8712 // matrix 1.2 og
+#define DEVICE_VER 0x0001
+#define MANUFACTURER matrix
+#define PRODUCT M12OG
+#define DESCRIPTION Matrix 8XV1.2 OG version
+
+/* key matrix size */
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 14
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { E6, F0, B7, C7, D3, B0, D1 }
+#define MATRIX_COL_PINS { F1, F4, F5, F6, F7, B6, B5, B4, D7, D0, D2, D6, D4, D5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B3
+#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
+#define RGBLIGHT_SLEEP
+#endif
diff --git a/keyboards/matrix/m12og/info.json b/keyboards/matrix/m12og/info.json
new file mode 100644
index 0000000000..b2bdbf2fc9
--- /dev/null
+++ b/keyboards/matrix/m12og/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Matrix/8XV1.2OG ISO/ANSI",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "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":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "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":2.25}, {"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":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, {"label":"Win", "x":1.5, "y":5.5}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"label":"Alt", "x":11, "y":5.5, "w":1.5}, {"label":"Menu", "x":12.5, "y":5.5}, {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"\u00ac", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"\"", "x":2, "y":1.5}, {"label":"\u00a3", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "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":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "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":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "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":"~", "x":12.75, "y":3.5}, {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"label":"|", "x":1.25, "y":4.5}, {"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":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, {"label":"Win", "x":1.5, "y":5.5}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"label":"AltGr", "x":11, "y":5.5, "w":1.5}, {"label":"Menu", "x":12.5, "y":5.5}, {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/matrix/m12og/keymaps/default/keymap.c b/keyboards/matrix/m12og/keymaps/default/keymap.c
new file mode 100644
index 0000000000..1444e4bff4
--- /dev/null
+++ b/keyboards/matrix/m12og/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+/**
+ * keymap.c
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0]=LAYOUT_tkl_ansi(
+ 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, LT(1,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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1]=LAYOUT_tkl_ansi(
+ KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NLCK, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, KC_MPLY, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
+};
diff --git a/keyboards/matrix/m12og/keymaps/iso/keymap.c b/keyboards/matrix/m12og/keymaps/iso/keymap.c
new file mode 100644
index 0000000000..70d0d7bc13
--- /dev/null
+++ b/keyboards/matrix/m12og/keymaps/iso/keymap.c
@@ -0,0 +1,24 @@
+/**
+ * keymap.c
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0]=LAYOUT_tkl_iso(
+ 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, LT(1,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_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_BSLS, KC_ENT,
+ KC_LSFT, KC_LGUI, 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1]=LAYOUT_tkl_iso(
+ KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NLCK, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, KC_MPLY, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
+};
diff --git a/keyboards/matrix/m12og/m12og.c b/keyboards/matrix/m12og/m12og.c
new file mode 100644
index 0000000000..8f3c5056fc
--- /dev/null
+++ b/keyboards/matrix/m12og/m12og.c
@@ -0,0 +1,21 @@
+/**
+ * m12og.c
+ */
+
+#include "m12og.h"
+
+void matrix_init_user(void) {
+ setPinOutput(C6);
+ setPinOutput(B2);
+ setPinOutput(B1);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ writePin(B1, !led_state.num_lock);
+ writePin(C6, !led_state.caps_lock);
+ writePin(B2, !led_state.scroll_lock);
+ }
+ return res;
+}
diff --git a/keyboards/matrix/m12og/m12og.h b/keyboards/matrix/m12og/m12og.h
new file mode 100644
index 0000000000..f632016f12
--- /dev/null
+++ b/keyboards/matrix/m12og/m12og.h
@@ -0,0 +1,42 @@
+/**
+ * m12og.h
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_tkl_iso( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K500, K501, K502, \
+ \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K503, K504, K505, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K506, K507, K508, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K610, \
+ K600, K601, K602, K603, K604, K605, K606, K607, K608, K609 \
+) { \
+ { 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, KC_NO }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
+ { K500, K501, K502, K503, K504, K505, K506, K507, K508, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610, KC_NO, KC_NO, KC_NO } \
+}
+
+#define LAYOUT_tkl_ansi( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K500, K501, K502,\
+ \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K503, K504, K505,\
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K506, K507, K508,\
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K610,\
+ K600, K601, K602, K603, K604, K605, K606, K607, K608, K609\
+) { \
+ { 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, KC_NO }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313 }, \
+ { K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO }, \
+ { K500, K501, K502, K503, K504, K505, K506, K507, K508, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610, KC_NO, KC_NO, KC_NO } \
+}
diff --git a/keyboards/matrix/m12og/readme.md b/keyboards/matrix/m12og/readme.md
new file mode 100644
index 0000000000..24fcbb5d8d
--- /dev/null
+++ b/keyboards/matrix/m12og/readme.md
@@ -0,0 +1,16 @@
+# Matrix 8XV1.2 OG keyboard
+
+![Matrix 8XV1.2 OG](https://raw.githubusercontent.com/yulei/qmk_webusb_tool/master/public/m12og.jpg)
+
+This was the Matrix 8XV1.2 OG keyboard made by the Matrix team. Note: this firmware only support ISO/ANSI version,
+and DO NOT support the 8XV1.2 OG ANSI only version.
+
+* Keyboard Maintainer: [astro](https://github.com/yulei)
+* Hardware Supported: Matrix 8XV1.2 OG (ISO/ANSI) keyboard
+* Hardware Availability: Matrix Lab
+
+Make example for this keyboard (after setting up your build environment):
+
+ make matrix/m12og: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/matrix/m12og/rules.mk b/keyboards/matrix/m12og/rules.mk
new file mode 100644
index 0000000000..74432d49c1
--- /dev/null
+++ b/keyboards/matrix/m12og/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # 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 = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/matrix/noah/boards/noah_bd/board.c b/keyboards/matrix/noah/boards/noah_bd/board.c
new file mode 100644
index 0000000000..7fd6a60b5f
--- /dev/null
+++ b/keyboards/matrix/noah/boards/noah_bd/board.c
@@ -0,0 +1,131 @@
+/*
+ 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.
+ */
+
+#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/matrix/noah/boards/noah_bd/board.h b/keyboards/matrix/noah/boards/noah_bd/board.h
new file mode 100644
index 0000000000..37d1d13623
--- /dev/null
+++ b/keyboards/matrix/noah/boards/noah_bd/board.h
@@ -0,0 +1,1336 @@
+/*
+ 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 Matrix M65 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_MATRIX_NOAH
+#define BOARD_NAME "Matrix noah65 keyboard"
+#define BOARD_OTG_NOVBUSSENS
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 8000000U
+#endif
+
+//#define STM32_HSE_BYPASS
+
+/*
+ * Board voltages.
+ * Required for performance limits calculation.
+ */
+#define STM32_VDD 300U
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F411xE
+
+/*
+ * 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_SCK 5U
+#define GPIOA_MISO 6U
+#define GPIOA_MOSI 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_OTG_FS_DM 11U
+#define GPIOA_OTG_FS_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_SWO 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_PIN0 0U
+#define GPIOF_PIN1 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_OSC_IN 0U
+#define GPIOH_OSC_OUT 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
+
+#define GPIOI_PIN0 0U
+#define GPIOI_PIN1 1U
+#define GPIOI_PIN2 2U
+#define GPIOI_PIN3 3U
+#define GPIOI_PIN4 4U
+#define GPIOI_PIN5 5U
+#define GPIOI_PIN6 6U
+#define GPIOI_PIN7 7U
+#define GPIOI_PIN8 8U
+#define GPIOI_PIN9 9U
+#define GPIOI_PIN10 10U
+#define GPIOI_PIN11 11U
+#define GPIOI_PIN12 12U
+#define GPIOI_PIN13 13U
+#define GPIOI_PIN14 14U
+#define GPIOI_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_ROW_1 PAL_LINE(GPIOB, 0U)
+#define LINE_ROW_2 PAL_LINE(GPIOA, 1U)
+#define LINE_ROW_3 PAL_LINE(GPIOC, 14U)
+#define LINE_ROW_4 PAL_LINE(GPIOC, 13U)
+#define LINE_ROW_5 PAL_LINE(GPIOA, 0U)
+
+#define LINE_COL_1 PAL_LINE(GPIOC, 15U)
+#define LINE_COL_2 PAL_LINE(GPIOB, 10U)
+#define LINE_COL_3 PAL_LINE(GPIOB, 7U)
+#define LINE_COL_4 PAL_LINE(GPIOB, 6U)
+#define LINE_COL_5 PAL_LINE(GPIOB, 5U)
+#define LINE_COL_6 PAL_LINE(GPIOB, 4U)
+#define LINE_COL_7 PAL_LINE(GPIOA, 15U)
+#define LINE_COL_8 PAL_LINE(GPIOA, 10U)
+#define LINE_COL_9 PAL_LINE(GPIOA, 9U)
+#define LINE_COL_10 PAL_LINE(GPIOA, 8U)
+#define LINE_COL_11 PAL_LINE(GPIOB, 15U)
+#define LINE_COL_12 PAL_LINE(GPIOB, 14U)
+#define LINE_COL_13 PAL_LINE(GPIOB, 13U)
+#define LINE_COL_14 PAL_LINE(GPIOB, 12U)
+#define LINE_COL_15 PAL_LINE(GPIOB, 2U)
+
+// u2u lines
+#define LINE_U2U_RST PAL_LINE(GPIOA, 2U)
+#define LINE_U2U_IRQ PAL_LINE(GPIOA, 3U)
+#define LINE_U2U_CS PAL_LINE(GPIOA, 4U)
+#define LINE_U2U_SCK PAL_LINE(GPIOA, 5U)
+#define LINE_U2U_MISO PAL_LINE(GPIOA, 6U)
+#define LINE_U2U_MOSI PAL_LINE(GPIOA, 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 - (input pullup).
+ * PA1 - (input pullup).
+ * PA2 - (input pullup).
+ * PA3 - (input pullup).
+ * PA4 - (input pullup).
+ * PA5 - SPI SCK (alternate 5).
+ * PA6 - SPI MISO (alternate 5).
+ * PA7 - SPI MOSI (alternate 5).
+ * PA8 - (input pullup).
+ * PA9 - (input pullup).
+ * PA10 - (input pullup).
+ * PA11 - OTG_FS_DM (alternate 10).
+ * PA12 - OTG_FS_DP (alternate 10).
+ * PA13 - SWDIO (alternate 0).
+ * PA14 - SWCLK (alternate 0).
+ * PA15 - (input pullup).
+ */
+#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_ALTERNATE(GPIOA_SCK) | \
+ PIN_MODE_ALTERNATE(GPIOA_MISO) | \
+ PIN_MODE_ALTERNATE(GPIOA_MOSI) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DM) | \
+ PIN_MODE_ALTERNATE(GPIOA_OTG_FS_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_SCK) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_MISO) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_MOSI) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_DM) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_OTG_FS_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_HIGH(GPIOA_SCK) | \
+ PIN_OSPEED_HIGH(GPIOA_MISO) | \
+ PIN_OSPEED_HIGH(GPIOA_MOSI) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOA_OTG_FS_DM) | \
+ PIN_OSPEED_HIGH(GPIOA_OTG_FS_DP) | \
+ PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
+ PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_PULLUP(GPIOA_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_SCK) | \
+ PIN_PUPDR_PULLUP(GPIOA_MISO) | \
+ PIN_PUPDR_PULLUP(GPIOA_MOSI) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DM) | \
+ PIN_PUPDR_FLOATING(GPIOA_OTG_FS_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_SCK) | \
+ PIN_ODR_HIGH(GPIOA_MISO) | \
+ PIN_ODR_HIGH(GPIOA_MOSI) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_OTG_FS_DM) | \
+ PIN_ODR_HIGH(GPIOA_OTG_FS_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, 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_SCK, 5U) | \
+ PIN_AFIO_AF(GPIOA_MISO, 5U) | \
+ PIN_AFIO_AF(GPIOA_MOSI, 5U))
+#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_OTG_FS_DM, 10U) | \
+ PIN_AFIO_AF(GPIOA_OTG_FS_DP, 10U) | \
+ PIN_AFIO_AF(GPIOA_SWDIO, 0U) | \
+ PIN_AFIO_AF(GPIOA_SWCLK, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0U))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - (input pullup).
+ * PB1 - (input pullup).
+ * PB2 - (input pullup).
+ * PB3 - SWO (alternate 0).
+ * PB4 - (input pullup).
+ * PB5 - (input pullup).
+ * PB6 - (input pullup).
+ * PB7 - (input pullup).
+ * PB8 - (input pullup).
+ * PB9 - (input pullup).
+ * PB10 - (input pullup).
+ * PB11 - (input pullup).
+ * PB12 - (input pullup).
+ * PB13 - (input pullup).
+ * PB14 - (input pullup).
+ * PB15 - (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_SWO) | \
+ 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_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_SWO) | \
+ 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_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_SWO) | \
+ PIN_OSPEED_VERYLOW(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_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_PULLUP(GPIOB_SWO) | \
+ 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_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_SWO) | \
+ 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_PIN13) | \
+ PIN_ODR_HIGH(GPIOB_PIN14) | \
+ PIN_ODR_HIGH(GPIOB_PIN15))
+#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_SWO, 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_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN15, 0U))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - (input pullup).
+ * PC1 - (input pullup).
+ * PC2 - (input pullup).
+ * PC3 - (input pullup).
+ * PC4 - (input pullup).
+ * PC5 - (input pullup).
+ * PC6 - (input pullup).
+ * PC7 - (input pullup).
+ * PC8 - (input pullup).
+ * PC9 - (input pullup).
+ * PC10 - (input pullup).
+ * PC11 - (input pullup).
+ * PC12 - (input pullup).
+ * PC13 - (input floating).
+ * PC14 - (input floating).
+ * PC15 - (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_VERYLOW(GPIOC_PIN14) | \
+ PIN_OSPEED_VERYLOW(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_PULLUP(GPIOC_PIN14) | \
+ PIN_PUPDR_PULLUP(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, 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_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN7, 0U))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN9, 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_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN15, 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_HIGH(GPIOD_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN14) | \
+ PIN_OSPEED_HIGH(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_HIGH(GPIOE_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN6) | \
+ PIN_OSPEED_HIGH(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_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 - PIN0 (input pullup).
+ * PF1 - PIN1 (input pullup).
+ * 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_PIN0) | \
+ PIN_MODE_INPUT(GPIOF_PIN1) | \
+ 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_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN1) | \
+ 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_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_PULLUP(GPIOF_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN1) | \
+ 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_PIN0) | \
+ PIN_ODR_HIGH(GPIOF_PIN1) | \
+ 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_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN1, 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))
+
+/*
+ * 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_HIGH(GPIOG_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOG_PIN14) | \
+ PIN_OSPEED_HIGH(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, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN7, 0U))
+#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOG_PIN15, 0U))
+
+/*
+ * GPIOH setup:
+ *
+ * PH0 - OSC_IN (input floating).
+ * PH1 - OSC_OUT (input floating).
+ * 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_OSC_IN) | \
+ PIN_MODE_INPUT(GPIOH_OSC_OUT) | \
+ 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_OSC_IN) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_OSC_OUT) | \
+ 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_HIGH(GPIOH_OSC_IN) | \
+ PIN_OSPEED_HIGH(GPIOH_OSC_OUT) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOH_PIN15))
+#define VAL_GPIOH_PUPDR (PIN_PUPDR_FLOATING(GPIOH_OSC_IN) | \
+ PIN_PUPDR_FLOATING(GPIOH_OSC_OUT) | \
+ 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_OSC_IN) | \
+ PIN_ODR_HIGH(GPIOH_OSC_OUT) | \
+ 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_OSC_IN, 0U) | \
+ PIN_AFIO_AF(GPIOH_OSC_OUT, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN7, 0U))
+#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOH_PIN15, 0U))
+
+/*
+ * GPIOI setup:
+ *
+ * PI0 - PIN0 (input pullup).
+ * PI1 - PIN1 (input pullup).
+ * PI2 - PIN2 (input pullup).
+ * PI3 - PIN3 (input pullup).
+ * PI4 - PIN4 (input pullup).
+ * PI5 - PIN5 (input pullup).
+ * PI6 - PIN6 (input pullup).
+ * PI7 - PIN7 (input pullup).
+ * PI8 - PIN8 (input pullup).
+ * PI9 - PIN9 (input pullup).
+ * PI10 - PIN10 (input pullup).
+ * PI11 - PIN11 (input pullup).
+ * PI12 - PIN12 (input pullup).
+ * PI13 - PIN13 (input pullup).
+ * PI14 - PIN14 (input pullup).
+ * PI15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOI_MODER (PIN_MODE_INPUT(GPIOI_PIN0) | \
+ PIN_MODE_INPUT(GPIOI_PIN1) | \
+ PIN_MODE_INPUT(GPIOI_PIN2) | \
+ PIN_MODE_INPUT(GPIOI_PIN3) | \
+ PIN_MODE_INPUT(GPIOI_PIN4) | \
+ PIN_MODE_INPUT(GPIOI_PIN5) | \
+ PIN_MODE_INPUT(GPIOI_PIN6) | \
+ PIN_MODE_INPUT(GPIOI_PIN7) | \
+ PIN_MODE_INPUT(GPIOI_PIN8) | \
+ PIN_MODE_INPUT(GPIOI_PIN9) | \
+ PIN_MODE_INPUT(GPIOI_PIN10) | \
+ PIN_MODE_INPUT(GPIOI_PIN11) | \
+ PIN_MODE_INPUT(GPIOI_PIN12) | \
+ PIN_MODE_INPUT(GPIOI_PIN13) | \
+ PIN_MODE_INPUT(GPIOI_PIN14) | \
+ PIN_MODE_INPUT(GPIOI_PIN15))
+#define VAL_GPIOI_OTYPER (PIN_OTYPE_PUSHPULL(GPIOI_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOI_PIN15))
+#define VAL_GPIOI_OSPEEDR (PIN_OSPEED_HIGH(GPIOI_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOI_PIN15))
+#define VAL_GPIOI_PUPDR (PIN_PUPDR_PULLUP(GPIOI_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOI_PIN15))
+#define VAL_GPIOI_ODR (PIN_ODR_HIGH(GPIOI_PIN0) | \
+ PIN_ODR_HIGH(GPIOI_PIN1) | \
+ PIN_ODR_HIGH(GPIOI_PIN2) | \
+ PIN_ODR_HIGH(GPIOI_PIN3) | \
+ PIN_ODR_HIGH(GPIOI_PIN4) | \
+ PIN_ODR_HIGH(GPIOI_PIN5) | \
+ PIN_ODR_HIGH(GPIOI_PIN6) | \
+ PIN_ODR_HIGH(GPIOI_PIN7) | \
+ PIN_ODR_HIGH(GPIOI_PIN8) | \
+ PIN_ODR_HIGH(GPIOI_PIN9) | \
+ PIN_ODR_HIGH(GPIOI_PIN10) | \
+ PIN_ODR_HIGH(GPIOI_PIN11) | \
+ PIN_ODR_HIGH(GPIOI_PIN12) | \
+ PIN_ODR_HIGH(GPIOI_PIN13) | \
+ PIN_ODR_HIGH(GPIOI_PIN14) | \
+ PIN_ODR_HIGH(GPIOI_PIN15))
+#define VAL_GPIOI_AFRL (PIN_AFIO_AF(GPIOI_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN7, 0U))
+#define VAL_GPIOI_AFRH (PIN_AFIO_AF(GPIOI_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOI_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOI_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/matrix/noah/boards/noah_bd/board.mk b/keyboards/matrix/noah/boards/noah_bd/board.mk
new file mode 100644
index 0000000000..e4cd10acfc
--- /dev/null
+++ b/keyboards/matrix/noah/boards/noah_bd/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/noah_bd/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/noah_bd
diff --git a/keyboards/matrix/noah/bootloader_defs.h b/keyboards/matrix/noah/bootloader_defs.h
new file mode 100644
index 0000000000..20b8f73e6f
--- /dev/null
+++ b/keyboards/matrix/noah/bootloader_defs.h
@@ -0,0 +1,7 @@
+/* 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 0x1FFF0000
diff --git a/keyboards/matrix/noah/chconf.h b/keyboards/matrix/noah/chconf.h
new file mode 100644
index 0000000000..228a0827d8
--- /dev/null
+++ b/keyboards/matrix/noah/chconf.h
@@ -0,0 +1,527 @@
+/*
+ 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.
+*/
+
+/**
+ * @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 TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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 TRUE
+
+/**
+ * @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 TRUE
+
+/**
+ * @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 TRUE
+
+/**
+ * @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 TRUE
+
+/**
+ * @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 TRUE
+
+/**
+ * @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 TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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.*/ \
+}
+
+#define ARM_WFI_IMPL __WFI
+
+/**
+ * @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/matrix/noah/config.h b/keyboards/matrix/noah/config.h
new file mode 100644
index 0000000000..a5a77067a6
--- /dev/null
+++ b/keyboards/matrix/noah/config.h
@@ -0,0 +1,54 @@
+/**
+ * config.h
+ *
+ */
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4D58 // MX
+#define PRODUCT_ID 0x0065 // noah 65
+#define DEVICE_VER 0x0001
+#define MANUFACTURER matrix
+#define PRODUCT NOAH
+#define DESCRIPTION 65% keybaord of the Matrix abel family
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define DIODE_DIRECTION COL2ROW
+#define DEBOUNCING_DELAY 5
+
+// i2c setting
+#define USE_I2CV1
+#define I2C1_SCL 8
+#define I2C1_SDA 9
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
+#define PAL_MODE_STM32_ALTERNATE_OPENDRAIN (PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN)
+
+// rgb matrix setting
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110110
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 36
+#define DRIVER_2_LED_TOTAL 36
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+/* indicator rgb */
+#define WS2812_LED_N 7
+#define RGBLED_NUM WS2812_LED_N
+#define WS2812_TIM_N 3
+#define WS2812_TIM_CH 3
+#define PORT_WS2812 GPIOB
+#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 5 // DMA channel for TIMx_UP
+#define RGBLIGHT_ANIMATIONS
+//#define WS2812_EXTERNAL_PULLUP
+
+// tapping setting
+#define TAPPING_TERM 200
+#define RETRO_TAPPING
+#define PERMISSIVE_HOLD
diff --git a/keyboards/matrix/noah/halconf.h b/keyboards/matrix/noah/halconf.h
new file mode 100644
index 0000000000..8c42571983
--- /dev/null
+++ b/keyboards/matrix/noah/halconf.h
@@ -0,0 +1,388 @@
+/*
+ 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.
+*/
+
+/**
+ * @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 TRUE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C TRUE
+#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 TRUE
+#endif
+
+/**
+ * @brief Enables the QSPI subsystem.
+ */
+#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
+#define HAL_USE_QSPI 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 TRUE
+#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 16 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 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 256
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#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 FALSE
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#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/matrix/noah/info.json b/keyboards/matrix/noah/info.json
new file mode 100644
index 0000000000..f35bbd5808
--- /dev/null
+++ b/keyboards/matrix/noah/info.json
@@ -0,0 +1,1431 @@
+{
+ "keyboard_name": "NOAH",
+ "url": "",
+ "maintainer": "astro",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_default": {
+ "key_count": 68,
+ "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": "|",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "~",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "Label": "Ins",
+ "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": "Backspace",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Page up",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "Ctrl",
+ "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": "&uarr;",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "End",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "Caps Lock",
+ "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": "Fn",
+ "x": 11.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "&larr;",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "&darr;",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "&rarr;",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ },
+ "LAYOUT_default_splitspace": {
+ "key_count": 70,
+ "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": "|",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "~",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "Label": "Ins",
+ "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": "Backspace",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Page up",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "Ctrl",
+ "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": "&uarr;",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "End",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "Caps Lock",
+ "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
+ },
+ {
+ "label": "Fn",
+ "x": 6,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "x": 7.25,
+ "y": 4,
+ "w": 2.75
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Fn",
+ "x": 11.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "&larr;",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "&darr;",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "&rarr;",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ },
+ "LAYOUT_wkl": {
+ "key_count": 67,
+ "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": "|",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "~",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "Label": "Ins",
+ "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": "Backspace",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Page up",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "Ctrl",
+ "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": "&uarr;",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "End",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 1.5,
+ "y": 4
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "x": 4,
+ "y": 4,
+ "w": 7
+ },
+ {
+ "label": "Fn",
+ "x": 11,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "&larr;",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "&darr;",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "&rarr;",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ },
+ "LAYOUT_iso": {
+ "key_count": 67,
+ "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": "Ins",
+ "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": "Win",
+ "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": "&rarr;",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "End",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 1.5,
+ "y": 4
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "x": 4,
+ "y": 4,
+ "w": 7
+ },
+ {
+ "label": "Fn",
+ "x": 11,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "&larr;",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "&darr;",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "&rarr;",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/matrix/noah/keymaps/default/keymap.c b/keyboards/matrix/noah/keymaps/default/keymap.c
new file mode 100644
index 0000000000..44ac206ee4
--- /dev/null
+++ b/keyboards/matrix/noah/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+/**
+ * keymap.c
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_BSLS, KC_GRV, KC_PSCR,
+ 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_LCTRL, 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_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT_default(
+ KC_BSLS, 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, RGB_TOG, RGB_MOD, _______, KC_F13, KC_F14, KC_F24, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,_______, _______, _______, _______),
+};
diff --git a/keyboards/matrix/noah/keymaps/iso/keymap.c b/keyboards/matrix/noah/keymaps/iso/keymap.c
new file mode 100644
index 0000000000..990c4dd7a9
--- /dev/null
+++ b/keyboards/matrix/noah/keymaps/iso/keymap.c
@@ -0,0 +1,20 @@
+/**
+ * keymap.c
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = 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_PSCR,
+ 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_LCTRL, 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_PGDN,
+ KC_LSFT, KC_LGUI, 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_CAPS, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN,KC_RIGHT),
+ [1] = LAYOUT_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, _______, _______,
+ RESET, RGB_TOG, RGB_MOD, _______, KC_F13, KC_F14, KC_F24, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/matrix/noah/keymaps/splitspace/keymap.c b/keyboards/matrix/noah/keymaps/splitspace/keymap.c
new file mode 100644
index 0000000000..e18de67d41
--- /dev/null
+++ b/keyboards/matrix/noah/keymaps/splitspace/keymap.c
@@ -0,0 +1,20 @@
+/**
+ * keymap.c
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_default_splitspace(
+ 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_PSCR,
+ 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_LCTRL, 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_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT_default_splitspace(
+ KC_BSLS, 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, RGB_TOG, RGB_MOD, _______, KC_F13, KC_F14, KC_F24, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/matrix/noah/keymaps/wkl/keymap.c b/keyboards/matrix/noah/keymaps/wkl/keymap.c
new file mode 100644
index 0000000000..0496582440
--- /dev/null
+++ b/keyboards/matrix/noah/keymaps/wkl/keymap.c
@@ -0,0 +1,20 @@
+/**
+ * keymap.c
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_wkl(
+ 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_PSCR,
+ 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_LCTRL, 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_CAPS, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT_wkl(
+ KC_BSLS, 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, RGB_TOG, RGB_MOD, _______, KC_F13, KC_F14, KC_F24, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+}; \ No newline at end of file
diff --git a/keyboards/matrix/noah/ld/noah_boot.ld b/keyboards/matrix/noah/ld/noah_boot.ld
new file mode 100644
index 0000000000..3abdd1529b
--- /dev/null
+++ b/keyboards/matrix/noah/ld/noah_boot.ld
@@ -0,0 +1,85 @@
+/*
+ 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.
+*/
+
+/*
+ * STM32F411xE memory setup.
+ */
+MEMORY
+{
+ flash0 : org = 0x08020000, len = 512k-128k
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 128k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/matrix/noah/matrix.c b/keyboards/matrix/noah/matrix.c
new file mode 100644
index 0000000000..02861a8e37
--- /dev/null
+++ b/keyboards/matrix/noah/matrix.c
@@ -0,0 +1,166 @@
+/**
+ * matrix.c
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include "hal.h"
+#include "quantum.h"
+#include "timer.h"
+#include "wait.h"
+#include "printf.h"
+#include "matrix.h"
+
+/**
+ *
+ * Row pins are input with internal pull-down.
+ * Column pins are output and strobe with high.
+ * Key is high or 1 when it turns on.
+ *
+ */
+/* 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;
+
+void matrix_init(void)
+{
+ //debug_enable = true;
+ palSetLineMode(LINE_COL_1, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_2, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_3, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_4, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_5, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_6, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_7, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_8, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_9, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_10, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_11, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_12, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_13, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_14, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetLineMode(LINE_COL_15, PAL_MODE_OUTPUT_PUSHPULL);
+
+ palSetLineMode(LINE_ROW_1, PAL_MODE_INPUT_PULLDOWN);
+ palSetLineMode(LINE_ROW_2, PAL_MODE_INPUT_PULLDOWN);
+ palSetLineMode(LINE_ROW_3, PAL_MODE_INPUT_PULLDOWN);
+ palSetLineMode(LINE_ROW_4, PAL_MODE_INPUT_PULLDOWN);
+ palSetLineMode(LINE_ROW_5, PAL_MODE_INPUT_PULLDOWN);
+
+ palClearLine(LINE_COL_1);
+ palClearLine(LINE_COL_2);
+ palClearLine(LINE_COL_3);
+ palClearLine(LINE_COL_4);
+ palClearLine(LINE_COL_5);
+ palClearLine(LINE_COL_6);
+ palClearLine(LINE_COL_7);
+ palClearLine(LINE_COL_8);
+ palClearLine(LINE_COL_9);
+ palClearLine(LINE_COL_10);
+ palClearLine(LINE_COL_11);
+ palClearLine(LINE_COL_12);
+ palClearLine(LINE_COL_13);
+ palClearLine(LINE_COL_14);
+ palClearLine(LINE_COL_15);
+
+ memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ matrix_row_t data = 0;
+ switch (col) {
+ case 0: palSetLine(LINE_COL_1); break;
+ case 1: palSetLine(LINE_COL_2); break;
+ case 2: palSetLine(LINE_COL_3); break;
+ case 3: palSetLine(LINE_COL_4); break;
+ case 4: palSetLine(LINE_COL_5); break;
+ case 5: palSetLine(LINE_COL_6); break;
+ case 6: palSetLine(LINE_COL_7); break;
+ case 7: palSetLine(LINE_COL_8); break;
+ case 8: palSetLine(LINE_COL_9); break;
+ case 9: palSetLine(LINE_COL_10); break;
+ case 10: palSetLine(LINE_COL_11); break;
+ case 11: palSetLine(LINE_COL_12); break;
+ case 12: palSetLine(LINE_COL_13); break;
+ case 13: palSetLine(LINE_COL_14); break;
+ case 14: palSetLine(LINE_COL_15); break;
+ }
+
+ // need wait to settle pin state
+ wait_us(20);
+
+ data = (
+ (palReadLine(LINE_ROW_1) << 0 ) |
+ (palReadLine(LINE_ROW_2) << 1 ) |
+ (palReadLine(LINE_ROW_3) << 2 ) |
+ (palReadLine(LINE_ROW_4) << 3 ) |
+ (palReadLine(LINE_ROW_5) << 4 )
+ );
+
+ switch (col) {
+ case 0: palClearLine(LINE_COL_1); break;
+ case 1: palClearLine(LINE_COL_2); break;
+ case 2: palClearLine(LINE_COL_3); break;
+ case 3: palClearLine(LINE_COL_4); break;
+ case 4: palClearLine(LINE_COL_5); break;
+ case 5: palClearLine(LINE_COL_6); break;
+ case 6: palClearLine(LINE_COL_7); break;
+ case 7: palClearLine(LINE_COL_8); break;
+ case 8: palClearLine(LINE_COL_9); break;
+ case 9: palClearLine(LINE_COL_10); break;
+ case 10: palClearLine(LINE_COL_11); break;
+ case 11: palClearLine(LINE_COL_12); break;
+ case 12: palClearLine(LINE_COL_13); break;
+ case 13: palClearLine(LINE_COL_14); break;
+ case 14: palClearLine(LINE_COL_15); break;
+ }
+
+ if (matrix_debouncing[col] != data) {
+ matrix_debouncing[col] = data;
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+ }
+
+ if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCING_DELAY) {
+ 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/matrix/noah/mcuconf.h b/keyboards/matrix/noah/mcuconf.h
new file mode 100644
index 0000000000..8405d61e15
--- /dev/null
+++ b/keyboards/matrix/noah/mcuconf.h
@@ -0,0 +1,268 @@
+/*
+ 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 MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F4xx 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:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F4xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_CLOCK48_REQUIRED TRUE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLM_VALUE 8
+#define STM32_PLLN_VALUE 192
+#define STM32_PLLP_VALUE 2
+#define STM32_PLLQ_VALUE 4
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_RTCPRE_VALUE 8
+#define STM32_MCO1SEL STM32_MCO1SEL_HSI
+#define STM32_MCO1PRE STM32_MCO1PRE_DIV1
+#define STM32_MCO2SEL STM32_MCO2SEL_SYSCLK
+#define STM32_MCO2PRE STM32_MCO2PRE_DIV5
+#define STM32_I2SSRC STM32_I2SSRC_PLLI2S
+#define STM32_PLLI2SN_VALUE 192
+#define STM32_PLLI2SR_VALUE 2
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_BKPRAM_ENABLE FALSE
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_ADCPRE ADC_CCR_ADCPRE_DIV4
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 6
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 6
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 15
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI22_IRQ_PRIORITY 15
+
+/*
+ * 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_TIM4 TRUE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM9 FALSE
+#define STM32_GPT_USE_TIM11 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM9_IRQ_PRIORITY 7
+#define STM32_GPT_TIM11_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 TRUE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_USE_I2C3 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C3_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_I2C3_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * I2S driver system settings.
+ */
+#define STM32_I2S_USE_SPI2 FALSE
+#define STM32_I2S_USE_SPI3 FALSE
+#define STM32_I2S_SPI2_IRQ_PRIORITY 10
+#define STM32_I2S_SPI3_IRQ_PRIORITY 10
+#define STM32_I2S_SPI2_DMA_PRIORITY 1
+#define STM32_I2S_SPI3_DMA_PRIORITY 1
+#define STM32_I2S_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_I2S_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2S_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2S_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2S_DMA_ERROR_HOOK(i2sp) 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_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM9 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM9_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 TRUE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM9 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM9_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_USART6 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_USART6_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 TRUE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_USE_SPI4 FALSE
+#define STM32_SPI_USE_SPI5 FALSE
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_SPI_SPI4_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_SPI_SPI4_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_SPI_SPI5_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_SPI_SPI5_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 6)
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI4_DMA_PRIORITY 1
+#define STM32_SPI_SPI5_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_SPI4_IRQ_PRIORITY 10
+#define STM32_SPI_SPI5_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#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_USE_USART3 FALSE
+#define STM32_UART_USE_USART6 FALSE
+#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART6_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_USART6_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_OTG1 TRUE
+#define STM32_USB_OTG1_IRQ_PRIORITY 14
+#define STM32_USB_OTG1_RX_FIFO_SIZE 512
+#define STM32_USB_OTG_THREAD_PRIO LOWPRIO
+#define STM32_USB_OTG_THREAD_STACK_SIZE 128
+#define STM32_USB_OTGFIFO_FILL_BASEPRI 0
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c
new file mode 100644
index 0000000000..184be43704
--- /dev/null
+++ b/keyboards/matrix/noah/noah.c
@@ -0,0 +1,243 @@
+/**
+ * noah.c
+ */
+
+#include "noah.h"
+
+#ifdef RGBLIGHT_ENABLE
+#include <string.h>
+#include "rgblight.h"
+#include "ws2812_f4.h"
+extern rgblight_config_t rgblight_config;
+
+// led 0 for caps lock, led 1 for scroll lock, led 3 for num lock
+// led 4 for layer 1, led 5 for layer 2, led 6 for layer 3, led 7 for layer 4
+#if RGBLED_NUM < 7
+#error "MUST set the RGBLED_NUM bigger than 7"
+#endif
+LED_TYPE noah_leds[RGBLED_NUM];
+static bool noah_led_mode = false;
+void rgblight_set(void) {
+ memset(&noah_leds[0], 0, sizeof(noah_leds));
+ if (!rgblight_config.enable) {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+ if (noah_led_mode) {
+ uint8_t ind_led = host_keyboard_leds();
+ if (IS_LED_ON(ind_led, USB_LED_CAPS_LOCK)) {
+ noah_leds[0] = led[0];
+ }
+ if (IS_LED_ON(ind_led, USB_LED_SCROLL_LOCK)) {
+ noah_leds[1] = led[1];
+ }
+ if (IS_LED_ON(ind_led, USB_LED_NUM_LOCK)) {
+ noah_leds[2] = led[2];
+ }
+ for (int32_t i = 0; i < 4; i++) {
+ if(layer_state_is(i+1)) {
+ noah_leds[i + 3] = led[i + 3];
+ }
+ }
+ } else {
+ memcpy(&noah_leds[0], &led[0], sizeof(noah_leds));
+ }
+
+ ws2812_setleds(noah_leds, RGBLED_NUM);
+}
+#endif
+
+void matrix_scan_kb(void) { matrix_scan_user(); }
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+__attribute__((weak))
+void matrix_init_user(void) {
+#ifdef RGBLIGHT_ENABLE
+ ws2812_init();
+ rgblight_enable();
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_disable();
+#endif
+}
+
+__attribute__((weak))
+void matrix_scan_user(void) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_task();
+#endif
+}
+
+
+#ifdef RGB_MATRIX_ENABLE
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+
+// left CB
+ {0, C1_9, C3_10, C4_10},
+ {0, C1_10, C2_10, C4_11},
+ {0, C1_11, C2_11, C3_11},
+ {0, C1_12, C2_12, C3_12},
+ {0, C1_13, C2_13, C3_13},
+ {0, C1_14, C2_14, C3_14},
+ {0, C1_15, C2_15, C3_15},
+ {0, C1_16, C2_16, C3_16},
+
+ {0, C5_9, C4_9, C6_9},
+ {0, C5_16, C4_16, C6_16},
+
+ {0, C9_9, C8_9, C7_9},
+ {0, C9_10, C8_10, C7_10},
+ {0, C9_11, C8_11, C7_11},
+ {0, C9_12, C8_12, C7_12},
+ {0, C9_13, C8_13, C7_13},
+ {0, C9_14, C8_14, C7_14},
+ {0, C9_15, C8_15, C6_14},
+ {0, C9_16, C7_15, C6_15},
+
+// left CA
+ {0, C1_1, C3_2, C4_2},
+ {0, C1_2, C2_2, C4_3},
+ {0, C1_3, C2_3, C3_3},
+ {0, C1_4, C2_4, C3_4},
+ {0, C1_5, C2_5, C3_5},
+ {0, C1_6, C2_6, C3_6},
+ {0, C1_7, C2_7, C3_7},
+ {0, C1_8, C2_8, C3_8},
+
+ {0, C5_1, C4_1, C6_1},
+ {0, C5_8, C4_8, C6_8},
+
+ {0, C9_1, C8_1, C7_1},
+ {0, C9_2, C8_2, C7_2},
+ {0, C9_3, C8_3, C7_3},
+ {0, C9_4, C8_4, C7_4},
+ {0, C9_5, C8_5, C7_5},
+ {0, C9_6, C8_6, C7_6},
+ {0, C9_7, C8_7, C6_6},
+ {0, C9_8, C7_7, C6_7},
+
+// right CA
+ {1, C1_1, C3_2, C4_2},
+ {1, C1_2, C2_2, C4_3},
+ {1, C1_3, C2_3, C3_3},
+ {1, C1_4, C2_4, C3_4},
+ {1, C1_5, C2_5, C3_5},
+ {1, C1_6, C2_6, C3_6},
+ {1, C1_7, C2_7, C3_7},
+ {1, C1_8, C2_8, C3_8},
+
+ {1, C5_1, C4_1, C6_1},
+ {1, C5_8, C4_8, C6_8},
+
+ {1, C9_1, C8_1, C7_1},
+ {1, C9_2, C8_2, C7_2},
+ {1, C9_3, C8_3, C7_3},
+ {1, C9_4, C8_4, C7_4},
+ {1, C9_5, C8_5, C7_5},
+ {1, C9_6, C8_6, C7_6},
+ {1, C9_7, C8_7, C6_6},
+ {1, C9_8, C7_7, C6_7},
+// right CB
+ {1, C1_9, C3_10, C4_10},
+ {1, C1_10, C2_10, C4_11},
+ {1, C1_11, C2_11, C3_11},
+ {1, C1_12, C2_12, C3_12},
+ {1, C1_13, C2_13, C3_13},
+ {1, C1_14, C2_14, C3_14},
+ {1, C1_15, C2_15, C3_15},
+ {1, C1_16, C2_16, C3_16},
+
+ {1, C5_9, C4_9, C6_9},
+ {1, C5_16, C4_16, C6_16},
+
+ {1, C9_9, C8_9, C7_9},
+ {1, C9_10, C8_10, C7_10},
+ {1, C9_11, C8_11, C7_11},
+ {1, C9_12, C8_12, C7_12},
+ {1, C9_13, C8_13, C7_13},
+ {1, C9_14, C8_14, C7_14},
+ {1, C9_15, C8_15, C6_14},
+ {1, C9_16, C7_15, C6_15},
+};
+
+led_config_t g_led_config = {
+ {
+ { 1, 2, 3, 4, 5, 6, 7, 36, 37, 38, 39, 40, NO_LED, 41},
+ { 0, 8, 10, 11, 12, 13, 14, 44, 46, 47, 48, 49, 50, 51},
+ { 30, 18, 26, 9, 19, 15, 16, 17, 55, 56, 57, 58, 59, 60},
+ { 29, 31, 32, 33, 20, 21, 23, 22, 54, 62, 64, 65, 66, 63},
+ { 34, 35, 27, 25, 67, 68, 69, 70, 71, 61, 53, 45, 42, 43},
+ },
+ {
+ { 0, 16},{ 0, 0},{ 15, 0},{ 30, 0},{ 45, 0},{ 60, 0},{ 75, 0},{ 90, 0},
+ { 20, 16},{ 42, 32},
+ { 45, 16},{ 50, 16},{ 65, 16},{ 80, 16},{ 95, 16},{ 70, 32},{ 84, 32},{ 98, 32},
+
+ { 14, 32},{ 56, 32},{ 50, 48},{ 80, 48},{110, 48},{ 95, 48},{100, 64},{112, 64},
+ { 42, 32},{ 38, 64},
+ { 0, 32},{ 10, 48},{ 0, 48},{ 20, 48},{ 35, 48},{ 65, 48},{ 0, 64},{ 19, 64},
+
+ {105, 0},{120, 0},{135, 0},{150, 0},{165, 0},{180, 0},{202, 0},{224, 0},
+ {110, 16},{224, 16},
+ {125, 16},{140, 16},{155, 16},{172, 16},{187, 16},{202, 16},{210, 32},{224, 32},
+
+ {125, 48},{112, 32},{126, 32},{140, 32},{154, 32},{168, 32},{182, 32},{224, 48},
+ {140, 48},{200, 48},
+ {155, 48},{170, 48},{185, 48},{150, 64},{173, 64},{195, 64},{210, 64},{224, 64}
+ },
+ {
+ 1, 1, 4, 4, 4, 4, 4, 4,
+ 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4,
+ 1, 1, 1, 4, 4, 4, 1, 1,
+
+ 4, 4, 4, 4, 4, 4, 1, 1,
+ 4, 1,
+ 4, 4, 4, 4, 4, 4, 4, 1,
+
+ 4, 4, 4, 4, 4, 4, 4, 1,
+ 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1,
+ }
+};
+
+#endif
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ #ifdef RGBLIGHT_ENABLE
+ case KC_F24: // switch the led mode on or off
+ noah_led_mode = !noah_led_mode;
+ return false;
+
+ #ifdef RGB_MATRIX_ENABLE
+ case KC_F13: // toggle rgb matrix
+ rgb_matrix_toggle();
+ return false;
+ case KC_F14:
+ rgb_matrix_step();
+ return false;
+ #endif
+ #endif
+ default:
+ break;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/matrix/noah/noah.h b/keyboards/matrix/noah/noah.h
new file mode 100644
index 0000000000..5d0da798db
--- /dev/null
+++ b/keyboards/matrix/noah/noah.h
@@ -0,0 +1,63 @@
+/**
+ * noah.h
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_default( \
+ 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, 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, k43, k44, k45, k46, k47, k48) \
+{ \
+ {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, KC_NO}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,KC_NO,k2d, KC_NO}, \
+ {k30,KC_NO,k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO}, \
+ {k40, k41, k42,KC_NO,k43,KC_NO,k44, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
+}
+
+#define LAYOUT_wkl( \
+ 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, 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, k43, k45, k46, k47, k48 \
+) { \
+ {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, KC_NO}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,KC_NO,k2d, KC_NO}, \
+ {k30,KC_NO,k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO}, \
+ {k40, k41, k42,KC_NO,k43,KC_NO,KC_NO, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
+}
+
+#define LAYOUT_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, \
+ 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, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k43, k45, k46, k47, k48 \
+) { \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c,KC_NO, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,KC_NO, KC_NO}, \
+ {k20, k21, 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, KC_NO}, \
+ {k40, k41, k42,KC_NO,k43,KC_NO,KC_NO, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
+}
+
+#define LAYOUT_default_splitspace( \
+ 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, 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, k43, k44, k45, k46, k47, k48, k49, k4a \
+) { \
+ {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, KC_NO}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,KC_NO,k2d, KC_NO}, \
+ {k30,KC_NO,k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO}, \
+ {k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k1e, k2e, k3e, k0f} \
+}
diff --git a/keyboards/matrix/noah/readme.md b/keyboards/matrix/noah/readme.md
new file mode 100644
index 0000000000..788fc18727
--- /dev/null
+++ b/keyboards/matrix/noah/readme.md
@@ -0,0 +1,19 @@
+# NOAH 65 keyboard
+
+![NOAH](https://raw.githubusercontent.com/yulei/qmk_webusb_tool/master/public/noah.jpg)
+This was the first 65% keyboard made by the Matrix team, it had the following features:
+
+- per key rgb led
+- 7 RGB led for caps, scroll , num lock and layer state indicator, or just play light animation effects
+- ansi and iso layouts, and split spacebar supported
+- pre-programmed bootloader which emulated usb stick to ease firmware updating
+
+Keyboard Maintainer: [astro](https://github.com/yulei)
+Hardware Supported: Matrix NOAH keyboard
+Hardware Availability: [NOAH Keybaord](https://geekhack.org/index.php?topic=102300.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make matrix/noah: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/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk
new file mode 100644
index 0000000000..68163386f1
--- /dev/null
+++ b/keyboards/matrix/noah/rules.mk
@@ -0,0 +1,56 @@
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F4xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = noah_boot
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f4xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = noah_bd
+
+# 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.*/
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+#DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+#DFU_SUFFIX_ARGS = -p DF11 -v 0483
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # USB Nkey Rollover
+NO_USB_STARTUP_CHECK = yes # Disable initialization only when usb is plugged in
+
+CUSTOM_MATRIX = yes
+RGB_MATRIX_ENABLE = yes
+
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+# project specific files
+SRC += \
+ matrix.c \
+ ws2812_f4.c
diff --git a/keyboards/matrix/noah/ws2812_f4.c b/keyboards/matrix/noah/ws2812_f4.c
new file mode 100644
index 0000000000..7536d6d8c2
--- /dev/null
+++ b/keyboards/matrix/noah/ws2812_f4.c
@@ -0,0 +1,272 @@
+/**
+ * @file ws2812.c
+ * @author Austin Glaser <austin.glaser@gmail.com>, Joerg Wangemann <joerg.wangemann@gmail.com>
+ * @brief WS2812 LED driver
+ *
+ * Copyright (C) 2016 Austin Glaser, 2017 Joerg Wangemann
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license. See the LICENSE file for details.
+ *
+ * @todo Put in names and descriptions of variables which need to be defined to use this file
+ *
+ * @addtogroup WS2812
+ * @{
+ */
+
+/* --- PRIVATE DEPENDENCIES ------------------------------------------------- */
+
+// This Driver
+#include "ws2812_f4.h"
+
+// Standard
+#include <stdint.h>
+
+// ChibiOS
+#include "ch.h"
+#include "hal.h"
+
+#include "wait.h"
+// Application
+//#include "board.h"
+
+// TODO: Add these #define's to the headers of your project.
+// Pin, timer and dma are all connected, check them all if you change one.
+// Tested with STM32F4, working at 144 or 168 MHz.
+//#define WS2812_LED_N 2 // Number of LEDs
+//#define PORT_WS2812 GPIOB
+//#define PIN_WS2812 9
+//#define WS2812_TIM_N 4 // timer, 1-11
+//#define WS2812_TIM_CH 3 // timer channel, 0-3
+//#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 6 // DMA channel for TIMx_UP
+// The WS2812 expects 5V signal level (or at least 0.7 * VDD). Sometimes it works
+// with a 3V signal level, otherwise the easiest way to get the signal level to 5V
+// is to add an external pullup resistor from the DI pin to 5V (10k will do) and
+// configure the pin as open drain.
+// (An SMD resistor is easily solders on the connections of a light strip)
+// Uncomment the next line if an external pullup resistor is used.
+//#define WS2812_EXTERNAL_PULLUP
+
+/* --- CONFIGURATION CHECK -------------------------------------------------- */
+
+#if !defined(WS2812_LED_N)
+ #error WS2812 LED chain length not specified
+#elif WS2812_LED_N <= 0
+ #error WS2812 LED chain length set to invalid value
+#endif
+
+#if !defined(WS2812_TIM_N)
+ #error WS2812 timer not specified
+#endif
+#if defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32F7XX)
+ #if WS2812_TIM_N <= 2
+ #define WS2812_AF 1
+ #elif WS2812_TIM_N <= 5
+ #define WS2812_AF 2
+ #elif WS2812_TIM_N <= 11
+ #define WS2812_AF 3
+ #endif
+#elif !defined(WS2812_AF)
+ #error WS2812_AF timer alternate function not specified
+#endif
+
+#if !defined(WS2812_TIM_CH)
+ #error WS2812 timer channel not specified
+#elif WS2812_TIM_CH >= 4
+ #error WS2812 timer channel set to invalid value
+#endif
+
+/* --- PRIVATE CONSTANTS ---------------------------------------------------- */
+
+#define WS2812_PWM_FREQUENCY (STM32_SYSCLK/2) /**< Clock frequency of PWM, must be valid with respect to system clock! */
+#define WS2812_PWM_PERIOD (WS2812_PWM_FREQUENCY/800000) /**< Clock period in ticks. 1 / 800kHz = 1.25 uS (as per datasheet) */
+
+/**
+ * @brief Number of bit-periods to hold the data line low at the end of a frame
+ *
+ * The reset period for each frame must be at least 50 uS; so we add in 50 bit-times
+ * of zeroes at the end. (50 bits)*(1.25 uS/bit) = 62.5 uS, which gives us some
+ * slack in the timing requirements
+ */
+#define WS2812_RESET_BIT_N (50)
+#define WS2812_COLOR_BIT_N (WS2812_LED_N*24) /**< Number of data bits */
+#define WS2812_BIT_N (WS2812_COLOR_BIT_N + WS2812_RESET_BIT_N) /**< Total number of bits in a frame */
+
+/**
+ * @brief High period for a zero, in ticks
+ *
+ * Per the datasheet:
+ * WS2812:
+ * - T0H: 200 nS to 500 nS, inclusive
+ * - T0L: 650 nS to 950 nS, inclusive
+ * WS2812B:
+ * - T0H: 200 nS to 500 nS, inclusive
+ * - T0L: 750 nS to 1050 nS, inclusive
+ *
+ * The duty cycle is calculated for a high period of 350 nS.
+ */
+#define WS2812_DUTYCYCLE_0 (WS2812_PWM_FREQUENCY/(1000000000/450))
+
+/**
+ * @brief High period for a one, in ticks
+ *
+ * Per the datasheet:
+ * WS2812:
+ * - T1H: 550 nS to 850 nS, inclusive
+ * - T1L: 450 nS to 750 nS, inclusive
+ * WS2812B:
+ * - T1H: 750 nS to 1050 nS, inclusive
+ * - T1L: 200 nS to 500 nS, inclusive
+ *
+ * The duty cycle is calculated for a high period of 800 nS.
+ * This is in the middle of the specifications of the WS2812 and WS2812B.
+ */
+#define WS2812_DUTYCYCLE_1 (WS2812_PWM_FREQUENCY/(1000000000/900))
+
+/* --- PRIVATE MACROS ------------------------------------------------------- */
+
+/**
+ * @brief Generates a reference to a numbered PWM driver
+ *
+ * @param[in] n: The driver (timer) number
+ *
+ * @return A reference to the driver
+ */
+#define PWMD(n) CONCAT_EXPANDED_SYMBOLS(PWMD, n)
+
+#define WS2812_PWMD PWMD(WS2812_TIM_N) /**< The PWM driver to use for the LED chain */
+
+/**
+ * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given bit
+ *
+ * @param[in] led: The led index [0, @ref WS2812_LED_N)
+ * @param[in] byte: The byte number [0, 2]
+ * @param[in] bit: The bit number [0, 7]
+ *
+ * @return The bit index
+ */
+#define WS2812_BIT(led, byte, bit) (24*(led) + 8*(byte) + (7 - (bit)))
+
+/**
+ * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given red bit
+ *
+ * @note The red byte is the middle byte in the color packet
+ *
+ * @param[in] led: The led index [0, @ref WS2812_LED_N)
+ * @param[in] bit: The bit number [0, 7]
+ *
+ * @return The bit index
+ */
+#define WS2812_RED_BIT(led, bit) WS2812_BIT((led), 1, (bit))
+
+/**
+ * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given green bit
+ *
+ * @note The green byte is the first byte in the color packet
+ *
+ * @param[in] led: The led index [0, @ref WS2812_LED_N)
+ * @param[in] bit: The bit number [0, 7]
+ *
+ * @return The bit index
+ */
+#define WS2812_GREEN_BIT(led, bit) WS2812_BIT((led), 0, (bit))
+
+/**
+ * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given blue bit
+ *
+ * @note The blue byte is the last byte in the color packet
+ *
+ * @param[in] led: The led index [0, @ref WS2812_LED_N)
+ * @param[in] bit: The bit index [0, 7]
+ *
+ * @return The bit index
+ */
+#define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 2, (bit))
+
+/* --- PRIVATE VARIABLES ---------------------------------------------------- */
+
+static uint32_t ws2812_frame_buffer[WS2812_BIT_N + 1]; /**< Buffer for a frame */
+
+/* --- PUBLIC FUNCTIONS ----------------------------------------------------- */
+/*
+ * Gedanke: Double-buffer type transactions: double buffer transfers using two memory pointers for
+the memory (while the DMA is reading/writing from/to a buffer, the application can
+write/read to/from the other buffer).
+ */
+
+void ws2812_init(void)
+{
+ // Initialize led frame buffer
+ uint32_t i;
+ for (i = 0; i < WS2812_COLOR_BIT_N; i++) ws2812_frame_buffer[i] = WS2812_DUTYCYCLE_0; // All color bits are zero duty cycle
+ for (i = 0; i < WS2812_RESET_BIT_N; i++) ws2812_frame_buffer[i + WS2812_COLOR_BIT_N] = 0; // All reset bits are zero
+ // Configure pin as AF output. If there's an external pull up resistor the signal level is brought to 5V using open drain mode.
+#ifdef WS2812_EXTERNAL_PULLUP
+ palSetPadMode(PORT_WS2812, PIN_WS2812, PAL_MODE_ALTERNATE(WS2812_AF) | PAL_STM32_OTYPE_OPENDRAIN);
+#else
+ palSetPadMode(PORT_WS2812, PIN_WS2812, PAL_MODE_ALTERNATE(WS2812_AF) | PAL_STM32_OTYPE_PUSHPULL); //PAL_MODE_STM32_ALTERNATE_PUSHPULL);
+#endif
+ //palClearPad(PORT_WS2812, PIN_WS2812);
+ //wait_ms(1);
+ // PWM Configuration
+ #pragma GCC diagnostic ignored "-Woverride-init" // Turn off override-init warning for this struct. We use the overriding ability to set a "default" channel config
+ static const PWMConfig ws2812_pwm_config = {
+ .frequency = WS2812_PWM_FREQUENCY,
+ .period = WS2812_PWM_PERIOD, //Mit dieser Periode wird UDE-Event erzeugt und ein neuer Wert (Länge WS2812_BIT_N) vom DMA ins CCR geschrieben
+ .callback = NULL,
+ .channels = {
+ [0 ... 3] = {.mode = PWM_OUTPUT_DISABLED, .callback = NULL}, // Channels default to disabled
+ [WS2812_TIM_CH] = {.mode = PWM_OUTPUT_ACTIVE_HIGH, .callback = NULL}, // Turn on the channel we care about
+ },
+ .cr2 = 0,
+ .dier = TIM_DIER_UDE, // DMA on update event for next period
+ };
+ #pragma GCC diagnostic pop // Restore command-line warning options
+
+ // Configure DMA
+ //dmaInit(); // Joe added this
+ dmaStreamAllocate(WS2812_DMA_STREAM, 10, NULL, NULL);
+ dmaStreamSetPeripheral(WS2812_DMA_STREAM, &(WS2812_PWMD.tim->CCR[WS2812_TIM_CH])); // Ziel ist der An-Zeit im Cap-Comp-Register
+ dmaStreamSetMemory0(WS2812_DMA_STREAM, ws2812_frame_buffer);
+ dmaStreamSetTransactionSize(WS2812_DMA_STREAM, WS2812_BIT_N);
+ dmaStreamSetMode(WS2812_DMA_STREAM,
+ STM32_DMA_CR_CHSEL(WS2812_DMA_CHANNEL) | STM32_DMA_CR_DIR_M2P | STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_WORD |
+ STM32_DMA_CR_MINC | STM32_DMA_CR_CIRC | STM32_DMA_CR_PL(3));
+ // M2P: Memory 2 Periph; PL: Priority Level
+
+ // Start DMA
+ dmaStreamEnable(WS2812_DMA_STREAM);
+
+ // Configure PWM
+ // NOTE: It's required that preload be enabled on the timer channel CCR register. This is currently enabled in the
+ // ChibiOS driver code, so we don't have to do anything special to the timer. If we did, we'd have to start the timer,
+ // disable counting, enable the channel, and then make whatever configuration changes we need.
+ pwmStart(&WS2812_PWMD, &ws2812_pwm_config);
+ pwmEnableChannel(&WS2812_PWMD, WS2812_TIM_CH, 0); // Initial period is 0; output will be low until first duty cycle is DMA'd in
+}
+
+ws2812_err_t ws2812_write_led(uint32_t led_number, uint8_t r, uint8_t g, uint8_t b)
+{
+ // Check for valid LED
+ if (led_number > WS2812_LED_N) return WS2812_LED_INVALID;
+
+ // Write color to frame buffer
+ for (uint32_t bit = 0; bit < 8; bit++) {
+ ws2812_frame_buffer[WS2812_RED_BIT(led_number, bit)] = ((r >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
+ ws2812_frame_buffer[WS2812_GREEN_BIT(led_number, bit)] = ((g >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
+ ws2812_frame_buffer[WS2812_BLUE_BIT(led_number, bit)] = ((b >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
+ }
+
+ // Success
+ return WS2812_SUCCESS;
+}
+
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds)
+{
+ for(int i = 0; i < number_of_leds; i++) {
+ ws2812_write_led(i, ledarray[i].r, ledarray[i].g, ledarray[i].b);
+ }
+}
+
+/** @} addtogroup WS2812 */
diff --git a/keyboards/matrix/noah/ws2812_f4.h b/keyboards/matrix/noah/ws2812_f4.h
new file mode 100644
index 0000000000..245bd15fef
--- /dev/null
+++ b/keyboards/matrix/noah/ws2812_f4.h
@@ -0,0 +1,102 @@
+/**
+ * @file ws2812.h
+ * @author Austin Glaser <austin.glaser@gmail.com>
+ * @brief Interface to WS2812 LED driver
+ *
+ * Copyright (C) 2016 Austin Glaser
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license. See the LICENSE file for details.
+ *
+ * @todo Put in names and descriptions of variables which need to be defined to use this file
+ */
+
+#ifndef WS2812_H_
+#define WS2812_H_
+
+/**
+ * @defgroup WS2812 WS2812 Driver
+ * @{
+ *
+ * @brief DMA-based WS2812 LED driver
+ *
+ * A driver for WS2812 LEDs
+ */
+
+/* --- PUBLIC DEPENDENCIES -------------------------------------------------- */
+
+// Standard
+#include <stdint.h>
+#include "color.h"
+
+/* --- PUBLIC MACROS -------------------------------------------------------- */
+
+/**
+ * @brief Concatenates two symbols s1 and s2 exactly, without expanding either
+ *
+ * @param[in] s1: The first symbol to concatenate
+ * @param[in] s2: The second symbol to concatenate
+ *
+ * @return A single symbol containing s1 and s2 concatenated without expansion
+ */
+#define CONCAT_SYMBOLS(s1, s2) s1##s2
+
+/**
+ * @brief Concatenate the symbols s1 and s2, expanding both of them
+ *
+ * This is important because simply applying s1##s2 doesn't expand them if they're
+ * preprocessor tokens themselves
+ *
+ * @param[in] s1: The first symbol to concatenate
+ * @param[in] s2: The second symbol to concatenate
+ *
+ * @return A single symbol containing s1 expanded followed by s2 expanded
+ */
+#define CONCAT_EXPANDED_SYMBOLS(s1, s2) CONCAT_SYMBOLS(s1, s2)
+
+/* --- PUBLIC CONSTANTS ----------------------------------------------------- */
+
+/**
+ * @brief Return codes from ws2812 interface functions
+ */
+typedef enum {
+ WS2812_SUCCESS = 0x00, /**< Operation completeed successfully */
+ WS2812_LED_INVALID, /**< Attempted to index an invalid LED (@ref WS2812_N_LEDS) */
+ MAX_WS2812_ERR, /**< Total number of possible error codes */
+ WS2812_ERR_INVALID /**< Invalid error value */
+} ws2812_err_t;
+
+/* --- PUBLIC FUNCTIONS ----------------------------------------------------- */
+
+/**
+ * @brief Initialize the driver
+ *
+ * After this function is called, all necessary background tasks will be started.
+ * The frame is initially dark.
+ */
+void ws2812_init(void);
+
+/**
+ * @brief Write the value of a single LED in the chain
+ *
+ * The color value is written to a frame buffer, and will not
+ * be updated until the next frame is written. Frames are written
+ * at the maximum possible speed -- the longest latency between a
+ * call to this function and the value being displayed is
+ * 1.25uS*(24*@ref WS2812_LED_N + 50)
+ *
+ * @param[in] led_number: The index of the LED to be written. Must be strictly less than
+ * @ref WS2812_N_LEDS
+ * @param[in] r: The red level of the LED
+ * @param[in] g: The green level of the LED
+ * @param[in] b: The blue level of the LED
+ *
+ * @retval WS2812_SUCCESS: The write was successful
+ * @retval WS2812_LED_INVALID: The write was to an invalid LED index
+ */
+ws2812_err_t ws2812_write_led(uint32_t led_number, uint8_t r, uint8_t g, uint8_t b);
+
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
+/** @} defgroup WS2812 */
+
+#endif // ifndef WS2812_H_
diff --git a/keyboards/maxr1998/phoebe/keymaps/default/keymap.c b/keyboards/maxr1998/phoebe/keymaps/default/keymap.c
index 1bf6f291dc..da179c8f27 100644
--- a/keyboards/maxr1998/phoebe/keymaps/default/keymap.c
+++ b/keyboards/maxr1998/phoebe/keymaps/default/keymap.c
@@ -18,11 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwertz
* ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bspc |
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ? |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Grv | Q | W | E | R | T | Z | U | I | O | P | Enter|
+ * | ^ ° | Q | W | E | R | T | Z | U | I | O | P | Bspc |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | A | S | D | F | G | H | J | K | L | +* ~ | ? |
+ * | Tab | A | S | D | F | G | H | J | K | L | +* ~ | Enter|
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Y | X | C | V | B | N | M | , | . | Up | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -30,9 +30,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_QWERTZ] = LAYOUT(
- KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, KC_BSPC,
- KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, DE_QST,
+ KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, DE_QST,
+ 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_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, KC_SC, KC_SPC, KC_ALGR, KC_FN, KC_LEFT, KC_DOWN, KC_RGHT
),
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
+ * | ´ ` | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | #' | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_SC] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ DE_ACUT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DE_HASH, _______,
_______, DE_LESS, _______, _______, _______, _______, _______, _______, _______, _______, DE_MINS, _______,
_______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, _______, _______, _______
@@ -60,11 +60,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Function layer
* ,-----------------------------------------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del |
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F10 | F11 | F12 |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Ü | | Ö | F11 | |
+ * | | | | | | | | Ü | F9 | Ö | | Del |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Lock | Ä | ß | | | GAME | | RGBS | RGBB | RGBS | F12 | |
+ * | Lock | Ä | ß | | | GAME | | RGBS | RGBB | RGBS | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | RGBH-| RGBT | RGBH+| PgUp | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_FN] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
- _______, _______, _______, _______, _______, _______, _______, DE_UE, _______, DE_OE, KC_F11, _______,
- KC_LOCK, DE_AE, DE_SS, _______, _______, G_1, _______, RGB_M_P, RGB_M_B, RGB_M_SW,KC_F12, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, DE_UE, KC_F9, DE_OE, _______, KC_DEL,
+ KC_LOCK, DE_AE, DE_SS, _______, _______, G_1, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______,
_______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_TOG, RGB_HUI, KC_PGUP, _______,
XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END
),
@@ -100,3 +100,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_SPC, XXXXXXX, _______, _______, _______, _______, _______, G_0, _______, _______, _______
)
};
+
+#define MODS_ALGR_MASK (MOD_BIT(KC_ALGR))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DE_QST:
+ if (get_mods() & MODS_ALGR_MASK) {
+ if (record->event.pressed) {
+ register_code(DE_SS);
+ } else {
+ unregister_code(DE_SS);
+ }
+ return false;
+ }
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/maxr1998/phoebe/phoebe.h b/keyboards/maxr1998/phoebe/phoebe.h
index 2bf5a2d799..f3e61756a3 100644
--- a/keyboards/maxr1998/phoebe/phoebe.h
+++ b/keyboards/maxr1998/phoebe/phoebe.h
@@ -14,5 +14,5 @@
{ 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, k47, k48, k49, k4a, k4b } \
+ { k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \
}
diff --git a/keyboards/mechmini/v1/README.md b/keyboards/mechmini/v1/README.md
index 315349803a..902948c24d 100644
--- a/keyboards/mechmini/v1/README.md
+++ b/keyboards/mechmini/v1/README.md
@@ -1,83 +1,19 @@
-Mechmini V1
-===========
+# Mechmini V1
A 40% ortholinear/staggered keyboard, that was originally bootmapper and can be ported to QMK following this readme. This version is no longer in production [More info on MECHKEYS](https://mechkeys.ca).
-Keyboard Maintainer: QMK Community
-Hardware Supported: Mechmini 1 PCB
-Hardware Availability: Version 1 (Bootmapper) no longer in production [MECHKEYS](https://mechkeys.ca)
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Mechmini 1 PCB
+* Hardware Availability: Version 1 (Bootmapper) no longer in production [MECHKEYS](https://mechkeys.ca)
Make example for this keyboard (after setting up your build environment):
make mechmini/v1: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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-## Mechmini Notes
-
-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
-```
-
-In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
-the bootloader, you'll need Python 2 with PyUSB installed:
-
-```
-$ pip install pyusb
-```
-
-Then, with the keyboard plugged in, simply run this command from the
-`qmk_firmware` directory:
-
-```
-$ make mechmini:program
-```
-
-If you prefer, you can just build it and flash the firmware directly with
-`bootloadHID` if you boot the board while holding down `L_Ctrl` to keep it
-in the bootloader:
-
-```
-$ make mechmini
-$ bootloadHID -r mechmini_default.hex
-```
-
-## 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 pressing `L_Ctrl`. 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.
-3. If errors happen with
-`./tmk_core/common/avr/suspend.c` it is likely you implemented a RGB underglow sleep setting previously. Simply comment out the following code found under `void suspend_wakeup_init(void)`:
-```
-ifdef RGBLIGHT_ANIMATIONS
- rgblight_timer_enable();
- _delay_ms(50);
- rgblight_set();
-#endif
-```
-So that the resulting code should know reflect:
-```
-/*#ifdef RGBLIGHT_ANIMATIONS
- rgblight_timer_enable();
- _delay_ms(50);
- rgblight_set();
-#endif*/
-```
+ make mechmini/v1:default:flash
+**Reset Key**: Hold down the key commonly programmed as *L_Ctrl* while plugging in the keyboard.
+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/mechmini/v1/config.h b/keyboards/mechmini/v1/config.h
index 9355a6dc33..eb15a368ad 100644
--- a/keyboards/mechmini/v1/config.h
+++ b/keyboards/mechmini/v1/config.h
@@ -30,8 +30,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DESCRIPTION 40% modular keyboard
/* matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 15
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+#define MATRIX_ROW_PINS { B0, B1, B2, B3 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4 }
+#define DIODE_DIRECTION COL2ROW
#define NO_UART 1
diff --git a/keyboards/mechmini/v1/matrix.c b/keyboards/mechmini/v1/matrix.c
deleted file mode 100644
index 245813dfd2..0000000000
--- a/keyboards/mechmini/v1/matrix.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_set_row_status(uint8_t row);
-uint8_t bit_reverse(uint8_t x);
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-// declarations
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/mechmini/v1/rules.mk b/keyboards/mechmini/v1/rules.mk
index ee023b43ba..1c6252c59b 100644
--- a/keyboards/mechmini/v1/rules.mk
+++ b/keyboards/mechmini/v1/rules.mk
@@ -22,7 +22,3 @@ RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
diff --git a/keyboards/mechmini/v1/v1.c b/keyboards/mechmini/v1/v1.c
index 2c910d9658..ba0e095209 100644
--- a/keyboards/mechmini/v1/v1.c
+++ b/keyboards/mechmini/v1/v1.c
@@ -16,13 +16,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "v1.h"
-
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
diff --git a/keyboards/mechmini/v1/v1.h b/keyboards/mechmini/v1/v1.h
index 1e392b3530..acdad5c6d6 100644
--- a/keyboards/mechmini/v1/v1.h
+++ b/keyboards/mechmini/v1/v1.h
@@ -30,14 +30,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K00, K10, K20, K56, K57, KB0, KC0, K66 \
) \
{ \
- { K00, K10, K20, K56, KC_NO, K57, KC_NO, KC_NO, KB0, KC0, K66, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, 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_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_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 } \
+ { K00, K10, K20, K56, KC_NO, K57, KC_NO, KC_NO, KB0, KC0, K66, KC_NO }, \
+ { K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KC_NO }, \
+ { K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KC_NO }, \
+ { K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3 } \
}
#define LAYOUT_split_space( \
@@ -47,14 +43,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K00, K10, K20, K56, K57, KB0, KC0, K66 \
) \
{ \
- { K00, K10, K20, K56, KC_NO, KC_NO, K57, KC_NO, KB0, KC0, K66, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, 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_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_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 } \
+ { K00, K10, K20, K56, KC_NO, KC_NO, K57, KC_NO, KB0, KC0, K66, KC_NO }, \
+ { K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KC_NO }, \
+ { K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KC_NO }, \
+ { K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3 } \
}
#endif
diff --git a/keyboards/mehkee96/config.h b/keyboards/mehkee96/config.h
index 4adfcc86b9..d506626d1e 100644
--- a/keyboards/mehkee96/config.h
+++ b/keyboards/mehkee96/config.h
@@ -12,6 +12,9 @@
/* matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define DIODE_DIRECTION COL2ROW
#define RGBLED_NUM 16
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/mehkee96/keymaps/default/keymap.c b/keyboards/mehkee96/keymaps/default/keymap.c
index cd69fb2fe9..46ee4d19cc 100644
--- a/keyboards/mehkee96/keymaps/default/keymap.c
+++ b/keyboards/mehkee96/keymaps/default/keymap.c
@@ -68,13 +68,3 @@ BL_TOGG, BL_DEC, BL_INC changes the in-switch LEDs
_______ , _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
-
-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/mehkee96/matrix.c b/keyboards/mehkee96/matrix.c
deleted file mode 100644
index bbb84e52e4..0000000000
--- a/keyboards/mehkee96/matrix.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_set_row_status(uint8_t row);
-uint8_t bit_reverse(uint8_t x);
-
-__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) {
-}
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-// declarations
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/mehkee96/mehkee96.c b/keyboards/mehkee96/mehkee96.c
index 46427ec93b..d9e2bac7a5 100644
--- a/keyboards/mehkee96/mehkee96.c
+++ b/keyboards/mehkee96/mehkee96.c
@@ -16,13 +16,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "mehkee96.h"
-
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
diff --git a/keyboards/mehkee96/readme.md b/keyboards/mehkee96/readme.md
index a06f2e33e6..ff1a6e201a 100644
--- a/keyboards/mehkee96/readme.md
+++ b/keyboards/mehkee96/readme.md
@@ -4,43 +4,16 @@
96-key Keyboard from mehkee
-Keyboard Maintainer: [johanntang](https://github.com/johanntang)
-Hardware Supported: mehkee96
-Hardware Availability: [mehkee, group buy closed](https://mehkee.com/products/96kee?variant=46912017423)
+* Keyboard Maintainer: [johanntang](https://github.com/johanntang)
+* Hardware Supported: mehkee96
+* Hardware Availability: [mehkee, group buy closed](https://mehkee.com/products/96kee?variant=46912017423)
Make example for this keyboard (after setting up your build environment):
make mehkee96:default
-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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make mehkee96:default:flash
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/mehkee96/rules.mk b/keyboards/mehkee96/rules.mk
index 1cbd02948f..a7d36548f0 100644
--- a/keyboards/mehkee96/rules.mk
+++ b/keyboards/mehkee96/rules.mk
@@ -24,7 +24,3 @@ RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
diff --git a/keyboards/model01/keymaps/default/keymap.c b/keyboards/model01/keymaps/default/keymap.c
index a6e5303fe8..5ee865972e 100644
--- a/keyboards/model01/keymaps/default/keymap.c
+++ b/keyboards/model01/keymaps/default/keymap.c
@@ -110,7 +110,7 @@ void rgb_matrix_indicators_user(void) {
}
#else /* no RGB matrix support */
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
if (state & (1<<NUM)) {
set_numpad_colours(1, &set_led_to);
} else {
diff --git a/keyboards/model01/keymaps/dshields/keymap.c b/keyboards/model01/keymaps/dshields/keymap.c
index 7dbfaf0cfb..04887124f9 100644
--- a/keyboards/model01/keymaps/dshields/keymap.c
+++ b/keyboards/model01/keymaps/dshields/keymap.c
@@ -4,7 +4,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEF] = LAYOUT(
RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
- KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_TOG, _______, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL ,
+ KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_TOG, DM_REC1, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL ,
KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , DM_PLY1, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
OSMLCTL, OSMRCTL,
@@ -15,9 +15,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[FUN] = LAYOUT(
EEP_RST, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
- KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_MOD, DM_REC1, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
- KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, RGB_HUI, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
- KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, RGB_HUD, DM_RSTP, _______, _______, _______, _______, KC_BSLS, KC_PIPE,
+ KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_MOD, DM_REC2, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
+ KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, RGB_HUI, DM_RSTP, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
+ KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, RGB_HUD, DM_PLY2, _______, _______, _______, _______, KC_BSLS, KC_PIPE,
_______, _______,
KC_DEL , KC_ENT ,
_______, _______,
diff --git a/keyboards/mt40/config.h b/keyboards/mt40/config.h
index 48f707f71f..f5038fb541 100644
--- a/keyboards/mt40/config.h
+++ b/keyboards/mt40/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DESCRIPTION A Planck clone
/* key matrix size */
-#define MATRIX_ROWS 8
+#define MATRIX_ROWS 7
#define MATRIX_COLS 15
#define NO_UART 1
@@ -55,12 +55,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* #define CB6 0x37 // B7 */
/* #define CC7 0x62 // C2 */
-#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
-#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C2, C3, C4, C5, C6, C7, D7 }
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
/* #define UNUSED_PINS */
/* COL2ROW, ROW2COL*/
-/* #define DIODE_DIRECTION COL2ROW */
+#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_PIN D2
diff --git a/keyboards/mt40/matrix.c b/keyboards/mt40/matrix.c
deleted file mode 100644
index d75fcc221a..0000000000
--- a/keyboards/mt40/matrix.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-#include "config.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-__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) {
-}
-
-
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
- matrix_init_kb();
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_kb();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/mt40/mt40.h b/keyboards/mt40/mt40.h
index a539577082..3ff9c89d00 100644
--- a/keyboards/mt40/mt40.h
+++ b/keyboards/mt40/mt40.h
@@ -34,7 +34,6 @@
{ K30, K11, K12, K13, K14, K15, KC_NO, KC_NO, KC_NO, KC_NO, K1A, K1B, KC_NO, KC_NO, KC_NO }, \
{ K10, K01, K02, K03, K04, K05, KC_NO, KC_NO, KC_NO, KC_NO, K0A, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ K00, 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, K0B }, \
- { 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, K06, K16, K26, K35, K38, K3A, K39, K3B, KC_NO, KC_NO, K07, K17, K27 }, \
{ KC_NO, KC_NO, K09, K19, K29, KC_NO, K2B, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K08, K18, K28 } \
}
diff --git a/keyboards/mt40/readme.md b/keyboards/mt40/readme.md
index aba5fa0d0c..5fc82d89a7 100644
--- a/keyboards/mt40/readme.md
+++ b/keyboards/mt40/readme.md
@@ -1,16 +1,19 @@
-# MT40: An 40% Ortholinear Keyboard
+# MT40
-## Program
+[MT40](https://i.imgur.com/0opsDkt.jpg)
-`make mt40:default:program`
+A 40% Ortholinear Keyboard
-## Pictures
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: MT40
+* Hardware Availability: <https://world.taobao.com/item/548335974877.htm?fromSite=main&spm=a312a.7700824.w4002-6810221593.51.670e68a08mRh69>
-[PCB](https://i.imgur.com/8BeeY07.jpg)
-[Backview of the PCB](https://i.imgur.com/0opsDkt.jpg)
-[Board with Sleeve](https://i.imgur.com/44FhPU8.jpg)
+Make example for this keyboard (after setting up your build environment):
-## Buy
+ make mt40:default
-https://world.taobao.com/item/548335974877.htm?fromSite=main&spm=a312a.7700824.w4002-6810221593.51.670e68a08mRh69
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make mt40:default:flash
+
+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/mt40/rules.mk b/keyboards/mt40/rules.mk
index 0cbf90c674..338a83cc74 100644
--- a/keyboards/mt40/rules.mk
+++ b/keyboards/mt40/rules.mk
@@ -29,9 +29,5 @@ TAP_DANCE_ENABLE = no
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
-
LAYOUTS = planck_mit
LAYOUTS_HAS_RGB = no
diff --git a/keyboards/mxss/rules.mk b/keyboards/mxss/rules.mk
index 7df8517583..f9210319e3 100644
--- a/keyboards/mxss/rules.mk
+++ b/keyboards/mxss/rules.mk
@@ -32,6 +32,7 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
# Remove the common RGB light code and use my iteration instead
OPT_DEFS += -DRGBLIGHT_ENABLE
+SRC += $(QUANTUM_DIR)/process_keycode/process_rgb.c
SRC += rgblight.c
SRC += ws2812.c
CIE1931_CURVE = yes
diff --git a/keyboards/naked48/rev1/config.h b/keyboards/naked48/rev1/config.h
index 0d0390366f..d770fefb49 100644
--- a/keyboards/naked48/rev1/config.h
+++ b/keyboards/naked48/rev1/config.h
@@ -18,8 +18,6 @@ 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 0xFEED
#define PRODUCT_ID 0x3060
diff --git a/keyboards/navi10/info.json b/keyboards/navi10/info.json
new file mode 100644
index 0000000000..dc92144d9d
--- /dev/null
+++ b/keyboards/navi10/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Navi10",
+ "url": "",
+ "maintainer": "emdarcher",
+ "width": 3,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Fn", "x":0, "y":0}, {"label":"Home", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"Del", "x":0, "y":1}, {"label":"End", "x":1, "y":1}, {"label":"PgDn", "x":2, "y":1}, {"label":"Up", "x":1, "y":3}, {"label":"Left", "x":0, "y":4}, {"label":"Down", "x":1, "y":4}, {"label":"Right", "x":2, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/navi10/keymaps/default/keymap.c b/keyboards/navi10/keymaps/default/keymap.c
new file mode 100644
index 0000000000..d1b3127760
--- /dev/null
+++ b/keyboards/navi10/keymaps/default/keymap.c
@@ -0,0 +1,131 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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
+
+//create the tap type
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+//tap dance states
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+};
+
+//tap dance keys
+enum {
+ TAPPY_KEY = 0
+};
+
+//function to handle all the tap dances
+int cur_dance(qk_tap_dance_state_t *state);
+
+//functions for each tap dance
+void tk_finished(qk_tap_dance_state_t *state, void *user_data);
+void tk_reset(qk_tap_dance_state_t *state, void *user_data);
+
+#define INDICATOR_LED B5
+
+#define _FN0 1
+#define _ML1 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(/* Base */
+ TD(TAPPY_KEY),KC_HOME, KC_PGUP,
+ KC_DEL, KC_END, KC_PGDN,
+
+ KC_UP,
+ KC_LEFT, KC_DOWN, KC_RIGHT),
+ [_FN0] = LAYOUT(/* function layer */
+ KC_TRNS, KC_PAUS, KC_VOLU,
+ KC_ENTER, KC_SLCK, KC_VOLD,
+
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS),
+ [_ML1] = LAYOUT(/* media function layer, toggled on a single tap */
+ KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_MUTE, KC_TRNS, KC_VOLD,
+
+ KC_SPC,
+ KC_MRWD, KC_MPLY, KC_MFFD),
+};
+
+//determine the current tap dance state
+int cur_dance (qk_tap_dance_state_t *state){
+ if(state->count == 1){
+ //if a tap was registered
+ if(!state->pressed){
+ //if not still pressed, then was a single tap
+ return SINGLE_TAP;
+ } else {
+ //if still pressed/held down, then it's a single hold
+ return SINGLE_HOLD;
+ }
+ } else {
+ return 8;
+ }
+}
+
+//initialize the tap structure for the tap key
+static tap tk_tap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+//functions that control what our tap dance key does
+void tk_finished(qk_tap_dance_state_t *state, void *user_data){
+ tk_tap_state.state = cur_dance(state);
+ switch(tk_tap_state.state){
+ case SINGLE_TAP:
+ //send desired key when tapped:
+ //setting to the media layer
+ if(layer_state_is(_ML1)){
+ //if already active, toggle it to off
+ layer_off(_ML1);
+ //turn off the indicator LED
+ //set LED HI to turn it off
+ writePinHigh(INDICATOR_LED);
+ } else {
+ //turn on the media layer
+ layer_on(_ML1);
+ //turn on the indicator LED
+ //set LED pin to LOW to turn it on
+ writePinLow(INDICATOR_LED);
+ }
+ break;
+ case SINGLE_HOLD:
+ //set to desired layer when held:
+ //setting to the function layer
+ layer_on(_FN0);
+ break;
+ }
+}
+
+void tk_reset(qk_tap_dance_state_t *state, void *user_data){
+ //if held and released, leave the layer
+ if(tk_tap_state.state == SINGLE_HOLD){
+ layer_off(_FN0);
+ }
+ //reset the state
+ tk_tap_state.state = 0;
+}
+
+//associate the tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TAPPY_KEY] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, tk_finished, tk_reset, 275)
+};
diff --git a/keyboards/navi10/keymaps/default/readme.md b/keyboards/navi10/keymaps/default/readme.md
new file mode 100644
index 0000000000..9e54a3f20a
--- /dev/null
+++ b/keyboards/navi10/keymaps/default/readme.md
@@ -0,0 +1,11 @@
+# The default keymap for the Navi10
+
+This keymap keeps a basic Navigation Cluster layout, but utilizes the Insert key as a FN/Tap key to access 2 layers.
+
+- Base Layer:
+ * Navigation Cluster (sans Insert Key)
+- Hold Insert -> Function Layer:
+ * Maps Volume Control on PgUp/PgDN, Pause/Scroll-Lock on Home/End (MacOS brightness), and Delete to Enter.
+- Tap Insert Once -> Media Layer (Tap again to leave):
+ * Has mappings for Audio control on MacOS using the arrow keys, PgUp/PgDn, and Delete.
+ * Lights up the Central 3mm indicator LED.
diff --git a/keyboards/navi10/keymaps/default/rules.mk b/keyboards/navi10/keymaps/default/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/navi10/keymaps/default/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/navi10/keymaps/emdarcher/keymap.c b/keyboards/navi10/keymaps/emdarcher/keymap.c
new file mode 100644
index 0000000000..40efed48d5
--- /dev/null
+++ b/keyboards/navi10/keymaps/emdarcher/keymap.c
@@ -0,0 +1,182 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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
+
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+//tap dance states
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ TRIPLE_TAP = 4
+};
+
+//tap dance keys
+enum {
+ TAPPY_KEY = 0
+};
+
+//function to handle all the tap dances
+int cur_dance(qk_tap_dance_state_t *state);
+
+//functions for each tap dance
+void tk_finished(qk_tap_dance_state_t *state, void *user_data);
+void tk_reset(qk_tap_dance_state_t *state, void *user_data);
+
+#define INDICATOR_LED B5
+#define TX_LED D5
+#define RX_LED B0
+
+#define _FN0 1
+#define _ML1 2
+#define _CL0 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(/* Base */
+ TD(TAPPY_KEY),KC_HOME, KC_PGUP,
+ KC_DEL, KC_END, KC_PGDN,
+
+ KC_UP,
+ KC_LEFT, KC_DOWN, KC_RIGHT),
+ [_FN0] = LAYOUT(/* function layer */
+ KC_TRNS, KC_PAUS, KC_VOLU,
+ KC_ENTER, KC_SLCK, KC_VOLD,
+
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS),
+ [_ML1] = LAYOUT(/* media function layer on double tap */
+ KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_MUTE, KC_TRNS, KC_VOLD,
+
+ KC_SPC,
+ KC_MRWD, KC_MPLY, KC_MFFD),
+ [_CL0] = LAYOUT(/* control layer on single tap */
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ LCTL(KC_UP),
+ LCTL(KC_LEFT), LCTL(KC_DOWN), LCTL(KC_RIGHT) ),
+};
+
+void matrix_init_user(void) {
+ //init the Pro Micro on-board LEDs
+ setPinOutput(TX_LED);
+ setPinOutput(RX_LED);
+ //set to off
+ writePinHigh(TX_LED);
+ writePinHigh(RX_LED);
+}
+
+//determine the current tap dance state
+int cur_dance (qk_tap_dance_state_t *state){
+ if(state->count == 1){
+ //if a tap was registered
+ if(!state->pressed){
+ //if not still pressed, then was a single tap
+ return SINGLE_TAP;
+ } else {
+ //if still pressed/held down, then it's a single hold
+ return SINGLE_HOLD;
+ }
+ } else if(state->count == 2){
+ //if tapped twice, set to double tap
+ return DOUBLE_TAP;
+ } else if(state->count == 3){
+ //if tapped thrice, set to triple tap
+ return TRIPLE_TAP;
+ } else {
+ return 8;
+ }
+}
+
+
+//initialize the tap structure for the tap key
+static tap tk_tap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+//functions that control what our tap dance key does
+void tk_finished(qk_tap_dance_state_t *state, void *user_data){
+ tk_tap_state.state = cur_dance(state);
+ switch(tk_tap_state.state){
+ case SINGLE_TAP:
+ //toggle desired layer when tapped:
+ if(layer_state_is(_CL0)){
+ //if already active, toggle it to off
+ layer_off(_CL0);
+ //turn off LEDs
+ writePinHigh(TX_LED);
+ writePinHigh(RX_LED);
+ } else {
+ //turn on the command layer
+ layer_on(_CL0);
+ //turn on the LEDs
+ writePinLow(TX_LED);
+ writePinLow(RX_LED);
+ }
+ break;
+ case SINGLE_HOLD:
+ //set to desired layer when held:
+ //setting to the function layer
+ layer_on(_FN0);
+ break;
+ case DOUBLE_TAP:
+ //set to desired layer when double tapped:
+ //setting to the media layer
+ if(layer_state_is(_ML1)){
+ //if already active, toggle it to off
+ layer_off(_ML1);
+ //turn off the indicator LED
+ //set LED HI to turn it off
+ writePinHigh(INDICATOR_LED);
+ } else {
+ //turn on the media layer
+ layer_on(_ML1);
+ //turn on the indicator LED
+ //set LED pin to LOW to turn it on
+ writePinLow(INDICATOR_LED);
+ }
+ break;
+ case TRIPLE_TAP:
+ //reset all layers
+ layer_clear();
+ //set all LEDs off
+ writePinHigh(TX_LED);
+ writePinHigh(RX_LED);
+ writePinHigh(INDICATOR_LED);
+ break;
+ }
+}
+
+void tk_reset(qk_tap_dance_state_t *state, void *user_data){
+ //if held and released, leave the layer
+ if(tk_tap_state.state == SINGLE_HOLD){
+ layer_off(_FN0);
+ }
+ //reset the state
+ tk_tap_state.state = 0;
+}
+
+
+//associate the tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TAPPY_KEY] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, tk_finished, tk_reset, 275)
+};
diff --git a/keyboards/navi10/keymaps/emdarcher/readme.md b/keyboards/navi10/keymaps/emdarcher/readme.md
new file mode 100644
index 0000000000..b4ae6d75ff
--- /dev/null
+++ b/keyboards/navi10/keymaps/emdarcher/readme.md
@@ -0,0 +1,16 @@
+# emdarcher's keymap for the Navi10
+
+This is my personal keymap for the Navi10, developed for the original Rev0 prototype. It uses Tap Dance extensively on the INSERT key to access different layers.
+
+- Base Layer:
+ * Regular Navigation Cluster except for the INSERT key which is for tapping.
+- Hold Insert -> Function Layer:
+ * Maps Volume Control on PgUp/PgDN, Pause/Scroll-Lock on Home/End (MacOS brightness), and Delete to Enter.
+- 2 Taps -> Media Layer:
+ * Has mappings for Audio control on MacOS using the arrow keys, PgUp/PgDn, and Delete.
+ * Lights up the Central 3mm indicator LED.
+- 1 Tap -> Control Layer:
+ * Binds the arrow keys as LCTRL + Arrow Key for use in changing workspaces in MacOS.
+ * Lights the Pro Micro TX/RX LEDs. These are visible through the board if you use clear PCB mount switch bases.
+
+
diff --git a/keyboards/navi10/keymaps/emdarcher/rules.mk b/keyboards/navi10/keymaps/emdarcher/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/navi10/keymaps/emdarcher/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/navi10/readme.md b/keyboards/navi10/readme.md
new file mode 100644
index 0000000000..58a94711f2
--- /dev/null
+++ b/keyboards/navi10/readme.md
@@ -0,0 +1,19 @@
+# Navi10 / ナビ10
+
+![navi10](https://i.imgur.com/QpFCMFd.jpg)
+
+A simple and fun navigation cluster macropad with exposed components.
+
+* Keyboard Maintainer: [emdarcher](https://github.com/emdarcher)
+* Hardware Supported: Navi10
+* Hardware Availability: [KeyHive](https://www.keyhive.xyz/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make navi10:default
+
+Make example for a specific revision (ex. rev2):
+
+ make navi10/rev2: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/navi10/rev0/config.h b/keyboards/navi10/rev0/config.h
new file mode 100644
index 0000000000..23fad9dbc3
--- /dev/null
+++ b/keyboards/navi10/rev0/config.h
@@ -0,0 +1,51 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 emdarcher
+#define PRODUCT Navi10
+#define DESCRIPTION A simple and fun navigation cluster macropad with retro Sci-Fi vibes.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS \
+ { B6, B2, B3, B4 }
+#define MATRIX_COL_PINS \
+ { D1, D0, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
diff --git a/keyboards/navi10/rev0/rev0.c b/keyboards/navi10/rev0/rev0.c
new file mode 100644
index 0000000000..f6c1f362ca
--- /dev/null
+++ b/keyboards/navi10/rev0/rev0.c
@@ -0,0 +1,30 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "rev0.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //set the indicator LED pin to Output
+ setPinOutput(B5);
+ //set HIGH for off.
+ writePinHigh(B5);
+
+ //call any user functions
+ matrix_init_user();
+}
+
diff --git a/keyboards/navi10/rev0/rev0.h b/keyboards/navi10/rev0/rev0.h
new file mode 100644
index 0000000000..b162d14425
--- /dev/null
+++ b/keyboards/navi10/rev0/rev0.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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( \
+ k0, k1, k2, \
+ k3, k4, k5, \
+ \
+ k6, \
+ k7, k8, k9 \
+) \
+{ \
+ {k0, k1, k2}, \
+ {k3, k4, k5}, \
+ {KC_NO, k6, KC_NO}, \
+ {k7, k8, k9}, \
+}
+
+
diff --git a/keyboards/navi10/rev0/rules.mk b/keyboards/navi10/rev0/rules.mk
new file mode 100644
index 0000000000..79950e2a8f
--- /dev/null
+++ b/keyboards/navi10/rev0/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/navi10/rev2/config.h b/keyboards/navi10/rev2/config.h
new file mode 100644
index 0000000000..f739f2ce29
--- /dev/null
+++ b/keyboards/navi10/rev2/config.h
@@ -0,0 +1,51 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 0x0002
+#define MANUFACTURER emdarcher
+#define PRODUCT Navi10
+#define DESCRIPTION A simple and fun navigation cluster macropad with exposed components.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS \
+ { B6, B2, B3, B4 }
+#define MATRIX_COL_PINS \
+ { D4, C6, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
diff --git a/keyboards/navi10/rev2/rev2.c b/keyboards/navi10/rev2/rev2.c
new file mode 100644
index 0000000000..fed0e03897
--- /dev/null
+++ b/keyboards/navi10/rev2/rev2.c
@@ -0,0 +1,30 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "rev2.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //set the indicator LED pin to Output
+ setPinOutput(B5);
+ //set HIGH for off.
+ writePinHigh(B5);
+
+ //call any user functions
+ matrix_init_user();
+}
+
diff --git a/keyboards/navi10/rev2/rev2.h b/keyboards/navi10/rev2/rev2.h
new file mode 100644
index 0000000000..b162d14425
--- /dev/null
+++ b/keyboards/navi10/rev2/rev2.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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( \
+ k0, k1, k2, \
+ k3, k4, k5, \
+ \
+ k6, \
+ k7, k8, k9 \
+) \
+{ \
+ {k0, k1, k2}, \
+ {k3, k4, k5}, \
+ {KC_NO, k6, KC_NO}, \
+ {k7, k8, k9}, \
+}
+
+
diff --git a/keyboards/navi10/rev2/rules.mk b/keyboards/navi10/rev2/rules.mk
new file mode 100644
index 0000000000..79950e2a8f
--- /dev/null
+++ b/keyboards/navi10/rev2/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/navi10/rev3/config.h b/keyboards/navi10/rev3/config.h
new file mode 100644
index 0000000000..a203cf73b5
--- /dev/null
+++ b/keyboards/navi10/rev3/config.h
@@ -0,0 +1,51 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 0x0003
+#define MANUFACTURER emdarcher
+#define PRODUCT Navi10
+#define DESCRIPTION A simple and fun navigation cluster macropad with exposed components.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS \
+ { B6, B2, B3, B4 }
+#define MATRIX_COL_PINS \
+ { D4, E6, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
diff --git a/keyboards/navi10/rev3/rev3.c b/keyboards/navi10/rev3/rev3.c
new file mode 100644
index 0000000000..2b0355aa36
--- /dev/null
+++ b/keyboards/navi10/rev3/rev3.c
@@ -0,0 +1,30 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "rev3.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //set the indicator LED pin to Output
+ setPinOutput(B5);
+ //set HIGH for off.
+ writePinHigh(B5);
+
+ //call any user functions
+ matrix_init_user();
+}
+
diff --git a/keyboards/navi10/rev3/rev3.h b/keyboards/navi10/rev3/rev3.h
new file mode 100644
index 0000000000..b162d14425
--- /dev/null
+++ b/keyboards/navi10/rev3/rev3.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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( \
+ k0, k1, k2, \
+ k3, k4, k5, \
+ \
+ k6, \
+ k7, k8, k9 \
+) \
+{ \
+ {k0, k1, k2}, \
+ {k3, k4, k5}, \
+ {KC_NO, k6, KC_NO}, \
+ {k7, k8, k9}, \
+}
+
+
diff --git a/keyboards/navi10/rev3/rules.mk b/keyboards/navi10/rev3/rules.mk
new file mode 100644
index 0000000000..b98e7eb2d6
--- /dev/null
+++ b/keyboards/navi10/rev3/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
diff --git a/keyboards/navi10/rules.mk b/keyboards/navi10/rules.mk
new file mode 100644
index 0000000000..cc08312b77
--- /dev/null
+++ b/keyboards/navi10/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = navi10/rev3
diff --git a/keyboards/ncc1701kb/config.h b/keyboards/ncc1701kb/config.h
new file mode 100644
index 0000000000..71978858ec
--- /dev/null
+++ b/keyboards/ncc1701kb/config.h
@@ -0,0 +1,53 @@
+/*
+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 0x1701
+#define DEVICE_VER 0x0001
+#define MANUFACTURER J2L Designs
+#define PRODUCT NCC1701KB
+#define DESCRIPTION J2L NCC1701KB
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/* NCC-1701-KB PCB default pin-out */
+#define MATRIX_ROW_PINS { D4, D6, D7 }
+#define MATRIX_COL_PINS { B4, B5, B6 }
+#define UNUSED_PINS
+
+/* BackLight */
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
+
+/*Encoders */
+#define ENCODERS_PAD_A { D0 }
+#define ENCODERS_PAD_B { D1 }
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+#define TAPPING_TERM 200
diff --git a/keyboards/ncc1701kb/info.json b/keyboards/ncc1701kb/info.json
new file mode 100644
index 0000000000..bc0f04db16
--- /dev/null
+++ b/keyboards/ncc1701kb/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "NCC-1701-KB",
+ "url": "",
+ "maintainer": "jessel92",
+ "width": 3,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"label":"Encoder", "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/ncc1701kb/keymaps/default/keymap.c b/keyboards/ncc1701kb/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a3e3d819fd
--- /dev/null
+++ b/keyboards/ncc1701kb/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* LAYER 0
+ * ,-----------------------.
+ * | << | MUTE | >> | ENCODER - PRESS (MUTE) / KNOB (VOLUME CONTROL)
+ * |-------+-------+-------|
+ * | STOP | PLAY | MEDIA |
+ * |-------+-------+-------|
+ * | CALC | MAIL | PC/FN |
+ * `-----------------------'
+ */
+[0] = LAYOUT(
+ KC_MPRV, KC_MUTE, KC_MNXT,
+ KC_MSTP, KC_MPLY, KC_MSEL,
+ KC_CALC, KC_MAIL, LT(1, KC_MYCM)
+),
+
+/* LAYER 1
+ * ,-----------------------.
+ * |BL TOG | | BREATH|
+ * |-------+-------+-------|
+ * | BL + | BL - |BL CYCL|
+ * |-------+-------+-------|
+ * | BL ON | BL OFF| |
+ * `-----------------------'
+ */
+[1] = LAYOUT(
+ BL_TOGG, KC_TRNS, BL_BRTG,
+ BL_INC, BL_DEC, BL_STEP,
+ BL_ON, BL_OFF, KC_TRNS
+)
+
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) { /* Second encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/ncc1701kb/ncc1701kb.c b/keyboards/ncc1701kb/ncc1701kb.c
new file mode 100644
index 0000000000..b654ece5ac
--- /dev/null
+++ b/keyboards/ncc1701kb/ncc1701kb.c
@@ -0,0 +1 @@
+#include "ncc1701kb.h"
diff --git a/keyboards/ncc1701kb/ncc1701kb.h b/keyboards/ncc1701kb/ncc1701kb.h
new file mode 100644
index 0000000000..639adc409d
--- /dev/null
+++ b/keyboards/ncc1701kb/ncc1701kb.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00, k01, k02, \
+ k10, k11, k12, \
+ k20, k21, k22 \
+) \
+{ \
+ { k00, k01, k02 }, \
+ { k10, k11, k12 }, \
+ { k20, k21, k22 } \
+}
diff --git a/keyboards/ncc1701kb/readme.md b/keyboards/ncc1701kb/readme.md
new file mode 100644
index 0000000000..4e9ece7532
--- /dev/null
+++ b/keyboards/ncc1701kb/readme.md
@@ -0,0 +1,17 @@
+# NCC-1701-KB Keypad with Encoder
+
+![NCC-1701-KB PCB](https://i.imgur.com/aXFgH52.jpg)
+![NCC-1701-KB](https://i.imgur.com/9hWyhcR.jpg)
+
+The NCC-1701-KB Keypad is a custom Star Trek-inspired 3x3 mechanical keypad with an encoder knob.
+
+* Keyboard Maintainer: [J2L Designs](https://github.com/jessel92)
+* Hardware Supported: NCC-1701-KB PCB, ATmega32U4
+* Hardware Availability: [J2L Designs Store](https://www.etsy.com/listing/752039967/ncc-1701-kb-custom-star-trek-inspired)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ncc1701kb: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/ncc1701kb/rules.mk b/keyboards/ncc1701kb/rules.mk
new file mode 100644
index 0000000000..791d82b401
--- /dev/null
+++ b/keyboards/ncc1701kb/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+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
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI controls
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = yes # Unicode
+API_SYSEX_ENABLE = yes
+TAP_DANCE_ENABLE = no
+ENCODER_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/newgame40/keymaps/default/keymap.c b/keyboards/newgame40/keymaps/default/keymap.c
index 41f16a7b76..282a06c102 100644
--- a/keyboards/newgame40/keymaps/default/keymap.c
+++ b/keyboards/newgame40/keymaps/default/keymap.c
@@ -171,7 +171,7 @@ enum layers {
};
- uint32_t layer_state_set_user(uint32_t state) {
+ layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/nk65/config.h b/keyboards/nk65/config.h
index 51e101cde5..767959b626 100755
--- a/keyboards/nk65/config.h
+++ b/keyboards/nk65/config.h
@@ -25,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER Yiancar-Designs
#define PRODUCT NK65
-#define DESCRIPTION A 65-percent, tool-free RGB keyboard
+#define DESCRIPTION "A 65-percent, tool-free RGB keyboard"
/* key matrix size */
#define MATRIX_ROWS 5
@@ -82,6 +82,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
+
/* Backlight options */
#define RGB_BACKLIGHT_ENABLED 1
@@ -134,21 +138,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x451F
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+32)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 69
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-// Dynamic macro starts after dynamic keymaps (69+(4*5*15*2)) = (69+600)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 669
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 396
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
diff --git a/keyboards/nk65/keymaps/default_via/rules.mk b/keyboards/nk65/keymaps/default_via/rules.mk
deleted file mode 100755
index b8311f5e7f..0000000000
--- a/keyboards/nk65/keymaps/default_via/rules.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c \
- keyboards/wilba_tech/wt_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
-# <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 =
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
-# Build Options
-# comment out to disable the options.
-#
-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 = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover
-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/nk65/keymaps/default_via/keymap.c b/keyboards/nk65/keymaps/via/keymap.c
index a793a8bf41..a793a8bf41 100755
--- a/keyboards/nk65/keymaps/default_via/keymap.c
+++ b/keyboards/nk65/keymaps/via/keymap.c
diff --git a/keyboards/nk65/keymaps/default_via/readme.md b/keyboards/nk65/keymaps/via/readme.md
index 6689191e4c..6689191e4c 100755
--- a/keyboards/nk65/keymaps/default_via/readme.md
+++ b/keyboards/nk65/keymaps/via/readme.md
diff --git a/keyboards/nk65/keymaps/via/rules.mk b/keyboards/nk65/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/nk65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/nk65/nk65.c b/keyboards/nk65/nk65.c
index 4952462183..972373e1b2 100755
--- a/keyboards/nk65/nk65.c
+++ b/keyboards/nk65/nk65.c
@@ -13,6 +13,42 @@
* 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 RGB_BACKLIGHT_NK65
- #error RGB_BACKLIGHT_NK65 not defined, recheck config.h
- #endif
+#ifndef RGB_BACKLIGHT_NK65
+#error RGB_BACKLIGHT_NK65 not defined, recheck config.h
+#endif
+
+#include "nk65.h"
+#include "drivers/issi/is31fl3733.h"
+
+/* Indicator LEDS are part of the LED driver
+ * Top LED is blue only. LED driver 2 RGB 7 Green channel
+ * Middle LED is blue and red. LED driver 2 RGB 6 Red and Blue channel
+ * Bottom LED is red only LED driver 2 RGB 6 Green channel.
+ */
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ if (led_state.caps_lock) {
+ IS31FL3733_set_color( 7+64-1, 0, 255, 0 );
+ } else {
+ IS31FL3733_set_color( 7+64-1, 0, 0, 0 );
+ }
+ }
+ return res;
+}
+
+__attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) {
+ uint8_t R = 0;
+ uint8_t G = 0;
+ uint8_t B = 0;
+ if (state & (1UL << 1)) {
+ R = 255;
+ B = 255;
+ }
+ if (state & (1UL << 2)) {
+ G = 255;
+ }
+
+ IS31FL3733_set_color( 6+64-1, R, G, B );
+ return state;
+}
diff --git a/keyboards/nk65/nk65.h b/keyboards/nk65/nk65.h
index 49725a7e64..35aca2a64c 100755
--- a/keyboards/nk65/nk65.h
+++ b/keyboards/nk65/nk65.h
@@ -19,7 +19,7 @@
#include "quantum.h"
#include "../wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "../wilba_tech/via_keycodes.h"
+#include "via.h"
// This a shortcut to help you visually see your layout.
diff --git a/keyboards/nk65/rules.mk b/keyboards/nk65/rules.mk
index 0840daf376..1b734161fc 100755
--- a/keyboards/nk65/rules.mk
+++ b/keyboards/nk65/rules.mk
@@ -10,7 +10,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# comment out to disable the options.
#
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
@@ -21,8 +21,6 @@ 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 = no
-DYNAMIC_KEYMAP_ENABLE = no
CIE1931_CURVE = yes
LAYOUTS = 65_ansi
diff --git a/keyboards/orthodox/keymaps/default/keymap.c b/keyboards/orthodox/keymaps/default/keymap.c
index b1c86da6c0..acbf89ff2c 100644
--- a/keyboards/orthodox/keymaps/default/keymap.c
+++ b/keyboards/orthodox/keymaps/default/keymap.c
@@ -83,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/panc60/readme.md b/keyboards/panc60/readme.md
index 3312a07ce7..52dcc4ccea 100644
--- a/keyboards/panc60/readme.md
+++ b/keyboards/panc60/readme.md
@@ -4,45 +4,18 @@
The panc60 is a 60% PCB with backlight and rgb underglow.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Jack Humbert](https://github.com/jackhumbert)
-Hardware Supported: panc60 PCB
-Hardware Availability: [PANC Interactive](https://store.panc.co/product/panc60-60-pcb)
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Jack Humbert](https://github.com/jackhumbert)
+* Hardware Supported: panc60 PCB
+* Hardware Availability: [PANC Interactive](https://store.panc.co/product/panc60-60-pcb)
Make example for this keyboard (after setting up your build environment):
make panc60:default
-Flashing
-
-**Reset Key:** Hold down the key located at `K40`, commonly programmed as left control while plugging in the keyboard.
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-To put the panc60 into reset, hold left control while plugging in.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make panc60:default:flash
+
+**Reset Key**: Hold down the key located at *K40*, commonly programmed as *left control* while plugging in the keyboard.
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/pearl/readme.md b/keyboards/pearl/readme.md
index c39d86cf3d..1f78a5540a 100644
--- a/keyboards/pearl/readme.md
+++ b/keyboards/pearl/readme.md
@@ -3,45 +3,18 @@
Pearl 40% is a keyboard designed by Koobaczech. It uses an Atmel
ATMEGA32A MCU.
-Keyboard Maintainer: [Ethan Madden](https://github.com/jetpacktuxedo)
-Hardware Supported: Pearl
-Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=92259.0)
+* Keyboard Maintainer: [Ethan Madden](https://github.com/jetpacktuxedo)
+* Hardware Supported: Pearl
+* Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=92259.0)
Make example for this keyboard (after setting up your build environment):
make pearl:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K00`.
-
-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 python3
- pip3 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.
-
-**Please Note:** You will need to use the `EEP_RST` keycode first, followed by unplugging/replugging the board to get RGB underglow effects to work.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make pearl:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
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/peiorisboards/ixora/rules.mk b/keyboards/peiorisboards/ixora/rules.mk
index 9d89d96636..0cea106d05 100644
--- a/keyboards/peiorisboards/ixora/rules.mk
+++ b/keyboards/peiorisboards/ixora/rules.mk
@@ -1,38 +1,5 @@
-# project specific files
-
-## 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 = STM32F042x6
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F042X6
-
-# 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=0x00001000
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+# MCU name
+MCU = STM32F042
# Build Options
# comment out to disable the options.
diff --git a/keyboards/percent/canoe/canoe.c b/keyboards/percent/canoe/canoe.c
index e59b0dd7bc..79c6330fe8 100644
--- a/keyboards/percent/canoe/canoe.c
+++ b/keyboards/percent/canoe/canoe.c
@@ -17,16 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "canoe.h"
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
#ifdef BACKLIGHT_ENABLE
void backlight_set(uint8_t level) {
if (level == 0) {
diff --git a/keyboards/percent/canoe/canoe.h b/keyboards/percent/canoe/canoe.h
index 2f608598f8..83d7c08bb5 100644
--- a/keyboards/percent/canoe/canoe.h
+++ b/keyboards/percent/canoe/canoe.h
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define _x_ KC_NO
-#define LAYOUT_iso( \
+#define LAYOUT_65_iso_blocker( \
K0D, K0C, K0B, K0A, K09, K08, K07, K06, K05, K04, K03, K02, K01, K00, K0E, \
K1D, K1C, K1B, K1A, K19, K18, K17, K16, K15, K14, K13, K12, K11, K1E, \
K2D, K2C, K2B, K2A, K29, K28, K27, K26, K25, K24, K23, K22, K10, K21, K2E, \
@@ -32,10 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
{ _x_, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
- { K40, _x_, K42, K43, K44, _x_, _x_, _x_, K48, _x_, K4A, K4B, K4C, K4D, K4E }, \
- { _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_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_ } \
+ { K40, _x_, K42, K43, K44, _x_, _x_, _x_, K48, _x_, K4A, K4B, K4C, K4D, K4E } \
}
#define LAYOUT_65_ansi_blocker( \
@@ -49,10 +46,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
{ _x_, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
- { K40, _x_, K42, K43, K44, _x_, _x_, _x_, K48, _x_, _x_, K4B, K4C, K4D, K4E }, \
- { _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_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_, _x_ } \
+ { K40, _x_, K42, K43, K44, _x_, _x_, _x_, K48, _x_, _x_, K4B, K4C, K4D, K4E } \
}
#define LAYOUT LAYOUT_65_ansi_blocker // added to not break existing checked in keymaps
+#define LAYOUT_iso LAYOUT_65_iso_blocker
diff --git a/keyboards/percent/canoe/config.h b/keyboards/percent/canoe/config.h
index bae6ed20fa..950e0806e5 100644
--- a/keyboards/percent/canoe/config.h
+++ b/keyboards/percent/canoe/config.h
@@ -28,11 +28,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLED_NUM 2
-#define MATRIX_ROWS 8
+#define MATRIX_ROWS 5
#define MATRIX_COLS 15
-#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
-#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, C1 }
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
#define UNUSED_PINS
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/percent/canoe/info.json b/keyboards/percent/canoe/info.json
index 756cd1b37a..4f13a2786a 100644
--- a/keyboards/percent/canoe/info.json
+++ b/keyboards/percent/canoe/info.json
@@ -5,7 +5,7 @@
"height": 6,
"width": 15,
"layouts": {
- "LAYOUT_iso": {
+ "LAYOUT_65_iso_blocker": {
"key_count": 68,
"layout": [{"label":"K0D", "x":0, "y":0}, {"label":"K0C", "x":1, "y":0}, {"label":"K0B", "x":2, "y":0}, {"label":"K0A", "x":3, "y":0}, {"label":"K09", "x":4, "y":0}, {"label":"K08", "x":5, "y":0}, {"label":"K07", "x":6, "y":0}, {"label":"K06", "x":7, "y":0}, {"label":"K05", "x":8, "y":0}, {"label":"K04", "x":9, "y":0}, {"label":"K03", "x":10, "y":0}, {"label":"K02", "x":11, "y":0}, {"label":"K01", "x":12, "y":0}, {"label":"K00", "x":13, "y":0, "w":2}, {"label":"K0E", "x":15, "y":0}, {"label":"K1D", "x":0, "y":1, "w":1.5}, {"label":"K1C", "x":1.5, "y":1}, {"label":"K1B", "x":2.5, "y":1}, {"label":"K1A", "x":3.5, "y":1}, {"label":"K19", "x":4.5, "y":1}, {"label":"K18", "x":5.5, "y":1}, {"label":"K17", "x":6.5, "y":1}, {"label":"K16", "x":7.5, "y":1}, {"label":"K15", "x":8.5, "y":1}, {"label":"K14", "x":9.5, "y":1}, {"label":"K13", "x":10.5, "y":1}, {"label":"K12", "x":11.5, "y":1}, {"label":"K11", "x":12.5, "y":1}, {"label":"K1E", "x":15, "y":1}, {"label":"K2D", "x":0, "y":2, "w":1.75}, {"label":"K2C", "x":1.75, "y":2}, {"label":"K2B", "x":2.75, "y":2}, {"label":"K2A", "x":3.75, "y":2}, {"label":"K29", "x":4.75, "y":2}, {"label":"K28", "x":5.75, "y":2}, {"label":"K27", "x":6.75, "y":2}, {"label":"K26", "x":7.75, "y":2}, {"label":"K25", "x":8.75, "y":2}, {"label":"K24", "x":9.75, "y":2}, {"label":"K23", "x":10.75, "y":2}, {"label":"K22", "x":11.75, "y":2}, {"label":"K10", "x":12.75, "y":2}, {"label":"K21", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"K2E", "x":15, "y":2}, {"label":"K3D", "x":0, "y":3, "w":1.25}, {"label":"K4A", "x":1.25, "y":3}, {"label":"K3C", "x":2.25, "y":3}, {"label":"K3B", "x":3.25, "y":3}, {"label":"K3A", "x":4.25, "y":3}, {"label":"K39", "x":5.25, "y":3}, {"label":"K38", "x":6.25, "y":3}, {"label":"K37", "x":7.25, "y":3}, {"label":"K36", "x":8.25, "y":3}, {"label":"K35", "x":9.25, "y":3}, {"label":"K34", "x":10.25, "y":3}, {"label":"K33", "x":11.25, "y":3}, {"label":"K32", "x":12.25, "y":3, "w":1.75}, {"label":"K30", "x":14, "y":3}, {"label":"K3E", "x":15, "y":3}, {"label":"K4D", "x":0, "y":4, "w":1.25}, {"label":"K4C", "x":1.25, "y":4, "w":1.25}, {"label":"K4B", "x":2.5, "y":4, "w":1.25}, {"label":"K48", "x":3.75, "y":4, "w":6.25}, {"label":"K44", "x":10, "y":4, "w":1.25}, {"label":"K43", "x":11.25, "y":4, "w":1.25}, {"label":"K42", "x":13, "y":4}, {"label":"K40", "x":14, "y":4}, {"label":"K4E", "x":15, "y":4}]
},
diff --git a/keyboards/percent/canoe/keymaps/default/keymap.c b/keyboards/percent/canoe/keymaps/default/keymap.c
index fc67308476..84169543d0 100644
--- a/keyboards/percent/canoe/keymaps/default/keymap.c
+++ b/keyboards/percent/canoe/keymaps/default/keymap.c
@@ -23,14 +23,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BL] = LAYOUT(
+ [_BL] = LAYOUT_65_ansi_blocker(
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_PSCR, \
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, MO(_FL), KC_LEFT, KC_DOWN, KC_RIGHT),
- [_FL] = LAYOUT(
+ [_FL] = LAYOUT_65_ansi_blocker(
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_PAUS, \
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, \
diff --git a/keyboards/percent/canoe/keymaps/iso/keymap.c b/keyboards/percent/canoe/keymaps/iso/keymap.c
index 89af719d12..5ce88dfee0 100644
--- a/keyboards/percent/canoe/keymaps/iso/keymap.c
+++ b/keyboards/percent/canoe/keymaps/iso/keymap.c
@@ -18,7 +18,7 @@ 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_iso(
+ [0] = LAYOUT_65_iso_blocker(
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_INS,
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_NUBS, KC_ENT, KC_END,
diff --git a/keyboards/percent/canoe/matrix.c b/keyboards/percent/canoe/matrix.c
deleted file mode 100644
index 245813dfd2..0000000000
--- a/keyboards/percent/canoe/matrix.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_set_row_status(uint8_t row);
-uint8_t bit_reverse(uint8_t x);
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-// declarations
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/percent/canoe/readme.md b/keyboards/percent/canoe/readme.md
index 45773e4683..d8a496f26c 100644
--- a/keyboards/percent/canoe/readme.md
+++ b/keyboards/percent/canoe/readme.md
@@ -2,43 +2,16 @@
A 65% keyboard with some RGB
-Keyboard Maintainer: QMK Community
-Hardware Supported: Canoe
-Hardware Availability: https://geekhack.org/index.php?topic=92418.0
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Canoe
+* Hardware Availability: <https://geekhack.org/index.php?topic=92418.0>
Make example for this keyboard (after setting up your build environment):
make percent/canoe:default
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make percent/canoe:default:flash
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/percent/canoe/rules.mk b/keyboards/percent/canoe/rules.mk
index bb14269a2b..6340c81224 100644
--- a/keyboards/percent/canoe/rules.mk
+++ b/keyboards/percent/canoe/rules.mk
@@ -23,8 +23,4 @@ WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
-
-LAYOUTS = 65_ansi_blocker
+LAYOUTS = 65_ansi_blocker 65_iso_blocker
diff --git a/keyboards/percent/skog/README.md b/keyboards/percent/skog/README.md
index 5b7dacd915..9f76110cde 100644
--- a/keyboards/percent/skog/README.md
+++ b/keyboards/percent/skog/README.md
@@ -1,45 +1,17 @@
# Skog TKL
-Keyboard Maintainer: QMK Community
-Hardware Supported: Skog PCB
-Hardware Availability: https://geekhack.org/index.php?topic=87953.0
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: Skog PCB
+* Hardware Availability: <https://geekhack.org/index.php?topic=87953.0>
Make example for this keyboard (after setting up your build environment):
make percent/skog:default
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make percent/skog:default:flash
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as Pause while plugging in the keyboard.
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Pause* while plugging in the keyboard.
-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 python3
- pip3 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.
-
-**Please Note:** You will need to use the `EEP_RST` keycode first, followed by unplugging/replugging the board to get RGB underglow effects to work.
-
-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
+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/percent/skog/config.h b/keyboards/percent/skog/config.h
index 7c68d797d5..7a0c703ec9 100644
--- a/keyboards/percent/skog/config.h
+++ b/keyboards/percent/skog/config.h
@@ -26,9 +26,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT Skog TKL
/* matrix size */
-#define MATRIX_ROWS 8
+#define MATRIX_ROWS 7
#define MATRIX_COLS 14
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2 }
+#define DIODE_DIRECTION COL2ROW
+
#define RGBLED_NUM 2
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/percent/skog/keymaps/default/keymap.c b/keyboards/percent/skog/keymaps/default/keymap.c
index eefc24cb0d..282ce39a50 100644
--- a/keyboards/percent/skog/keymaps/default/keymap.c
+++ b/keyboards/percent/skog/keymaps/default/keymap.c
@@ -27,11 +27,3 @@ const uint16_t PROGMEM 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
)
};
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
diff --git a/keyboards/percent/skog/matrix.c b/keyboards/percent/skog/matrix.c
deleted file mode 100644
index 245813dfd2..0000000000
--- a/keyboards/percent/skog/matrix.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_set_row_status(uint8_t row);
-uint8_t bit_reverse(uint8_t x);
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-// declarations
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/percent/skog/rules.mk b/keyboards/percent/skog/rules.mk
index 2b0c1154dd..da03a2e0c3 100644
--- a/keyboards/percent/skog/rules.mk
+++ b/keyboards/percent/skog/rules.mk
@@ -28,6 +28,4 @@ OPT_DEFS = -DDEBUG_LEVEL=0
# 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 setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c backlight.c
+SRC = backlight.c
diff --git a/keyboards/percent/skog/skog.c b/keyboards/percent/skog/skog.c
index 8678d483a7..1c26c550e5 100644
--- a/keyboards/percent/skog/skog.c
+++ b/keyboards/percent/skog/skog.c
@@ -22,16 +22,6 @@ ps2avrGB support code by Kenneth A. (bminiex/.[ch])
#include "backlight.h"
#include "backlight_custom.h"
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
void backlight_init_ports(void) {
diff --git a/keyboards/percent/skog/skog.h b/keyboards/percent/skog/skog.h
index 17be94621b..c04a765b2e 100644
--- a/keyboards/percent/skog/skog.h
+++ b/keyboards/percent/skog/skog.h
@@ -32,7 +32,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ K01, K11, K21, K31, K41, K51, K61, KC_NO, K81, K91, KA1, KB1, KC1, KD1 }, \
{ K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2 }, \
{ K03, K13, K23, K33, K43, K53, K63, K73, K83, K93, KA3, KB3, KC3, KD3 }, \
- { 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 }, \
{ K05, K15, K25, K35, K45, K55, K65, K75, K85, K95, KA5, KB5, KC5, KC_NO }, \
{ K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6 }, \
{ K07, K17, K27, K37, KC_NO, K57, KC_NO, KC_NO, K87, K97, KA7, KB7, KC7, KD7 } \
diff --git a/keyboards/percent/skog_lite/readme.md b/keyboards/percent/skog_lite/readme.md
index 369129e86f..72ca797254 100644
--- a/keyboards/percent/skog_lite/readme.md
+++ b/keyboards/percent/skog_lite/readme.md
@@ -2,47 +2,18 @@
TKL Custom Keyboard.
-
-Keyboard Maintainer: [mechmerlin](https://github.com/mechmerlin)
-Hardware Supported: Skog Lite PCB
-Hardware Availability: [Kono Store](https://kono.store/products/skog-lite)
-
+* Keyboard Maintainer: [mechmerlin](https://github.com/mechmerlin)
+* Hardware Supported: Skog Lite PCB
+* Hardware Availability: [Kono Store](https://kono.store/products/skog-lite)
Make example for this keyboard (after setting up your build environment):
make percent/skog_lite:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K05`, commonly programmed as `F5` while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make percent/skog_lite:default:flash
+**Reset Key**: Hold down the key located at *K05*, commonly programmed as *F5* while plugging in the keyboard.
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/pico/65keys/65keys.c b/keyboards/pico/65keys/65keys.c
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/pico/65keys/65keys.c
diff --git a/keyboards/pico/rev1/rev1.h b/keyboards/pico/65keys/65keys.h
index 61e32efd2c..61e32efd2c 100644
--- a/keyboards/pico/rev1/rev1.h
+++ b/keyboards/pico/65keys/65keys.h
diff --git a/keyboards/pico/rev1/config.h b/keyboards/pico/65keys/config.h
index ab22025256..ab22025256 100644
--- a/keyboards/pico/rev1/config.h
+++ b/keyboards/pico/65keys/config.h
diff --git a/keyboards/pico/info.json b/keyboards/pico/65keys/info.json
index c5c9c8a85f..c5c9c8a85f 100644
--- a/keyboards/pico/info.json
+++ b/keyboards/pico/65keys/info.json
diff --git a/keyboards/pico/keymaps/default/config.h b/keyboards/pico/65keys/keymaps/default/config.h
index 5cbe7609a3..5cbe7609a3 100644
--- a/keyboards/pico/keymaps/default/config.h
+++ b/keyboards/pico/65keys/keymaps/default/config.h
diff --git a/keyboards/pico/keymaps/default/keymap.c b/keyboards/pico/65keys/keymaps/default/keymap.c
index 17076f20cd..17076f20cd 100644
--- a/keyboards/pico/keymaps/default/keymap.c
+++ b/keyboards/pico/65keys/keymaps/default/keymap.c
diff --git a/keyboards/pico/keymaps/default/readme.md b/keyboards/pico/65keys/keymaps/default/readme.md
index 9f8fa53ebf..9f8fa53ebf 100644
--- a/keyboards/pico/keymaps/default/readme.md
+++ b/keyboards/pico/65keys/keymaps/default/readme.md
diff --git a/keyboards/pico/keymaps/jis/config.h b/keyboards/pico/65keys/keymaps/jis/config.h
index 5cbe7609a3..5cbe7609a3 100644
--- a/keyboards/pico/keymaps/jis/config.h
+++ b/keyboards/pico/65keys/keymaps/jis/config.h
diff --git a/keyboards/pico/keymaps/jis/keymap.c b/keyboards/pico/65keys/keymaps/jis/keymap.c
index a3d2606613..a3d2606613 100644
--- a/keyboards/pico/keymaps/jis/keymap.c
+++ b/keyboards/pico/65keys/keymaps/jis/keymap.c
diff --git a/keyboards/pico/keymaps/jis/readme.md b/keyboards/pico/65keys/keymaps/jis/readme.md
index 49d2aa7b7a..49d2aa7b7a 100644
--- a/keyboards/pico/keymaps/jis/readme.md
+++ b/keyboards/pico/65keys/keymaps/jis/readme.md
diff --git a/keyboards/pico/65keys/rules.mk b/keyboards/pico/65keys/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/pico/65keys/rules.mk
diff --git a/keyboards/pico/70keys/70keys.c b/keyboards/pico/70keys/70keys.c
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/pico/70keys/70keys.c
diff --git a/keyboards/pico/70keys/70keys.h b/keyboards/pico/70keys/70keys.h
new file mode 100644
index 0000000000..67f7161ca5
--- /dev/null
+++ b/keyboards/pico/70keys/70keys.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "pico.h"
+#include "quantum.h"
+
+#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, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
+) \
+{ \
+ { 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 }, \
+ { L40, L41, L42, L43, L44, L45, L46 }, \
+ { R00, R01, R02, R03, R04, R05, R06 }, \
+ { R10, R11, R12, R13, R14, R15, R16 }, \
+ { R20, R21, R22, R23, R24, R25, R26 }, \
+ { R30, R31, R32, R33, R34, R35, R36 }, \
+ { R40, R41, R42, R43, R44, R45, R46 } \
+}
diff --git a/keyboards/pico/70keys/config.h b/keyboards/pico/70keys/config.h
new file mode 100644
index 0000000000..4e5ba0db4c
--- /dev/null
+++ b/keyboards/pico/70keys/config.h
@@ -0,0 +1,91 @@
+/* Copyright 2019 Kumao Kobo <kumaokobo@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 0x9692
+#define DEVICE_VER 0x0101
+#define MANUFACTURER Kumao Kobo
+#define PRODUCT Pico Keyboard
+#define DESCRIPTION Split row staggered 5x7 keyboard (using kailh mid-height)
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 7
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
+// #define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5} //uncomment this line and comment line above if you need to reverse left-to-right key order
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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 DEBOUNCE 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* 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
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+/*
+ * 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 MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/pico/70keys/info.json b/keyboards/pico/70keys/info.json
new file mode 100644
index 0000000000..4c87ab3691
--- /dev/null
+++ b/keyboards/pico/70keys/info.json
@@ -0,0 +1,81 @@
+{
+ "keyboard_name": "Pico Keyboard",
+ "url": "https://github.com/kumaokobo/pico-keyboard/",
+ "maintainer": "Kumao Kobo",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"~", "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":9, "y":0},
+ {"label":"7", "x":10, "y":0},
+ {"label":"8", "x":11, "y":0},
+ {"label":"9", "x":12, "y":0},
+ {"label":"0", "x":13, "y":0},
+ {"label":"-", "x":14, "y":0},
+ {"label":"\u2190", "x":15, "y":0},
+ {"label":"Tab", "x":0.25, "y":1},
+ {"label":"Tab", "x":1.25, "y":1},
+ {"label":"Q", "x":2.25, "y":1},
+ {"label":"W", "x":3.25, "y":1},
+ {"label":"E", "x":4.25, "y":1},
+ {"label":"R", "x":5.25, "y":1},
+ {"label":"T", "x":6.25, "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":"Ctrl", "x":0.5, "y":2},
+ {"label":"Ctrl", "x":1.5, "y":2},
+ {"label":"A", "x":2.5, "y":2},
+ {"label":"S", "x":3.5, "y":2},
+ {"label":"D", "x":4.5, "y":2},
+ {"label":"F", "x":5.5, "y":2},
+ {"label":"G", "x":6.5, "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},
+ {"label":"Shift", "x":0.75, "y":3},
+ {"label":"Shift", "x":1.75, "y":3},
+ {"label":"Z", "x":2.75, "y":3},
+ {"label":"X", "x":3.75, "y":3},
+ {"label":"C", "x":4.75, "y":3},
+ {"label":"V", "x":5.75, "y":3},
+ {"label":"B", "x":6.75, "y":3},
+ {"label":"N", "x":9.75, "y":3},
+ {"label":"M", "x":10.75, "y":3},
+ {"label":",", "x":11.75, "y":3},
+ {"label":".", "x":12.75, "y":3},
+ {"label":"/", "x":13.75, "y":3},
+ {"label":"\u2191", "x":14.75, "y":3},
+ {"label":"Shift", "x":15.75, "y":3},
+ {"label":"Alt", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"Enter", "x":3, "y":4},
+ {"label":"Del", "x":4, "y":4},
+ {"label":"GUI", "x":5, "y":4},
+ {"label":"LANG2", "x":6, "y":4},
+ {"label":"Space", "x":7, "y":4},
+ {"label":"Space", "x":10, "y":4},
+ {"label":"LANG1", "x":11, "y":4},
+ {"label":"GUI", "x":12, "y":4},
+ {"label":"Del", "x":13, "y":4},
+ {"label":"\u2190", "x":14, "y":4},
+ {"label":"\u2193", "x":15, "y":4},
+ {"label":"\u2192", "x":16, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/pico/70keys/keymaps/default/keymap.c b/keyboards/pico/70keys/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9b9ae30dab
--- /dev/null
+++ b/keyboards/pico/70keys/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+#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 _SYMB 1
+
+// Shortcut to make keymap more readable
+#define SYM_L MO(_SYMB)
+#define KC_ALES LALT_T(KC_ESC)
+#define KC_L1SYM LT(_SYMB, KC_LANG1)
+#define KC_L2SYM LT(_SYMB, KC_LANG2)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┬────────â”
+ KC_ESC ,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_BSPC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,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_LCTL ,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_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_UP ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ KC_ALES ,KC_ALES ,KC_ENT ,KC_DEL ,KC_LGUI ,KC_L2SYM,KC_SPC , KC_SPC ,KC_L1SYM,KC_RGUI ,KC_DEL ,KC_LEFT ,KC_DOWN ,KC_RGHT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_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_F12 ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LPRN ,KC_RPRN ,KC_PIPE ,KC_ASTR ,KC_TILD ,KC_JYEN ,KC_BSLS ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LBRC ,KC_RBRC ,KC_DOT ,KC_SLSH ,KC_GRV ,KC_MINS ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┬────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LCBR ,KC_RCBR ,_______ ,_______ ,_______ ,KC_CIRC ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,KC_LT ,KC_UNDS ,KC_GT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+
+};
diff --git a/keyboards/pico/70keys/keymaps/default/readme.md b/keyboards/pico/70keys/keymaps/default/readme.md
new file mode 100644
index 0000000000..0b9a978d7d
--- /dev/null
+++ b/keyboards/pico/70keys/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for Pico Keyboard 70 keys
+
+![Pico Layout Image](https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-layout-70keys.png)
diff --git a/keyboards/pico/70keys/keymaps/jis/keymap.c b/keyboards/pico/70keys/keymaps/jis/keymap.c
new file mode 100644
index 0000000000..73109245e9
--- /dev/null
+++ b/keyboards/pico/70keys/keymaps/jis/keymap.c
@@ -0,0 +1,47 @@
+#include QMK_KEYBOARD_H
+#include"keymap_jp.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 _SYMB 1
+
+// Shortcut to make keymap more readable
+#define SYM_L MO(_SYMB)
+#define KC_ALES LALT_T(KC_ESC)
+#define KC_L1SYM LT(_SYMB, KC_LANG1)
+#define KC_L2SYM LT(_SYMB, KC_LANG2)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┬────────â”
+ KC_GRV ,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_BSPC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T , KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,JP_AT ,JP_CIRC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL ,KC_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G , KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,JP_COLN ,KC_ENT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┬────────┤
+ 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_UP ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ KC_ALES ,KC_ALES ,KC_ENT ,KC_DEL ,KC_LGUI ,KC_L2SYM,KC_SPC , KC_SPC ,KC_L1SYM,KC_RGUI ,KC_DEL ,KC_LEFT ,KC_DOWN ,KC_RGHT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_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_F12 ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LPRN ,KC_RPRN ,KC_PIPE ,JP_YEN ,JP_TILD ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LBRC ,KC_RBRC ,KC_DOT ,KC_SLSH ,JP_GRV ,KC_MINS ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┬────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , KC_LCBR ,KC_RCBR ,_______ ,_______ ,_______ ,JP_UNDS ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,KC_LT ,_______ ,KC_GT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+
+};
diff --git a/keyboards/pico/70keys/keymaps/jis/readme.md b/keyboards/pico/70keys/keymaps/jis/readme.md
new file mode 100644
index 0000000000..dda39dfb82
--- /dev/null
+++ b/keyboards/pico/70keys/keymaps/jis/readme.md
@@ -0,0 +1,3 @@
+# The JIS-like keymap for Pico Keyboard 70 keys
+
+![Pico JIS like Layout Image](https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-jis-like-layout-70keys.png)
diff --git a/keyboards/pico/70keys/rules.mk b/keyboards/pico/70keys/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/pico/70keys/rules.mk
diff --git a/keyboards/pico/pico.h b/keyboards/pico/pico.h
index 246ed87558..72024efd80 100644
--- a/keyboards/pico/pico.h
+++ b/keyboards/pico/pico.h
@@ -16,8 +16,11 @@
#pragma once
-#ifdef KEYBOARD_pico_rev1
- #include "rev1.h"
+#ifdef KEYBOARD_pico_65keys
+ #include "65keys.h"
+#endif
+#ifdef KEYBOARD_pico_70keys
+ #include "70keys.h"
#endif
#include "quantum.h"
diff --git a/keyboards/pico/readme.md b/keyboards/pico/readme.md
index 26bbf1da2e..891bb174fe 100644
--- a/keyboards/pico/readme.md
+++ b/keyboards/pico/readme.md
@@ -1,9 +1,5 @@
# Pico keyboard
-<p align="center">
- <img src="https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-keyboard.jpg" alt="Pico Keyboard rev1.0" width="600"/>
-</p>
-
A split keyboard kit designed for small hands.
Pico adopted the footprint for [Kailh Mid-Height](http://www.kailh.com/en/Products/Ks/KHS/) smaller than Cherry MX compatible switches.
@@ -12,6 +8,17 @@ Pico adopted the footprint for [Kailh Mid-Height](http://www.kailh.com/en/Produc
Make example for this keyboard (after setting up your build environment):
- make pico/rev1:default
+ make pico/65keys:default
+
+## 65 keys
+<p align="center">
+ <img src="https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-keyboard.jpg" alt="Pico Keyboard 65 keys" width="600"/>
+</p>
+
+## 70 keys
+<p align="center">
+ <img src="https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-keyboard2.jpg" alt="Pico Keyboard 70 keys" width="600"/>
+</p>
+
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/pico/rules.mk b/keyboards/pico/rules.mk
index fc6ad1e7eb..0e044b676b 100644
--- a/keyboards/pico/rules.mk
+++ b/keyboards/pico/rules.mk
@@ -33,4 +33,4 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SPLIT_KEYBOARD = yes
-DEFAULT_FOLDER = pico/rev1
+DEFAULT_FOLDER = pico/65keys
diff --git a/keyboards/plaid/keymaps/default/keymap.c b/keyboards/plaid/keymaps/default/keymap.c
index 8982841915..6a858a4a73 100644
--- a/keyboards/plaid/keymaps/default/keymap.c
+++ b/keyboards/plaid/keymaps/default/keymap.c
@@ -234,7 +234,7 @@ void eeconfig_init_user(void) { // EEPROM is getting reset!
eeconfig_update_user(led_config.raw);
}
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/plaid/readme.md b/keyboards/plaid/readme.md
index dd49ecbdf5..a491d05d3b 100644
--- a/keyboards/plaid/readme.md
+++ b/keyboards/plaid/readme.md
@@ -11,9 +11,9 @@ Hardware Availability: Group buy in r/mk
Make example for this keyboard (after setting up your build environment):
make plaid:default
-Flash firmware:
- // In bootloader mode
- make plaid:default:program
+Flashing example for this keyboard:
+
+ make plaid:default:flash
## Bootloader
use usbasploader in my repository.
diff --git a/keyboards/plaid/rules.mk b/keyboards/plaid/rules.mk
index 5ac35ee7f3..e020114b33 100644
--- a/keyboards/plaid/rules.mk
+++ b/keyboards/plaid/rules.mk
@@ -11,15 +11,9 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# Flash program via avrdude, but default command is not suitable.
-# You can use plaid:default:program
-PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
-
-
# disable debug code
OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
index 2a7a53d38d..34ef052487 100644
--- a/keyboards/planck/keymaps/callum/keymap.c
+++ b/keyboards/planck/keymaps/callum/keymap.c
@@ -63,16 +63,16 @@
#define gbp A(KC_3)
#define down KC_DOWN
-#define home KC_HOME
-#define end KC_END
+#define home G(KC_LEFT)
+#define end G(KC_RGHT)
#define up KC_UP
#define pgdn KC_PGDN
#define pgup KC_PGUP
#define left KC_LEFT
#define rght KC_RGHT
-#define tabl S(C(KC_TAB))
-#define tabr C(KC_TAB)
+#define tabl G(S(KC_LBRC))
+#define tabr G(S(KC_RBRC))
#define fwd G(KC_RBRC)
#define back G(KC_LBRC)
#define dtl C(KC_LEFT)
@@ -162,13 +162,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SYMB] = LAYOUT_planck_grid(
esc, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
- del, bsls, hash, astr, eql, pipe, at, rprn, lprn, dlr, ampr, gbp,
- caps, grv, exlm, lbrc, rbrc, circ, tild, rcbr, lcbr, plus, perc, caps,
+ del, at, dlr, eql, lprn, lbrc, rbrc, rprn, astr, hash, plus, gbp,
+ ____, grv, pipe, bsls, lcbr, tild, circ, rcbr, ampr, exlm, perc, ____,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
),
[MOVE] = LAYOUT_planck_grid(
- esc, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, xxxx,
+ esc, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, caps,
del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, xxxx,
____, xxxx, xxxx, back, fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md
index 190c2b23a5..3eae9ad3ce 100644
--- a/keyboards/planck/keymaps/callum/readme.md
+++ b/keyboards/planck/keymaps/callum/readme.md
@@ -28,7 +28,7 @@ This is a layout for the grid planck, built with a few ideals in mind:
Layout rendered with [keyboard-layout-editor.com][]:
-![](https://callum-oakley.github.io/images/keymap.png)
+![](https://callumoakley.net/images/keymap.png)
The only behaviour not captured in this graphic is: pressing both cmd keys will
send cmd+ctrl. See [keymap.c][] for details.
diff --git a/keyboards/planck/keymaps/csc027/keymap.c b/keyboards/planck/keymaps/csc027/keymap.c
new file mode 100644
index 0000000000..e39be03eb0
--- /dev/null
+++ b/keyboards/planck/keymaps/csc027/keymap.c
@@ -0,0 +1,88 @@
+#include QMK_KEYBOARD_H
+#include "csc027.h"
+
+#define LAYOUT_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT_wrapper(
+ _____________________QWERTY_L1_____________________, _____________________QWERTY_R1_____________________,
+ _____________________QWERTY_L2_____________________, _____________________QWERTY_R2_____________________,
+ _____________________QWERTY_L3_____________________, _____________________QWERTY_R3_____________________,
+ _____________________QWERTY_L4_____________________, _____________________QWERTY_R4_____________________
+ ),
+
+ [_RS] = LAYOUT_wrapper(
+ ______________________RAISE_L1_____________________, ______________________RAISE_R1_____________________,
+ ______________________RAISE_L2_____________________, ______________________RAISE_R2_____________________,
+ ______________________RAISE_L3_____________________, ______________________RAISE_R3_____________________,
+ ______________________RAISE_L4_____________________, ______________________RAISE_R4_____________________
+ ),
+
+ [_LW] = LAYOUT_wrapper(
+ ______________________LOWER_L1_____________________, ______________________LOWER_R1_____________________,
+ ______________________LOWER_L2_____________________, ______________________LOWER_R2_____________________,
+ ______________________LOWER_L3_____________________, ______________________LOWER_R3_____________________,
+ ______________________LOWER_L4_____________________, ______________________LOWER_R4_____________________
+ ),
+
+ [_MS] = LAYOUT_wrapper(
+ ______________________MOUSE_L1_____________________, ______________________MOUSE_R1_____________________,
+ ______________________MOUSE_L2_____________________, ______________________MOUSE_R2_____________________,
+ ______________________MOUSE_L3_____________________, ______________________MOUSE_R3_____________________,
+ ______________________MOUSE_L4_____________________, ______________________MOUSE_R4_____________________
+ ),
+
+ [_GT] = LAYOUT_wrapper(
+ _______________________GIT_L1______________________, _______________________GIT_R1______________________,
+ _______________________GIT_L2______________________, _______________________GIT_R2______________________,
+ _______________________GIT_L3______________________, _______________________GIT_R3______________________,
+ _______________________GIT_L4______________________, _______________________GIT_R4______________________
+ ),
+
+ [_CN] = LAYOUT_wrapper(
+ ___________________CONVENIENCE_L1__________________, ___________________CONVENIENCE_R1__________________,
+ ___________________CONVENIENCE_L2__________________, ___________________CONVENIENCE_R2__________________,
+ ___________________CONVENIENCE_L3__________________, ___________________CONVENIENCE_R3__________________,
+ ___________________CONVENIENCE_L4__________________, ___________________CONVENIENCE_R4__________________
+ ),
+
+ /* Guild Wars 2 Layer
+ *
+ * ,-----------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |BkSpc|
+ * |-----------------------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
+ * |-----------------------------------------------------------------------|
+ * |Sf/Ec| A | S | D | F | G | H | J | K | L | ; |Enter|
+ * |-----------------------------------------------------------------------|
+ * | Ctl | Z | Alt | X | C |Space|Space| M | B | . |Nxt L|Rst L|
+ * `-----------------------------------------------------------------------'
+ */
+
+ [_GW] = LAYOUT_ortho_4x12(
+ 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_BSLS,
+ MC_LSEC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT ,
+ KC_LCTL, KC_Z, KC_LALT, KC_X, KC_C, KC_SPC, KC_SPC, KC_M, KC_B, KC_DOT, TO(_CS), TO(_QW)
+ ),
+
+ /* CS:GO Layer
+ *
+ * ,-----------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |BkSpc|
+ * |-----------------------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | 4 | 5 | 6 | |NmLck|
+ * |-----------------------------------------------------------------------|
+ * |Shift| A | S | D | F | G | H | 1 | 2 | 3 |Enter| Esc |
+ * |-----------------------------------------------------------------------|
+ * | Ctl | Z | Alt | X | B |Space|Space| 0 | 0 | . |Nxt L|Rst L|
+ * `-----------------------------------------------------------------------'
+ */
+
+ [_CS] = LAYOUT_ortho_4x12(
+ XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_P4, KC_P5, KC_P6, XXXXXXX, KC_NLCK,
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_P1, KC_P2, KC_P3, KC_PENT, KC_ESC ,
+ KC_LCTL, KC_Z, KC_LALT, KC_X, KC_B, KC_SPC, KC_SPC, KC_P0, KC_P0, KC_PDOT, TO(_QW), TO(_QW)
+ )
+};
diff --git a/keyboards/planck/keymaps/csc027/rules.mk b/keyboards/planck/keymaps/csc027/rules.mk
new file mode 100644
index 0000000000..801031fb1e
--- /dev/null
+++ b/keyboards/planck/keymaps/csc027/rules.mk
@@ -0,0 +1,6 @@
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = no
+CONSOLE_ENABLE = no
+EXTRAKEY_ENABLE = no
+LTO_ENABLE = yes
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/planck/keymaps/dsanchezseco/config.h b/keyboards/planck/keymaps/dsanchezseco/config.h
index 3ed041f3bd..501d118632 100644
--- a/keyboards/planck/keymaps/dsanchezseco/config.h
+++ b/keyboards/planck/keymaps/dsanchezseco/config.h
@@ -3,3 +3,5 @@
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(DVORAK_SOUND)
#endif
+
+#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 5
diff --git a/keyboards/planck/keymaps/dsanchezseco/keymap.c b/keyboards/planck/keymaps/dsanchezseco/keymap.c
index adbbe44b89..9da2dce163 100644
--- a/keyboards/planck/keymaps/dsanchezseco/keymap.c
+++ b/keyboards/planck/keymaps/dsanchezseco/keymap.c
@@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_ADJUST] = LAYOUT_planck_grid(
- _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_RIGHT, _______,
+ _______, RESET, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, _______, _______, _______, _______,
_______, KC_PSCR, _______, KC_DOWN, KC_UP, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@@ -46,6 +46,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
+//void matrix_init_user(void) {
+// eeconfig_init();
+//}
+
uint32_t layer_state_set_user(uint32_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c
index f18102ee2b..7b768603cb 100644
--- a/keyboards/planck/keymaps/dshields/keymap.c
+++ b/keyboards/planck/keymaps/dshields/keymap.c
@@ -11,19 +11,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LWR] = LAYOUT_planck_grid(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, KC_DEL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_TILD, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_LCBR, KC_RCBR,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DQUO, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, DM_PLY2, _______, _______, _______, KC_DQUO, KC_PIPE,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
),
[RSE] = LAYOUT_planck_grid(
KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0 ,
KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, DM_PLY2, _______, _______, _______, KC_QUOT, KC_BSLS,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
),
[FUN] = LAYOUT_planck_grid(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, EEP_RST, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 ,
- KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
- LGT_TOG, LGT_MOD, LGT_BRT, LGT_INC, LGT_DEC, DM_REC1, DM_RSTP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3,
+ KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, DM_RSTP, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
+ LGT_TOG, LGT_MOD, LGT_BRT, LGT_INC, LGT_DEC, DM_REC1, DM_REC2, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
)
};
diff --git a/keyboards/planck/keymaps/hvp/config.h b/keyboards/planck/keymaps/hvp/config.h
new file mode 100644
index 0000000000..472afc6488
--- /dev/null
+++ b/keyboards/planck/keymaps/hvp/config.h
@@ -0,0 +1,39 @@
+#pragma once
+#define TAPPING_TERM 150
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+
+#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/hvp/keymap.c b/keyboards/planck/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..c9aa619815
--- /dev/null
+++ b/keyboards/planck/keymaps/hvp/keymap.c
@@ -0,0 +1,184 @@
+/* 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 "hvp.c"
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _NAVI,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE
+};
+
+#define _QWERTY 0
+#define _RAISE 1
+#define _LOWER 2
+#define _NAVI 3
+#define _ADJUST 5
+
+#define LT3_ESC LT(3, KC_ESC)
+#define LT4_TAB LT(5, KC_TAB)
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_planck_grid(
+ LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_ESC, KC_A, KC_S, KC_D, LT(3,KC_F), KC_G, KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT,
+ KC_LCTL, KC_APP, KC_LGUI, KC_LALT, MO(2), KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+[_RAISE] = LAYOUT_planck_grid( /* Right */
+ 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+[_LOWER] = LAYOUT_planck_grid( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_BSPC,
+ KC_DEL, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TILD,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+[_NAVI] = LAYOUT_planck_grid( /* 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,
+ _______, _______, _______, D_NAVI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPLY, KC_MSTP, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+[_ADJUST] = LAYOUT_planck_grid( /* Tab */
+ _______, _______, AG_NORM, AG_SWAP, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, KC_4, KC_5, KC_6, _______, _______,
+ KC_PSCR, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, KC_0, KC_1, KC_2, KC_3, _______,
+ RESET, _______, TERM_ON, TERM_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, DEBUG
+)};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+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
+ tap_code(KC_MS_WH_DOWN);
+ #else
+ tap_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_UP);
+ #else
+ tap_code(KC_PGUP);
+ #endif
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0: {
+#ifdef AUDIO_ENABLE
+ static bool play_sound = false;
+#endif
+ if (active) {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_song); }
+#endif
+ layer_on(_ADJUST);
+ } else {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_gb_song); }
+#endif
+ layer_off(_ADJUST);
+ }
+#ifdef AUDIO_ENABLE
+ play_sound = true;
+#endif
+ break;
+ }
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
+
+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;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#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/hvp/readme.md b/keyboards/planck/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..cb58d85785
--- /dev/null
+++ b/keyboards/planck/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: Planck rev6
+Keys: 40% (12x4) ortholinear keyboard
+Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
+Flash instructions: Flash using avrdude, will req the hvp user space to compile.
+
+> make planck/rev6:hvp:dfu-util
+
+Links:
+Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/planck
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/planck/keymaps/hvp/rules.mk b/keyboards/planck/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..896115f718
--- /dev/null
+++ b/keyboards/planck/keymaps/hvp/rules.mk
@@ -0,0 +1,4 @@
+SRC += muse.c
+
+RGBLIGHT_ENABLE = no
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/planck/keymaps/juno/keymap.c b/keyboards/planck/keymaps/juno/keymap.c
deleted file mode 100644
index a34a9e9480..0000000000
--- a/keyboards/planck/keymaps/juno/keymap.c
+++ /dev/null
@@ -1,444 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "muse.h"
-
-extern keymap_config_t keymap_config;
-
-enum planck_layers {
- _QWERTY,
- _COLEMAK,
- _DVORAK,
- _LOWER,
- _RAISE,
- _PLOVER,
- _ADJUST,
-
- _FN1,
- _DPAD,
- _DPADNUM
-};
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- PLOVER,
- BACKLIT,
- EXT_PLV,
-
- FN1,
- DP_ON,
- DP_OFF
-};
-
-#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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | App | Ctrl | GUI | Alt |Lower | SpaceFn |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, RSFT_T(KC_ENT),
- KC_APP, KC_LCTL, KC_LGUI, KC_LALT, LOWER, LT(_FN1, KC_SPC),
- LT(_FN1, KC_SPC), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
-),
-
-/* 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
- * ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | 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_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, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
-),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | 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_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_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, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
-
-// Two personal additional layers below
-
-/* Personal custom Fn layer
- * ,-----------------------------------------------------------------------------------.
- * | | Vol+ | PgUp | Up | PdDn | Ins | | | Up | | PScr | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | Vol- | Left | Down | Right| Home | | Left | Down |Right | | Del |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | Prev | Play | Next | Brite| End | | | Vol- | Vol+ | Mute | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Caps | | | | | Space | | DP_ON| | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_FN1] = LAYOUT_planck_grid(
- _______, KC_VOLU, KC_PGUP, KC_UP, KC_PGDN, KC_INS, _______, _______, KC_UP, _______, KC_PSCR, _______,
- _______, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL ,
- _______, KC_MPRV, KC_MPLY, KC_MNXT, BACKLIT, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,
- KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DP_ON, _______, _______, _______
-),
-
-/* DPAD layer, to activate arrow cluster at the bottom right corner
-
- * ,-----------------------------------------------------------------------------------.
- * | 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 | GUI | Alt | |DNUM | Space | |DP_OFF| Left | Down |Right |
- * `-----------------------------------------------------------------------------------'
- */
-
-[_DPAD] = 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_UP, KC_ENT ,
- KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, MO(_DPADNUM),
- KC_SPC, KC_SPC, LOWER, DP_OFF, KC_LEFT, KC_DOWN, KC_RGHT
-),
-
-// Extended layer for weapon switching
-
-[_DPADNUM] = LAYOUT_planck_grid(
- XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- _______, _______, _______, XXXXXXX, MO(_DPADNUM),
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
-)
-
-
-};
-
-#ifdef AUDIO_ENABLE
- float plover_song[][2] = SONG(PLOVER_SOUND);
- float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
-
- // Borrowing audio from unused audio
- // Caps Lock on and off sound too similar
-
- float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND);
- float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
-
- float dpad_song_on[][2] = SONG(ZELDA_PUZZLE);
- float dpad_song_off[][2] = SONG(SONIC_RING);
-#endif
-
-uint32_t layer_state_set_user(uint32_t state) {
-
- // LED control, lighting up when Fn layer is activated
-
- state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
-
- switch (biton32(state)) {
- case _QWERTY:
- backlight_set(0);
- break;
- case _FN1:
- backlight_set(3);
- break;
- case _DPAD:
- backlight_set(3);
- break;
- }
-
- return state;
-}
-
-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;
-
-
-// Play audio upon switching Caps Lock and custom layers
-
- case KC_CAPS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
- PLAY_SONG(caps_song_off);
- } else {
- PLAY_SONG(caps_song_on);
- }
- #endif
- }
- return true;
-
- case DP_ON:
- if (record->event.pressed) {
-
- } else {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(dpad_song_on);
- #endif
-
- layer_off(_FN1);
- layer_on(_DPAD);
- }
-
- case DP_OFF:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(dpad_song_off);
- #endif
-
- layer_off(_DPAD);
- }
- }
- 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) {
- register_code(KC_PGDN);
- unregister_code(KC_PGDN);
- } else {
- register_code(KC_PGUP);
- unregister_code(KC_PGUP);
- }
- }
-}
-
-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;
- }
-} \ No newline at end of file
diff --git a/keyboards/planck/keymaps/juno/readme.md b/keyboards/planck/keymaps/juno/readme.md
deleted file mode 100644
index a93a0643d5..0000000000
--- a/keyboards/planck/keymaps/juno/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Juno Layout
-created by Juno Nguyen
-juno.ngx@gmail.com
-
-## Feature:
-* Pok3r-inspired functional layer.
-* Rearranged numerics for maximum efficiency.
-
diff --git a/keyboards/planck/keymaps/sascha/keymap.c b/keyboards/planck/keymaps/sascha/keymap.c
index 665598c9b5..d17d4deaa4 100644
--- a/keyboards/planck/keymaps/sascha/keymap.c
+++ b/keyboards/planck/keymaps/sascha/keymap.c
@@ -24,14 +24,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
* │ ` │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ü │ ö │ ä │
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
- * │ SINS │ ♥ │ ’ │ “ │ †│ ↠│ → │ € │ ß │ Ü │ Ö │ Ä │
+ * │ SINS │ … │ ’ │ “ │ †│ ↠│ → │ € │ ß │ Ü │ Ö │ Ä │
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
* │ Rset │ BLSt │ F1 │ Home │ End │ PgUp │ PgDn │ Left │ Down │ Up │ Rght │ │
* └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
*/
KC_TILD , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL,
KC_GRV , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , UC(L'ü') , UC(L'ö') , UC(L'ä'),
- S(KC_INS) , UC(L'♥') , UC(L'’') , UC(L'“') , UC(L'â€') , UC(L'â†') , UC(L'→') , UC(L'€') , UC(L'ß') , UC(L'Ãœ') , UC(L'Ö') , UC(L'Ä'),
+ S(KC_INS) , UC(L'…') , UC(L'’') , UC(L'“') , UC(L'â€') , UC(L'â†') , UC(L'→') , UC(L'€') , UC(L'ß') , UC(L'Ãœ') , UC(L'Ö') , UC(L'Ä'),
RESET , BL_STEP , KC_F1 , KC_HOME , KC_END , KC_PGUP , KC_PGDN , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , KC_TRNS
)
};
diff --git a/keyboards/planck/keymaps/sascha/rules.mk b/keyboards/planck/keymaps/sascha/rules.mk
index 276b71daa8..57e5e2643e 100644
--- a/keyboards/planck/keymaps/sascha/rules.mk
+++ b/keyboards/planck/keymaps/sascha/rules.mk
@@ -1,6 +1,7 @@
AUTO_SHIFT_ENABLE = yes
AUTO_SHIFT_MODIFIERS = yes
UNICODE_ENABLE = yes
+LINK_TIME_OPTIMIZATION_ENABLE = yes
ifeq ($(strip $(KEYBOARD)), planck/rev5)
BACKLIGHT_ENABLE = yes
diff --git a/keyboards/preonic/keymaps/juno/keymap.c b/keyboards/preonic/keymaps/juno/keymap.c
deleted file mode 100644
index 2e3152d299..0000000000
--- a/keyboards/preonic/keymaps/juno/keymap.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/* Juno's Preonic Layout */
-
-#include QMK_KEYBOARD_H
-
-enum preonic_layers {
- _QWERTY,
- _COLEMAK,
- _DVORAK,
- _LOWER,
- _RAISE,
- _ADJUST,
-
- _FN1,
- _DPAD
-};
-
-enum preonic_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- BACKLIT,
-
- FN1,
- DP_ON,
- DP_OFF
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- * ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | FN1 | 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_preonic_grid( \
- KC_ESC, 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, \
- MO(_FN1),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
- * ,-----------------------------------------------------------------------------------.
- * | ` | 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_preonic_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_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, \
- BACKLIT, 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_preonic_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_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 , \
- BACKLIT, 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 | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT_preonic_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_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, _______, _______, 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_preonic_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_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_preonic_grid( \
- 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, \
- _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
- _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-/* Function (personal function layer)
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | Vol- | | Vol+ | | | | PgUp | Up | PgDn | PScr | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | | | | Home | Left | Down |Right | Ins | Del |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| Prev | Play | Next | Brite| | End | | Vol- | Vol+ | Mute | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | Caps | | Space | | DP_ON| | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_FN1] = LAYOUT_preonic_grid( \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, KC_VOLD, _______, KC_VOLU, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_DEL , \
- _______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL , \
- KC_LSFT, KC_MPRV, KC_MPLY, KC_MNXT, BACKLIT, _______, KC_END, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_CAPS, _______, KC_SPC, KC_SPC, _______, DP_ON, _______, _______, _______ \
-),
-
-/* DPAD layer, for active arrow cluster at the bottom right corner
- * Use TG() to enable, but FUNC() to disable (defined at end of file)
- * All layers clearing required
- * ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Caps | A | S | D | F | G | H | J | K | L | ; | " |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | N | M | , | . | Up |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | |Lower | Space |Raise |DP_OFF| Left | Down |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_DPAD] = LAYOUT_preonic_grid( \
- KC_ESC, 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_CAPS, 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_UP, KC_ENT , \
- KC_LCTL, KC_LGUI, KC_LALT, _______, LOWER, KC_SPC, KC_SPC, RAISE, DP_OFF, KC_LEFT, KC_DOWN, KC_RGHT \
-)
-
-};
-
-#ifdef AUDIO_ENABLE
- float plover_song[][2] = SONG(PLOVER_SOUND);
- float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
-
- float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND);
- float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
-
- float dpad_song_on[][2] = SONG(ZELDA_PUZZLE);
- float dpad_song_off[][2] = SONG(SONIC_RING);
-#endif
-
-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;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- PORTE &= ~(1<<6);
- } else {
- unregister_code(KC_RSFT);
- PORTE |= (1<<6);
- }
- return false;
- break;
-
-
-
- // Additional personal custom functions
-
- case KC_CAPS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
- PLAY_SONG(caps_song_off);
- } else {
- PLAY_SONG(caps_song_on);
- }
- #endif
- }
- return true; // process the actual function of Caps Lock
- //break;
-
- case DP_ON:
- if (record->event.pressed) {
-
- } else {
- // activated upon release
- #ifdef AUDIO_ENABLE
- PLAY_SONG(dpad_song_on);
- #endif
-
- layer_off(_FN1);
- layer_on(_DPAD);
- }
-
- case DP_OFF:
- if (record->event.pressed) {
- // deactivated upon pressdown
- #ifdef AUDIO_ENABLE
- PLAY_SONG(dpad_song_off);
- #endif
-
- //layer_off(_FN1); // do not put in this line
- layer_off(_DPAD);
- }
-
- }
- return true;
-};
diff --git a/keyboards/preonic/keymaps/juno/readme.md b/keyboards/preonic/keymaps/juno/readme.md
deleted file mode 100644
index e911968dd9..0000000000
--- a/keyboards/preonic/keymaps/juno/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/kjwon15/keymap.c b/keyboards/preonic/keymaps/kjwon15/keymap.c
index bca3575fdd..cfc89f3b66 100644
--- a/keyboards/preonic/keymaps/kjwon15/keymap.c
+++ b/keyboards/preonic/keymaps/kjwon15/keymap.c
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / | SF/EN|
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Enter| Ctrl | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right |
+ * | Enter| Ctrl | GUI | Alt |Lower |Mouse |Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_preonic_grid(
@@ -160,30 +160,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = LAYOUT_preonic_grid(
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_LOCK, RESET, CK_TOGG, MU_MOD, QWERTY, PURE, BLANK, KC_WH_D, KC_MS_U, KC_WH_U, _______, KC_DEL, \
+ KC_LOCK, RESET, CK_TOGG, MU_MOD, QWERTY, PURE, BLANK, KC_WH_D, KC_MS_U, KC_WH_U, _______, KC_DEL, \
_______, AU_ON, AU_OFF, KC_BTN2, KC_BTN1, AG_NORM, AG_SWAP, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_ACL0, \
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, KC_ACL1, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ACL2 \
),
-/* Mouse
+/* Mouse / LED
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | WHL_U|Mclick| | | | LCTL | MS_U | WHL_U| | Del |
+ * |RGB_TO| | WHL_U|Mclick| | HU_D | HU_I | LCTL | MS_U | WHL_U| | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | WHL_D|Rclick|Lclick| | | MS_L | MS_D | MS_R | | ACL0 |
+ * |RGB_MO| | WHL_D|Rclick|Lclick| SA_D | SA_I | MS_L | MS_D | MS_R | | ACL0 |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | WHL_D| WHL_L| WHL_R| | ACL1 |
+ * |RGB_MR| | | | | VA_D | VA_I | WHL_D| WHL_L| WHL_R| | ACL1 |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | ACL2 |
* `-----------------------------------------------------------------------------------'
*/
[_MOUSE] = LAYOUT_preonic_grid(
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_WH_U, KC_BTN3, _______, _______, _______, KC_LCTL, KC_MS_U, KC_WH_U, _______, KC_DEL, \
- _______, _______, KC_WH_D, KC_BTN2, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_ACL0, \
- _______, _______, _______, _______, _______, _______, _______, KC_WH_D, KC_WH_L, KC_WH_R, _______, KC_ACL1, \
+ RGB_TOG, _______, KC_WH_U, KC_BTN3, _______, RGB_HUD, RGB_HUI, KC_LCTL, KC_MS_U, KC_WH_U, _______, KC_DEL, \
+ RGB_MOD, _______, KC_WH_D, KC_BTN2, KC_BTN1, RGB_SAD, RGB_SAI, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_ACL0, \
+ RGB_RMOD,_______, _______, _______, _______, RGB_VAD, RGB_VAI, KC_WH_D, KC_WH_L, KC_WH_R, _______, KC_ACL1, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ACL2 \
)
diff --git a/keyboards/preonic/keymaps/mverteuil/config.h b/keyboards/preonic/keymaps/mverteuil/config.h
new file mode 100644
index 0000000000..51b278f647
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil/config.h
@@ -0,0 +1,39 @@
+#ifdef AUDIO_ENABLE
+# if __has_include("copyright.h")
+# include "copyright.h"
+# endif
+
+# define AUDIO_CLICKY_DELAY_DURATION 0
+# define AUDIO_CLICKY_FREQ_DEFAULT 100.0f
+# define AUDIO_CLICKY_FREQ_MIN 61.0f
+# define AUDIO_CLICKY_FREQ_RANDOMNESS 0.2f
+# define DAC_SAMPLE_MAX 7000U
+# define STARTUP_SONG SONG(WORKMAN_SOUND)
+# define GOODBYE_SONG SONG(COIN_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/keyboards/preonic/keymaps/mverteuil/keymap.c b/keyboards/preonic/keymaps/mverteuil/keymap.c
new file mode 100644
index 0000000000..621d60be6a
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil/keymap.c
@@ -0,0 +1,508 @@
+/* Copyright 2015-2017 Jack Humbert, 2019 Matthew de Verteuil
+ *
+ * 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"
+#include "mverteuil.h"
+
+/* TapDance Aliases */
+#define TD_LBRK TD(TD_BRACKETS_LEFT)
+#define TD_RBRK TD(TD_BRACKETS_RIGHT)
+#define TD_CLES TD(TD_CONTROL_ESCAPE)
+#define TD_NPFR TD(TD_NUMPAD_FUNCTIONROW)
+#define TD_PLEQ TD(TD_PLUS_EQUALS)
+#define TD_SCOL TD(TD_SEMICOLON_COLON)
+#define TD_SLQU TD(TD_SLASH_QUESTION)
+#define TD_SQDQ TD(TD_QUOTE_DOUBLEQUOTE)
+#define TD_USMI TD(TD_UNDERSCORE_MINUS)
+
+/* Sentinel value for invalid tap dance exit */
+#define TAP_DANCE_NO_MATCH 64
+
+enum preonic_layers {
+ _QWERTY,
+ _FUNCTIONROW,
+ _NUMPAD,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ NUMPAD,
+ LOWER,
+ RAISE,
+ BACKLIT,
+};
+
+enum tapdance_keycodes {
+ TD_BRACKETS_LEFT,
+ TD_BRACKETS_RIGHT,
+ TD_CONTROL_ESCAPE,
+ TD_NUMPAD_FUNCTIONROW,
+ TD_PLUS_EQUALS,
+ TD_QUOTE_DOUBLEQUOTE,
+ TD_SEMICOLON_COLON,
+ TD_SLASH_QUESTION,
+ TD_UNDERSCORE_MINUS,
+};
+
+typedef enum {
+ SINGLE_TAP,
+ SINGLE_HOLD,
+ DOUBLE_TAP,
+ DOUBLE_HOLD,
+ TRIPLE_TAP,
+ TRIPLE_HOLD,
+} t_tap_state;
+
+typedef struct {
+ t_tap_state left_brackets;
+ t_tap_state numpad_funcrow;
+ t_tap_state right_brackets;
+} t_tap;
+
+t_tap_state get_tapdance_state(qk_tap_dance_state_t *state);
+
+void td_numpad_funcrow_finished(qk_tap_dance_state_t *state, void *user_data);
+void td_numpad_funcrow_reset(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_left_finished(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_left_reset(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_right_finished(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_right_reset(qk_tap_dance_state_t *state, void *user_data);
+
+/* Tap Dance Definitions */
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once for left parenthesis, twice for left bracket, thrice for left brace */
+ [TD_BRACKETS_LEFT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_brackets_left_finished, td_brackets_left_reset),
+ /* Tap once for right parenthesis, twice for right bracket, thrice for right brace */
+ [TD_BRACKETS_RIGHT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_brackets_right_finished, td_brackets_right_reset),
+ /* Tap once for control, twice for escape */
+ [TD_CONTROL_ESCAPE] = ACTION_TAP_DANCE_DOUBLE(KC_LCTRL, KC_ESCAPE),
+ /* Tap once for plus, twice for equals */
+ [TD_PLUS_EQUALS] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQUAL),
+ /* Hold for numpad, tap twice to toggle function row, double hold for temporary function row */
+ [TD_NUMPAD_FUNCTIONROW] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_numpad_funcrow_finished, td_numpad_funcrow_reset),
+ /* Tap once for single quote, twice for double quote */
+ [TD_QUOTE_DOUBLEQUOTE] = ACTION_TAP_DANCE_DOUBLE(KC_QUOTE, KC_DOUBLE_QUOTE),
+ /* Tap once for semicolon, twice for colon */
+ [TD_SEMICOLON_COLON] = ACTION_TAP_DANCE_DOUBLE(KC_SCOLON, KC_COLON),
+ /* Tap once for slash, twice for question mark */
+ [TD_SLASH_QUESTION] = ACTION_TAP_DANCE_DOUBLE(KC_SLASH, KC_QUESTION),
+ /* Tap once for underscore, twice for minus */
+ [TD_UNDERSCORE_MINUS] = ACTION_TAP_DANCE_DOUBLE(KC_UNDERSCORE, KC_MINUS),
+};
+
+/* clang-format off */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | ! | @ | # | $ | % | ^ | & | * | _ - | + = | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | ' " |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |CtlEsc| A | S | D | F | G | H | J | K | L | ; : | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up | GUI |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |NP FRw| Ctrl | Alt | GUI |Lower | Space |Raise | / ? | Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_preonic_1x2uC (
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, TD_USMI, TD_PLEQ, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_SQDQ,
+ TD_CLES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCOL, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RGUI,
+ TD_NPFR, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, TD_SLQU, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+/* Function Row
+ * ,-----------------------------------------------------------------------------------.
+ * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNCTIONROW] = LAYOUT_preonic_1x2uC (
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Numpad
+ * ,------+------+------+------+------+------|------+------+------+------+------+------.
+ * | | | | | | | | Tab | / | * |Bksp | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 7 | 8 | 9 | - | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 4 | 5 | 6 | + | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 1 | 2 | 3 |Enter | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | 0 | . |Enter | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_preonic_1x2uC (
+ _______, _______, _______, _______, _______, _______, _______, KC_TAB, KC_SLSH, KC_PAST, KC_BSPC, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_PDOT, KC_PENT, _______
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | Vol+ | | | | | | | | Play | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Prev | Vol- | Next | | | ? | _ | + | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | Mute | | | PgUp | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |RGBmod| | | | | | | \ | Home | PgDn | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_preonic_1x2uC (
+ 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_VOLU, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______,
+ _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, KC_QUES, KC_UNDS, KC_PLUS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_HOME, KC_PGDN, KC_END
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | [ { (| ) } ]| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_preonic_1x2uC (
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, TD_LBRK, TD_RBRK, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_PIPE, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |AudTog|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX| Debug| Reset|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |ClkTog|ClkFq-|ClkFq+|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|TermOn|TermOf|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |MusTog|Voice- Voice+|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|XXXXXX|AGnorm|AGswap|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |MidTog|Rplain|Rbreat|Rrainb|Rswirl|Rsnake|Rkridr|Rxmas |Rgrad |RGBtst|XXXXXX|Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |RGBmod|RGBhue|RBGsat|RGBval| | | |XXXXXX|XXXXXX|XXXXXX|XXXXXX|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_preonic_1x2uC (
+ AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, RESET,
+ CK_TOGG, CK_DOWN, CK_UP, XXXXXXX, RGB_SAI, RGB_SAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TERM_ON, TERM_OFF,
+ MU_TOG, MUV_DE, MUV_IN, XXXXXXX, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP,
+ MI_TOG, 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_M_T, RGB_SPI, KC_LSHIFT,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_TOG, _______, XXXXXXX,RGB_RMOD, RGB_SPD, RGB_MOD
+)
+
+};
+/* clang-format on */
+
+float s_audio_on[][2] = AUDIO_ON_SONG;
+float s_layer_lower[][2] = LAYER_LOWER_SONG;
+float s_layer_raise[][2] = LAYER_RAISE_SONG;
+
+void audio_on_user() { PLAY_SONG(s_audio_on); };
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ PLAY_SONG(s_layer_lower);
+ } 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);
+ PLAY_SONG(s_layer_raise);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+#ifdef BACKLIGHT_ENABLE
+ backlight_step();
+#endif
+#ifdef __AVR__
+ writePinLow(E6);
+#endif
+ } else {
+ unregister_code(KC_RSFT);
+#ifdef __AVR__
+ writePinHigh(E6);
+#endif
+ }
+ return false;
+ break;
+ }
+ return true;
+};
+
+/* Global TapDance State */
+static t_tap qk_tap_state = {
+ .left_brackets = 0,
+ .numpad_funcrow = 0,
+ .right_brackets = 0,
+};
+
+float s_functionrow_on[][2] = LAYER_FUNCROW_ON_SONG;
+float s_functionrow_off[][2] = LAYER_FUNCROW_OFF_SONG;
+float s_numpad_toggle[][2] = LAYER_NMPAD_SONG;
+
+t_tap_state get_tapdance_state(qk_tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return SINGLE_TAP;
+ } else {
+ return SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ if (state->interrupted || !state->pressed) {
+ return DOUBLE_TAP;
+ } else {
+ return DOUBLE_HOLD;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted || !state->pressed) {
+ return TRIPLE_TAP;
+ } else {
+ return TRIPLE_HOLD;
+ }
+ } else
+ return TAP_DANCE_NO_MATCH;
+}
+
+void td_numpad_funcrow_finished(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_state.numpad_funcrow = get_tapdance_state(state);
+ switch (qk_tap_state.numpad_funcrow) {
+ case SINGLE_TAP ... SINGLE_HOLD:
+ layer_on(_NUMPAD);
+ PLAY_SONG(s_numpad_toggle);
+ break;
+ case DOUBLE_HOLD:
+ layer_on(_FUNCTIONROW);
+ break;
+ case DOUBLE_TAP:
+ if (layer_state_is(_FUNCTIONROW)) {
+ layer_off(_FUNCTIONROW);
+ PLAY_SONG(s_functionrow_off);
+ } else {
+ layer_on(_FUNCTIONROW);
+ PLAY_SONG(s_functionrow_on);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void td_numpad_funcrow_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (qk_tap_state.numpad_funcrow) {
+ case SINGLE_HOLD:
+ layer_off(_NUMPAD);
+ break;
+ case DOUBLE_HOLD:
+ layer_off(_FUNCTIONROW);
+ break;
+ default:
+ break;
+ }
+}
+
+void td_brackets_left_finished(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_state.left_brackets = get_tapdance_state(state);
+ switch (qk_tap_state.left_brackets) {
+ case SINGLE_TAP:
+ register_code16(KC_LEFT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ register_code(KC_LBRACKET);
+ break;
+ case TRIPLE_TAP:
+ register_code16(KC_LEFT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+}
+
+void td_brackets_left_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (qk_tap_state.left_brackets) {
+ case SINGLE_TAP:
+ unregister_code16(KC_LEFT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ unregister_code(KC_LBRACKET);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(KC_LEFT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+ qk_tap_state.left_brackets = 0;
+}
+
+void td_brackets_right_finished(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_state.right_brackets = get_tapdance_state(state);
+ switch (qk_tap_state.right_brackets) {
+ case SINGLE_TAP:
+ register_code16(KC_RIGHT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ register_code(KC_RBRACKET);
+ break;
+ case TRIPLE_TAP:
+ register_code16(KC_RIGHT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+}
+
+void td_brackets_right_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (qk_tap_state.right_brackets) {
+ case SINGLE_TAP:
+ unregister_code16(KC_RIGHT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ unregister_code(KC_RBRACKET);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(KC_RIGHT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+ qk_tap_state.right_brackets = 0;
+}
+
+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_user(uint8_t index, 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) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
+
+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;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/preonic/keymaps/mverteuil/readme.md b/keyboards/preonic/keymaps/mverteuil/readme.md
new file mode 100644
index 0000000000..b21df3f8fa
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil/readme.md
@@ -0,0 +1,2 @@
+# mverteuil does olkb preonic
+## 1x2u: One 2u spacebar on bottom row
diff --git a/keyboards/preonic/keymaps/mverteuil/rules.mk b/keyboards/preonic/keymaps/mverteuil/rules.mk
new file mode 100644
index 0000000000..a29a3cad79
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil/rules.mk
@@ -0,0 +1,5 @@
+SRC += muse.c
+
+AUDIO_ENABLE = yes
+MIDI_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/preonic/keymaps/mverteuil_2x2u/config.h b/keyboards/preonic/keymaps/mverteuil_2x2u/config.h
new file mode 100644
index 0000000000..51b278f647
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil_2x2u/config.h
@@ -0,0 +1,39 @@
+#ifdef AUDIO_ENABLE
+# if __has_include("copyright.h")
+# include "copyright.h"
+# endif
+
+# define AUDIO_CLICKY_DELAY_DURATION 0
+# define AUDIO_CLICKY_FREQ_DEFAULT 100.0f
+# define AUDIO_CLICKY_FREQ_MIN 61.0f
+# define AUDIO_CLICKY_FREQ_RANDOMNESS 0.2f
+# define DAC_SAMPLE_MAX 7000U
+# define STARTUP_SONG SONG(WORKMAN_SOUND)
+# define GOODBYE_SONG SONG(COIN_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/keyboards/preonic/keymaps/mverteuil_2x2u/keymap.c b/keyboards/preonic/keymaps/mverteuil_2x2u/keymap.c
new file mode 100644
index 0000000000..232b853114
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil_2x2u/keymap.c
@@ -0,0 +1,413 @@
+/* Copyright 2015-2017 Jack Humbert, 2019 Matthew de Verteuil
+ *
+ * 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"
+#include "mverteuil.h"
+
+/* Layer Aliases */
+#define LT_LWSP LT(_LOWER, KC_SPACE)
+#define LT_RSRT LT(_RAISE, KC_ENTER)
+#define MO_NUMS MO(_NUMPAD)
+
+/* Mod-Tap Aliases */
+#define MT_CESC CTL_T(KC_ESCAPE)
+
+/* TapDance Aliases */
+#define TD_LBRK TD(TD_BRACKETS_LEFT)
+#define TD_RBRK TD(TD_BRACKETS_RIGHT)
+#define TD_PLEQ TD(TD_PLUS_EQUALS)
+#define TD_SCOL TD(TD_SEMICOLON_COLON)
+#define TD_SLQU TD(TD_SLASH_QUESTION)
+#define TD_SQDQ TD(TD_QUOTE_DOUBLEQUOTE)
+#define TD_USMI TD(TD_UNDERSCORE_MINUS)
+
+/* Sentinel value for invalid tap dance exit */
+#define TAP_DANCE_NO_MATCH 64
+
+enum preonic_layers {
+ _QWERTY,
+ _NUMPAD,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ NUMPAD,
+ LOWER,
+ RAISE,
+ BACKLIT,
+};
+
+enum tapdance_keycodes {
+ TD_BRACKETS_LEFT,
+ TD_BRACKETS_RIGHT,
+ TD_CONTROL_ESCAPE,
+ TD_PLUS_EQUALS,
+ TD_QUOTE_DOUBLEQUOTE,
+ TD_SEMICOLON_COLON,
+ TD_SLASH_QUESTION,
+ TD_UNDERSCORE_MINUS,
+};
+
+typedef enum {
+ SINGLE_TAP,
+ SINGLE_HOLD,
+ DOUBLE_TAP,
+ DOUBLE_HOLD,
+ TRIPLE_TAP,
+ TRIPLE_HOLD,
+} t_tap_state;
+
+typedef struct {
+ t_tap_state left_brackets;
+ t_tap_state right_brackets;
+} t_tap;
+
+t_tap_state get_tapdance_state(qk_tap_dance_state_t *state);
+
+void td_brackets_left_finished(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_left_reset(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_right_finished(qk_tap_dance_state_t *state, void *user_data);
+void td_brackets_right_reset(qk_tap_dance_state_t *state, void *user_data);
+
+/* Tap Dance Definitions */
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once for left parenthesis, twice for left bracket, thrice for left brace */
+ [TD_BRACKETS_LEFT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_brackets_left_finished, td_brackets_left_reset),
+ /* Tap once for right parenthesis, twice for right bracket, thrice for right brace */
+ [TD_BRACKETS_RIGHT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_brackets_right_finished, td_brackets_right_reset),
+ /* Tap once for plus, twice for equals */
+ [TD_PLUS_EQUALS] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQUAL),
+ /* Tap once for single quote, twice for double quote */
+ [TD_QUOTE_DOUBLEQUOTE] = ACTION_TAP_DANCE_DOUBLE(KC_QUOTE, KC_DOUBLE_QUOTE),
+ /* Tap once for semicolon, twice for colon */
+ [TD_SEMICOLON_COLON] = ACTION_TAP_DANCE_DOUBLE(KC_SCOLON, KC_COLON),
+ /* Tap once for slash, twice for question mark */
+ [TD_SLASH_QUESTION] = ACTION_TAP_DANCE_DOUBLE(KC_SLASH, KC_QUESTION),
+ /* Tap once for underscore, twice for minus */
+ [TD_UNDERSCORE_MINUS] = ACTION_TAP_DANCE_DOUBLE(KC_UNDERSCORE, KC_MINUS),
+};
+
+/* clang-format off */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------.
+ * | ` | ! | @ | # | $ | % | ^ | & | * | _ - | + = | Bksp |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | ' " |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |CtrlEsc| A | S | D | F | G | H | J | K | L | ; : | / ? |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | ↑ | RShift|
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |NumPad | Ctrl | Alt | GUI | Lower/Space | Raise/Enter | GUI | ↠| ↓ | → |
+ * `-----------------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_preonic_2x2u (
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, TD_USMI, TD_PLEQ, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_SQDQ,
+ MT_CESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCOL, TD_SLQU,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
+ MO_NUMS, KC_LCTL, KC_LALT, KC_LGUI, LT_LWSP, LT_RSRT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+/* Numpad
+ * ,-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------.
+ * | | | | | | | | Tab | / | * | Bksp | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | 7 | 8 | 9 | - | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | 4 | 5 | 6 | + | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | 1 | 2 | 3 | Enter | |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | | | | | | | 0 | . | Enter | |
+ * `-----------------------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_preonic_2x2u (
+ _______, _______, _______, _______, _______, _______, _______, KC_TAB, KC_SLSH, KC_PAST, KC_BSPC, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______,
+ _______, _______, _______, _______, _______, _______, KC_KP_0, KC_PDOT, KC_PENT, _______
+),
+
+/* Lower
+ * ,-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |Delete |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | Vol+ | | | | | | | | MPlay | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | MPrev | Vol- | MNext | | | | | | | | \ |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | Mute | | | PgUp | |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | Home | PgDn | End |
+ * `-----------------------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_preonic_2x2u (
+ 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_VOLU, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______,
+ _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+),
+
+/* Raise
+ * ,-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | | | | | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | | [ { ( | ) } ] | | | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | | | | | |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_preonic_2x2u (
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, TD_LBRK, TD_RBRK, _______, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------.
+ * |AudTog |███████|███████|███████|███████|███████|███████|███████|███████|███████| Debug | Reset |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |Clicky |ClkFrq-|ClkFrq+|███████|███████|███████|███████|███████|███████|███████|TermOn |TermOff|
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | Music |Voice- |Voice+ |███████|███████|███████|███████|███████|███████|███████|AGnorm |AGswap |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | MIDI |R plain|R breat|R rnbow|R swirl|R snake|R knigt|R xmas |R grade|RGBtest|███████| Shift |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |RGBmode|RGBhue+|RGBsat+|RGBval+| | |███████|███████|███████|███████|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_preonic_2x2u (
+ AU_TOG, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DEBUG, RESET,
+ CK_TOGG, CK_DOWN, CK_UP, XXXXXXX, RGB_SAI, RGB_SAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TERM_ON, TERM_OFF,
+ MU_TOG, MUV_DE, MUV_IN, XXXXXXX, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP,
+ MI_TOG, 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_M_T, RGB_SPI, KC_LSHIFT,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX,RGB_RMOD, RGB_SPD, RGB_MOD
+)
+
+};
+/* clang-format on */
+
+float s_audio_on[][2] = AUDIO_ON_SONG;
+float s_layer_lower[][2] = LAYER_LOWER_SONG;
+float s_layer_raise[][2] = LAYER_RAISE_SONG;
+
+void audio_on_user() { PLAY_SONG(s_audio_on); };
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ PLAY_SONG(s_layer_lower);
+ } 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);
+ PLAY_SONG(s_layer_raise);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+#ifdef BACKLIGHT_ENABLE
+ backlight_step();
+#endif
+#ifdef __AVR__
+ writePinLow(E6);
+#endif
+ } else {
+ unregister_code(KC_RSFT);
+#ifdef __AVR__
+ writePinHigh(E6);
+#endif
+ }
+ return false;
+ break;
+ }
+ return true;
+};
+
+/* Global TapDance State */
+static t_tap qk_tap_state = {
+ .left_brackets = 0,
+ .right_brackets = 0,
+};
+
+float s_numpad_toggle[][2] = LAYER_NMPAD_SONG;
+
+t_tap_state get_tapdance_state(qk_tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ return SINGLE_TAP;
+ } else {
+ return SINGLE_HOLD;
+ }
+ } else if (state->count == 2) {
+ if (state->interrupted || !state->pressed) {
+ return DOUBLE_TAP;
+ } else {
+ return DOUBLE_HOLD;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted || !state->pressed) {
+ return TRIPLE_TAP;
+ } else {
+ return TRIPLE_HOLD;
+ }
+ } else
+ return TAP_DANCE_NO_MATCH;
+}
+
+void td_brackets_left_finished(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_state.left_brackets = get_tapdance_state(state);
+ switch (qk_tap_state.left_brackets) {
+ case SINGLE_TAP:
+ register_code16(KC_LEFT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ register_code(KC_LBRACKET);
+ break;
+ case TRIPLE_TAP:
+ register_code16(KC_LEFT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+}
+
+void td_brackets_left_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (qk_tap_state.left_brackets) {
+ case SINGLE_TAP:
+ unregister_code16(KC_LEFT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ unregister_code(KC_LBRACKET);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(KC_LEFT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+ qk_tap_state.left_brackets = 0;
+}
+
+void td_brackets_right_finished(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_state.right_brackets = get_tapdance_state(state);
+ switch (qk_tap_state.right_brackets) {
+ case SINGLE_TAP:
+ register_code16(KC_RIGHT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ register_code(KC_RBRACKET);
+ break;
+ case TRIPLE_TAP:
+ register_code16(KC_RIGHT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+}
+
+void td_brackets_right_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (qk_tap_state.right_brackets) {
+ case SINGLE_TAP:
+ unregister_code16(KC_RIGHT_PAREN);
+ break;
+ case DOUBLE_TAP:
+ unregister_code(KC_RBRACKET);
+ break;
+ case TRIPLE_TAP:
+ unregister_code16(KC_RIGHT_CURLY_BRACE);
+ break;
+ default:
+ break;
+ }
+ qk_tap_state.right_brackets = 0;
+}
+
+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_user(uint8_t index, 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) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
diff --git a/keyboards/preonic/keymaps/mverteuil_2x2u/rules.mk b/keyboards/preonic/keymaps/mverteuil_2x2u/rules.mk
new file mode 100644
index 0000000000..9e55d0aa67
--- /dev/null
+++ b/keyboards/preonic/keymaps/mverteuil_2x2u/rules.mk
@@ -0,0 +1,6 @@
+USER_NAME := mverteuil
+SRC += muse.c
+
+AUDIO_ENABLE = yes
+MIDI_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c
index 8d052ea81f..16c99d9a80 100644
--- a/keyboards/preonic/preonic.c
+++ b/keyboards/preonic/preonic.c
@@ -1,16 +1,5 @@
#include "preonic.h"
-#ifdef SWAP_HANDS_ENABLE
-__attribute__ ((weak))
-const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
- {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
- {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
- {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
- {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
- {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
-};
-#endif
-
const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_preonic_grid(
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
diff --git a/keyboards/preonic/rev1/rev1.c b/keyboards/preonic/rev1/rev1.c
index fd09d7f2d8..c9fd8330ef 100644
--- a/keyboards/preonic/rev1/rev1.c
+++ b/keyboards/preonic/rev1/rev1.c
@@ -23,3 +23,14 @@ void matrix_init_kb(void) {
matrix_init_user();
};
+
+#ifdef SWAP_HANDS_ENABLE
+ __attribute__ ((weak))
+ const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+ {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ };
+#endif
diff --git a/keyboards/preonic/rev2/rev2.c b/keyboards/preonic/rev2/rev2.c
index 785ac3310b..c0e72620ed 100644
--- a/keyboards/preonic/rev2/rev2.c
+++ b/keyboards/preonic/rev2/rev2.c
@@ -23,3 +23,14 @@ void matrix_init_kb(void) {
matrix_init_user();
};
+
+#ifdef SWAP_HANDS_ENABLE
+ __attribute__ ((weak))
+ const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+ {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ };
+#endif
diff --git a/keyboards/preonic/rev3/rev3.c b/keyboards/preonic/rev3/rev3.c
index dc4ff66fc0..04b691f405 100644
--- a/keyboards/preonic/rev3/rev3.c
+++ b/keyboards/preonic/rev3/rev3.c
@@ -32,3 +32,19 @@ void dip_switch_update_user(uint8_t index, bool active) {
dip_update(index, active);
}
#endif
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}},
+ {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}},
+ {{5, 7}, {4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}},
+ {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+ {{5, 8}, {4, 8}, {3, 8}, {2, 8}, {1, 8}, {0, 8}},
+ {{5, 9}, {4, 9}, {3, 9}, {2, 9}, {1, 9}, {0, 9}},
+};
+#endif
diff --git a/keyboards/primekb/prime_e/config.h b/keyboards/primekb/prime_e/config.h
index 46124973de..bf5061b1ae 100644
--- a/keyboards/primekb/prime_e/config.h
+++ b/keyboards/primekb/prime_e/config.h
@@ -50,23 +50,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*13*4*2)) = (37+416)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 453
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 571 // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/primekb/prime_e/keymaps/default/keymap.c b/keyboards/primekb/prime_e/keymaps/default/keymap.c
index 5a09cb9694..65b2f67a3d 100644
--- a/keyboards/primekb/prime_e/keymaps/default/keymap.c
+++ b/keyboards/primekb/prime_e/keymaps/default/keymap.c
@@ -83,9 +83,9 @@ void led_set_user(uint8_t usb_led) {
}
//function for layer indicator LED
-uint32_t layer_state_set_user(uint32_t state)
+layer_state_t layer_state_set_user(layer_state_t state)
{
- if (biton32(state) == 1) {
+ if (get_highest_layer(state) == 1) {
writePinHigh(B3);
} else {
writePinLow(B3);
diff --git a/keyboards/primekb/prime_e/keymaps/via/rules.mk b/keyboards/primekb/prime_e/keymaps/via/rules.mk
index c981a2f261..1e5b99807c 100644
--- a/keyboards/primekb/prime_e/keymaps/via/rules.mk
+++ b/keyboards/primekb/prime_e/keymaps/via/rules.mk
@@ -1,85 +1 @@
-# 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 = 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 = 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)
-
-# This is the VIA magic
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-SRC += keyboards/wilba_tech/wt_main.c \ No newline at end of file
+VIA_ENABLE = yes
diff --git a/keyboards/projectkb/alice/alice.c b/keyboards/projectkb/alice/alice.c
index fada436811..ca0c7da2be 100644
--- a/keyboards/projectkb/alice/alice.c
+++ b/keyboards/projectkb/alice/alice.c
@@ -6,22 +6,12 @@ void matrix_init_board(void){
setPinOutput(A2);
}
-
-void led_set_kb(uint8_t usb_led) {
- if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- writePinLow(A0);
- } else {
- writePinHigh(A0);
- }
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinLow(A1);
- } else {
- writePinHigh(A1);
- }
- if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
- writePinLow(A2);
- } else {
- writePinHigh(A2);
+bool led_update_kb(led_t led_state) {
+ bool runDefault = led_update_user(led_state);
+ if (runDefault) {
+ writePin(A0, !led_state.num_lock);
+ writePin(A1, !led_state.caps_lock);
+ writePin(A2, !led_state.scroll_lock);
}
- led_set_user(usb_led);
+ return runDefault;
}
diff --git a/keyboards/projectkb/alice/config.h b/keyboards/projectkb/alice/config.h
index cc0386ae68..4a068a8893 100644
--- a/keyboards/projectkb/alice/config.h
+++ b/keyboards/projectkb/alice/config.h
@@ -58,29 +58,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PIN_WS2812 15
#define WS2812_SPI SPID2
-
-// 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 0x01
-#define EEPROM_VERSION_ADDR 34
-
-#define EEPROM_CUSTOM_BACKLIGHT 804
-
-#undef EEPROM_MAGIC_ADDR
-#define EEPROM_MAGIC_ADDR 34
-#undef EEPROM_VERSION_ADDR
-#define EEPROM_VERSION_ADDR 36
-#undef RGB_BACKLIGHT_CONFIG_EEPROM_ADDR
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-#undef DYNAMIC_KEYMAP_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 68
-#undef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 66
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
/*
* Feature disable options
diff --git a/keyboards/projectkb/alice/keymaps/madhatter/keymap.c b/keyboards/projectkb/alice/keymaps/madhatter/keymap.c
index bac44f0b3e..4965947e93 100644
--- a/keyboards/projectkb/alice/keymaps/madhatter/keymap.c
+++ b/keyboards/projectkb/alice/keymaps/madhatter/keymap.c
@@ -23,17 +23,16 @@ enum my_layers {
};
#define FNMS MO(_FNMS)
-#define SPCNAV LT(_NAVMED, KC_SPC)
-#define CAPSTL CTL_T(KC_CAPS)
-#define CMDENT CMD_T(KC_ENT)
+#define NAVMED MO(_NAVMED)
+#define CAP_CTL CTL_T(KC_CAPS)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_default(
- KC_GESC, 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_DEL, 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, CAPSTL, 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_GESC, 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_DEL,
+ 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_BSPC,
+ KC_PGDN, CAP_CTL, 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, FNMS,
- KC_LCTL, KC_LALT, CMDENT, FNMS, SPCNAV, KC_RALT, KC_RCTL
+ KC_LCTL, KC_LALT, KC_LCMD, NAVMED, KC_SPC, KC_RALT, KC_RCTL
),
[_FNMS] = LAYOUT_default(
@@ -41,15 +40,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, RESET,
VLK_TOG, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______,
_______, BL_INC, BL_DEC, BL_TOGG, BL_BRTG, _______, RGB_SAI, RGB_HUI, RGB_VAI, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______,
- _______, _______, _______, _______, _______, _______, _______
+ AG_TOGG, _______, _______, _______, _______, _______, _______
),
[_NAVMED] = LAYOUT_default(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, _______, KC_UP, _______, _______, _______, _______, RESET,
- _______, _______, _______, _______, _______, _______, KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, EEP_RST,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______
+ KC_HOME, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, RESET,
+ KC_END, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, EEP_RST,
+ _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
)
};
+static uint8_t top = 0;
+static uint8_t middle = 0;
+static uint8_t bottom = 1;
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ top = middle = bottom = 0;
+ switch (get_highest_layer(state)) {
+ case _NAVMED:
+ top = 1;
+ break;
+ case _FNMS:
+ middle = 1;
+ break;
+ default:
+ break;
+ }
+ return state;
+}
+
+bool led_update_user(led_t usb_led) {
+ writePin(A0, !top);
+ writePin(A1, !middle);
+ writePin(A2, !bottom);
+ return false;
+}
diff --git a/keyboards/projectkb/alice/keymaps/madhatter/rules.mk b/keyboards/projectkb/alice/keymaps/madhatter/rules.mk
index 1b0f198d06..99cbe88b70 100644
--- a/keyboards/projectkb/alice/keymaps/madhatter/rules.mk
+++ b/keyboards/projectkb/alice/keymaps/madhatter/rules.mk
@@ -1 +1,2 @@
VELOCIKEY_ENABLE = yes
+CONSOLE_ENABLE = no
diff --git a/keyboards/projectkb/alice/rules.mk b/keyboards/projectkb/alice/rules.mk
index 606ffda183..96904aef3d 100644
--- a/keyboards/projectkb/alice/rules.mk
+++ b/keyboards/projectkb/alice/rules.mk
@@ -1,35 +1,5 @@
-# project specific files
-# SRC = ssd1306.c
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+# MCU name
+MCU = STM32F072
# Build Options
# comment out to disable the options.
@@ -53,5 +23,3 @@ RGBLIGHT_ENABLE = yes
# RAW_ENABLE = yes
# DYNAMIC_KEYMAP_ENABLE = yes
-
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
diff --git a/keyboards/quantrik/kyuu/config.h b/keyboards/quantrik/kyuu/config.h
index b40ce64cc9..69fa4191e7 100644
--- a/keyboards/quantrik/kyuu/config.h
+++ b/keyboards/quantrik/kyuu/config.h
@@ -20,8 +20,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 0x0000
+#define VENDOR_ID 0x5154 // "QT"
+#define PRODUCT_ID 0x0009
#define DEVICE_VER 0x0001
#define MANUFACTURER Quantrik
#define PRODUCT Kyuu
diff --git a/keyboards/quantrik/kyuu/keymaps/default/keymap.c b/keyboards/quantrik/kyuu/keymaps/default/keymap.c
index 077d7ac5a6..5e4709b410 100644
--- a/keyboards/quantrik/kyuu/keymaps/default/keymap.c
+++ b/keyboards/quantrik/kyuu/keymaps/default/keymap.c
@@ -22,43 +22,42 @@ enum custom_keycodes {
};
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_GRV, 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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, 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, QMKBEST, 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 \
- ),
-
+ [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_GRV, 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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, 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, QMKBEST, 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
+ )
};
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;
+ 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) {
diff --git a/keyboards/quantrik/kyuu/keymaps/via/keymap.c b/keyboards/quantrik/kyuu/keymaps/via/keymap.c
new file mode 100755
index 0000000000..2525ae1c9c
--- /dev/null
+++ b/keyboards/quantrik/kyuu/keymaps/via/keymap.c
@@ -0,0 +1,47 @@
+/* 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
+
+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_GRV, 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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ 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_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, 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
+ ),
+ [2] = 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/quantrik/kyuu/keymaps/via/readme.md b/keyboards/quantrik/kyuu/keymaps/via/readme.md
new file mode 100755
index 0000000000..c3d6edabfb
--- /dev/null
+++ b/keyboards/quantrik/kyuu/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The default VIA keymap for Kyuu
diff --git a/keyboards/quantrik/kyuu/keymaps/via/rules.mk b/keyboards/quantrik/kyuu/keymaps/via/rules.mk
new file mode 100755
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/quantrik/kyuu/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/redox/keymaps/eightbitraptor/config.h b/keyboards/redox/keymaps/eightbitraptor/config.h
new file mode 100644
index 0000000000..d1b0012147
--- /dev/null
+++ b/keyboards/redox/keymaps/eightbitraptor/config.h
@@ -0,0 +1,37 @@
+/*
+Copyright 2018 Mattia Dal Ben <matthewdibi@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 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#define RETRO_TAPPING
+#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/redox/keymaps/eightbitraptor/keymap.c b/keyboards/redox/keymaps/eightbitraptor/keymap.c
new file mode 100644
index 0000000000..dd1ed01c24
--- /dev/null
+++ b/keyboards/redox/keymaps/eightbitraptor/keymap.c
@@ -0,0 +1,87 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QWERTY,
+ _SYMB,
+ _NAV,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ SYMB,
+ NAV,
+ ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define SYM_L MO(_SYMB)
+#define NAV_L MO(_NAV)
+
+#define KC_NABS LT(_NAV, KC_BSLS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+#define KC_ECTL MT(MOD_LCTL, KC_ESC)
+#define KC_QCTL MT(MOD_RCTL, KC_QUOT)
+
+// TODO: Can I invert shift presses to invert ' and "?
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_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_MINS ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_UNDS , KC_MINS ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ECTL ,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_QCTL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ NAV_L ,SYM_L ,XXXXXXX ,KC_LALT , KC_LGUI , KC_SPC ,KC_DEL , KC_ENT ,KC_BSPC , KC_RGUI , KC_LALT ,XXXXXXX ,SYM_L ,KC_NABS
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PMNS ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_HASH ,KC_DLR ,KC_LBRC ,KC_RBRC ,KC_GRV ,_______ , _______ ,KC_PAST ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PENT ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_P0 , KC_P0 ,KC_PDOT ,KC_PENT ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_MUTE , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,KC_MPRV , KC_MNXT ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , KC_BRID ,KC_VOLD , KC_VOLU ,KC_BRIU , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/redox/keymaps/eightbitraptor/rules.mk b/keyboards/redox/keymaps/eightbitraptor/rules.mk
new file mode 100644
index 0000000000..a81250cdf6
--- /dev/null
+++ b/keyboards/redox/keymaps/eightbitraptor/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+
diff --git a/keyboards/redscarf_i/config.h b/keyboards/redscarf_i/config.h
new file mode 100644
index 0000000000..9e35e902af
--- /dev/null
+++ b/keyboards/redscarf_i/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2019 Ben Weakley
+
+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 0x5959
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Red Scarf
+#define PRODUCT Red Scarf I
+#define DESCRIPTION QMK for Red Scarf I number pads
+
+/* Matrix */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D4, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7 }
+#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+
+/* Backlight */
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_LEVELS 3
+//#define BACKLIGHT_BREATHING
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5 \ No newline at end of file
diff --git a/keyboards/redscarf_i/info.json b/keyboards/redscarf_i/info.json
new file mode 100644
index 0000000000..a2ea71f3a2
--- /dev/null
+++ b/keyboards/redscarf_i/info.json
@@ -0,0 +1,114 @@
+{
+ "keyboard_name": "Red Scarf I",
+ "url": "",
+ "maintainer": "qmk, defying",
+ "width": 4,
+ "layouts": {
+ "LAYOUT_ortho_5x4": {
+ "height": 5,
+ "key_count": 20,
+ "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_ortho_6x4": {
+ "height": 6,
+ "key_count": 24,
+ "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},
+ {"x":0, "y":5},
+ {"x":1, "y":5},
+ {"x":2, "y":5},
+ {"x":3, "y":5}
+ ]
+ },
+ "LAYOUT_numpad_5x4": {
+ "height": 5,
+ "key_count": 17,
+ "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_numpad_6x4": {
+ "height": 6,
+ "key_count": 21,
+ "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":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":2, "h":2},
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4},
+ {"x":0, "y":5, "w":2},
+ {"x":2, "y":5},
+ {"x":3, "y":4, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/redscarf_i/keymaps/default/keymap.c b/keyboards/redscarf_i/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9a693fabb6
--- /dev/null
+++ b/keyboards/redscarf_i/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2019 Ben Weakley
+ *
+ * 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_ortho_6x4( // Base
+ 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_ENT,
+ KC_P0, KC_UP, KC_PDOT, KC_BSPC,
+ KC_LEFT, KC_DOWN, KC_RGHT, BL_TOGG
+ )
+};
diff --git a/keyboards/redscarf_i/keymaps/ortho_5x4/keymap.c b/keyboards/redscarf_i/keymaps/ortho_5x4/keymap.c
new file mode 100644
index 0000000000..57df878580
--- /dev/null
+++ b/keyboards/redscarf_i/keymaps/ortho_5x4/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 Ben Weakley
+ *
+ * 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 {
+ KC_P00 = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x4( // Base
+ 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_ENT,
+ KC_P0, KC_P00, KC_PDOT, MO(1)
+ ),
+ [1] = LAYOUT_ortho_5x4( // Function 1
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_BRTG, _______,
+ KC_MUTE, KC_VOLD, KC_VOLU, _______,
+ KC_MPRV, KC_MPLY, KC_MNXT, _______
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_P00:
+ if (record->event.pressed) {
+ SEND_STRING("00");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/redscarf_i/keymaps/ortho_6x4/keymap.c b/keyboards/redscarf_i/keymaps/ortho_6x4/keymap.c
new file mode 100644
index 0000000000..54bf68ce4e
--- /dev/null
+++ b/keyboards/redscarf_i/keymaps/ortho_6x4/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2019 Ben Weakley
+ *
+ * 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_ortho_6x4( // Base
+ 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_ENT,
+ KC_P0, KC_UP, KC_PDOT, KC_BSPC,
+ KC_LEFT, KC_DOWN, KC_RGHT, MO(1)
+ ),
+ [1] = LAYOUT_ortho_6x4( // Function 1
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ BL_TOGG, BL_STEP, BL_BRTG, _______,
+ KC_MUTE, KC_VOLD, KC_VOLU, _______,
+ KC_MPRV, KC_MPLY, KC_MNXT, _______
+ )
+};
diff --git a/keyboards/redscarf_i/readme.md b/keyboards/redscarf_i/readme.md
new file mode 100644
index 0000000000..a5c5468d2a
--- /dev/null
+++ b/keyboards/redscarf_i/readme.md
@@ -0,0 +1,15 @@
+# Red Scarf I
+
+![redscarf_i](https://i.imgur.com/Q6p81aX.jpg)
+
+Port of QMK for Red Scarf I number pads, a five- or six-row number pad with support for in-switch single-color LEDs.
+
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk), [Ben Weakley](https://github.com/defying)
+* Hardware Supported: Red Scarf I PCBs
+* Hardware Availability: no longer available
+
+Make example for this keyboard (after setting up your build environment):
+
+ make redscarf_i: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/redscarf_i/redscarf_i.c b/keyboards/redscarf_i/redscarf_i.c
new file mode 100644
index 0000000000..a8a685b13b
--- /dev/null
+++ b/keyboards/redscarf_i/redscarf_i.c
@@ -0,0 +1,54 @@
+/* Copyright 2019 Ben Weakley
+ *
+ * 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 "redscarf_i.h"
+
+void keyboard_pre_init_kb(void) {
+ // initialize top row leds
+ setPinOutput(F7);
+ setPinOutput(F6);
+ setPinOutput(F5);
+ // and then turn them off
+ writePinHigh(F7);
+ writePinHigh(F6);
+ writePinHigh(F5);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(F7, !led_state.num_lock);
+ }
+ return res;
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ switch (biton32(state)) {
+ case 1:
+ writePinHigh(F6);
+ writePinLow(F5);
+ break;
+ case 2:
+ writePinLow(F6);
+ writePinHigh(F5);
+ break;
+ default:
+ writePinHigh(F6);
+ writePinHigh(F5);
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/redscarf_i/redscarf_i.h b/keyboards/redscarf_i/redscarf_i.h
new file mode 100644
index 0000000000..44e4689347
--- /dev/null
+++ b/keyboards/redscarf_i/redscarf_i.h
@@ -0,0 +1,85 @@
+/* Copyright 2019 Ben Weakley
+ *
+ * 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_ortho_6x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43, \
+ k50, k51, k52, k53 \
+) \
+{ \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, k33 }, \
+ { k40, k41, k42, k43 }, \
+ { k50, k51, k52, k53 } \
+}
+
+#define LAYOUT_ortho_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43 \
+) \
+{ \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, k33 }, \
+ { k40, k41, k42, k43 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
+#define LAYOUT_numpad_6x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k23, \
+ k40, k41, k42, \
+ k50, k52, k43 \
+) \
+{ \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, KC_NO }, \
+ { k40, k41, k42, k43 }, \
+ { k50, KC_NO, k52, KC_NO } \
+}
+
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ 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 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO } \
+}
diff --git a/keyboards/redscarf_i/rules.mk b/keyboards/redscarf_i/rules.mk
new file mode 100644
index 0000000000..2724fe6dbc
--- /dev/null
+++ b/keyboards/redscarf_i/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+UNICODE_ENABLE = no # Unicode
+
+LAYOUTS = ortho_5x4 ortho_6x4 numpad_5x4 numpad_6x4
diff --git a/keyboards/retro_75/rules.mk b/keyboards/retro_75/rules.mk
index 82a2cfb06f..d3ead7f646 100644
--- a/keyboards/retro_75/rules.mk
+++ b/keyboards/retro_75/rules.mk
@@ -1,37 +1,5 @@
-## 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
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# 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
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p df11 -v 0483
+# MCU name
+MCU = STM32F072
# Build Options
# change yes to no to disable
diff --git a/keyboards/reviung34/keymaps/default/keymap.c b/keyboards/reviung34/keymaps/default/keymap.c
index 4d497a76b7..fe373f53b7 100755
--- a/keyboards/reviung34/keymaps/default/keymap.c
+++ b/keyboards/reviung34/keymaps/default/keymap.c
@@ -61,7 +61,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
-
diff --git a/keyboards/reviung39/keymaps/default/keymap.c b/keyboards/reviung39/keymaps/default/keymap.c
index 9f0d0debc2..7030be13fa 100644
--- a/keyboards/reviung39/keymaps/default/keymap.c
+++ b/keyboards/reviung39/keymaps/default/keymap.c
@@ -56,6 +56,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/reviung39/keymaps/toshi0383/keymap.c b/keyboards/reviung39/keymaps/toshi0383/keymap.c
index da94181db1..e178389255 100644
--- a/keyboards/reviung39/keymaps/toshi0383/keymap.c
+++ b/keyboards/reviung39/keymaps/toshi0383/keymap.c
@@ -29,29 +29,29 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_reviung39(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RGUI, KC_RSFT,
- KC_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_RGUI, KC_RALT, RGUI(KC_RSFT),
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SCLN), KC_RGUI,
+ KC_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_DOT, KC_RALT, RGUI(KC_RSFT),
LOWER, KC_ENT, RAISE
),
[_LOWER] = LAYOUT_reviung39(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, _______, _______, _______,
_______, KC_LT, KC_GT, KC_LPRN, KC_RPRN, KC_GRV, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_PIPE,
- _______, _______, _______, _______, KC_EQL, KC_QUES, KC_UNDS, KC_PLUS, KC_COMM, KC_DOT, KC_SLSH, _______,
- _______, KC_ENT, KC_RGUI
+ KC_LALT, _______, _______, _______, KC_EQL, KC_QUES, KC_UNDS, KC_PLUS, KC_COMM, _______, KC_SLSH, _______,
+ _______, _______, KC_RGUI
),
[_RAISE] = LAYOUT_reviung39(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_COLN, KC_SCLN, KC_DQT, KC_QUOT, KC_BSLS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
_______, _______, _______, _______, _______, _______, ADJUST, _______, _______, _______, _______, _______,
- KC_LGUI, KC_ENT, _______
+ KC_LGUI, _______, _______
),
[_ADJUST] = LAYOUT_reviung39(
- RGB_VAI, RGB_SAI, RGB_HUI, RGB_MOD, XXXXXXX, RGB_TOG, KC_Y, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- RGB_VAD, RGB_SAD, RGB_HUD, RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, XXXXXXX, _______
+ RGB_VAI, RGB_SAI, RGB_HUI, RGB_MOD, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RGB_VAD, RGB_SAD, RGB_HUD, RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, _______
),
};
diff --git a/keyboards/reviung41/config.h b/keyboards/reviung41/config.h
new file mode 100644
index 0000000000..26ecc142da
--- /dev/null
+++ b/keyboards/reviung41/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2020 gtips
+
+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 0xDCCB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER gtips
+#define PRODUCT reviung41
+#define DESCRIPTION A 41-key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 6
+
+/*
+ * 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, B1, B3, B2 }
+#define MATRIX_COL_PINS \
+ { D4, C6, D7, E6, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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 D3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 11
+ #define RGBLIGHT_HUE_STEP 16
+ #define RGBLIGHT_SAT_STEP 16
+ #define RGBLIGHT_VAL_STEP 16
+ #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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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/reviung41/info.json b/keyboards/reviung41/info.json
new file mode 100644
index 0000000000..aff1660389
--- /dev/null
+++ b/keyboards/reviung41/info.json
@@ -0,0 +1,61 @@
+{
+ "keyboard_name": "reviung39",
+ "url": "",
+ "maintainer": "gtips",
+ "width": 13,
+ "height": 4.54,
+ "layouts": {
+ "LAYOUT_reviung41": {
+ "key_count": 41,
+ "layout": [
+ {"label":"K00", "x":0, "y":0.54},
+ {"label":"K01", "x":1, "y":0.36},
+ {"label":"K02", "x":2, "y":0.18},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0.18},
+ {"label":"K05", "x":5, "y":0.36},
+
+ {"label":"K30", "x":7, "y":0.36},
+ {"label":"K31", "x":8, "y":0.18},
+ {"label":"K32", "x":9, "y":0},
+ {"label":"K33", "x":10, "y":0.18},
+ {"label":"K34", "x":11, "y":0.36},
+ {"label":"K35", "x":12, "y":0.54},
+
+ {"label":"K10", "x":0, "y":1.54},
+ {"label":"K11", "x":1, "y":1.36},
+ {"label":"K12", "x":2, "y":1.18},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1.18},
+ {"label":"K15", "x":5, "y":1.36},
+
+ {"label":"K40", "x":7, "y":1.36},
+ {"label":"K41", "x":8, "y":1.18},
+ {"label":"K42", "x":9, "y":1},
+ {"label":"K43", "x":10, "y":1.18},
+ {"label":"K44", "x":11, "y":1.36},
+ {"label":"K45", "x":12, "y":1.54},
+
+ {"label":"K20", "x":0, "y":2.54},
+ {"label":"K21", "x":1, "y":2.36},
+ {"label":"K22", "x":2, "y":2.18},
+ {"label":"K23", "x":3, "y":2},
+ {"label":"K24", "x":4, "y":2.18},
+ {"label":"K25", "x":5, "y":2.36},
+
+ {"label":"K50", "x":7, "y":2.36},
+ {"label":"K51", "x":8, "y":2.18},
+ {"label":"K52", "x":9, "y":2},
+ {"label":"K53", "x":10, "y":2.18},
+ {"label":"K54", "x":11, "y":2.36},
+ {"label":"K55", "x":12, "y":2.54},
+
+ {"label":"K60", "x":2.875, "y":3.54, "w":1.25},
+ {"label":"K61", "x":4.125, "y":3.54, "w":1.25},
+ {"label":"K62", "x":5.375, "y":3.54, "w":2.25},
+ {"label":"K63", "x":7.625, "y":3.54, "w":1.25},
+ {"label":"K64", "x":8.875, "y":3.54, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/reviung41/keymaps/default/keymap.c b/keyboards/reviung41/keymaps/default/keymap.c
new file mode 100644
index 0000000000..4231e4896b
--- /dev/null
+++ b/keyboards/reviung41/keymaps/default/keymap.c
@@ -0,0 +1,62 @@
+/* Copyright 2020 gtips
+ *
+ * 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 layer_names {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_reviung41(
+ 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, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
+ KC_LALT, LOWER, KC_SPC, RAISE, KC_RGUI
+ ),
+
+ [_LOWER] = LAYOUT_reviung41(
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_GRV, KC_TILD,
+ _______, KC_ESC, KC_LGUI, KC_LALT, KC_CAPS, KC_DQUO, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_PSCR, RSFT_T(KC_SPC),
+ _______, _______, KC_ENT, _______, _______
+ ),
+
+ [_RAISE] = LAYOUT_reviung41(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, KC_ESC, KC_RGUI, KC_RALT, KC_CAPS, KC_QUOT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, KC_BSPC, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT_reviung41(
+ RGB_VAI, RGB_SAI, RGB_HUI, RGB_MOD, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RGB_VAD, RGB_SAD, RGB_HUD, RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, XXXXXXX, _______, _______
+ ),
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
diff --git a/keyboards/reviung41/keymaps/default/readme.md b/keyboards/reviung41/keymaps/default/readme.md
new file mode 100644
index 0000000000..7e8120413e
--- /dev/null
+++ b/keyboards/reviung41/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for reviung41
diff --git a/keyboards/reviung41/readme.md b/keyboards/reviung41/readme.md
new file mode 100644
index 0000000000..49b27bd94f
--- /dev/null
+++ b/keyboards/reviung41/readme.md
@@ -0,0 +1,15 @@
+# reviung41
+
+![reviung41](https://github.com/gtips/reviung/blob/master/reviung41/image/REVIUNG41-prototype.jpg)
+
+The REVIUNG41 is 41-key column staggered keyboard.
+
+* Keyboard Maintainer: [gtips](https://github.com/gtips)
+* Hardware Supported: REVIUNG41 PCBs, Pro Micro supported
+* Hardware Availability: [PCB & Case Data](https://github.com/gtips/reviung/tree/master/reviung41)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make reviung41: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/reviung41/reviung41.c b/keyboards/reviung41/reviung41.c
new file mode 100644
index 0000000000..05bb42160a
--- /dev/null
+++ b/keyboards/reviung41/reviung41.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 gtips
+ *
+ * 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 "reviung41.h"
diff --git a/keyboards/reviung41/reviung41.h b/keyboards/reviung41/reviung41.h
new file mode 100644
index 0000000000..6bc80e8b21
--- /dev/null
+++ b/keyboards/reviung41/reviung41.h
@@ -0,0 +1,42 @@
+/* Copyright 2020 gtips
+ *
+ * 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_reviung41( \
+ K00, K01, K02, K03, K04, K05, K30, K31, K32, K33, K34, K35, \
+ K10, K11, K12, K13, K14, K15, K40, K41, K42, K43, K44, K45, \
+ K20, K21, K22, K23, K24, K25, K50, K51, K52, K53, K54, K55, \
+ K60, K61, K62, K63, K64 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05 }, \
+ { K10, K11, K12, K13, K14, K15 }, \
+ { K20, K21, K22, K23, K24, K25 }, \
+ { K30, K31, K32, K33, K34, K35 }, \
+ { K40, K41, K42, K43, K44, K45 }, \
+ { K50, K51, K52, K53, K54, K55 }, \
+ { K60, K61, K62, K63, K64, KC_NO } \
+}
diff --git a/keyboards/reviung41/rules.mk b/keyboards/reviung41/rules.mk
new file mode 100644
index 0000000000..983d574a31
--- /dev/null
+++ b/keyboards/reviung41/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/rgbkb/sol/keymaps/default/keymap.c b/keyboards/rgbkb/sol/keymaps/default/keymap.c
index 51039e48e2..04af5165e7 100644
--- a/keyboards/rgbkb/sol/keymaps/default/keymap.c
+++ b/keyboards/rgbkb/sol/keymaps/default/keymap.c
@@ -107,13 +107,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,------------------------------------------------. ,------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
- * | | SAD | VAI | SAI | RESET| | | | | | | | | | |
+ * | | SAD | VAI | SAI | RESET| | | | | | P7 | P8 | P9 | | |
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
- * | | HUD | VAD | HUI |RGBRST| | | | | |QWERTY|COLEMK| | | |
+ * | | HUD | VAD | HUI |RGBRST| | | | | | P4 | P5 | P6 | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | SPD | | SPI | | | | | | | |RGBTOG| HUI | SAI | VAI |
+ * | | SPD | | SPI | | | | | | | P1 | P2 | P3 | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | |RGBMOD(| | | | | | | |RGBRMOD| HUD | SAD | VAD |
+ * | | | |RGBMOD| | | | | | | P0 | PDOT | NLCK |QWERTY|COLEMK|
* `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
* | | | | | |
* `-------------' `-------------'
@@ -121,10 +121,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJ] = 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, \
- _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, RGB_HUD, RGB_VAD, RGB_HUI, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, \
- _______, RGB_SPD, _______, RGB_SPI, _______, _______, _______, _______, _______, RGB_SPI, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
- _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, \
+ _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, \
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, RGBRST, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, \
+ _______, RGB_SPD, _______, RGB_SPI, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, \
+ _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_NLCK, QWERTY, COLEMAK, \
_______, _______, _______, _______ \
)
};
@@ -234,12 +234,12 @@ void encoder_update_user(uint8_t index, bool clockwise) {
#endif
{
uint8_t layer = biton32(layer_state);
- uint16_t keycode = encoders[layer][index][clockwise];
+ uint16_t keycode = pgm_read_word(&encoders[layer][index][clockwise]);
while (keycode == KC_TRANSPARENT && layer > 0)
{
layer--;
if ((layer_state & (1 << layer)) != 0)
- keycode = encoders[layer][index][clockwise];
+ keycode = pgm_read_word(&encoders[layer][index][clockwise]);
}
if (keycode != KC_TRANSPARENT)
tap_code16(keycode);
@@ -301,7 +301,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master())
return OLED_ROTATION_270;
- return rotation;
+ return OLED_ROTATION_180;
}
static void render_logo(void) {
diff --git a/keyboards/rgbkb/sol/keymaps/default/readme.md b/keyboards/rgbkb/sol/keymaps/default/readme.md
index 4a97a7babe..ce5bce19ee 100644
--- a/keyboards/rgbkb/sol/keymaps/default/readme.md
+++ b/keyboards/rgbkb/sol/keymaps/default/readme.md
@@ -57,13 +57,13 @@
* ,------------------------------------------------. ,------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
- * | | SAD | VAI | SAI | RESET| | | | | | | | | | |
+ * | | SAD | VAI | SAI | RESET| | | | | | P7 | P8 | P9 | | |
* |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
- * | | HUD | VAD | HUI |RGBRST| | | | | |QWERTY|COLEMK| | | |
+ * | | HUD | VAD | HUI |RGBRST| | | | | | P4 | P5 | P6 | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | |RGBTOG| HUI | SAI | VAI |
+ * | | | | | | | | | | | P1 | P2 | P3 | | |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | |RGBMOD| | | | | | | |RGBSMOD| HUD | SAD | VAD |
+ * | | | |RGBMOD| | | | | | | P0 | PDOT | NLCK |QWERTY|COLEMK|
* `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
* | | | | | |
* `-------------' `-------------'
diff --git a/keyboards/rgbkb/sol/rev2/config.h b/keyboards/rgbkb/sol/rev2/config.h
index af74b7e46f..ee5ad924ab 100644
--- a/keyboards/rgbkb/sol/rev2/config.h
+++ b/keyboards/rgbkb/sol/rev2/config.h
@@ -33,6 +33,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef FULLHAND_ENABLE
#define FULLHAND_LEDS 24
+#elif SF_ENABLE
+ #define FULLHAND_LEDS 38
#else
#define FULLHAND_LEDS 0
#endif
diff --git a/keyboards/rgbkb/sol/rev2/post_rules.mk b/keyboards/rgbkb/sol/rev2/post_rules.mk
index 0cbf430ad3..ab03325c9f 100644
--- a/keyboards/rgbkb/sol/rev2/post_rules.mk
+++ b/keyboards/rgbkb/sol/rev2/post_rules.mk
@@ -20,6 +20,8 @@ endif
ifeq ($(strip $(FULLHAND_ENABLE)), yes)
OPT_DEFS += -DFULLHAND_ENABLE
+else ifeq ($(strip $(SF_ENABLE)), yes)
+ OPT_DEFS += -DSF_ENABLE
endif
ifeq ($(strip $(EXTRA_ENCODERS_ENABLE)), yes)
diff --git a/keyboards/rgbkb/sol/rev2/rev2.c b/keyboards/rgbkb/sol/rev2/rev2.c
index 467aa18e44..e00c485609 100644
--- a/keyboards/rgbkb/sol/rev2/rev2.c
+++ b/keyboards/rgbkb/sol/rev2/rev2.c
@@ -33,6 +33,11 @@ led_config_t g_led_config = { {
#ifdef FULLHAND_ENABLE
{ 2, 88 }, { 2, 103 }, { 2, 117 }, { 2, 132 }, { 10, 145 }, { 25, 145 }, { 39, 145 },
{ 54, 145 }, { 69, 145 }, { 79, 136 }, { 87, 124 }, { 94, 111 },
+// SF Left
+#elif SF_ENABLE
+ { 0, 88 }, { 0, 103 }, { 0, 117 }, { 0, 130 }, { 9, 142 }, { 24, 142 }, { 38, 142 },
+ { 53, 142 }, { 67, 142 }, { 79, 135 }, { 86, 123 }, { 93, 110 }, { 88, 102 }, { 74, 101 },
+ { 60, 91 }, { 45, 98 }, { 33, 92 }, { 23, 86 }, { 10, 80 },
#endif
// Left Hand Mapped Right to Left
{ 213, 14 }, { 196, 14 }, { 182, 14 }, { 168, 14 }, { 154, 14 }, { 140, 14 }, { 122, 14 },
@@ -49,6 +54,11 @@ led_config_t g_led_config = { {
#ifdef FULLHAND_ENABLE
,{ 222, 88 }, { 222, 103 }, { 222, 117 }, { 222, 132 }, { 214, 145 }, { 199, 145 }, { 185, 145 },
{ 170, 145 }, { 155, 145 }, { 145, 136 }, { 137, 124 }, { 130, 111 }
+// SF Right
+#elif SF_ENABLE
+ ,{ 224, 88 }, { 224, 103 }, { 224, 117 }, { 224, 130 }, { 215, 142 }, { 200, 142 }, { 186, 142 },
+ { 171, 142 }, { 157, 142 }, { 145, 135 }, { 138, 123 }, { 131, 110 }, { 136, 102 }, { 150, 101 },
+ { 164, 91 }, { 179, 98 }, { 191, 92 }, { 201, 86 }, { 214, 80 }
#endif
}, {
// Left Hand Mapped Left to Right
@@ -66,6 +76,11 @@ led_config_t g_led_config = { {
#ifdef FULLHAND_ENABLE
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2,
+// SF Left
+#elif SF_ENABLE
+ 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2,
#endif
// Left Hand Mapped Right to Left
1, 4, 4, 4, 4, 4, 1,
@@ -82,6 +97,11 @@ led_config_t g_led_config = { {
#ifdef FULLHAND_ENABLE
,2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2
+// SF Right
+#elif SF_ENABLE
+ ,2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2
#endif
} };
diff --git a/keyboards/rgbkb/sol/rev2/rules.mk b/keyboards/rgbkb/sol/rev2/rules.mk
index 87b400fa14..40f4c4b8ca 100644
--- a/keyboards/rgbkb/sol/rev2/rules.mk
+++ b/keyboards/rgbkb/sol/rev2/rules.mk
@@ -22,6 +22,7 @@ RGB_MATRIX_FRAMEBUFFER_EFFECTS = no # Enable frame buffer effects like the typin
RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness for RGBLIGHT or RGB_MATRIX. Otherwise, limited to a safe level for a normal USB-A port
FULLHAND_ENABLE = no # Enables the additional 24 Full Hand LEDs
+SF_ENABLE = no # Enables the additional 38 Starfighter LEDs
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
# Misc
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c
index 9eee643113..23c4168f2b 100644
--- a/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c
+++ b/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c
@@ -54,11 +54,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `------------------------------------------------''-----------------------------------------------'
*/
[_NAV] = 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, \
- _______, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, \
- _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, \
- KC_LSFT, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, \
- KC_LCTL, KC_LGUI, KC_LALT, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, \
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, \
+ KC_LSFT, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, \
+ KC_LCTL, KC_LGUI, KC_LALT, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD \
),
};
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h
new file mode 100644
index 0000000000..d3d1a60ca9
--- /dev/null
+++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2019 starcalleramethyst
+
+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 16
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define TAPPING_TERM 200
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c
new file mode 100644
index 0000000000..b9b21102b1
--- /dev/null
+++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/keymap.c
@@ -0,0 +1,148 @@
+#include QMK_KEYBOARD_H
+
+uint16_t copy_paste_timer;
+
+enum custom_keycodes {
+ S_H = SAFE_RANGE, // slack here
+ S_H_P, // slack here + paste
+ T_H_B, // ticket header bike
+ T_H_T, // ticket header tread
+ E_OP, // email open
+ E_CL, // email close
+ E_FU, // email follow up
+ E_SS, // email service schedule
+ SCRN_C, // screen clip
+ DC_C, // double click + copy
+ KC_CCCV, // one key copy/paste
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+
+ case S_H:
+ if (record->event.pressed) {
+ SEND_STRING("@HERE");
+ }
+ break;
+
+ case S_H_P:
+ if (record->event.pressed) {
+ SEND_STRING("@HERE" SS_TAP(X_SPC) SS_LCTL("v"));
+ }
+ break;
+
+ case T_H_B:
+ if (record->event.pressed) {
+ SEND_STRING("Your Peloton Bike - ");
+ }
+ break;
+
+ case T_H_T:
+ if (record->event.pressed) {
+ SEND_STRING("Your Peloton Tread - ");
+ }
+ break;
+
+ case E_OP:
+ if (record->event.pressed) {
+ // when keycode E_OP is pressed
+ SEND_STRING("Hi , "SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for contacting Peloton."SS_TAP(X_ENTER)SS_TAP(X_ENTER));
+ }
+break;
+
+ case E_CL:
+ if (record->event.pressed) {
+ SEND_STRING("Please let me know if you have any other questions."SS_TAP(X_ENTER)SS_TAP(X_ENTER)"Thank you for being the best part of Peloton.");
+ }
+break;
+
+ case E_FU:
+ if (record->event.pressed) {
+ SEND_STRING("I will be personally watching this issue and will reach out to you after this is complete to make sure everything went smoothly."SS_TAP(X_ENTER)SS_TAP(X_ENTER));
+ }
+break;
+
+ case E_SS:
+ if (record->event.pressed) {
+ SEND_STRING("Please click here to schedule your service."SS_TAP(X_ENTER)SS_TAP(X_ENTER));
+ }
+break;
+
+ case SCRN_C:
+ if (record->event.pressed) {
+ tap_code16(C(S(KC_F5)));
+ }
+break;
+
+ case DC_C:
+ if (record->event.pressed) {
+ tap_code(KC_BTN1);
+ tap_code(KC_BTN1);
+ tap_code16(C(KC_C));
+ }
+break;
+
+ case KC_CCCV: // One key copy/paste
+ if (record->event.pressed) {
+ copy_paste_timer = timer_read();
+ } else {
+ if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
+ tap_code16(C(KC_C));
+ } else { // Tap, paste
+ tap_code16(C(KC_V));
+ }
+ }
+break;
+
+ }
+ return true;
+};
+
+//Tap Dance Declarations
+enum {
+ TD_SPC_DOT = 0
+};
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Esc, twice for Caps Lock
+ [TD_SPC_DOT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_PDOT)
+// Other declarations would go here, separated by commas, if you have them
+};
+
+
+
+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_BSLS,
+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, 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_SFTENT,
+KC_CCCV, KC_LGUI, KC_LALT, RGB_TOG, MO(1), TD(TD_SPC_DOT), KC_BSPC, KC_ENT, TD(TD_SPC_DOT), MO(2), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN),
+
+ [1] = 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_TRNS, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME,
+KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END,
+KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT,
+KC_NO, KC_LGUI, KC_LALT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD),
+
+/* [2] = LAYOUT(
+KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,KC_7, KC_8, KC_9, KC_0, KC_BSLS,
+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_LCTL, 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_LGUI, KC_LALT, KC_NO, TO(0), KC_SPC, KC_BSPC, KC_ENT, KC_SPC, TO(0), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN),
+*/
+ [2] = LAYOUT(
+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, S_H_P, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, E_CL, E_FU, E_OP, S_H, SCRN_C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, DC_C, E_SS, T_H_T, T_H_B, 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_TRNS, KC_NO, KC_NO, KC_NO, KC_NO)
+
+};
+
+
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk
new file mode 100644
index 0000000000..8e3e215142
--- /dev/null
+++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+MOUSEKEY_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/sck/osa/config.h b/keyboards/sck/osa/config.h
index 1b574a0997..6710134400 100644
--- a/keyboards/sck/osa/config.h
+++ b/keyboards/sck/osa/config.h
@@ -20,8 +20,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 0x0000
+#define VENDOR_ID 0x5343 // "SC"
+#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER Space City Keyboards
#define PRODUCT OSA
diff --git a/keyboards/sck/osa/keymaps/via/keymap.c b/keyboards/sck/osa/keymaps/via/keymap.c
new file mode 100644
index 0000000000..2c1af07318
--- /dev/null
+++ b/keyboards/sck/osa/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 jrfhoutx
+ *
+ * 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_all(
+ KC_DEL, 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_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, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
+ ),
+[1] = LAYOUT_all(
+ KC_TRNS, 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_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+[2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/sck/osa/keymaps/via/readme.md b/keyboards/sck/osa/keymaps/via/readme.md
new file mode 100644
index 0000000000..3f8300bb1f
--- /dev/null
+++ b/keyboards/sck/osa/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The VIA keymap for OSA
diff --git a/keyboards/sck/osa/keymaps/via/rules.mk b/keyboards/sck/osa/keymaps/via/rules.mk
new file mode 100644
index 0000000000..bee21da528
--- /dev/null
+++ b/keyboards/sck/osa/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+MOUSEKEY_ENABLE = no \ No newline at end of file
diff --git a/keyboards/singa/readme.md b/keyboards/singa/readme.md
index faeb816ec1..e3b87092ec 100644
--- a/keyboards/singa/readme.md
+++ b/keyboards/singa/readme.md
@@ -1,52 +1,22 @@
# Singa
-
![Singa](https://i.imgur.com/VVO27Tr.jpg)
-
75% Custom Keyboard.
-
-Keyboard Maintainer: [amnesia0287](https://github.com/amnesia0287)
-Hardware Supported: TGR-Elaine v1.0 PCB
-Hardware Availability: http://singakbd.com/
+* Keyboard Maintainer: [amnesia0287](https://github.com/amnesia0287)
+* Hardware Supported: TGR-Elaine v1.0 PCB
+* Hardware Availability: http://singakbd.com/
Make example for this keyboard (after setting up your build environment):
make singa:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Esc` while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make singa:default:flash
+**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Esc` while plugging in the keyboard.
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/sirius/unigo66/keymaps/default/keymap.c b/keyboards/sirius/unigo66/keymaps/default/keymap.c
index 06982e64b7..63b4c2f065 100644
--- a/keyboards/sirius/unigo66/keymaps/default/keymap.c
+++ b/keyboards/sirius/unigo66/keymaps/default/keymap.c
@@ -1,6 +1,6 @@
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
*
* ,--------------------------------------------------. ,--------------------------------------------------.
@@ -114,15 +114,3 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
_______, _______, _______, _______
),
};
-
-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/snagpad/config.h b/keyboards/snagpad/config.h
index a4ab9d5e26..339bdd1be6 100644
--- a/keyboards/snagpad/config.h
+++ b/keyboards/snagpad/config.h
@@ -47,23 +47,3 @@
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*5*4*2)) = (37+160)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 197
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 827
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16 \ No newline at end of file
diff --git a/keyboards/snagpad/keymaps/via/rules.mk b/keyboards/snagpad/keymaps/via/rules.mk
index 032d68c5e9..1e5b99807c 100644
--- a/keyboards/snagpad/keymaps/via/rules.mk
+++ b/keyboards/snagpad/keymaps/via/rules.mk
@@ -1,76 +1 @@
-# 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
+VIA_ENABLE = yes
diff --git a/keyboards/spacetime/keymaps/default/keymap.c b/keyboards/spacetime/keymaps/default/keymap.c
index ac2f5098f2..6be5d1d6d6 100644
--- a/keyboards/spacetime/keymaps/default/keymap.c
+++ b/keyboards/spacetime/keymaps/default/keymap.c
@@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/staryu/keymaps/default/keymap.c b/keyboards/staryu/keymaps/default/keymap.c
index 8c47ff44ab..c41c436f9d 100755
--- a/keyboards/staryu/keymaps/default/keymap.c
+++ b/keyboards/staryu/keymaps/default/keymap.c
@@ -81,8 +81,8 @@ void keyboard_post_init_user(void) {
rgblight_sethsv_noeeprom_white();
}
-uint32_t layer_state_set_user(uint32_t state) {
- switch (biton32(state)) {
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
case _LAYER1:
rgblight_sethsv_noeeprom_cyan();
break;
diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h
index a8fa37a5b7..89ed8c3113 100755
--- a/keyboards/tada68/config.h
+++ b/keyboards/tada68/config.h
@@ -15,14 +15,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 CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define PRODUCT_ID 0x4C17
#define DEVICE_VER 0x0003
#define MANUFACTURER TADA
#define PRODUCT TADA68
@@ -75,5 +74,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/tada68/info.json b/keyboards/tada68/info.json
index bfb3d9e1ed..32047fcf11 100644
--- a/keyboards/tada68/info.json
+++ b/keyboards/tada68/info.json
@@ -1,23 +1,242 @@
{
- "keyboard_name": "Tada68",
- "url": "",
- "maintainer": "qmk",
- "width": 16,
- "height": 5,
- "layouts": {
- "LAYOUT_ansi": {
- "key_count": 68,
- "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, "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, "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}, {"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}, {"x":14, "y":3}, {"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":"Win", "x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
- },
-
- "LAYOUT_iso": {
- "key_count": 69,
- "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, "w":2}, {"label":"k0e", "x":15, "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":"k1e", "x":15, "y":1}, {"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":1, "w":1.25, "h":2}, {"label":"k2e", "x":15, "y":2}, {"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":"k3e", "x":15, "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":"k45", "x":3.75, "y":4, "w":6.25}, {"label":"k49", "x":10, "y":4}, {"label":"k4a", "x":11, "y":4}, {"label":"k4b", "x":12, "y":4}, {"label":"k4c", "x":13, "y":4}, {"label":"k4d", "x":14, "y":4}, {"label":"k4e", "x":15, "y":4}]
- },
-
- "LAYOUT_ansi_split_enter": {
- "key_count": 69,
- "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, "w":2}, {"label":"k0e", "x":15, "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":"k1e", "x":15, "y":1}, {"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":"k2e", "x":15, "y":2}, {"label":"k30", "x":0, "y":3, "w":2.25}, {"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":"k3e", "x":15, "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":"k45", "x":3.75, "y":4, "w":6.25}, {"label":"k49", "x":10, "y":4}, {"label":"k4a", "x":11, "y":4}, {"label":"k4b", "x":12, "y":4}, {"label":"k4c", "x":13, "y":4}, {"label":"k4d", "x":14, "y":4}, {"label":"k4e", "x":15, "y":4}]
+ "keyboard_name": "Tada68",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "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":"~", "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":"Delete", "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 Up", "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":"Page Down", "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":"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_65_iso": {
+ "key_count": 69,
+ "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":"~", "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":"Delete", "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 Up", "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":"Up", "x":14, "y":3},
+ {"label":"Page Down", "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":"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_ansi_split_enter": {
+ "key_count": 69,
+ "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, "w":2},
+ {"label":"k0e", "x":15, "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":"k1e", "x":15, "y":1},
+
+ {"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":"k2e", "x":15, "y":2},
+
+ {"label":"k30", "x":0, "y":3, "w":2.25},
+ {"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":"k3e", "x":15, "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":"k45", "x":3.75, "y":4, "w":6.25},
+ {"label":"k49", "x":10, "y":4},
+ {"label":"k4a", "x":11, "y":4},
+ {"label":"k4b", "x":12, "y":4},
+ {"label":"k4c", "x":13, "y":4},
+ {"label":"k4d", "x":14, "y":4},
+ {"label":"k4e", "x":15, "y":4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c
index 9a36e87a2a..25741a6290 100755
--- a/keyboards/tada68/keymaps/default/keymap.c
+++ b/keyboards/tada68/keymaps/default/keymap.c
@@ -8,43 +8,45 @@
#define _FL 1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap _BL: (Base Layer) Default Layer
- * ,----------------------------------------------------------------.
- * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
- * |----------------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
- * |----------------------------------------------------------------|
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
- * |----------------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
- * |----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
- * `----------------------------------------------------------------'
- */
-[_BL] = LAYOUT_ansi(
- 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_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,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_65_ansi(
+ 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_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, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* Keymap _FL: Function Layer
- * ,----------------------------------------------------------------.
- * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
- * |----------------------------------------------------------------|
- * | | |Up | | | | | | | | | | | |Hme |
- * |----------------------------------------------------------------|
- * | |<- |Dn | ->| | | | | | | | | |End |
- * |----------------------------------------------------------------|
- * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR |
- * |----------------------------------------------------------------|
- * | | | | | | | |MsL|MsD|MsR |
- * `----------------------------------------------------------------'
- */
-[_FL] = LAYOUT_ansi(
- _______, 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 , \
- _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \
- _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \
- _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_VOLD,KC_VOLU,KC_MUTE,_______,KC_BTN1, KC_MS_U, KC_BTN2, \
- _______,_______,_______, _______, _______,_______,_______,KC_MS_L,KC_MS_D, KC_MS_R),
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | | | | | | | | |End |
+ * |----------------------------------------------------------------|
+ * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |MsL|MsD|MsR |
+ * `----------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_65_ansi(
+ _______, 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,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
+ _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_BTN1, KC_MS_U, KC_BTN2,
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ ),
};
diff --git a/keyboards/tada68/keymaps/tokyovigilante/config.h b/keyboards/tada68/keymaps/tokyovigilante/config.h
new file mode 100755
index 0000000000..9184bc1f4d
--- /dev/null
+++ b/keyboards/tada68/keymaps/tokyovigilante/config.h
@@ -0,0 +1,25 @@
+/*
+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
+
+#undef DESCRIPTION
+#define DESCRIPTION QMK keyboard firmware for TADA68 with QMK bootloader
+
+#define QMK_ESC_OUTPUT F0 // usually COL
+#define QMK_ESC_INPUT D0 // usually ROW
+#define QMK_LED B6
diff --git a/keyboards/tada68/keymaps/tokyovigilante/keymap.c b/keyboards/tada68/keymaps/tokyovigilante/keymap.c
new file mode 100644
index 0000000000..13159c0d4c
--- /dev/null
+++ b/keyboards/tada68/keymaps/tokyovigilante/keymap.c
@@ -0,0 +1,7 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(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_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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT_ansi(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_INS, 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_HOME, 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_END, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R),
+ [2] = LAYOUT_ansi(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, RESET, 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_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_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)
+};
diff --git a/keyboards/tada68/keymaps/tokyovigilante/layers.json b/keyboards/tada68/keymaps/tokyovigilante/layers.json
new file mode 100644
index 0000000000..d6604042e3
--- /dev/null
+++ b/keyboards/tada68/keymaps/tokyovigilante/layers.json
@@ -0,0 +1 @@
+[["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_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", "MO(1)", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"], ["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_INS", "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_HOME", "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_END", "KC_TRNS", "KC_TRNS", "KC_TRNS", "BL_DEC", "BL_TOGG", "BL_INC", "KC_TRNS", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_BTN1", "KC_MS_U", "KC_BTN2", "KC_TRNS", "MO(2)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MS_L", "KC_MS_D", "KC_MS_R"], ["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", "RESET", "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_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_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"]] \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/tokyovigilante/readme.md b/keyboards/tada68/keymaps/tokyovigilante/readme.md
new file mode 100644
index 0000000000..8544399d65
--- /dev/null
+++ b/keyboards/tada68/keymaps/tokyovigilante/readme.md
@@ -0,0 +1,34 @@
+# TADA68 (65% ATMega32U4 PCB)
+
+The TADA68 comes with a custom firmware based on the LUFA mass storage
+driver, which mounts the user-accessible portion of the flash storage
+as a USB drive. This is prone to failure and can only be accessed by
+hitting the physical reset button on the base of the board, which is
+relatively accessible in an assembled keyboard.
+
+This keymap has some customisation to work with a TADA68 which has been
+ISP-reflashed (using a USBasp or other ISP) to work with the QMK bootloader.
+
+This allows use of dfu-programmer to reflash the firmware in DFU mode, and
+bootloader entry and exit with key-combos.
+
+To build the firmware, set up a build environment according to the standard
+QMK instructions, then run:
+
+```make tada68:tokyovigilante:production```
+
+which will build the bootloader, user firmware, and the combined image `<keyboard>_<keymap>_production.hex`.
+
+Then run
+
+```avrdude -F -c usbasp -p m32u4 -e -U flash:w:tada68_tokyovigilante_production.hex:a -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m -U lock:w:0x3F:m```
+
+to copy it to your board (connected to the USBasp or other programmer, replacing the -c and filename parameters as required). The fuse and lock
+bitmaps will enable DFU mode.
+
+Once the board is unplugged and plugged in via USB, the default key-combo to
+enter DFU mode is Fn-Meta-R, then Esc to exit. You can then use
+`make tada68:<keymap>:dfu` to build and flash any other custom keymap you
+like, as the qmk-dfu bootloader can only be replaced using the ISP. This keymap is fairly basic, just make sure any replacement one has a RESET command defined (ideally on a non-default layer).
+
+More information can be found in the QMK docs: <https://docs.qmk.fm>
diff --git a/keyboards/tada68/keymaps/tokyovigilante/rules.mk b/keyboards/tada68/keymaps/tokyovigilante/rules.mk
new file mode 100755
index 0000000000..2f7fde3d5c
--- /dev/null
+++ b/keyboards/tada68/keymaps/tokyovigilante/rules.mk
@@ -0,0 +1,2 @@
+BOOTLOADER = qmk-dfu
+FIRMWARE_FORMAT = hex
diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md
index a2dbd92de6..c22c4d371b 100755
--- a/keyboards/tada68/readme.md
+++ b/keyboards/tada68/readme.md
@@ -1,17 +1,16 @@
-TADA68
-======
+# TADA68
A compact 65% keyboard.
-Keyboard Maintainer: QMK Community
-Hardware Supported: TADA68 PCB
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/products/tada68-mechanical-keyboard-gateron-swtich-65-layout-dye-sub-keycaps-cherry-profils?variant=34710238797), [kbdist](http://www.kbdist.com/)
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: TADA68 PCB
+* Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/products/tada68-mechanical-keyboard-gateron-swtich-65-layout-dye-sub-keycaps-cherry-profils?variant=34710238797), [kbdist](http://www.kbdist.com/)
Make example for this keyboard (after setting up your build environment):
make tada68: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.
+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).
## Firmware Format
diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk
index ec3991c318..18b4cdf72c 100755
--- a/keyboards/tada68/rules.mk
+++ b/keyboards/tada68/rules.mk
@@ -9,23 +9,27 @@ MCU = atmega32u4
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
-BOOTLOADER = atmel-dfu # actually lufa-ms
-
-# Mass storage bootloader on the tada68 uses bin files
-FIRMWARE_FORMAT = bin
+BOOTLOADER = lufa-ms
# Build Options
-# comment out to disable the 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 = 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
-RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE = yes # 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
+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 = 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 = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+UNICODE_ENABLE = no # Unicode
+
+LAYOUTS = 65_ansi 65_iso
diff --git a/keyboards/tada68/tada68.h b/keyboards/tada68/tada68.h
index 670b0e6c15..6bc3cdccf3 100755
--- a/keyboards/tada68/tada68.h
+++ b/keyboards/tada68/tada68.h
@@ -1,5 +1,4 @@
-#ifndef TADA68_H
-#define TADA68_H
+#pragma once
#include "quantum.h"
@@ -22,7 +21,7 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT_ansi( \
+#define LAYOUT_65_ansi( \
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, \
@@ -37,6 +36,8 @@
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
}
+#define LAYOUT_ansi LAYOUT_65_ansi
+
/* TADA68 ISO layout
* ,----------------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
@@ -53,21 +54,23 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT_iso( \
+#define LAYOUT_65_iso( \
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, k2d, k2e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k1d, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k45, k49, 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, k2c, k1e}, \
+ {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, XXX, k2d, k2e}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
}
+#define LAYOUT_iso LAYOUT_65_iso
+
/* TADA68 ANSI layout with Split Enter key
* ,----------------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
@@ -98,8 +101,3 @@
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
}
-
-void matrix_init_user(void);
-void matrix_scan_user(void);
-
-#endif
diff --git a/keyboards/tanuki/keymaps/default/keymap.c b/keyboards/tanuki/keymaps/default/keymap.c
index 7c3e11f27d..c10a868afe 100644
--- a/keyboards/tanuki/keymaps/default/keymap.c
+++ b/keyboards/tanuki/keymaps/default/keymap.c
@@ -59,10 +59,10 @@ void keyboard_post_init_user(void) {
}
}
-uint32_t layer_state_set_user(uint32_t state) {
+layer_state_t layer_state_set_user(layer_state_t state) {
// This code switches underglow color by active layer, if the user has enabled the feature
if(user_config.layer_rgb) {
- switch (biton32(state)) {
+ switch (get_highest_layer(state)) {
case _BL:
rgblight_sethsv_noeeprom(0,10,255);
rgblight_mode_noeeprom(1);
diff --git a/keyboards/tgr/alice/readme.md b/keyboards/tgr/alice/readme.md
index f5db63814b..a08aaf71ba 100644
--- a/keyboards/tgr/alice/readme.md
+++ b/keyboards/tgr/alice/readme.md
@@ -4,45 +4,18 @@
An ergonomic 60% keyboard.
-Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
-Hardware Supported: TGR Alice
-Hardware Availability: Group buy finished
+* 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 tgr/alice:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Esc` while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make tgr/alice:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
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/tgr/jane/readme.md b/keyboards/tgr/jane/readme.md
index 10986cde33..5c5a2d92d3 100644
--- a/keyboards/tgr/jane/readme.md
+++ b/keyboards/tgr/jane/readme.md
@@ -2,46 +2,18 @@
TKL Custom Keyboard.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: TGR Jane (Pontoporia) PCB v1.1, v1.2
-Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=97552.1200)
-
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: TGR Jane (Pontoporia) PCB v1.1, v1.2
+* Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=97552.1200)
Make example for this keyboard (after setting up your build environment):
make tgr/jane:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Esc` while plugging in the keyboard.
-
-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 python3
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make tgr/jane:default:flash
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.
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/thevankeyboards/minivan/keymaps/halvves/config.h b/keyboards/thevankeyboards/minivan/keymaps/halvves/config.h
new file mode 100644
index 0000000000..6be8d217bd
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/halvves/config.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#define TAPPING_TERM 505
+#define RETRO_TAPPING
+
+// smooth mousekeys (copied from the ergo ez config)
+#ifdef MOUSEKEY_ENABLE
+ #define MOUSEKEY_INTERVAL 16
+ #define MOUSEKEY_DELAY 0
+ #define MOUSEKEY_TIME_TO_MAX 60
+ #define MOUSEKEY_MAX_SPEED 7
+ #define MOUSEKEY_WHEEL_DELAY 0
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+ #define RGB_DI_PIN D0
+ #define RGBLED_NUM 3
+ #define RGBLIGHT_EFFECT_BREATHING
+#endif
diff --git a/keyboards/thevankeyboards/minivan/keymaps/halvves/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/halvves/keymap.c
new file mode 100644
index 0000000000..7054d97ff1
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/halvves/keymap.c
@@ -0,0 +1,237 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _UTIL,
+ _MOUSE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+};
+
+#define MOUSE MO(_MOUSE)
+#define ESC_UT LT(_UTIL, KC_ESC)
+#define SPC_LO LT(_LOWER, KC_SPC)
+#define SPC_RA LT(_RAISE, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+* ,--------------------------------------------------------------------------.
+* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | Lo/Esc| A | S | D | F | G | H | J | K | L | ; | ' |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | Shift | Z | X | C | V | B | N | M | , | . | / |Enter|
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | Ctrl | Alt | GUI | Space/LOWER | Space/RAISE |Mouse | [ | ] | |
+* `--------------------------------------------------------------------------'
+*/
+[_QWERTY] = LAYOUT_arrow(
+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_UT, 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, SPC_LO, SPC_RA, MOUSE, KC_LBRC, KC_RBRC, XXXXXXX
+),
+
+/* Colemak
+* ,--------------------------------------------------------------------------.
+* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | Lo/Esc| A | R | S | T | D | H | N | E | I | O | ' |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | Shift | Z | X | C | V | B | K | M | , | . | / |Enter|
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | Ctrl | Alt | GUI | Space/LOWER | Space/RAISE |Mouse | [ | ] | |
+* `--------------------------------------------------------------------------'
+*/
+[_COLEMAK] = LAYOUT_arrow(
+KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ESC_UT, 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, SPC_LO, SPC_RA, MOUSE, KC_LBRC, KC_RBRC, XXXXXXX
+),
+
+/* Dvorak
+* ,--------------------------------------------------------------------------.
+* | Tab | / | , | . | P | Y | F | G | C | R | L | Del |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | Lo/Esc| A | O | E | U | I | D | H | T | N | S | ' |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | Shift | ; | Q | J | K | X | B | M | W | V | Z |Enter|
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | Ctrl | Alt | GUI | Space/LOWER | Space/RAISE |Mouse | [ | ] | |
+* `--------------------------------------------------------------------------'
+*/
+[_DVORAK] = LAYOUT_arrow(
+KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ESC_UT, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT,
+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, SPC_LO, SPC_RA, MOUSE, KC_LBRC, KC_RBRC, XXXXXXX
+),
+
+/* Lower
+* ,--------------------------------------------------------------------------.
+* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~|ISO || | | |
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | | | | | | Next |Vol- |Vol+ |Play |
+* `--------------------------------------------------------------------------'
+*/
+[_LOWER] = LAYOUT_arrow(
+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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+* ,--------------------------------------------------------------------------.
+* | ` | 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_arrow(
+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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Util
+* ,--------------------------------------------------------------------------.
+* | | | | | | | | | | | | |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | | | | | | |LEFT | UP |DOWN |RIGHT| | |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | | | | | | | | | | | | |
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | | | | | | | | | |
+* `--------------------------------------------------------------------------'
+*/
+[_UTIL] = LAYOUT_arrow(
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Mouse
+* ,--------------------------------------------------------------------------.
+* | | | M U | | | | | | |L Clk|R Clk| W Up |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | | M L | M D | M R | | | | | | | |W Dwn |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | | | | | | | | | | | | |
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | | | | | | | | | |
+* `--------------------------------------------------------------------------'
+*/
+[_MOUSE] = LAYOUT_arrow(
+XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, KC_WH_U,
+XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D,
+XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust
+* ,--------------------------------------------------------------------------.
+* | | | | | |QWRTY|COLMK|DVRAK| | | | RESET |
+* |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+* | | | | | | | | | | | | |
+* |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+* | | | | | | | | | | | | |
+* |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+* | | | | | | | | | |
+* `--------------------------------------------------------------------------'
+*/
+[_ADJUST] = LAYOUT_arrow(
+XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY, COLEMAK, DVORAK, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+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
+)
+
+
+};
+
+void keyboard_post_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ // set up rgb effects on only the third led (index 2)
+ rgblight_set_effect_range(2, 1);
+
+ // set led effects to breathing mode in warm white
+ rgblight_sethsv_noeeprom(38, 191, 198);
+ rgblight_mode_noeeprom(RGBLIGHT_EFFECT_BREATHING + 2);
+
+ // set other led's to off
+ setrgb(0, 0, 0, (LED_TYPE *)&led[0]);
+ setrgb(0, 0, 0, (LED_TYPE *)&led[1]);
+ rgblight_set();
+ #endif
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+ #ifdef RGBLIGHT_ENABLE
+ if (layer_state_cmp(state, _ADJUST)) {
+ setrgb(70, 255, 200, (LED_TYPE *)&led[0]);
+ setrgb(255, 70, 100, (LED_TYPE *)&led[1]);
+ } else if (layer_state_cmp(state, _LOWER)) {
+ setrgb(70, 255, 200, (LED_TYPE *)&led[0]);
+ setrgb(0, 0, 0, (LED_TYPE *)&led[1]);
+ } else if (layer_state_cmp(state, _RAISE)) {
+ setrgb(0, 0, 0, (LED_TYPE *)&led[0]);
+ setrgb(255, 70, 100, (LED_TYPE *)&led[1]);
+ } else if (layer_state_cmp(state, _UTIL)) {
+ setrgb(200, 70, 225, (LED_TYPE *)&led[0]);
+ setrgb(200, 70, 225, (LED_TYPE *)&led[1]);
+ } else if (layer_state_cmp(state, _MOUSE)) {
+ setrgb(255, 145, 5, (LED_TYPE *)&led[0]);
+ setrgb(255, 145, 5, (LED_TYPE *)&led[1]);
+ } else {
+ setrgb(0, 0, 0, (LED_TYPE *)&led[0]);
+ setrgb(0, 0, 0, (LED_TYPE *)&led[1]);
+ }
+
+ rgblight_set();
+ #endif
+
+ return state;
+}
+
+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;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/thevankeyboards/minivan/keymaps/halvves/readme.md b/keyboards/thevankeyboards/minivan/keymaps/halvves/readme.md
new file mode 100644
index 0000000000..c12b7512a0
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/halvves/readme.md
@@ -0,0 +1,3 @@
+# a kumo cloud (minivan) layout for halvves
+
+A rough approximation of the halvves let's split layout.
diff --git a/keyboards/thevankeyboards/minivan/keymaps/halvves/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/halvves/rules.mk
new file mode 100644
index 0000000000..574f73771d
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/halvves/rules.mk
@@ -0,0 +1,3 @@
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/thevankeyboards/minivan/keymaps/hvp/config.h b/keyboards/thevankeyboards/minivan/keymaps/hvp/config.h
new file mode 100644
index 0000000000..cd2aa46c44
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/hvp/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define TAPPING_TERM 150
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/hvp/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..779292fb3c
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/hvp/keymap.c
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+#include "hvp.c"
+
+#define _QW 0
+#define _L1 1
+#define _L2 2
+#define _L3 3
+#define _L4 4
+
+#define LT4_TAB LT(_L4, KC_TAB)
+#define LT3_ESC LT(_L3, KC_ESC)
+
+enum custom_keycodes {
+ QW = SAFE_RANGE,
+ L1,
+ L2,
+ L3,
+ L4
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT_arrow( /* Qwerty */
+ LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_ESC, KC_A, KC_S, KC_D, LT(3,KC_F), LT(4,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(_L2,KC_ENT), LT(_L1,KC_SPC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+ [_L1] = LAYOUT_arrow( /* LAYER 1 */
+ 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_DELETE, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+ ),
+ [_L2] = LAYOUT_arrow( /* LAYER 2 */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_BSPC,
+ KC_DELETE, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+ [_L3] = LAYOUT_arrow( /* LAYER 3 */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, D_NAVI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, KC_MUTE, KC_MPLY, KC_MSTP, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+ ),
+
+ [_L4] = LAYOUT_arrow( /* LAYER 4 */
+ _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, RGB_M_P, RGB_HUD, RGB_HUI, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______,
+ KC_PSCR, _______, RGB_SAD, RGB_SAI, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______,
+ RESET, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______
+ )
+}; \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/hvp/readme.md b/keyboards/thevankeyboards/minivan/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..60ee3d6cd0
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: Minivan 40% keyboard
+Keys: A compact 44% keyboard.
+Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
+Flash instructions: Flash using dfu, will req the hvp user space to compile.
+
+> make make thevankeyboards/minivan:hvp:dfu
+
+Links:
+Github - https://github.com/qmk/qmk_firmware/tree/master/keyboards/thevankeyboards/minivan
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/thevankeyboards/minivan/keymaps/hvp/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..f039e269fa
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/hvp/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = no
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/tr60w/config.h b/keyboards/tr60w/config.h
new file mode 100644
index 0000000000..2196e6c533
--- /dev/null
+++ b/keyboards/tr60w/config.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4140
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Triangle_Lab
+#define PRODUCT TR60W
+#define DESCRIPTION Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 14
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, B1, B2, E6, B3 }
+#define MATRIX_COL_PINS { F5, F4, F1, F0, B0, D5, D3, D6, D7, B4, B5, B6, C6, D2 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't 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
+
+#define RGB_DI_PIN F7
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 4
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/tr60w/keymaps/default/keymap.c b/keyboards/tr60w/keymaps/default/keymap.c
new file mode 100644
index 0000000000..86bfbb5662
--- /dev/null
+++ b/keyboards/tr60w/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_60_tsangan_hhkb(
+ 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,
+ 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_LSFT, LT(1,KC_GRV),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ LAYOUT_60_tsangan_hhkb(
+ 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_UP, _______, KC_DEL,
+ _______, _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, KC_LEFT, KC_RGHT, _______,
+ _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/tr60w/keymaps/joule-flow/keymap.c b/keyboards/tr60w/keymaps/joule-flow/keymap.c
new file mode 100644
index 0000000000..bfe0db0d5e
--- /dev/null
+++ b/keyboards/tr60w/keymaps/joule-flow/keymap.c
@@ -0,0 +1,21 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_60_tsangan_hhkb(
+ 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_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ 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_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_MINS, KC_LSFT, TG(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_F12, KC_RCTL
+ ),
+
+ LAYOUT_60_tsangan_hhkb(
+ 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_NUHS, KC_NUBS,
+ _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, KC_WH_U, KC_BTN1 , KC_MS_U , KC_BTN2, KC_WH_L, _______, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, KC_WH_D, KC_MS_L , KC_MS_D , KC_MS_R, KC_WH_R, _______,
+ _______, RCTL(KC_Y), RCTL(KC_X), RCTL(KC_C), RCTL(KC_V), _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/tr60w/readme.md b/keyboards/tr60w/readme.md
new file mode 100644
index 0000000000..9053b4db6f
--- /dev/null
+++ b/keyboards/tr60w/readme.md
@@ -0,0 +1,19 @@
+# TR60W
+
+![TR60W](https://i.imgur.com/Ez2T2Te.jpg)
+
+This is the hotswap PCB supplied by Triangle Labs with their TR60 case, featuring four RGB LEDs around the Escape key, USB-C, and SMD single-color backlighting.
+
+* Keyboard Maintainer: [Joule-Flow](https://github.com/Joule-Flow)
+* Hardware Supported: TR60W PCB, ATmega32U4
+* Hardware Availability: Group-buy by [Triangle Labs](https://geekhack.org/index.php?topic=96378.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tr60w:default
+
+Or use my personal settings:
+
+ make tr60w:joule-flow
+
+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/tr60w/rules.mk b/keyboards/tr60w/rules.mk
new file mode 100644
index 0000000000..4b68e6c7f8
--- /dev/null
+++ b/keyboards/tr60w/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/tr60w/tr60w.c b/keyboards/tr60w/tr60w.c
new file mode 100644
index 0000000000..83547a8862
--- /dev/null
+++ b/keyboards/tr60w/tr60w.c
@@ -0,0 +1,11 @@
+#include "tr60w.h"
+
+bool led_update_kb(led_t led_state) {
+ bool runDefault = led_update_user(led_state);
+ if (runDefault) {
+ writePin(B1, !led_state.num_lock);
+ writePin(B2, !led_state.caps_lock);
+ writePin(B3, !led_state.scroll_lock);
+ }
+ return runDefault;
+}
diff --git a/keyboards/tr60w/tr60w.h b/keyboards/tr60w/tr60w.h
new file mode 100644
index 0000000000..9fa5d5b61f
--- /dev/null
+++ b/keyboards/tr60w/tr60w.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_60_tsangan_hhkb( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K113, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K213, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K401, K402, K505, K510, K511, K512 \
+) { \
+ { 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, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO }, \
+ { K400, K401, K402, 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, K505, KC_NO, KC_NO, KC_NO, KC_NO, K510, K511, K512, KC_NO } \
+}
diff --git a/keyboards/treadstone48/common/oled_helper.c b/keyboards/treadstone48/common/oled_helper.c
index 500d3c0dc1..18d8681a4f 100644
--- a/keyboards/treadstone48/common/oled_helper.c
+++ b/keyboards/treadstone48/common/oled_helper.c
@@ -1,8 +1,9 @@
-#ifdef SSD1306OLED
+#ifdef OLED_DRIVER_ENABLE
#include QMK_KEYBOARD_H
-#include "ssd1306.h"
+#include <stdio.h>
+#include <string.h>
-void render_logo(struct CharacterMatrix *matrix) {
+void render_logo(void) {
const char logo_buf[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
@@ -10,10 +11,10 @@ void render_logo(struct CharacterMatrix *matrix) {
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
0};
- matrix_write(matrix, logo_buf);
+ oled_write(logo_buf, false);
}
-static char keylog_buf[24] = "Key state ready.";
+static char keylog_buf[24] = "Key state ready.\n";
const char code_to_name[60] = {
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
@@ -27,14 +28,14 @@ void update_key_status(uint16_t keycode, keyrecord_t *record) {
if (!record->event.pressed) return;
char name = (keycode < 60) ? code_to_name[keycode] : ' ';
- snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c",
+ snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c\n",
record->event.key.row, record->event.key.col,
(uint16_t)keycode, name);
}
-void render_key_status(struct CharacterMatrix *matrix) {
+void render_key_status(void) {
- matrix_write(matrix, keylog_buf);
+ oled_write(keylog_buf, false);
}
static char lock_buf[24] = "Lock state ready.\n";
@@ -48,9 +49,9 @@ void update_lock_status(void) {
num_lock, caps_lock, scrl_lock);
}
-void render_lock_status(struct CharacterMatrix *matrix) {
+void render_lock_status(void) {
- matrix_write(matrix, lock_buf);
+ oled_write(lock_buf, false);
}
#ifdef RGBLIGHT_ENABLE
@@ -75,9 +76,9 @@ void update_led_status(void) {
}
}
-void render_led_status(struct CharacterMatrix *matrix) {
+void render_led_status(void) {
- matrix_write(matrix, led_buf);
+ oled_write(led_buf, false);
}
#endif
#endif
diff --git a/keyboards/treadstone48/common/oled_helper.h b/keyboards/treadstone48/common/oled_helper.h
index 44628a5261..69ab705606 100644
--- a/keyboards/treadstone48/common/oled_helper.h
+++ b/keyboards/treadstone48/common/oled_helper.h
@@ -1,35 +1,35 @@
-#ifdef SSD1306OLED
+#ifdef OLED_DRIVER_ENABLE
-void render_logo(struct CharacterMatrix *matrix);
+void render_logo(void);
void update_key_status(uint16_t keycode, keyrecord_t *record);
-void render_key_status(struct CharacterMatrix *matrix);
+void render_key_status(void);
void update_lock_status(void);
-void render_lock_status(struct CharacterMatrix *matrix);
+void render_lock_status(void);
-#define RENDER_LOGO(a) render_logo(a)
+#define RENDER_LOGO() render_logo()
#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
-#define RENDER_KEY_STATUS(a) render_key_status(a)
+#define RENDER_KEY_STATUS() render_key_status()
#define UPDATE_LOCK_STATUS() update_lock_status()
-#define RENDER_LOCK_STATUS(a) render_lock_status(a)
+#define RENDER_LOCK_STATUS() render_lock_status()
#ifdef RGBLIGHT_ENABLE
void update_led_status(void);
- void render_led_status(struct CharacterMatrix *matrix);
+ void render_led_status(void);
#define UPDATE_LED_STATUS() update_led_status()
- #define RENDER_LED_STATUS(a) render_led_status(a)
+ #define RENDER_LED_STATUS() render_led_status()
#else
#define UPDATE_LED_STATUS()
- #define RENDER_LED_STATUS(a)
+ #define RENDER_LED_STATUS()
#endif
#else
-#define RENDER_LOGO(a)
+#define RENDER_LOGO()
#define UPDATE_KEY_STATUS(a, b)
-#define RENDER_KEY_STATUS(a)
+#define RENDER_KEY_STATUS()
#define UPDATE_LOCK_STATUS()
-#define RENDER_LOCK_STATUS(a)
+#define RENDER_LOCK_STATUS()
#define UPDATE_LED_STATUS()
-#define RENDER_LED_STATUS(a)
+#define RENDER_LED_STATUS()
#endif
diff --git a/keyboards/treadstone48/config.h b/keyboards/treadstone48/config.h
deleted file mode 100644
index 2e571e2690..0000000000
--- a/keyboards/treadstone48/config.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-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
-
-#include "config_common.h"
-
-// GCC include 'config.h" sequence in qmk_firmware/keyboards/treadstone48/
-// -include keyboards/treadstone48/config.h
-// -include keyboards/treadstone48/rev?/config.h
-// -include keyboards/treadstone48/rev?/keymaps/MAPNAME/config.h
-// XXXX.c
-
-#include <serial_config.h>
-
-// GCC include search path in qmk_firmare/keyboards/treadstone48/
-// #include "..." search starts here:
-// #include <...> search starts here:
-// keyboards/treadstone48/rev?/keymaps/MAPNAME
-// keyboards/treadstone48
-// keyboards/treadstone48/rev?
-// .
-// ./tmk_core
-// ......
-
-// MACRO and FUNCTION are features that are depreciated.
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
diff --git a/keyboards/treadstone48/i2c.c b/keyboards/treadstone48/i2c.c
deleted file mode 100644
index 4bee5c6398..0000000000
--- a/keyboards/treadstone48/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/treadstone48/i2c.h b/keyboards/treadstone48/i2c.h
deleted file mode 100644
index 710662c7ab..0000000000
--- a/keyboards/treadstone48/i2c.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency 400kHz
-#define SCL_CLOCK 400000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
diff --git a/keyboards/treadstone48/keymaps/default/config.h b/keyboards/treadstone48/keymaps/default/config.h
index 3f63a0cfbb..baa4ec8461 100644
--- a/keyboards/treadstone48/keymaps/default/config.h
+++ b/keyboards/treadstone48/keymaps/default/config.h
@@ -1,22 +1,18 @@
-/*
-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/>.
-*/
+/* Copyright 2020 marksard
+ *
+ * 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
@@ -26,8 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#undef TAPPING_TERM
#endif
#define TAPPING_TERM 225
-// #define PREVENT_STUCK_MODIFIERS
-// #define IGNORE_MOD_TAP_INTERRUPT
#ifdef MOUSEKEY_ENABLE
#undef MOUSEKEY_INTERVAL
@@ -46,15 +40,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MOUSEKEY_DELAY 0
#endif
-// Selection of RGBLIGHT MODE to use.
-#if defined(LED_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
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define ANGELINA_KEYMAP
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define RHYMESTONE_RIGHTHAND
+
+#define OLED_FONT_H "keyboards/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/keymaps/default/keymap.c b/keyboards/treadstone48/keymaps/default/keymap.c
index 6143307528..100434246d 100644
--- a/keyboards/treadstone48/keymaps/default/keymap.c
+++ b/keyboards/treadstone48/keymaps/default/keymap.c
@@ -1,8 +1,22 @@
+/* Copyright 2020 marksard
+ *
+ * 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_jp.h"
#include "../common/oled_helper.h"
-
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
@@ -115,7 +129,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#define L_ADJUST (1<<_ADJUST)
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
-#ifdef SSD1306OLED
+#ifdef OLED_DRIVER_ENABLE
+#include <stdio.h>
+#include <string.h>
+
typedef struct {
uint8_t state;
char name[8];
@@ -152,18 +169,42 @@ static inline void update_keymap_status(void) {
keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
}
-static inline void render_keymap_status(struct CharacterMatrix *matrix) {
+static inline void render_keymap_status(void) {
- matrix_write(matrix, layer_status_buf);
+ oled_write(layer_status_buf, false);
}
#define UPDATE_KEYMAP_STATUS() update_keymap_status()
-#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
+
+static inline void render_status(void) {
+
+ UPDATE_LED_STATUS();
+ RENDER_LED_STATUS();
+ render_keymap_status();
+ UPDATE_LOCK_STATUS();
+ RENDER_LOCK_STATUS();
+ RENDER_KEY_STATUS();
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+
+// if (is_keyboard_master())
+// return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ return rotation;
+}
+
+void oled_task_user(void) {
+
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_logo();
+ }
+}
#else
#define UPDATE_KEYMAP_STATUS()
-#define RENDER_KEYMAP_STATUS(a)
#endif
@@ -198,18 +239,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
break;
#ifdef RGBLIGHT_ENABLE
- case RGB_MOD:
- if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- break;
case RGBRST:
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
- RGB_current_mode = rgblight_config.mode;
}
break;
#endif
@@ -221,57 +254,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
UPDATE_KEYMAP_STATUS();
return result;
}
-
-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
-
-void matrix_scan_user(void) {
- iota_gfx_task(); // this is what updates the display continuously
-}
-
-static inline 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;
- }
-}
-
-static inline void render_status(struct CharacterMatrix *matrix) {
-
- UPDATE_LED_STATUS();
- RENDER_LED_STATUS(matrix);
- RENDER_KEYMAP_STATUS(matrix);
- UPDATE_LOCK_STATUS();
- RENDER_LOCK_STATUS(matrix);
- RENDER_KEY_STATUS(matrix);
-}
-
-void iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
-
- #if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
- #endif
-
- matrix_clear(&matrix);
- if (is_master) {
- render_status(&matrix);
- }
-
- matrix_update(&display, &matrix);
-}
-
-#endif
diff --git a/keyboards/treadstone48/keymaps/default/rules.mk b/keyboards/treadstone48/keymaps/default/rules.mk
index 38ef4cc9fe..474e71ab11 100644
--- a/keyboards/treadstone48/keymaps/default/rules.mk
+++ b/keyboards/treadstone48/keymaps/default/rules.mk
@@ -1,49 +1,9 @@
+MOUSEKEY_ENABLE = yes # Mouse keys
TAP_DANCE_ENABLE = yes
-# If your custom treadstone48 pcb, you can rewrite to yes.
-OLED_ENABLE = no # OLED_ENABLE
-LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
-LED_ANIMATIONS = yes # LED animations
-
-# Other selectable option
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-LOCAL_GLCDFONT = no # use each keymaps "font.h" insted of "common/glcdfont.c"
-# RHYMESTONE_RIGHTHAND = no # If connect right hand side of the Rhymestone, set to yes.
-ANGELINA_KEYMAP = no # If Alfa verstion use set to yes.
-
-ifeq ($(strip $(OLED_ENABLE)), yes)
- OPT_DEFS += -DOLED_ENABLE
-endif
-
-ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
-else
- RGBLIGHT_ENABLE = no
-endif
-
-ifeq ($(strip $(LED_ANIMATIONS)), yes)
- # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
- OPT_DEFS += -DLED_ANIMATIONS
-endif
-
-ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
- OPT_DEFS += -DIOS_DEVICE_ENABLE
-endif
-
-ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
- OPT_DEFS += -DLOCAL_GLCDFONT
-endif
-
-# ifeq ($(strip $(RHYMESTONE_RIGHTHAND)), yes)
-# OPT_DEFS += -DRHYMESTONE_RIGHTHAND
-# endif
-
-ifeq ($(strip $(ANGELINA_KEYMAP)), yes)
- OPT_DEFS += -DANGELINA_KEYMAP
-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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = no
+LTO_ENABLE = yes
# If you want to change the display of OLED, you need to change here
SRC += ./common/oled_helper.c \
diff --git a/keyboards/treadstone48/keymaps/like_jis/config.h b/keyboards/treadstone48/keymaps/like_jis/config.h
index 3f63a0cfbb..baa4ec8461 100644
--- a/keyboards/treadstone48/keymaps/like_jis/config.h
+++ b/keyboards/treadstone48/keymaps/like_jis/config.h
@@ -1,22 +1,18 @@
-/*
-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/>.
-*/
+/* Copyright 2020 marksard
+ *
+ * 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
@@ -26,8 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#undef TAPPING_TERM
#endif
#define TAPPING_TERM 225
-// #define PREVENT_STUCK_MODIFIERS
-// #define IGNORE_MOD_TAP_INTERRUPT
#ifdef MOUSEKEY_ENABLE
#undef MOUSEKEY_INTERVAL
@@ -46,15 +40,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MOUSEKEY_DELAY 0
#endif
-// Selection of RGBLIGHT MODE to use.
-#if defined(LED_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
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define ANGELINA_KEYMAP
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define RHYMESTONE_RIGHTHAND
+
+#define OLED_FONT_H "keyboards/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/keymaps/like_jis/keymap.c b/keyboards/treadstone48/keymaps/like_jis/keymap.c
index b63b0c9f49..6cde28d24b 100644
--- a/keyboards/treadstone48/keymaps/like_jis/keymap.c
+++ b/keyboards/treadstone48/keymaps/like_jis/keymap.c
@@ -1,9 +1,22 @@
+/* Copyright 2020 marksard
+ *
+ * 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_jp.h"
#include "../common/oled_helper.h"
-extern keymap_config_t keymap_config;
-
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
@@ -116,7 +129,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#define L_ADJUST (1<<_ADJUST)
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
-#ifdef SSD1306OLED
+#ifdef OLED_DRIVER_ENABLE
+#include <stdio.h>
+#include <string.h>
+
typedef struct {
uint8_t state;
char name[8];
@@ -153,18 +169,42 @@ static inline void update_keymap_status(void) {
keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
}
-static inline void render_keymap_status(struct CharacterMatrix *matrix) {
+static inline void render_keymap_status(void) {
- matrix_write(matrix, layer_status_buf);
+ oled_write(layer_status_buf, false);
}
#define UPDATE_KEYMAP_STATUS() update_keymap_status()
-#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
+
+static inline void render_status(void) {
+
+ UPDATE_LED_STATUS();
+ RENDER_LED_STATUS();
+ render_keymap_status();
+ UPDATE_LOCK_STATUS();
+ RENDER_LOCK_STATUS();
+ RENDER_KEY_STATUS();
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+
+// if (is_keyboard_master())
+// return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ return rotation;
+}
+
+void oled_task_user(void) {
+
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_logo();
+ }
+}
#else
#define UPDATE_KEYMAP_STATUS()
-#define RENDER_KEYMAP_STATUS(a)
#endif
@@ -199,18 +239,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
break;
#ifdef RGBLIGHT_ENABLE
- case RGB_MOD:
- if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- break;
case RGBRST:
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
- RGB_current_mode = rgblight_config.mode;
}
break;
#endif
@@ -222,57 +254,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
UPDATE_KEYMAP_STATUS();
return result;
}
-
-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
-
-void matrix_scan_user(void) {
- iota_gfx_task(); // this is what updates the display continuously
-}
-
-static inline 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;
- }
-}
-
-static inline void render_status(struct CharacterMatrix *matrix) {
-
- UPDATE_LED_STATUS();
- RENDER_LED_STATUS(matrix);
- RENDER_KEYMAP_STATUS(matrix);
- UPDATE_LOCK_STATUS();
- RENDER_LOCK_STATUS(matrix);
- RENDER_KEY_STATUS(matrix);
-}
-
-void iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
-
- #if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
- #endif
-
- matrix_clear(&matrix);
- if (is_master) {
- render_status(&matrix);
- }
-
- matrix_update(&display, &matrix);
-}
-
-#endif
diff --git a/keyboards/treadstone48/keymaps/like_jis/rules.mk b/keyboards/treadstone48/keymaps/like_jis/rules.mk
index c53226431d..474e71ab11 100644
--- a/keyboards/treadstone48/keymaps/like_jis/rules.mk
+++ b/keyboards/treadstone48/keymaps/like_jis/rules.mk
@@ -1,67 +1,9 @@
-
-# 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. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
+MOUSEKEY_ENABLE = yes # Mouse keys
TAP_DANCE_ENABLE = yes
-# If your custom treadstone48 pcb, you can rewrite to yes.
-OLED_ENABLE = no # OLED_ENABLE
-LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
-LED_ANIMATIONS = yes # LED animations
-
-# Other selectable option
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-LOCAL_GLCDFONT = no # use each keymaps "font.h" insted of "common/glcdfont.c"
-# RHYMESTONE_RIGHTHAND = no # If connect right hand side of the Rhymestone, set to yes.
-ANGELINA_KEYMAP = no # If Alfa verstion use set to yes.
-
-ifeq ($(strip $(OLED_ENABLE)), yes)
- OPT_DEFS += -DOLED_ENABLE
-endif
-
-ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
-else
- RGBLIGHT_ENABLE = no
-endif
-
-ifeq ($(strip $(LED_ANIMATIONS)), yes)
- # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
- OPT_DEFS += -DLED_ANIMATIONS
-endif
-
-ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
- OPT_DEFS += -DIOS_DEVICE_ENABLE
-endif
-
-ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
- OPT_DEFS += -DLOCAL_GLCDFONT
-endif
-
-# ifeq ($(strip $(RHYMESTONE_RIGHTHAND)), yes)
-# OPT_DEFS += -DRHYMESTONE_RIGHTHAND
-# endif
-
-ifeq ($(strip $(ANGELINA_KEYMAP)), yes)
- OPT_DEFS += -DANGELINA_KEYMAP
-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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = no
+LTO_ENABLE = yes
# If you want to change the display of OLED, you need to change here
SRC += ./common/oled_helper.c \
diff --git a/keyboards/treadstone48/keymaps/like_jis_rs/config.h b/keyboards/treadstone48/keymaps/like_jis_rs/config.h
index e8acd5c76d..95b58c23db 100644
--- a/keyboards/treadstone48/keymaps/like_jis_rs/config.h
+++ b/keyboards/treadstone48/keymaps/like_jis_rs/config.h
@@ -1,22 +1,18 @@
-/*
-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/>.
-*/
+/* Copyright 2020 marksard
+ *
+ * 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
@@ -46,15 +42,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MOUSEKEY_DELAY 0
#endif
-// Selection of RGBLIGHT MODE to use.
-#if defined(LED_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
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define ANGELINA_KEYMAP
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define RHYMESTONE_RIGHTHAND
+
+#define OLED_FONT_H "keyboards/treadstone48/common/glcdfont.c"
diff --git a/keyboards/treadstone48/keymaps/like_jis_rs/keymap.c b/keyboards/treadstone48/keymaps/like_jis_rs/keymap.c
index 0e4ec063cc..354e40146f 100644
--- a/keyboards/treadstone48/keymaps/like_jis_rs/keymap.c
+++ b/keyboards/treadstone48/keymaps/like_jis_rs/keymap.c
@@ -1,9 +1,22 @@
+/* Copyright 2020 marksard
+ *
+ * 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_jp.h"
#include "../common/oled_helper.h"
-extern keymap_config_t keymap_config;
-
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
@@ -165,7 +178,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#define L_ADJUST (1<<_ADJUST)
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
-#ifdef SSD1306OLED
+#ifdef OLED_DRIVER_ENABLE
+#include <stdio.h>
+#include <string.h>
+
typedef struct {
uint8_t state;
char name[8];
@@ -204,18 +220,42 @@ static inline void update_keymap_status(void) {
keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
}
-static inline void render_keymap_status(struct CharacterMatrix *matrix) {
+static inline void render_keymap_status(void) {
- matrix_write(matrix, layer_status_buf);
+ oled_write(layer_status_buf, false);
}
#define UPDATE_KEYMAP_STATUS() update_keymap_status()
-#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
+
+static inline void render_status(void) {
+
+ UPDATE_LED_STATUS();
+ RENDER_LED_STATUS();
+ render_keymap_status();
+ UPDATE_LOCK_STATUS();
+ RENDER_LOCK_STATUS();
+ RENDER_KEY_STATUS();
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+
+// if (is_keyboard_master())
+// return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ return rotation;
+}
+
+void oled_task_user(void) {
+
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_logo();
+ }
+}
#else
#define UPDATE_KEYMAP_STATUS()
-#define RENDER_KEYMAP_STATUS(a)
#endif
@@ -263,18 +303,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
break;
#ifdef RGBLIGHT_ENABLE
- case RGB_MOD:
- if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- break;
case RGBRST:
if (record->event.pressed) {
eeconfig_update_rgblight_default();
rgblight_enable();
- RGB_current_mode = rgblight_config.mode;
}
break;
#endif
@@ -286,57 +318,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
UPDATE_KEYMAP_STATUS();
return result;
}
-
-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
-
-void matrix_scan_user(void) {
- iota_gfx_task(); // this is what updates the display continuously
-}
-
-static inline 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;
- }
-}
-
-static inline void render_status(struct CharacterMatrix *matrix) {
-
- UPDATE_LED_STATUS();
- RENDER_LED_STATUS(matrix);
- RENDER_KEYMAP_STATUS(matrix);
- UPDATE_LOCK_STATUS();
- RENDER_LOCK_STATUS(matrix);
- RENDER_KEY_STATUS(matrix);
-}
-
-void iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
-
- #if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
- #endif
-
- matrix_clear(&matrix);
- if (is_master) {
- render_status(&matrix);
- }
-
- matrix_update(&display, &matrix);
-}
-
-#endif
diff --git a/keyboards/treadstone48/keymaps/like_jis_rs/readme_jp.md b/keyboards/treadstone48/keymaps/like_jis_rs/readme_jp.md
index 5a6fc1d73b..d3ce8eb3f8 100644
--- a/keyboards/treadstone48/keymaps/like_jis_rs/readme_jp.md
+++ b/keyboards/treadstone48/keymaps/like_jis_rs/readme_jp.md
@@ -4,9 +4,9 @@
 デフォルトキーマップã®è¨˜å·é¡žã‚’JISライクãªé…ç½®ã«æƒãˆãªãŠã—ãŸã‚‚ã®ã§ã™ã€‚
 オプションã®Rhymestone用ã®ãƒžãƒƒãƒ—を使用ã™ã‚‹ãŸã‚ã«æ‹¡å¼µã—ã¦ã„ã¾ã™ã€‚Rhymestoneã®promicroã«ã‚‚Treadstone48ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を入れã¦ãã ã•ã„。
- Rhymestoneã¯åŸºæœ¬çš„ã«ã¯å·¦æ‰‹å´ã‚’使ã†ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ãŒã€å³æ‰‹å´ã‚’使用ã™ã‚‹å ´åˆã¯rules.mkã«ã‚ã‚‹RHYMESTONE_RIGHTHAND設定をyesã«ã™ã‚Œã°ä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
+ Rhymestoneã¯åŸºæœ¬çš„ã«ã¯å·¦æ‰‹å´ã‚’使ã†ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ãŒã€å³æ‰‹å´ã‚’使用ã™ã‚‹å ´åˆã¯config.hã®ä»¥ä¸‹ã®è¡Œã‚’有効ã«ã—ã¦ãã ã•ã„。
-```RHYMESTONE_RIGHTHAND=yes```
+```#define RHYMESTONE_RIGHTHAND```
## キーマップã®è¦‹ã‹ãŸ
diff --git a/keyboards/treadstone48/keymaps/like_jis_rs/rules.mk b/keyboards/treadstone48/keymaps/like_jis_rs/rules.mk
index c34bb2e34a..3f116d1902 100644
--- a/keyboards/treadstone48/keymaps/like_jis_rs/rules.mk
+++ b/keyboards/treadstone48/keymaps/like_jis_rs/rules.mk
@@ -1,67 +1,12 @@
-
-# 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. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
+MOUSEKEY_ENABLE = yes # Mouse keys
TAP_DANCE_ENABLE = yes
-# If your custom treadstone48 pcb, you can rewrite to yes.
-OLED_ENABLE = no # OLED_ENABLE
-LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
-LED_ANIMATIONS = yes # LED animations
-
-# Other selectable option
-IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
-LOCAL_GLCDFONT = no # use each keymaps "font.h" insted of "common/glcdfont.c"
-RHYMESTONE_RIGHTHAND = no # If connect right hand side of the Rhymestone, set to yes.
-ANGELINA_KEYMAP = no # If Alfa verstion use set to yes.
-
-ifeq ($(strip $(OLED_ENABLE)), yes)
- OPT_DEFS += -DOLED_ENABLE
-endif
-
-ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
- RGBLIGHT_ENABLE = yes
-else
- RGBLIGHT_ENABLE = no
-endif
-
-ifeq ($(strip $(LED_ANIMATIONS)), yes)
- # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
- OPT_DEFS += -DLED_ANIMATIONS
-endif
-
-ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
- OPT_DEFS += -DIOS_DEVICE_ENABLE
-endif
-
-ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
- OPT_DEFS += -DLOCAL_GLCDFONT
-endif
-
-ifeq ($(strip $(RHYMESTONE_RIGHTHAND)), yes)
- OPT_DEFS += -DRHYMESTONE_RIGHTHAND
-endif
-
-ifeq ($(strip $(ANGELINA_KEYMAP)), yes)
- OPT_DEFS += -DANGELINA_KEYMAP
-endif
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = no
+LTO_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 you use connection the Rhymestone, please enable RS_EXTRA_LED
+OPT_DEFS += -DRS_EXTRA_LED
# If you want to change the display of OLED, you need to change here
SRC += ./common/oled_helper.c \
diff --git a/keyboards/treadstone48/rev1/config.h b/keyboards/treadstone48/rev1/config.h
index 09fb621545..56ffbaef01 100644
--- a/keyboards/treadstone48/rev1/config.h
+++ b/keyboards/treadstone48/rev1/config.h
@@ -1,6 +1,5 @@
/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
+Copyright 2020 marksard
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
@@ -16,8 +15,9 @@ 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 REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
+
+#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
@@ -27,84 +27,159 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT treadstone48
#define DESCRIPTION Symmetrical staggered 47+1 Keys Keyboard
-#define PREVENT_STUCK_MODIFIERS
-#define TAPPING_FORCE_HOLD
-#define TAPPING_TERM 150
-
-/* Use I2C or Serial */
-#define USE_I2C
-#define USE_SERIAL
-//#define USE_MATRIX_I2C
-
-/* Select hand configuration */
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
-
-// OLED support
-// see ./rules.mk: OLED_ENABLE=yes or no
-#ifdef OLED_ENABLE
- #define SSD1306OLED
-#endif
-
/* key matrix size */
-// Rows are doubled-up
#define MATRIX_ROWS 16
-#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B2, B6 }
-
-// wiring of each half
#define MATRIX_COLS 6
+
+/*
+ * 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, B1, B3, B2, B6 }
#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 }
+#define UNUSED_PINS
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
-/* number of backlight levels */
+/*
+ * 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
-/* Set 0 if debouncing isn't needed */
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+ #ifndef RS_EXTRA_LED
+ #define RGBLED_NUM 12
+ #define RGBLED_SPLIT {12, 0}
+ #else
+ #define RGBLED_NUM 32
+ #define RGBLED_SPLIT {12, 20}
+ #endif
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 180 /* 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
+/*== customize breathing effect ==*/
+ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+ #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+ /*==== use exp() and sin() ====*/
+ #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+ #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 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
+#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
+#define LOCKING_RESYNC_ENABLE
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
-//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-// treadstone48 keyboard RGB LED support
-//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
-// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
-#define RGBLED_NUM 12
-
-#ifndef IOS_DEVICE_ENABLE
- #define RGBLIGHT_LIMIT_VAL 180
- #define RGBLIGHT_VAL_STEP 17
-#else
- #define RGBLIGHT_LIMIT_VAL 50
- #define RGBLIGHT_VAL_STEP 4
-#endif
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-
-#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
-// USB_MAX_POWER_CONSUMPTION value for treadstone48 keyboard
-// 120 RGBoff, OLEDoff
-// 120 OLED
-// 330 RGB 6
-// 300 RGB 32
-// 310 OLED & RGB 32
- #define USB_MAX_POWER_CONSUMPTION 400
-#else
- // fix iPhone and iPad power adapter issue
- // iOS device need lessthan 100
- #define USB_MAX_POWER_CONSUMPTION 100
-#endif
+/* 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
@@ -112,17 +187,72 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* disable debug print */
-// #define NO_DEBUG
+//#define NO_DEBUG
/* disable print */
-// #define NO_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
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/treadstone48/rev1/matrix.c b/keyboards/treadstone48/rev1/matrix.c
deleted file mode 100644
index 8685a8125e..0000000000
--- a/keyboards/treadstone48/rev1/matrix.c
+++ /dev/null
@@ -1,357 +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 <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, sizeof(serial_slave_buffer));
- 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, sizeof(serial_master_buffer));
- 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], sizeof(serial_master_buffer));
- #endif
- memcpy((void *)serial_master_buffer,
- &matrix[offset], sizeof(serial_master_buffer));
-#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/treadstone48/rev1/rev1.c b/keyboards/treadstone48/rev1/rev1.c
index 2637864271..3daa3e8e81 100644
--- a/keyboards/treadstone48/rev1/rev1.c
+++ b/keyboards/treadstone48/rev1/rev1.c
@@ -1,15 +1,17 @@
-#include "treadstone48.h"
-
-
-#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
-
-void matrix_init_kb(void) {
-
- matrix_init_user();
-};
+/* Copyright 2020 marksard
+ *
+ * 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 "rev1.h"
diff --git a/keyboards/treadstone48/rev1/rev1.h b/keyboards/treadstone48/rev1/rev1.h
index 16ab2d716e..9a66d855d8 100644
--- a/keyboards/treadstone48/rev1/rev1.h
+++ b/keyboards/treadstone48/rev1/rev1.h
@@ -1,22 +1,31 @@
-#ifndef REV1_H
-#define REV1_CONFIG_H
-
-#include "../treadstone48.h"
+/* Copyright 2020 marksard
+ *
+ * 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"
-#ifdef RGBLIGHT_ENABLE
-//rgb led driver
-#include "ws2812.h"
-#endif
-
-#ifdef USE_I2C
-#include <stddef.h>
-#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/interrupt.h>
-#endif
-#endif
+/* This is 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.
+ */
// full Keymap
// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
@@ -197,5 +206,3 @@
#endif
//////////////////////////////////////////////////////////////////////////////
-
-#endif
diff --git a/keyboards/treadstone48/rev1/rules.mk b/keyboards/treadstone48/rev1/rules.mk
deleted file mode 100644
index 6028b5a5b9..0000000000
--- a/keyboards/treadstone48/rev1/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-SRC += rev1/matrix.c
-SRC += rev1/split_util.c
-SRC += rev1/split_scomm.c
diff --git a/keyboards/treadstone48/rev1/serial_config.h b/keyboards/treadstone48/rev1/serial_config.h
deleted file mode 100644
index 37135213d5..0000000000
--- a/keyboards/treadstone48/rev1/serial_config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-//// #error rev2 serial config
-
-#ifndef SOFT_SERIAL_PIN
-/* Soft Serial defines */
-#define SOFT_SERIAL_PIN D2
-
-#define SERIAL_USE_MULTI_TRANSACTION
-#endif
diff --git a/keyboards/treadstone48/rev1/serial_config_simpleapi.h b/keyboards/treadstone48/rev1/serial_config_simpleapi.h
deleted file mode 100644
index e2d22a41e7..0000000000
--- a/keyboards/treadstone48/rev1/serial_config_simpleapi.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef SERIAL_CONFIG_SIMPLEAPI_H
-#define SERIAL_CONFIG_SIMPLEAPI_H
-
-#undef SERIAL_USE_MULTI_TRANSACTION
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
-
-#endif // SERIAL_CONFIG_SIMPLEAPI_H
diff --git a/keyboards/treadstone48/rev1/split_scomm.c b/keyboards/treadstone48/rev1/split_scomm.c
deleted file mode 100644
index ada7867960..0000000000
--- a/keyboards/treadstone48/rev1/split_scomm.c
+++ /dev/null
@@ -1,92 +0,0 @@
-#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 %b\n",
- serial_slave_buffer[0], serial_slave_buffer[1],
- serial_slave_buffer[2], serial_slave_buffer[3],
- serial_slave_buffer[4] );
-#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/treadstone48/rev1/split_scomm.h b/keyboards/treadstone48/rev1/split_scomm.h
deleted file mode 100644
index 16887eb74f..0000000000
--- a/keyboards/treadstone48/rev1/split_scomm.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#pragma once
-
-#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
diff --git a/keyboards/treadstone48/rev1/split_util.c b/keyboards/treadstone48/rev1/split_util.c
deleted file mode 100644
index e1ff8b4379..0000000000
--- a/keyboards/treadstone48/rev1/split_util.c
+++ /dev/null
@@ -1,70 +0,0 @@
-#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/treadstone48/rev1/split_util.h b/keyboards/treadstone48/rev1/split_util.h
deleted file mode 100644
index f593047560..0000000000
--- a/keyboards/treadstone48/rev1/split_util.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#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);
diff --git a/keyboards/treadstone48/rules.mk b/keyboards/treadstone48/rules.mk
index fd3c6df570..df284153c9 100644
--- a/keyboards/treadstone48/rules.mk
+++ b/keyboards/treadstone48/rules.mk
@@ -12,30 +12,28 @@ MCU = atmega32u4
BOOTLOADER = caterina
# 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
+# 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)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
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.
-SUBPROJECT_rev1 = 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
+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
+MIDI_ENABLE = no # MIDI support
+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
+SPLIT_KEYBOARD = yes
-CUSTOM_MATRIX = yes
+MOUSEKEY_ENABLE = yes # Mouse keys
+TAP_DANCE_ENABLE = no
-DEFAULT_FOLDER = treadstone48/rev1
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = yes
-SRC += i2c.c
-SRC += serial.c
-SRC += ssd1306.c
+DEFAULT_FOLDER = treadstone48/rev1
diff --git a/keyboards/treadstone48/serial.c b/keyboards/treadstone48/serial.c
deleted file mode 100644
index 674c42d593..0000000000
--- a/keyboards/treadstone48/serial.c
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * 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
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stddef.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#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 ////////////////////////////////
-#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
-/* --- USE OLD API (compatible with let's split serial.c) */
- #if SERIAL_SLAVE_BUFFER_LENGTH > 0
- uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
- #endif
- #if SERIAL_MASTER_BUFFER_LENGTH > 0
- uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
- #endif
- uint8_t volatile status0 = 0;
-
-SSTD_t transactions[] = {
- { (uint8_t *)&status0,
- #if SERIAL_MASTER_BUFFER_LENGTH > 0
- sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
- #else
- 0, (uint8_t *)NULL,
- #endif
- #if SERIAL_SLAVE_BUFFER_LENGTH > 0
- sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
- #else
- 0, (uint8_t *)NULL,
- #endif
- }
-};
-
-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 result;
- result = soft_serial_transaction();
- return result;
-}
-
-#endif // end of 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)
-
-// 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
-
-#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
- #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
- #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
- #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
- #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 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
- #if __GNUC__ < 6
- #define READ_WRITE_WIDTH_ADJUST 3 // cycles
- #else
- #define READ_WRITE_WIDTH_ADJUST 7 // cycles
- #endif
-#else
-#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)
-
-#define SLAVE_INT_WIDTH_US 1
-#ifndef SERIAL_USE_MULTI_TRANSACTION
- #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
-#else
- #define SLAVE_INT_ACK_WIDTH_UNIT 2
- #define SLAVE_INT_ACK_WIDTH 4
-#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);
-}
-
-inline static void serial_output(void) ALWAYS_INLINE;
-inline static
-void serial_output(void) {
- SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
-}
-
-// make the serial pin an input with pull-up resistor
-inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
-inline static
-void serial_input_with_pullup(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- 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);
-}
-
-inline static void serial_low(void) ALWAYS_INLINE;
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static void serial_high(void) ALWAYS_INLINE;
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-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, int sstd_table_size)
-{
- Transaction_table = sstd_table;
- Transaction_table_size = (uint8_t)sstd_table_size;
- serial_input_with_pullup();
-
- // Enable INT0-INT3,INT6
- EIMSK |= EIMSK_BIT;
-#if SERIAL_PIN_MASK == _BV(PE6)
- // Trigger on falling edge of INT6
- EICRB &= EICRx_BIT;
-#else
- // Trigger on falling edge of INT0-INT3
- EICRA &= EICRx_BIT;
-#endif
-}
-
-// Used by the sender to synchronize timing with the reciver.
-static void sync_recv(void) NO_INLINE;
-static
-void sync_recv(void) {
- for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
- }
- // This shouldn't hang if the target disconnects because the
- // serial line will float to high if the target does disconnect.
- while (!serial_read_pin());
-}
-
-// Used by the reciver to send a synchronization signal to the sender.
-static void sync_send(void) NO_INLINE;
-static
-void sync_send(void) {
- serial_low();
- serial_delay();
- serial_high();
-}
-
-// Reads a byte from the serial line
-static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE;
-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 = PARITY; i < bit; i++ ) {
- serial_delay_half1(); // read the middle of pulses
- if( serial_read_pin() ) {
- byte = (byte << 1) | 1; p ^= 1;
- } else {
- byte = (byte << 1) | 0; p ^= 0;
- }
- _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
- serial_delay_half2();
- }
- /* recive parity bit */
- serial_delay_half1(); // read the middle of pulses
- pb = serial_read_pin();
- _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
- serial_delay_half2();
-
- *pterrcount += (p != pb)? 1 : 0;
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-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 = 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(); }
- else { serial_low(); }
- serial_delay();
-
- serial_low(); // sync_send() / senc_recv() need raise edge
-}
-
-static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
-static
-void serial_send_packet(uint8_t *buffer, uint8_t size) {
- for (uint8_t i = 0; i < size; ++i) {
- uint8_t data;
- data = buffer[i];
- sync_send();
- serial_write_chunk(data,8);
- }
-}
-
-static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
-static
-uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
- uint8_t pecount = 0;
- for (uint8_t i = 0; i < size; ++i) {
- uint8_t data;
- sync_recv();
- data = serial_read_chunk(&pecount, 8);
- buffer[i] = data;
- }
- return pecount == 0;
-}
-
-inline static
-void change_sender2reciver(void) {
- sync_send(); //0
- serial_delay_half1(); //1
- serial_low(); //2
- serial_input_with_pullup(); //2
- serial_delay_half1(); //3
-}
-
-inline static
-void change_reciver2sender(void) {
- sync_recv(); //0
- serial_delay(); //1
- serial_low(); //3
- serial_output(); //3
- 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) {
-
-#ifndef SERIAL_USE_MULTI_TRANSACTION
- serial_low();
- serial_output();
- SSTD_t *trans = Transaction_table;
-#else
- // recive transaction table index
- uint8_t tid, bits;
- uint8_t pecount = 0;
- sync_recv();
- 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
- serial_output();
- _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH);
- SSTD_t *trans = &Transaction_table[tid];
- serial_low(); // response step2 ack high->low
-#endif
-
- // target send phase
- if( trans->target2initiator_buffer_size > 0 )
- serial_send_packet((uint8_t *)trans->target2initiator_buffer,
- 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;
- } else {
- *trans->status = TRANSACTION_DATA_ERROR;
- }
- } else {
- *trans->status = TRANSACTION_ACCEPTED;
- }
-
- sync_recv(); //weit initiator output to high
-}
-
-/////////
-// start transaction by initiator
-//
-// int soft_serial_transaction(int sstd_index)
-//
-// Returns:
-// TRANSACTION_END
-// TRANSACTION_NO_RESPONSE
-// TRANSACTION_DATA_ERROR
-// this code is very time dependent, so we need to disable interrupts
-#ifndef SERIAL_USE_MULTI_TRANSACTION
-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();
-
- // signal to the target that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(SLAVE_INT_WIDTH_US);
-
-#ifndef SERIAL_USE_MULTI_TRANSACTION
- // wait for the target response
- serial_input_with_pullup();
- _delay_us(SLAVE_INT_RESPONSE_TIME);
-
- // check if the target is present
- if (serial_read_pin()) {
- // target failed to pull the line low, assume not present
- serial_output();
- serial_high();
- *trans->status = TRANSACTION_NO_RESPONSE;
- sei();
- return TRANSACTION_NO_RESPONSE;
- }
-
-#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(tid, 7);
- serial_delay_half1();
-
- // wait for the target response (step1 low->high)
- serial_input_with_pullup();
- while( !serial_read_pin() ) {
- _delay_sub_us(2);
- }
-
- // 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;
- }
- _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
- }
-#endif
-
- // initiator recive phase
- // 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;
- }
- }
-
- // initiator switch to output
- change_reciver2sender();
-
- // initiator send phase
- if( trans->initiator2target_buffer_size > 0 ) {
- serial_send_packet((uint8_t *)trans->initiator2target_buffer,
- trans->initiator2target_buffer_size);
- }
-
- // always, release the line when not in use
- sync_send();
-
- *trans->status = TRANSACTION_END;
- sei();
- return TRANSACTION_END;
-}
-
-#ifdef SERIAL_USE_MULTI_TRANSACTION
-int soft_serial_get_and_clean_status(int sstd_index) {
- SSTD_t *trans = &Transaction_table[sstd_index];
- cli();
- int retval = *trans->status;
- *trans->status = 0;;
- sei();
- return retval;
-}
-#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/treadstone48/serial.h b/keyboards/treadstone48/serial.h
deleted file mode 100644
index 5deaf789e3..0000000000
--- a/keyboards/treadstone48/serial.h
+++ /dev/null
@@ -1,86 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-
-// /////////////////////////////////////////////////////////////////
-// Need Soft Serial defines in config.h
-// /////////////////////////////////////////////////////////////////
-// ex.
-// #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 OLD API (compatible with let's split serial.c)
-// ex.
-// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-// #define SERIAL_MASTER_BUFFER_LENGTH 1
-//
-// //// USE NEW API
-// //// USE simple API (using signle-type transaction function)
-// #define SERIAL_USE_SINGLE_TRANSACTION
-// //// USE flexible API (using multi-type transaction function)
-// #define SERIAL_USE_MULTI_TRANSACTION
-//
-// /////////////////////////////////////////////////////////////////
-
-
-//////////////// for backward compatibility ////////////////////////////////
-#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
-/* --- USE OLD API (compatible with let's split serial.c) */
- #if SERIAL_SLAVE_BUFFER_LENGTH > 0
- extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
- #endif
- #if SERIAL_MASTER_BUFFER_LENGTH > 0
- extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
- #endif
-
- void serial_master_init(void);
- void serial_slave_init(void);
- int serial_update_buffers(void);
-
-#endif // end of USE OLD API
-////////////////////////////////////////////////////////////////////////////
-
-// Soft Serial Transaction Descriptor
-typedef struct _SSTD_t {
- uint8_t *status;
- uint8_t initiator2target_buffer_size;
- uint8_t *initiator2target_buffer;
- 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, int sstd_table_size);
-// target is interrupt accept side
-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
-int soft_serial_transaction(int sstd_index);
-#endif
-
-// target status
-// *SSTD_t.status has
-// initiator:
-// TRANSACTION_END
-// or TRANSACTION_NO_RESPONSE
-// or TRANSACTION_DATA_ERROR
-// target:
-// TRANSACTION_DATA_ERROR
-// or TRANSACTION_ACCEPTED
-#define TRANSACTION_ACCEPTED 0x8
-#ifdef SERIAL_USE_MULTI_TRANSACTION
-int soft_serial_get_and_clean_status(int sstd_index);
-#endif
diff --git a/keyboards/treadstone48/ssd1306.c b/keyboards/treadstone48/ssd1306.c
deleted file mode 100644
index dd3290ba0c..0000000000
--- a/keyboards/treadstone48/ssd1306.c
+++ /dev/null
@@ -1,342 +0,0 @@
-
-#ifdef SSD1306OLED
-
-#include "ssd1306.h"
-#include "i2c.h"
-#include <string.h>
-#include "print.h"
-#ifndef LOCAL_GLCDFONT
-#include "common/glcdfont.c"
-#else
-#include <helixfont.h>
-#endif
-#ifdef ADAFRUIT_BLE_ENABLE
-#include "adafruit_ble.h"
-#endif
-#ifdef PROTOCOL_LUFA
-#include "lufa.h"
-#endif
-#include "sendchar.h"
-#include "timer.h"
-
-// 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 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/treadstone48/ssd1306.h b/keyboards/treadstone48/ssd1306.h
deleted file mode 100644
index 49f258efa9..0000000000
--- a/keyboards/treadstone48/ssd1306.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#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_P(struct CharacterMatrix *matrix, const char *data);
-void matrix_render(struct CharacterMatrix *matrix);
-
-bool process_record_gfx(uint16_t keycode, keyrecord_t *record);
diff --git a/keyboards/treadstone48/treadstone48.c b/keyboards/treadstone48/treadstone48.c
deleted file mode 100644
index faadb26906..0000000000
--- a/keyboards/treadstone48/treadstone48.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "treadstone48.h"
diff --git a/keyboards/treadstone48/treadstone48.h b/keyboards/treadstone48/treadstone48.h
deleted file mode 100644
index 3123d1de53..0000000000
--- a/keyboards/treadstone48/treadstone48.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-
-#ifdef KEYBOARD_treadstone48_rev1
- #include "rev1.h"
-#endif
-
-#include "quantum.h"
-
-#ifdef PROTOCOL_LUFA
-#include "lufa.h"
-#include "split_util.h"
-#endif
-#ifdef SSD1306OLED
- #include "ssd1306.h"
-#endif
diff --git a/keyboards/uk78/config.h b/keyboards/uk78/config.h
index 879360773f..5459e687b6 100644
--- a/keyboards/uk78/config.h
+++ b/keyboards/uk78/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 0x554B /* Ascii */
-#define PRODUCT_ID 0x004E
+#define VENDOR_ID 0x554B // "UK"
+#define PRODUCT_ID 0x004E // 78
#define DEVICE_VER 0x0002
#define MANUFACTURER UK Keyboards
#define PRODUCT UK78
diff --git a/keyboards/unikorn/readme.md b/keyboards/unikorn/readme.md
index 1f8b16d649..1383e18518 100644
--- a/keyboards/unikorn/readme.md
+++ b/keyboards/unikorn/readme.md
@@ -2,59 +2,29 @@
60% PCB made for the TGR x SINGA Unikorn60.
-
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: Unikorn 60 PCB
-Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=98350.0)
-
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: Unikorn 60 PCB
+* Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=98350.0)
Make example for this keyboard (after setting up your build environment):
make unikorn:default
-This PCB can support RGB underglow. There are pads on the bottom of the PCB for the LED controller chip and for 17 RGB underglow LEDs. The Unikorn 60 case does not have acrylic pieces to properly display underglow effects.
-
-To enable RGB lighting support, install the necessary components and set RGBLIGHT features in `rules.mk` like so:
-
-```
-RGBLIGHT_ENABLE = yes
-```
-
-
-Flashing
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make unikorn:default:flash
-**Reset Key:** Short the two holes labeled `FW_JP` underneath the PCB, beside the Tab key while plugging in the keyboard.
+**Reset Key**: Short the two holes labeled `FW_JP` underneath the PCB, beside the Tab key while plugging in the keyboard.
Do not confuse this with the LED holes of the switch in the `Tab` position. `FW_JP` is not reachable from the top as the plate blocks access to it.
-It is recommended to program a `RESET` key in your keymap.
-
-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 python3
- pip3 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).
+## RGB Underglow
+This PCB can support RGB underglow. There are pads on the bottom of the PCB for the LED controller chip and for 17 RGB underglow LEDs. The Unikorn 60 case does not have acrylic pieces to properly display underglow effects.
-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).
+To enable RGB lighting support, install the necessary components and set RGBLIGHT features in `rules.mk` like so:
+
+```makefile
+RGBLIGHT_ENABLE = yes
+```
diff --git a/keyboards/ut472/keymaps/hvp/config.h b/keyboards/ut472/keymaps/hvp/config.h
new file mode 100644
index 0000000000..53fc5b76fb
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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 150
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT \ No newline at end of file
diff --git a/keyboards/ut472/keymaps/hvp/keymap.c b/keyboards/ut472/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..ec88e24234
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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 "hvp.c"
+
+#define LT3_ESC LT(3, KC_ESC)
+#define LT4_TAB LT(4, KC_TAB)
+#define D_NAVI MT(MOD_LCTL | MOD_LSFT, KC_D)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+LAYOUT(
+ LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_ESC, KC_A, KC_S, KC_D, LT(3,KC_F), LT(4,KC_G), KC_H, KC_J, KC_K, KC_L, TD(TD1), TD(TD2),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT,
+ KC_LCTL, KC_APP, KC_LGUI, KC_LALT, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+LAYOUT( /* Right */
+ 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_DELETE, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+LAYOUT( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_BSPC,
+ KC_DELETE, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+LAYOUT( /* 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,
+ _______, _______, _______, D_NAVI, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, KC_MUTE, KC_MPLY, KC_MSTP, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+LAYOUT( /* Tab */
+ _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, RGB_M_P, RGB_HUD, RGB_HUI, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______,
+ KC_PSCR, _______, RGB_SAD, RGB_SAI, _______, _______, KC_0, KC_1, KC_2, KC_3, _______, _______,
+ RESET, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______
+),
+}; \ No newline at end of file
diff --git a/keyboards/ut472/keymaps/hvp/readme.md b/keyboards/ut472/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..a249201ded
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: UT47.2
+Keys: 47key staggered 40% keyboard
+Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
+Flash instructions: Flash using dfu, will req the hvp user space to compile.
+
+> make ut472:hvp:dfu
+
+Links:
+Github - https://github.com/ai03-2725/UT47.2
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/ut472/keymaps/hvp/rules.mk b/keyboards/ut472/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..1ba2fa8fbe
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/uzu42/info.json b/keyboards/uzu42/info.json
new file mode 100644
index 0000000000..817d764fbd
--- /dev/null
+++ b/keyboards/uzu42/info.json
@@ -0,0 +1,55 @@
+{
+ "keyboard_name": "uzu42",
+ "url": "https://github.com/nrtkbb/Keyboards/tree/master/uzu42",
+ "maintainer": "nrtkbb",
+ "width": 13,
+ "height": 4.43,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Q", "x":0.375, "y":0},
+ {"label":"W", "x":1.375, "y":0},
+ {"label":"E", "x":2.375, "y":0},
+ {"label":"R", "x":3.375, "y":0.125},
+ {"label":"T", "x":4.375, "y":0.25},
+ {"label":"Y", "x":7.625, "y":0.25},
+ {"label":"U", "x":8.625, "y":0.125},
+ {"label":"I", "x":9.625, "y":0},
+ {"label":"O", "x":10.625, "y":0},
+ {"label":"P", "x":11.625, "y":0},
+ {"label":"A", "x":0.25, "y":1},
+ {"label":"S", "x":1.25, "y":1},
+ {"label":"D", "x":2.25, "y":1},
+ {"label":"F", "x":3.25, "y":1.125},
+ {"label":"G", "x":4.25, "y":1.25},
+ {"label":"H", "x":7.75, "y":1.25},
+ {"label":"J", "x":8.75, "y":1.125},
+ {"label":"K", "x":9.75, "y":1},
+ {"label":"L", "x":10.75, "y":1},
+ {"label":"Ent", "x":11.75, "y":1},
+ {"label":"Z", "x":0.125, "y":2},
+ {"label":"X", "x":1.125, "y":2},
+ {"label":"C", "x":2.125, "y":2},
+ {"label":"V", "x":3.125, "y":2.125},
+ {"label":"B", "x":4.125, "y":2.25},
+ {"label":"N", "x":7.875, "y":2.25},
+ {"label":"M", "x":8.875, "y":2.125},
+ {"label":",", "x":9.875, "y":2},
+ {"label":".", "x":10.875, "y":2},
+ {"label":"/", "x":11.875, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Space", "x":1, "y":3},
+ {"label":"Alt", "x":2, "y":3.05},
+ {"label":"GUI", "x":3, "y":3.18},
+ {"label":"Lower", "x":4, "y":3.3},
+ {"label":"Esc", "x":5, "y":3.43},
+ {"label":"Space", "x":7, "y":3.43},
+ {"label":"Raise", "x":8, "y":3.3},
+ {"label":"BkSpc", "x":9, "y":3.18},
+ {"label":"Ctrl", "x":10, "y":3.05},
+ {"label":"GUI", "x":11, "y":3},
+ {"label":"No", "x":12, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/vinta/rules.mk b/keyboards/vinta/rules.mk
index 90485c4356..6d9fc0da1d 100644
--- a/keyboards/vinta/rules.mk
+++ b/keyboards/vinta/rules.mk
@@ -1,39 +1,5 @@
-# project specific files
-
-## 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 = STM32F042x6
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F042X6
-
-# 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=0x00001000
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F042
# Build Options
# comment out to disable the options.
diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c
index 1548ba995d..47c00ac374 100644
--- a/keyboards/vision_division/keymaps/default/keymap.c
+++ b/keyboards/vision_division/keymaps/default/keymap.c
@@ -35,7 +35,6 @@ enum custom_keycodes {
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
-#define TG_NKRO MAGIC_TOGGLE_NKRO
#define OS_SHFT OSM(MOD_LSFT)
#define ________________ _______, _______
diff --git a/keyboards/vitamins_included/keymaps/juno/keymap.c b/keyboards/vitamins_included/keymaps/juno/keymap.c
deleted file mode 100644
index 5fa8b4cf71..0000000000
--- a/keyboards/vitamins_included/keymaps/juno/keymap.c
+++ /dev/null
@@ -1,293 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "eeconfig.h"
-
-extern keymap_config_t keymap_config;
-
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _ADJUST 16
-
-#define _FN1 5
-#define _DPAD 6
-#define _DPADNUM 7
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- ADJUST,
-
- FN1,
- DP_ON,
- DP_OFF
-};
-
-#define XXXXXXX KC_NO
-
-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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | App | Ctrl | GUI | Alt |Lower | SpaceFn |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_QWERTY] = LAYOUT_ortho_4x12( \
- 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, RSFT_T(KC_ENT), \
- KC_APP, KC_LCTL, KC_LGUI, KC_LALT, LOWER, LT(_FN1, KC_SPC),
- LT(_FN1, KC_SPC), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \
-),
-
-/* 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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_COLEMAK] = LAYOUT_ortho_4x12( \
- 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 , \
- ADJUST, 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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_DVORAK] = LAYOUT_ortho_4x12( \
- 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 , \
- ADJUST, 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 | _ | + | { | } | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |RESET | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT_ortho_4x12( \
- 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, \
- RESET, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, 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 | | | | |RESET |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT_ortho_4x12( \
- 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, _______, _______, _______, _______, RESET, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
-),
-
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | | Reset| | | | | | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | |RGB_MOD|
- * `-----------------------------------------------------------------------------------'
- */
-
-[_ADJUST] = LAYOUT_ortho_4x12( \
- _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD \
-),
-
-// Two personal additional layers below
-// There's no brite key
-
-/* Function (personal function layer)
- * ,-----------------------------------------------------------------------------------.
- * | | Vol+ | PgUp | Up | PdDn | Ins | | | Up | | PScr | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | Vol- | Left | Down | Right| Home | | Left | Down |Right | | Del |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | Prev | Play | Next | | End | | | Vol- | Vol+ | Mute | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Caps | | | | | Space | | DP_ON| | | |
- * `-----------------------------------------------------------------------------------'
- */
-
-[_FN1] = LAYOUT_ortho_4x12( \
- _______, KC_VOLU, KC_PGUP, KC_UP, KC_PGDN, KC_INS, _______, _______, KC_UP, _______, KC_PSCR, _______, \
- _______, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL, \
- _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, \
- KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DP_ON, _______, _______, _______ \
-),
-
-/* DPAD layer, for active arrow cluster at the bottom right corner
-
- * ,-----------------------------------------------------------------------------------.
- * | 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 | GUI | Alt | |DNUM | Space | |DP_OFF| Left | Down |Right |
- * `-----------------------------------------------------------------------------------'
- */
-
-[_DPAD] = LAYOUT_ortho_4x12( \
- 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_UP, KC_ENT , \
- KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, MO(_DPADNUM),
- KC_SPC, KC_SPC, LOWER, DP_OFF, KC_LEFT, KC_DOWN, KC_RGHT \
-),
-
-// Extended layer for weapon switchings
-
-[_DPADNUM] = LAYOUT_ortho_4x12( \
- XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX , \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 , \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 , \
- _______, _______, _______, XXXXXXX, MO(_DPADNUM),
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
-)
-
-};
-
-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);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_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;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
-
- // Additional personal custom functions
-
- case KC_CAPS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
- // PLAY_SONG(caps_song_off);
- } else {
- // PLAY_SONG(caps_song_on);
- }
- #endif
- }
- return true; // process the actual function of Caps Lock
- //break;
-
- case DP_ON:
- if (record->event.pressed) {
-
- } else {
- // activated upon release
- #ifdef AUDIO_ENABLE
- // PLAY_SONG(dpad_song_on);
- #endif
-
- layer_off(_FN1);
- layer_on(_DPAD);
- }
-
- case DP_OFF:
- if (record->event.pressed) {
- // deactivated upon pressdown
- #ifdef AUDIO_ENABLE
- // PLAY_SONG(dpad_song_off);
- #endif
-
- //layer_off(_FN1); // do not put in this line
- layer_off(_DPAD);
- }
- }
- return true;
-}
diff --git a/keyboards/vitamins_included/keymaps/juno/rules.mk b/keyboards/vitamins_included/keymaps/juno/rules.mk
deleted file mode 100644
index 424b208b66..0000000000
--- a/keyboards/vitamins_included/keymaps/juno/rules.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-MIDI_ENABLE=no
-BACKLIGHT_ENABLE = no
-RGBLIGHT_ENABLE = no
-
-NKRO_ENABLE = no # USB Nkey Rollover
-AUDIO_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 = no # 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 \ No newline at end of file
diff --git a/keyboards/westfoxtrot/aanzee/config.h b/keyboards/westfoxtrot/aanzee/config.h
index 4a5b65c583..69fc613879 100644
--- a/keyboards/westfoxtrot/aanzee/config.h
+++ b/keyboards/westfoxtrot/aanzee/config.h
@@ -117,26 +117,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
-
-
-//dynamic keymap and via support
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*6*2)) = (37+480)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 677 // **** CHANGE THIS BASED ON MATRIX_ROWS & MATRIX_COLS ****
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 347 // **** CHANGE THIS BASED ON 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR ****
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk b/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk
index bcc5dc530a..1e5b99807c 100644
--- a/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk
+++ b/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk
@@ -1,69 +1 @@
-# 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
-
-# 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 = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE = yes # 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
-
-#add files needed for via
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-SRC += keyboards/wilba_tech/wt_main.c
+VIA_ENABLE = yes
diff --git a/keyboards/whitefox/keymaps/default/keymap.c b/keyboards/whitefox/keymaps/default/keymap.c
index 61cc4eca0f..d0f329ebaf 100644
--- a/keyboards/whitefox/keymaps/default/keymap.c
+++ b/keyboards/whitefox/keymaps/default/keymap.c
@@ -16,7 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,---------------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Ins|
diff --git a/keyboards/wilba_tech/rama_works_koyu/config.h b/keyboards/wilba_tech/rama_works_koyu/config.h
index f3e21aa15f..9cbbd6620b 100644
--- a/keyboards/wilba_tech/rama_works_koyu/config.h
+++ b/keyboards/wilba_tech/rama_works_koyu/config.h
@@ -18,7 +18,7 @@
#include "config_common.h"
// USB Device descriptor parameter
-#define VENDOR_ID 0x5241 // "RW"
+#define VENDOR_ID 0x5241 // "RA"
#define PRODUCT_ID 0x4B59 // "KY"
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA WORKS
@@ -119,24 +119,6 @@
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-#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 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+31)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 68
-// Dynamic macro starts after dynamic keymaps (68+(4*5*15*2)) = (68+600)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 668
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 356
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31 \ No newline at end of file
diff --git a/keyboards/wilba_tech/rama_works_koyu/keymaps/via/keymap.c b/keyboards/wilba_tech/rama_works_koyu/keymaps/via/keymap.c
new file mode 100644
index 0000000000..f6bc94fbd6
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_koyu/keymaps/via/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [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_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,
+ MO(1), KC_LGUI, KC_LALT, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ 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_INS, KC_DEL, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ // Fn2 Layer
+ [2] = LAYOUT_all(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/wilba_tech/rama_works_koyu/keymaps/via/rules.mk b/keyboards/wilba_tech/rama_works_koyu/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_koyu/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/rama_works_koyu/rama_works_koyu.h b/keyboards/wilba_tech/rama_works_koyu/rama_works_koyu.h
index f51bc5c613..b9c033e095 100644
--- a/keyboards/wilba_tech/rama_works_koyu/rama_works_koyu.h
+++ b/keyboards/wilba_tech/rama_works_koyu/rama_works_koyu.h
@@ -18,7 +18,7 @@
#include "quantum.h"
#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "keyboards/wilba_tech/via_keycodes.h"
+#include "via.h"
#define ____ KC_NO
diff --git a/keyboards/wilba_tech/rama_works_koyu/rules.mk b/keyboards/wilba_tech/rama_works_koyu/rules.mk
index cf6a8a96a0..80a3b32b2b 100644
--- a/keyboards/wilba_tech/rama_works_koyu/rules.mk
+++ b/keyboards/wilba_tech/rama_works_koyu/rules.mk
@@ -20,7 +20,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# 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)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -36,8 +36,6 @@ 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
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
CIE1931_CURVE = yes
# project specific files
diff --git a/keyboards/wilba_tech/rama_works_m10_b/config.h b/keyboards/wilba_tech/rama_works_m10_b/config.h
index f72ecae85c..d2e67e0c97 100644
--- a/keyboards/wilba_tech/rama_works_m10_b/config.h
+++ b/keyboards/wilba_tech/rama_works_m10_b/config.h
@@ -15,13 +15,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/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x5241 // "RW"
+#define VENDOR_ID 0x5241 // "RA"
#define PRODUCT_ID 0x00AB // 10-B
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA WORKS
@@ -180,25 +179,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
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*10*2)) = (37+80)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 117
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 907
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
-
-#endif
diff --git a/keyboards/wilba_tech/rama_works_m10_b/keymaps/knops/config.h b/keyboards/wilba_tech/rama_works_m10_b/keymaps/knops/config.h
index 7c3ec9601d..511dc9537e 100644
--- a/keyboards/wilba_tech/rama_works_m10_b/keymaps/knops/config.h
+++ b/keyboards/wilba_tech/rama_works_m10_b/keymaps/knops/config.h
@@ -19,6 +19,7 @@
#include "../../config.h"
+#undef VIA_ENABLE
#undef RAW_ENABLE
#undef DYNAMIC_KEYMAP_ENABLE
diff --git a/keyboards/wilba_tech/rama_works_m10_b/keymaps/via/keymap.c b/keyboards/wilba_tech/rama_works_m10_b/keymaps/via/keymap.c
new file mode 100644
index 0000000000..8c97a5cfb6
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m10_b/keymaps/via/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_0 ),
+ LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+ LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+ LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
+};
diff --git a/keyboards/wilba_tech/rama_works_m10_b/keymaps/via/rules.mk b/keyboards/wilba_tech/rama_works_m10_b/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m10_b/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/rama_works_m10_b/rules.mk b/keyboards/wilba_tech/rama_works_m10_b/rules.mk
index 07372d0ac2..e970f6c7a2 100644
--- a/keyboards/wilba_tech/rama_works_m10_b/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m10_b/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -29,9 +29,3 @@ 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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c
diff --git a/keyboards/wilba_tech/rama_works_m60_a/config.h b/keyboards/wilba_tech/rama_works_m60_a/config.h
index 1ee76750c1..8381a4db00 100644
--- a/keyboards/wilba_tech/rama_works_m60_a/config.h
+++ b/keyboards/wilba_tech/rama_works_m60_a/config.h
@@ -18,7 +18,7 @@
#include "config_common.h"
// USB Device descriptor parameter
-#define VENDOR_ID 0x5241 // "RW"
+#define VENDOR_ID 0x5241 // "RA"
#define PRODUCT_ID 0x060A // 60-A
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA WORKS
@@ -116,24 +116,6 @@
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-#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 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+31)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 68
-// Dynamic macro starts after dynamic keymaps (68+(4*5*14*2)) = (68+560)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 628
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 396
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
diff --git a/keyboards/wilba_tech/rama_works_m60_a/keymaps/via/keymap.c b/keyboards/wilba_tech/rama_works_m60_a/keymaps/via/keymap.c
new file mode 100644
index 0000000000..7b6d9b756c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m60_a/keymaps/via/keymap.c
@@ -0,0 +1,40 @@
+// M60-A layout
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_hhkb(
+ 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_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, FN_MO13,
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_MO23),
+
+// Fn1 Layer
+[1] = LAYOUT_60_hhkb(
+ 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_INS, 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_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ 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),
+
+// Fn2 Layer
+[2] = LAYOUT_60_hhkb(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_hhkb(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/wilba_tech/rama_works_m60_a/keymaps/via/rules.mk b/keyboards/wilba_tech/rama_works_m60_a/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m60_a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/rama_works_m60_a/rama_works_m60_a.h b/keyboards/wilba_tech/rama_works_m60_a/rama_works_m60_a.h
index 01e096fee6..2c690122ba 100644
--- a/keyboards/wilba_tech/rama_works_m60_a/rama_works_m60_a.h
+++ b/keyboards/wilba_tech/rama_works_m60_a/rama_works_m60_a.h
@@ -17,7 +17,7 @@
#include "quantum.h"
#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "keyboards/wilba_tech/via_keycodes.h"
+#include "via.h"
#define XXX KC_NO
diff --git a/keyboards/wilba_tech/rama_works_m60_a/rules.mk b/keyboards/wilba_tech/rama_works_m60_a/rules.mk
index 1dec6c074f..e4e934bdba 100644
--- a/keyboards/wilba_tech/rama_works_m60_a/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m60_a/rules.mk
@@ -20,7 +20,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# 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)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -36,8 +36,6 @@ 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
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
CIE1931_CURVE = yes
LAYOUTS = 60_hhkb
diff --git a/keyboards/wilba_tech/rama_works_m6_a/config.h b/keyboards/wilba_tech/rama_works_m6_a/config.h
index 07396450d6..1a61604bb4 100644
--- a/keyboards/wilba_tech/rama_works_m6_a/config.h
+++ b/keyboards/wilba_tech/rama_works_m6_a/config.h
@@ -18,7 +18,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x5241 // "RW"
+#define VENDOR_ID 0x5241 // "RA"
#define PRODUCT_ID 0x006A // 6-A
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA WORKS
@@ -103,27 +103,9 @@
#define RGB_BACKLIGHT_ENABLED 0
-#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 34
-// 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 36
-
// NOTE: M6-A doesn't use RGB backlight, but we keep this
// consistent with M6-B which does.
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+43)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 80
-// Dynamic macro starts after dynamic keymaps (80+(4*6*2)) = (80+48)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 128
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 896
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 43
diff --git a/keyboards/wilba_tech/rama_works_m6_a/keymaps/via/keymap.c b/keyboards/wilba_tech/rama_works_m6_a/keymaps/via/keymap.c
new file mode 100644
index 0000000000..7a408fa8aa
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m6_a/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) };
+
diff --git a/keyboards/wilba_tech/rama_works_m6_a/keymaps/via/rules.mk b/keyboards/wilba_tech/rama_works_m6_a/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m6_a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/rama_works_m6_a/rules.mk b/keyboards/wilba_tech/rama_works_m6_a/rules.mk
index 5feee31120..26185cb38f 100644
--- a/keyboards/wilba_tech/rama_works_m6_a/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m6_a/rules.mk
@@ -19,7 +19,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -34,10 +34,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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-CIE1931_CURVE = no
-
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c
diff --git a/keyboards/wilba_tech/rama_works_m6_b/config.h b/keyboards/wilba_tech/rama_works_m6_b/config.h
index 535c64b80f..3ebfd80dab 100644
--- a/keyboards/wilba_tech/rama_works_m6_b/config.h
+++ b/keyboards/wilba_tech/rama_works_m6_b/config.h
@@ -18,7 +18,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x5241 // "RW"
+#define VENDOR_ID 0x5241 // "RA"
#define PRODUCT_ID 0x006B // 6-B
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA WORKS
@@ -149,24 +149,6 @@
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-#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 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+43)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 80
-// Dynamic macro starts after dynamic keymaps (80+(4*6*2)) = (80+48)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 128
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 896
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 43
diff --git a/keyboards/wilba_tech/rama_works_m6_b/keymaps/via/keymap.c b/keyboards/wilba_tech/rama_works_m6_b/keymaps/via/keymap.c
new file mode 100644
index 0000000000..7a408fa8aa
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m6_b/keymaps/via/keymap.c
@@ -0,0 +1,16 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) };
+
diff --git a/keyboards/wilba_tech/rama_works_m6_b/keymaps/via/rules.mk b/keyboards/wilba_tech/rama_works_m6_b/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m6_b/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/rama_works_m6_b/rules.mk b/keyboards/wilba_tech/rama_works_m6_b/rules.mk
index 4c14af06c4..05212a3be2 100644
--- a/keyboards/wilba_tech/rama_works_m6_b/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m6_b/rules.mk
@@ -19,7 +19,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -35,8 +35,6 @@ 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
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
CIE1931_CURVE = yes
# project specific files
diff --git a/keyboards/wilba_tech/rama_works_u80_a/config.h b/keyboards/wilba_tech/rama_works_u80_a/config.h
index d0bf0ed1e3..748b2cb291 100644
--- a/keyboards/wilba_tech/rama_works_u80_a/config.h
+++ b/keyboards/wilba_tech/rama_works_u80_a/config.h
@@ -19,7 +19,7 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0x5241 // "RW"
+#define VENDOR_ID 0x5241 // "RA"
#define PRODUCT_ID 0x080A // 80-A
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA WORKS
@@ -232,25 +232,6 @@
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-
-#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 34
-// 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 0x07
-#define EEPROM_VERSION_ADDR 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+31)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 68
-// Dynamic macro starts after dynamic keymaps (68+(4*6*17*2)) = (68+816)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 884
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 140
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
diff --git a/keyboards/wilba_tech/rama_works_u80_a/keymaps/via/keymap.c b/keyboards/wilba_tech/rama_works_u80_a/keymaps/via/keymap.c
new file mode 100644
index 0000000000..548843427c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_u80_a/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = 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_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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/wilba_tech/rama_works_u80_a/keymaps/via/rules.mk b/keyboards/wilba_tech/rama_works_u80_a/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_u80_a/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/rama_works_u80_a/rama_works_u80_a.h b/keyboards/wilba_tech/rama_works_u80_a/rama_works_u80_a.h
index c057db4ccd..c5380e4a6b 100644
--- a/keyboards/wilba_tech/rama_works_u80_a/rama_works_u80_a.h
+++ b/keyboards/wilba_tech/rama_works_u80_a/rama_works_u80_a.h
@@ -18,7 +18,7 @@
#include "quantum.h"
#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "keyboards/wilba_tech/via_keycodes.h"
+#include "via.h"
#define ____ KC_NO
diff --git a/keyboards/wilba_tech/rama_works_u80_a/rules.mk b/keyboards/wilba_tech/rama_works_u80_a/rules.mk
index 0f02cd04f3..443776d4a3 100644
--- a/keyboards/wilba_tech/rama_works_u80_a/rules.mk
+++ b/keyboards/wilba_tech/rama_works_u80_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -29,9 +29,6 @@ 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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
CIE1931_CURVE = yes
# project specific files
diff --git a/keyboards/wilba_tech/via_api.h b/keyboards/wilba_tech/via_api.h
deleted file mode 100644
index f04bb1b46a..0000000000
--- a/keyboards/wilba_tech/via_api.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright 2017 Jason Williams (Wilba)
- *
- * 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 PROTOCOL_VERSION 0x0008
-
-enum via_command_id
-{
- id_get_protocol_version = 0x01, // always 0x01
- id_get_keyboard_value,
- id_set_keyboard_value,
- id_dynamic_keymap_get_keycode,
- id_dynamic_keymap_set_keycode,
- id_dynamic_keymap_reset,
- id_backlight_config_set_value,
- id_backlight_config_get_value,
- id_backlight_config_save,
- id_eeprom_reset,
- id_bootloader_jump,
- id_dynamic_keymap_macro_get_count,
- id_dynamic_keymap_macro_get_buffer_size,
- id_dynamic_keymap_macro_get_buffer,
- id_dynamic_keymap_macro_set_buffer,
- id_dynamic_keymap_macro_reset,
- id_dynamic_keymap_get_layer_count,
- id_dynamic_keymap_get_buffer,
- id_dynamic_keymap_set_buffer,
- id_unhandled = 0xFF,
-};
-
-enum via_keyboard_value_id
-{
- id_uptime = 0x01,
- id_firmware_version
-};
-
diff --git a/keyboards/wilba_tech/via_keycodes.h b/keyboards/wilba_tech/via_keycodes.h
deleted file mode 100644
index bed48d64b0..0000000000
--- a/keyboards/wilba_tech/via_keycodes.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 2017 Jason Williams (Wilba)
- *
- * 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
-
-// Can't use SAFE_RANGE here, it might change if someone adds
-// new values to enum quantum_keycodes.
-// Need to keep checking 0x5F10 is still in the safe range.
-// TODO: merge this into quantum_keycodes
-// Backlight keycodes are in range 0x5F00-0x5F0F
-enum via_keycodes {
- FN_MO13 = 0x5F10,
- FN_MO23,
- MACRO00,
- MACRO01,
- MACRO02,
- MACRO03,
- MACRO04,
- MACRO05,
- MACRO06,
- MACRO07,
- MACRO08,
- MACRO09,
- MACRO10,
- MACRO11,
- MACRO12,
- MACRO13,
- MACRO14,
- MACRO15,
-};
-
-enum user_keycodes {
- USER00 = 0x5F80,
- USER01,
- USER02,
- USER03,
- USER04,
- USER05,
- USER06,
- USER07,
- USER08,
- USER09,
- USER10,
- USER11,
- USER12,
- USER13,
- USER14,
- USER15,
-};
-
-// VIA specific "action functions", introduced with Zeal60
-// These are only valid IDs in action_function()
-// Use FN_TT13, FN_TT23, etc. in keymaps
-enum via_action_functions {
- TRIPLE_TAP_1_3 = 0x31,
- TRIPLE_TAP_2_3 = 0x32
-};
-
-// Bitwise OR the above with 0x0F00 to use in F(x) macro
-// This reserves the top 256 of the 4096 range of F(x) keycodes,
-// leaving the rest for use in fn_actions[] or actions in EEPROM.
-#define FN_TT13 F((0x0F00|TRIPLE_TAP_1_3))
-#define FN_TT23 F((0x0F00|TRIPLE_TAP_2_3))
-
-#define TG_NKRO MAGIC_TOGGLE_NKRO
diff --git a/keyboards/wilba_tech/wt60_a/config.h b/keyboards/wilba_tech/wt60_a/config.h
index 6e1e0e81cc..269afbcb8b 100644
--- a/keyboards/wilba_tech/wt60_a/config.h
+++ b/keyboards/wilba_tech/wt60_a/config.h
@@ -200,24 +200,7 @@
// the default effect speed (0-3)
#define MONO_BACKLIGHT_EFFECT_SPEED 0
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*5*14*2)) = (44+560)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 604
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 420
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
+
diff --git a/keyboards/wilba_tech/wt60_a/keymaps/via/rules.mk b/keyboards/wilba_tech/wt60_a/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt60_a/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt60_a/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt60_a/rules.mk b/keyboards/wilba_tech/wt60_a/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt60_a/rules.mk
+++ b/keyboards/wilba_tech/wt60_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt60_d/config.h b/keyboards/wilba_tech/wt60_d/config.h
index 066465d424..acb69ba042 100644
--- a/keyboards/wilba_tech/wt60_d/config.h
+++ b/keyboards/wilba_tech/wt60_d/config.h
@@ -178,23 +178,3 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-
-#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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*5*14*2)) = (37+560)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 597
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 427
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt60_d/keymaps/via/rules.mk b/keyboards/wilba_tech/wt60_d/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt60_d/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt60_d/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt60_d/rules.mk b/keyboards/wilba_tech/wt60_d/rules.mk
index 07372d0ac2..a5c98a1c60 100644
--- a/keyboards/wilba_tech/wt60_d/rules.mk
+++ b/keyboards/wilba_tech/wt60_d/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -29,9 +29,3 @@ 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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
-
-# project specific files
-SRC = keyboards/wilba_tech/wt_main.c
diff --git a/keyboards/wilba_tech/wt60_d/wt60_d.c b/keyboards/wilba_tech/wt60_d/wt60_d.c
index ccff6d62c9..52a7733683 100644
--- a/keyboards/wilba_tech/wt60_d/wt60_d.c
+++ b/keyboards/wilba_tech/wt60_d/wt60_d.c
@@ -1,17 +1 @@
-/* Copyright 2018 Jason Williams (Wilba)
- *
- * 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/>.
- */
-
-// Nothing to see here, move along... ;-)
+#include "wt60_d.h"
diff --git a/keyboards/wilba_tech/wt65_a/config.h b/keyboards/wilba_tech/wt65_a/config.h
index 9d67c317b2..ad4c120f4d 100644
--- a/keyboards/wilba_tech/wt65_a/config.h
+++ b/keyboards/wilba_tech/wt65_a/config.h
@@ -197,24 +197,7 @@
// the default effect speed (0-3)
#define MONO_BACKLIGHT_EFFECT_SPEED 0
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*5*15*2)) = (44+600)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 644
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 380
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
+
diff --git a/keyboards/wilba_tech/wt65_a/keymaps/via/rules.mk b/keyboards/wilba_tech/wt65_a/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt65_a/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt65_a/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt65_a/rules.mk b/keyboards/wilba_tech/wt65_a/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt65_a/rules.mk
+++ b/keyboards/wilba_tech/wt65_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt65_b/config.h b/keyboards/wilba_tech/wt65_b/config.h
index 8b2437fc92..f98fa4e729 100644
--- a/keyboards/wilba_tech/wt65_b/config.h
+++ b/keyboards/wilba_tech/wt65_b/config.h
@@ -197,24 +197,7 @@
// the default effect speed (0-3)
#define MONO_BACKLIGHT_EFFECT_SPEED 0
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*5*15*2)) = (44+600)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 644
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 380
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
+
diff --git a/keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk b/keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt65_b/rules.mk b/keyboards/wilba_tech/wt65_b/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt65_b/rules.mk
+++ b/keyboards/wilba_tech/wt65_b/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt69_a/config.h b/keyboards/wilba_tech/wt69_a/config.h
index 57546cb491..b107453441 100644
--- a/keyboards/wilba_tech/wt69_a/config.h
+++ b/keyboards/wilba_tech/wt69_a/config.h
@@ -178,26 +178,3 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-
-// 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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*5*17*2)) = (37+680)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 717
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 307
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk b/keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt69_a/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt69_a/rules.mk b/keyboards/wilba_tech/wt69_a/rules.mk
index 7d1c2aa1b1..25f3ecbf19 100644
--- a/keyboards/wilba_tech/wt69_a/rules.mk
+++ b/keyboards/wilba_tech/wt69_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt75_a/config.h b/keyboards/wilba_tech/wt75_a/config.h
index f63bbf69c7..0c0a2ff082 100644
--- a/keyboards/wilba_tech/wt75_a/config.h
+++ b/keyboards/wilba_tech/wt75_a/config.h
@@ -200,24 +200,7 @@
// the default effect speed (0-3)
#define MONO_BACKLIGHT_EFFECT_SPEED 0
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*6*15*2)) = (44+720)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 764
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 260
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
+
diff --git a/keyboards/wilba_tech/wt75_a/keymaps/via/rules.mk b/keyboards/wilba_tech/wt75_a/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt75_a/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt75_a/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt75_a/rules.mk b/keyboards/wilba_tech/wt75_a/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt75_a/rules.mk
+++ b/keyboards/wilba_tech/wt75_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt75_b/config.h b/keyboards/wilba_tech/wt75_b/config.h
index b173b02417..0c7b3dbfad 100644
--- a/keyboards/wilba_tech/wt75_b/config.h
+++ b/keyboards/wilba_tech/wt75_b/config.h
@@ -200,24 +200,7 @@
// the default effect speed (0-3)
#define MONO_BACKLIGHT_EFFECT_SPEED 0
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*6*16*2)) = (44+768)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 812
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 212
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
+
diff --git a/keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk b/keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt75_b/rules.mk b/keyboards/wilba_tech/wt75_b/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt75_b/rules.mk
+++ b/keyboards/wilba_tech/wt75_b/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt75_c/config.h b/keyboards/wilba_tech/wt75_c/config.h
index 7105998774..b84f2444d8 100644
--- a/keyboards/wilba_tech/wt75_c/config.h
+++ b/keyboards/wilba_tech/wt75_c/config.h
@@ -198,26 +198,9 @@
#define MONO_BACKLIGHT_EFFECT 1
// the default effect speed (0-3)
-#define MONO_BACKLIGHT_EFFECT_SPEED 0
-
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*6*16*2)) = (44+768)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 812
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 212
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+#define MONO_BACKLIGHT_EFFECT_SPEED 000
+
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
+
diff --git a/keyboards/wilba_tech/wt75_c/keymaps/via/rules.mk b/keyboards/wilba_tech/wt75_c/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt75_c/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt75_c/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt75_c/rules.mk b/keyboards/wilba_tech/wt75_c/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt75_c/rules.mk
+++ b/keyboards/wilba_tech/wt75_c/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt80_a/config.h b/keyboards/wilba_tech/wt80_a/config.h
index 15dac9047f..b706956ef9 100644
--- a/keyboards/wilba_tech/wt80_a/config.h
+++ b/keyboards/wilba_tech/wt80_a/config.h
@@ -197,24 +197,6 @@
// the default effect speed (0-3)
#define MONO_BACKLIGHT_EFFECT_SPEED 0
-#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-
-// EEPROM usage
-
-// TODO: refactor with new user EEPROM code (coming soon)
-#define EEPROM_MAGIC 0x4520
-#define EEPROM_MAGIC_ADDR 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+7)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 44
-// Dynamic macro starts after dynamic keymaps (44+(4*6*17*2)) = (44+816)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 860
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 164
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 7
diff --git a/keyboards/wilba_tech/wt80_a/keymaps/via/rules.mk b/keyboards/wilba_tech/wt80_a/keymaps/via/rules.mk
index 4880a57bec..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt80_a/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt80_a/keymaps/via/rules.mk
@@ -1,2 +1 @@
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt80_a/rules.mk b/keyboards/wilba_tech/wt80_a/rules.mk
index 111c94ee80..c59e94e83c 100644
--- a/keyboards/wilba_tech/wt80_a/rules.mk
+++ b/keyboards/wilba_tech/wt80_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt8_a/config.h b/keyboards/wilba_tech/wt8_a/config.h
index 08556650da..9af0d00507 100644
--- a/keyboards/wilba_tech/wt8_a/config.h
+++ b/keyboards/wilba_tech/wt8_a/config.h
@@ -90,26 +90,3 @@
*
*/
//#define FORCE_NKRO
-
-// 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 34
-// 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 36
-
-// Dynamic keymap starts after EEPROM version
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 37
-// Dynamic macro starts after dynamic keymaps (37+(4*1*8*2)) = (37+64)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 101
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 923
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt8_a/keymaps/via/rules.mk b/keyboards/wilba_tech/wt8_a/keymaps/via/rules.mk
index f072c67198..1e5b99807c 100644
--- a/keyboards/wilba_tech/wt8_a/keymaps/via/rules.mk
+++ b/keyboards/wilba_tech/wt8_a/keymaps/via/rules.mk
@@ -1,68 +1 @@
-# project specific files
-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
-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 = 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
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt8_a/rules.mk b/keyboards/wilba_tech/wt8_a/rules.mk
index 7d1c2aa1b1..25f3ecbf19 100644
--- a/keyboards/wilba_tech/wt8_a/rules.mk
+++ b/keyboards/wilba_tech/wt8_a/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite # 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)
diff --git a/keyboards/wilba_tech/wt_main.c b/keyboards/wilba_tech/wt_main.c
index 32fc6f9e44..1ad12ee4a5 100644
--- a/keyboards/wilba_tech/wt_main.c
+++ b/keyboards/wilba_tech/wt_main.c
@@ -23,361 +23,177 @@
#if MONO_BACKLIGHT_ENABLED
#include "keyboards/wilba_tech/wt_mono_backlight.h"
#endif // MONO_BACKLIGHT_ENABLED
-#include "keyboards/wilba_tech/via_api.h" // Temporary hack
-#include "keyboards/wilba_tech/via_keycodes.h" // Temporary hack
-#include "raw_hid.h"
-#include "dynamic_keymap.h"
-#include "timer.h"
-#include "tmk_core/common/eeprom.h"
-
-bool eeprom_is_valid(void)
-{
- return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
- eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
-}
-
-void eeprom_set_valid(bool valid)
-{
- eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
- eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
-}
-
-void eeprom_reset(void)
-{
- // Set the Zeal60 specific EEPROM state as invalid.
- eeprom_set_valid(false);
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
-}
-
-#ifdef RAW_ENABLE
-
-void raw_hid_receive( uint8_t *data, uint8_t length )
-{
- uint8_t *command_id = &(data[0]);
- uint8_t *command_data = &(data[1]);
- switch ( *command_id )
- {
- case id_get_protocol_version:
- {
- command_data[0] = PROTOCOL_VERSION >> 8;
- command_data[1] = PROTOCOL_VERSION & 0xFF;
- break;
- }
- case id_get_keyboard_value:
- {
- if ( command_data[0] == id_uptime )
- {
- uint32_t value = timer_read32();
- command_data[1] = (value >> 24 ) & 0xFF;
- command_data[2] = (value >> 16 ) & 0xFF;
- command_data[3] = (value >> 8 ) & 0xFF;
- command_data[4] = value & 0xFF;
- }
- else
- {
- *command_id = id_unhandled;
- }
- break;
- }
-#ifdef DYNAMIC_KEYMAP_ENABLE
- case id_dynamic_keymap_get_keycode:
- {
- uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
- command_data[3] = keycode >> 8;
- command_data[4] = keycode & 0xFF;
- break;
- }
- case id_dynamic_keymap_set_keycode:
- {
- dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] );
- break;
- }
- case id_dynamic_keymap_reset:
- {
- dynamic_keymap_reset();
- break;
- }
- case id_dynamic_keymap_macro_get_count:
- {
- command_data[0] = dynamic_keymap_macro_get_count();
- break;
- }
- case id_dynamic_keymap_macro_get_buffer_size:
- {
- uint16_t size = dynamic_keymap_macro_get_buffer_size();
- command_data[0] = size >> 8;
- command_data[1] = size & 0xFF;
- break;
- }
- case id_dynamic_keymap_macro_get_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_macro_get_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_macro_set_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_macro_set_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_macro_reset:
- {
- dynamic_keymap_macro_reset();
- break;
- }
- case id_dynamic_keymap_get_layer_count:
- {
- command_data[0] = dynamic_keymap_get_layer_count();
- break;
- }
- case id_dynamic_keymap_get_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_get_buffer( offset, size, &command_data[3] );
- break;
- }
- case id_dynamic_keymap_set_buffer:
- {
- uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
- uint16_t size = command_data[2]; // size <= 28
- dynamic_keymap_set_buffer( offset, size, &command_data[3] );
- break;
- }
-#endif // DYNAMIC_KEYMAP_ENABLE
-#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- case id_backlight_config_set_value:
- {
- backlight_config_set_value(command_data);
- break;
- }
- case id_backlight_config_get_value:
- {
- backlight_config_get_value(command_data);
- break;
- }
- case id_backlight_config_save:
- {
- backlight_config_save();
- break;
- }
-#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- case id_eeprom_reset:
- {
- eeprom_reset();
- break;
- }
- case id_bootloader_jump:
- {
- // Need to send data back before the jump
- // Informs host that the command is handled
- raw_hid_send( data, length );
- // Give host time to read it
- wait_ms(100);
- bootloader_jump();
- break;
- }
- default:
- {
- // Unhandled message.
- *command_id = id_unhandled;
- break;
- }
- }
-
- // Return same buffer with values changed
- raw_hid_send( data, length );
-
-}
+#include "via.h"
+#ifndef VIA_ENABLE
+#include "tmk_core/common/eeprom.h"
+#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
#endif
-void main_init(void)
+// Called from via_init() if VIA_ENABLE
+// Called from matrix_init_kb() if not VIA_ENABLE
+void via_init_kb(void)
{
- // If the EEPROM has the magic, the data is good.
- // OK to load from EEPROM.
- if (eeprom_is_valid()) {
-#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- backlight_config_load();
-#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- } else {
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM
+ if (via_eeprom_is_valid()) {
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- // 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 backlight_config instance.
- backlight_config_save();
+ backlight_config_load();
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
-#ifdef DYNAMIC_KEYMAP_ENABLE
- // This resets the keymaps in EEPROM to what is in flash.
- dynamic_keymap_reset();
- // This resets the macros in EEPROM to nothing.
- dynamic_keymap_macro_reset();
-#endif // DYNAMIC_KEYMAP_ENABLE
- // Save the magic number last, in case saving was interrupted
- eeprom_set_valid(true);
- }
-
+ } else {
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- // Initialize LED drivers for backlight.
- backlight_init_drivers();
-
- backlight_timer_init();
- backlight_timer_enable();
+ // 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 backlight_config instance.
+ backlight_config_save();
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
-}
-void bootmagic_lite(void)
-{
- // The lite version of TMK's bootmagic.
- // 100% less potential for accidentally making the
- // keyboard do stupid things.
+ // DO NOT set EEPROM valid here, let caller do this
+ }
- // We need multiple scans because debouncing can't be turned off.
- matrix_scan();
- wait_ms(DEBOUNCE);
- wait_ms(DEBOUNCE);
- matrix_scan();
+#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
+ // Initialize LED drivers for backlight.
+ backlight_init_drivers();
- // If the Esc (matrix 0,0) is held down on power up,
- // reset the EEPROM valid state and jump to bootloader.
- if ( matrix_get_row(0) & (1<<0) ) {
- eeprom_reset();
- bootloader_jump();
- }
+ backlight_timer_init();
+ backlight_timer_enable();
+#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
}
void matrix_init_kb(void)
{
- bootmagic_lite();
- main_init();
- matrix_init_user();
+ // If VIA is disabled, we still need to load backlight settings.
+ // Call via_init_kb() the same way as via_init(), with setting
+ // EEPROM valid afterwards.
+#ifndef VIA_ENABLE
+ via_init_kb();
+ via_eeprom_set_valid(true);
+#endif // VIA_ENABLE
+
+ matrix_init_user();
}
void matrix_scan_kb(void)
{
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- // This only updates the LED driver buffers if something has changed.
- backlight_update_pwm_buffers();
+ // This only updates the LED driver buffers if something has changed.
+ backlight_update_pwm_buffers();
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- matrix_scan_user();
+ matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record)
{
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- process_record_backlight(keycode, record);
+ process_record_backlight(keycode, record);
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- switch(keycode) {
- case FN_MO13:
- if (record->event.pressed) {
- layer_on(1);
- update_tri_layer(1, 2, 3);
- } else {
- layer_off(1);
- update_tri_layer(1, 2, 3);
- }
- return false;
- break;
- case FN_MO23:
- if (record->event.pressed) {
- layer_on(2);
- update_tri_layer(1, 2, 3);
- } else {
- layer_off(2);
- update_tri_layer(1, 2, 3);
- }
- return false;
- break;
- }
-
-#ifdef DYNAMIC_KEYMAP_ENABLE
- // Handle macros
- if (record->event.pressed) {
- if ( keycode >= MACRO00 && keycode <= MACRO15 )
- {
- uint8_t id = keycode - MACRO00;
- dynamic_keymap_macro_send(id);
- return false;
- }
- }
-#endif //DYNAMIC_KEYMAP_ENABLE
-
- return process_record_user(keycode, record);
-}
-
-// This overrides the one in quantum/keymap_common.c
-uint16_t keymap_function_id_to_action( uint16_t function_id )
-{
- // Zeal60 specific "action functions" are 0xF00 to 0xFFF
- // i.e. F(0xF00) to F(0xFFF) are mapped to
- // enum zeal60_action_functions by masking last 8 bits.
- if ( function_id >= 0x0F00 && function_id <= 0x0FFF )
- {
- uint8_t id = function_id & 0xFF;
- switch ( id ) {
- case TRIPLE_TAP_1_3:
- case TRIPLE_TAP_2_3:
- {
- return ACTION_FUNCTION_TAP(id);
- break;
- }
- default:
- break;
- }
- }
-
- return pgm_read_word(&fn_actions[function_id]);
-}
-
-
-// Zeal60 specific "action functions"
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch (id)
- {
- case TRIPLE_TAP_1_3:
- case TRIPLE_TAP_2_3:
- if (record->event.pressed) {
- layer_on( id == TRIPLE_TAP_1_3 ? 1 : 2 );
- if (record->tap.count && !record->tap.interrupted) {
- if (record->tap.count >= 3) {
- layer_invert(3);
- }
- } else {
- record->tap.count = 0;
- }
- } else {
- layer_off( id == TRIPLE_TAP_1_3 ? 1 : 2 );
- }
- break;
- }
+ return process_record_user(keycode, record);
}
void led_set_kb(uint8_t usb_led)
{
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- backlight_set_indicator_state(usb_led);
+ backlight_set_indicator_state(usb_led);
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- led_set_user(usb_led);
+ led_set_user(usb_led);
}
void suspend_power_down_kb(void)
{
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- backlight_set_suspend_state(true);
+ backlight_set_suspend_state(true);
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
}
void suspend_wakeup_init_kb(void)
{
#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
- backlight_set_suspend_state(false);
+ backlight_set_suspend_state(false);
#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
}
+// Moving this to the bottom of this source file is a workaround
+// for an intermittent compiler error for Atmel compiler.
+#ifdef VIA_ENABLE
+void raw_hid_receive_kb(uint8_t *data, uint8_t length) {
+ uint8_t *command_id = &(data[0]);
+ uint8_t *command_data = &(data[1]);
+ switch ( *command_id )
+ {
+#if RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
+ case id_backlight_config_set_value:
+ {
+ backlight_config_set_value(command_data);
+ break;
+ }
+ case id_backlight_config_get_value:
+ {
+ backlight_config_get_value(command_data);
+ break;
+ }
+ case id_backlight_config_save:
+ {
+ backlight_config_save();
+ break;
+ }
+#endif // RGB_BACKLIGHT_ENABLED || MONO_BACKLIGHT_ENABLED
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ *command_data = *command_data; // force use of variable
+ break;
+ }
+ }
+ // DO NOT call raw_hid_send(data,length) here, let caller do this
+}
+#endif // VIA_ENABLE
+
+//
+// In the case of VIA being disabled, we still need to check if
+// keyboard level EEPROM memory is valid before loading.
+// Thus these are copies of the same functions in VIA, since
+// the backlight settings reuse VIA's EEPROM magic/version,
+// and the ones in via.c won't be compiled in.
+//
+// Yes, this is sub-optimal, and is only here for completeness
+// (i.e. catering to the 1% of people that want wilba.tech LED bling
+// AND want persistent settings BUT DON'T want to use dynamic keymaps/VIA).
+//
+#ifndef VIA_ENABLE
+
+bool via_eeprom_is_valid(void)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
+}
+
+void via_eeprom_set_valid(bool valid)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
+}
+
+void via_eeprom_reset(void)
+{
+ // Set the VIA specific EEPROM state as invalid.
+ via_eeprom_set_valid(false);
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+}
+
+#endif // VIA_ENABLE
diff --git a/keyboards/wilba_tech/wt_mono_backlight.c b/keyboards/wilba_tech/wt_mono_backlight.c
index 69d82e582a..daf738da2e 100644
--- a/keyboards/wilba_tech/wt_mono_backlight.c
+++ b/keyboards/wilba_tech/wt_mono_backlight.c
@@ -19,12 +19,17 @@
#include "wt_rgb_backlight_api.h" // reuse these for now
#include "wt_rgb_backlight_keycodes.h" // reuse these for now
-#include "drivers/avr/i2c_master.h"
-#include "drivers/issi/is31fl3736.h"
#include <avr/interrupt.h>
+#include "drivers/avr/i2c_master.h"
#include "progmem.h"
#include "quantum/color.h"
+#include "tmk_core/common/eeprom.h"
+
+#include "via.h" // uses only the EEPROM address
+#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
+
+#include "drivers/issi/is31fl3736.h"
#define ISSI_ADDR_DEFAULT 0x50
diff --git a/keyboards/wilba_tech/wt_rgb_backlight.c b/keyboards/wilba_tech/wt_rgb_backlight.c
index ca8c3269f6..babb844d26 100644
--- a/keyboards/wilba_tech/wt_rgb_backlight.c
+++ b/keyboards/wilba_tech/wt_rgb_backlight.c
@@ -14,9 +14,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#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) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_U80_A)
+#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) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_U80_A) || defined(RGB_BACKLIGHT_DAWN60)
#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, RGB_BACKLIGHT_HS60, RGB_BACKLIGHT_NK65, RGB_BACKLIGHT_U80_A
+#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A, RGB_BACKLIGHT_M6_B, RGB_BACKLIGHT_KOYU, RGB_BACKLIGHT_HS60, RGB_BACKLIGHT_NK65, RGB_BACKLIGHT_U80_A, RGB_BACKLIGHT_DAWN60
#endif
#ifndef MAX
@@ -33,18 +33,25 @@
#include "wt_rgb_backlight_keycodes.h"
#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
-#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
+
+#if defined(RGB_BACKLIGHT_DAWN60)
+#include "drivers/avr/ws2812.h"
+LED_TYPE g_ws2812_leds[WS2812_LED_TOTAL];
+#endif
+
#include "progmem.h"
#include "quantum/color.h"
+#include "tmk_core/common/eeprom.h"
+
+#include "via.h" // uses only the EEPROM address
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
#if defined(RGB_BACKLIGHT_M6_B)
#include "drivers/issi/is31fl3218.h"
@@ -59,6 +66,8 @@
#include "drivers/issi/is31fl3731.h"
#if defined(RGB_BACKLIGHT_U80_A)
#define BACKLIGHT_LED_COUNT 108
+#elif defined(RGB_BACKLIGHT_DAWN60)
+#define BACKLIGHT_LED_COUNT 84 //64 + 20
#else
#define BACKLIGHT_LED_COUNT 72
#endif
@@ -461,6 +470,87 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
{2, C9_16, C7_15, C6_15}, // LF16
{2, C8_16, C7_16, C6_16}, // LF17
};
+#elif defined(RGB_BACKLIGHT_DAWN60)
+// 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
+#define ISSI_ADDR_2 0x76
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, C1_1, C3_2, C4_2}, //A1
+ {0, C1_2, C2_2, C4_3}, //A2
+ {0, C1_3, C2_3, C3_3}, //A3
+ {0, C1_4, C2_4, C3_4}, //A4
+ {0, C1_5, C2_5, C3_5}, //A5
+ {0, C1_6, C2_6, C3_6}, //A6
+ {0, C1_7, C2_7, C3_7}, //A7
+ {0, C1_8, C2_8, C3_8}, //A8
+ {0, C9_1, C8_1, C7_1}, //A9
+ {0, C9_2, C8_2, C7_2}, //A10
+ {0, C9_3, C8_3, C7_3}, //A11
+ {0, C9_4, C8_4, C7_4}, //A12
+ {0, C9_5, C8_5, C7_5}, //A13
+ {0, C9_6, C8_6, C7_6}, //A14
+ {0, C9_7, C8_7, C6_6}, //A15
+ {0, C9_8, C7_7, C6_7}, //A16
+
+ {0, C1_9, C3_10, C4_10}, //B1
+ {0, C1_10, C2_10, C4_11}, //B2
+ {0, C1_11, C2_11, C3_11}, //B3
+ {0, C1_12, C2_12, C3_12}, //B4
+ {0, C1_13, C2_13, C3_13}, //B5
+ {0, C1_14, C2_14, C3_14}, //B6
+ {0, C1_15, C2_15, C3_15}, //B7
+ {0, C1_16, C2_16, C3_16}, //B8
+ {0, C9_9, C8_9, C7_9}, //B9
+ {0, C9_10, C8_10, C7_10}, //B10
+ {0, C9_11, C8_11, C7_11}, //B11
+ {0, C9_12, C8_12, C7_12}, //B12
+ {0, C9_13, C8_13, C7_13}, //B13
+ {0, C9_14, C8_14, C7_14}, //B14
+ {0, C9_15, C8_15, C6_14}, //B15
+ {0, C9_16, C7_15, C6_15}, //B16
+
+ {1, C1_1, C3_2, C4_2}, //C1
+ {1, C1_2, C2_2, C4_3}, //C2
+ {1, C1_3, C2_3, C3_3}, //C3
+ {1, C1_4, C2_4, C3_4}, //C4
+ {1, C1_5, C2_5, C3_5}, //C5
+ {1, C1_6, C2_6, C3_6}, //C6
+ {1, C1_7, C2_7, C3_7}, //C7
+ {1, C1_8, C2_8, C3_8}, //C8
+ {1, C9_1, C8_1, C7_1}, //C9
+ {1, C9_2, C8_2, C7_2}, //C10
+ {1, C9_3, C8_3, C7_3}, //C11
+ {1, C9_4, C8_4, C7_4}, //C12
+ {1, C9_5, C8_5, C7_5}, //C13
+ {1, C9_6, C8_6, C7_6}, //C14
+ {1, C9_7, C8_7, C6_6}, //C15
+ {1, C9_8, C7_7, C6_7}, //C16
+
+ {1, C1_9, C3_10, C4_10}, //D1
+ {1, C1_10, C2_10, C4_11}, //D2
+ {1, C1_11, C2_11, C3_11}, //D3
+ {1, C1_12, C2_12, C3_12}, //D4
+ {1, C1_13, C2_13, C3_13}, //D5
+ {1, C1_14, C2_14, C3_14}, //D6
+ {1, C1_15, C2_15, C3_15}, //D7
+ {1, C1_16, C2_16, C3_16}, //D8
+ {1, C9_9, C8_9, C7_9}, //D9
+ {1, C9_10, C8_10, C7_10}, //D10
+ {1, C9_11, C8_11, C7_11}, //D11
+ {1, C9_12, C8_12, C7_12}, //D12
+ {1, C9_13, C8_13, C7_13}, //D13
+ {1, C9_14, C8_14, C7_14}, //D14
+ {1, C9_15, C8_15, C6_14}, //D15
+ {1, C9_16, C7_15, C6_15} //D16
+};
#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)
@@ -803,6 +893,50 @@ const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
{160,255}, {96,255}, {77,255}, {179,255}, {51,255}, {205,255}
};
+#elif defined(RGB_BACKLIGHT_DAWN60)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA1..LA16
+ {104, 16}, {88 , 16}, {72 , 16}, {56 , 16}, {40 , 16}, {24 , 16}, {4 , 16}, {6 , 32},
+ {112, 0}, {96 , 0}, {80 , 0}, {64 , 0}, {48 , 0}, {32 , 0}, {16 , 0}, {0 , 0},
+
+ // LB1..LB16
+ {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, {214, 32},
+ {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, {224, 48},
+
+ // LC1..LC16
+ {100, 48}, {84 , 48}, {68 , 48}, {52 , 48}, {36 , 48}, {102, 64}, {42 , 64}, {22 , 64},
+ {108, 32}, {92 , 32}, {76 , 32}, {60 , 32}, {44 , 32}, {28 , 32}, {10 , 48}, {2 , 64},
+
+ // LD1..LD16
+ {124, 32}, {140, 32}, {156, 32}, {172, 32}, {188, 32}, {180, 48}, {202, 48}, {224, 64},
+ {116, 48}, {132, 48}, {148, 48}, {164, 48}, {160, 64}, {176, 64}, {192, 64}, {208, 64},
+
+ //RGB UNDERGLOW
+ {27 , 3}, {64 , 3}, {100, 3}, {137, 3}, {173, 3}, {209, 3}, {242, 4}, {255, 8}, {255,32}, {255,64},
+ {241,64}, {212,64}, {173,64}, {137,64}, {100,64}, {63 ,64}, {28 ,64}, {0 ,64}, {0 ,32}, {0 , 8}, //20
+};
+
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ //LA1..LA16
+ {70,129}, {80,139}, {89,157}, {96,181}, {101,208}, {105,238}, {109,255}, {128,247},
+ {64,255}, {70,255}, {75,255}, {80,255}, {85,255}, {89,255}, {93,255}, {96,255},
+ //LB1..LB16
+ {58,255}, {53,255}, {48,255}, {43,255}, {39,255}, {34,255}, {32,255}, {255,233},
+ {58,129}, {48,139}, {39,157}, {32,181}, {27,208}, {23,238}, {19,255}, {237,255},
+ //LC1..LC16
+ {183,131}, {173,143}, {165,163}, {159,188}, {154,216}, {188,255}, {170,255}, {165,255},
+ {128,9}, {128,46}, {128,82}, {128,119}, {128,155}, {128,192}, {147,255}, {161,255},
+ //LD1..LD16
+ {0,27}, {0,64}, {0,101}, {0,137}, {0,174}, {228,201}, {235,255}, {224,255},
+ {195,128}, {206,136}, {215,152}, {222,175}, {208,255}, {213,255}, {217, 255}, {222,225},
+
+ //UNDERGLOW, {A,D}
+ //1 - 10
+ {91,255}, {84,255}, {74,255}, {60,255}, {48,255}, {39,255}, {32,255}, {27,255}, {0,255}, {236,255},
+ //11 - 20
+ {234,255}, {222,255}, {213,255}, {197,255}, {180,255}, {167,255}, {152,255}, {147,255}, {128,255}, {101,255}
+};
+
#endif
// This may seem counter-intuitive, but it's quite flexible.
@@ -822,10 +956,12 @@ void map_led_to_point( uint8_t index, Point *point )
switch (index)
{
+#if !defined(RGB_BACKLIGHT_DAWN60)
case 18+4: // LB4A
if ( g_config.use_split_backspace )
point->x -= 8;
break;
+#endif
#if defined(RGB_BACKLIGHT_ZEAL60)
case 18+14: // LB14A
if ( g_config.use_iso_enter )
@@ -854,6 +990,28 @@ void map_led_to_point( uint8_t index, Point *point )
point->x -= 8;
break;
#endif
+#if defined(RGB_BACKLIGHT_DAWN60)
+ case 15+6: // LB6A
+ if ( !g_config.use_split_backspace )
+ point->x += 8;
+ break;
+ case 31+6: // LC6A
+ if ( g_config.use_7u_spacebar )
+ point->x = 112;
+ break;
+ case 47+16: // LD16A
+ if ( g_config.use_7u_spacebar )
+ point->x -= 8;
+ break;
+ case 47+6: // LD6A
+ if ( g_config.use_split_right_shift )
+ point->x += 6;
+ break;
+ case 47+7: // LD7A
+ if ( g_config.use_split_right_shift )
+ point->x += 6;
+ break;
+#endif
}
}
@@ -992,6 +1150,20 @@ const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
{ 0, 3, 5, 1, 2, 4 }
};
+#elif defined(RGB_BACKLIGHT_DAWN60)
+//Dawn60
+// A16, A15, A14, A13, A12, A11, A10, A9, B1, B2, B3, B4, B5, B6,
+// A7, A6, A5, A4, A3, A2, A1, B9, B10, B11, B12, B13, B14, B15,
+// A8, C14, C13, C12, C11, C10, C9, D1, D2, D3, D4, D5, B8, B7,
+// C15, C5, C4, C3, C2, C1, D9, D10, D11, D12, ---, D6, D7, B16,
+// C16, C8, C7, ---, ---, C6, ---, ---, ---, D13, D14, D15, D16, D8,
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { -1+16, -1+15, -1+14, -1+13, -1+12, -1+11, -1+10, -1+9 , 15+1 , 15+2 , 15+3 , 15+4 , 15+5 , 15+6 },
+ { -1+7 , -1+6 , -1+5 , -1+4 , -1+3 , -1+2 , -1 +1, 15+9 , 15+10, 15+11, 15+12, 15+13, 15+14, 15+15},
+ { -1+8 , 31+14, 31+13, 31+12, 31+11, 31+10, 31+9 , 47+1 , 47+2 , 47+3 , 47+4 , 47+5 , 15+8 , 15+7 },
+ { 31+15, 31+5 , 31+4 , 31+3 , 31+2 , 31+1 , 47+9 , 47+10, 47+11, 47+12, 255 ,47+6 , 47+7 , 15+16},
+ { 31+16, 31+8 , 31+7 , 255 , 255 , 31+6 , 255 , 255 , 255 , 47+13, 47+14, 47+15, 47+16, 47+8 }
+};
#endif
void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led )
@@ -1047,6 +1219,15 @@ void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
IS31FL3218_set_color( index, red, green, blue );
#elif defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65)
IS31FL3733_set_color( index, red, green, blue );
+#elif defined(RGB_BACKLIGHT_DAWN60)
+ if( index < DRIVER_LED_TOTAL ) {
+ IS31FL3731_set_color( index, red, green, blue );
+ } else {
+ g_ws2812_leds[index - DRIVER_LED_TOTAL].r = red;
+ g_ws2812_leds[index - DRIVER_LED_TOTAL].g = green;
+ g_ws2812_leds[index - DRIVER_LED_TOTAL].b = blue;
+ ws2812_setleds(g_ws2812_leds, WS2812_LED_TOTAL);
+ }
#else
IS31FL3731_set_color( index, red, green, blue );
#endif
@@ -1057,7 +1238,18 @@ 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) || defined(RGB_BACKLIGHT_NK65)
- IS31FL3733_set_color_all( red, green, blue );
+ // This is done to avoid indicator LEDs being set
+ for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
+ IS31FL3733_set_color(i, red, green, blue);
+ }
+#elif defined(RGB_BACKLIGHT_DAWN60)
+ IS31FL3731_set_color_all( red, green, blue );
+ for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
+ g_ws2812_leds[i].r = red;
+ g_ws2812_leds[i].g = green;
+ g_ws2812_leds[i].b = blue;
+ }
+ ws2812_setleds(g_ws2812_leds, WS2812_LED_TOTAL);
#else
IS31FL3731_set_color_all( red, green, blue );
#endif
@@ -1264,6 +1456,16 @@ void backlight_effect_alphas_mods(void)
}
}
}
+#if defined(RGB_BACKLIGHT_DAWN60)
+ for (int i = 0; i < WS2812_LED_TOTAL; i++) {
+ if ((RGB_UNDERGLOW_ALPHA_TOP_START <= i && i <= RGB_UNDERGLOW_ALPHA_TOP_END) ||
+ (RGB_UNDERGLOW_ALPHA_BOT_START <= i && i <= RGB_UNDERGLOW_ALPHA_BOT_END)) {
+ backlight_set_color(i + DRIVER_LED_TOTAL, rgb1.r, rgb1.g, rgb1.b);
+ } else {
+ backlight_set_color(i + DRIVER_LED_TOTAL, rgb2.r, rgb2.g, rgb2.b);
+ }
+ }
+#endif
}
void backlight_effect_gradient_up_down(void)
@@ -1300,6 +1502,7 @@ void backlight_effect_gradient_up_down(void)
hsv.h = g_config.color_1.h + ( deltaH * y );
hsv.s = g_config.color_1.s + ( deltaS * y );
rgb = hsv_to_rgb( hsv );
+
backlight_set_color( i, rgb.r, rgb.g, rgb.b );
}
}
@@ -1340,7 +1543,7 @@ void backlight_effect_raindrops(bool initialize)
hsv.h = h1 + ( deltaH * ( rand() & 0x03 ) );
hsv.s = s1 + ( deltaS * ( rand() & 0x03 ) );
// Override brightness with global brightness control
- hsv.v = g_config.brightness;;
+ hsv.v = g_config.brightness;
rgb = hsv_to_rgb( hsv );
backlight_set_color( i, rgb.r, rgb.g, rgb.b );
@@ -1356,7 +1559,7 @@ void backlight_effect_cycle_all(void)
for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
{
uint16_t offset2 = g_key_hit[i]<<2;
-#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
+#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65) && !defined(RGB_BACKLIGHT_DAWN60)
// stabilizer LEDs use spacebar hits
if ( i == 36+6 || i == 54+13 || // LC6, LD13
( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
@@ -1381,7 +1584,7 @@ void backlight_effect_cycle_left_right(void)
for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
{
uint16_t offset2 = g_key_hit[i]<<2;
-#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
+#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65) && !defined(RGB_BACKLIGHT_DAWN60)
// stabilizer LEDs use spacebar hits
if ( i == 36+6 || i == 54+13 || // LC6, LD13
( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
@@ -1408,7 +1611,7 @@ void backlight_effect_cycle_up_down(void)
for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
{
uint16_t offset2 = g_key_hit[i]<<2;
-#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
+#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65) && !defined(RGB_BACKLIGHT_DAWN60)
// stabilizer LEDs use spacebar hits
if ( i == 36+6 || i == 54+13 || // LC6, LD13
( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
@@ -1549,22 +1752,6 @@ void backlight_effect_indicators(void)
{
backlight_effect_indicators_set_colors( g_config.caps_lock_indicator.index, g_config.caps_lock_indicator.color );
}
-
-#if defined(RGB_BACKLIGHT_NK65)
- if ( IS_LED_ON(g_indicator_state, USB_LED_CAPS_LOCK) ) {
- IS31FL3733_set_color( 7+64-1, 0, 255, 0 );
- } else {
- IS31FL3733_set_color( 7+64-1, 0, 0, 0 );
- }
- if ( IS_LAYER_ON(1) ) {
- IS31FL3733_set_color( 6+64-1, 255, 0, 255 );
- } else if ( IS_LAYER_ON(2) ) {
- IS31FL3733_set_color( 6+64-1, 0, 255, 0 );
- } else {
- IS31FL3733_set_color( 6+64-1, 0, 0, 0 );
- }
-#endif
-
// This if/else if structure allows higher layers to
// override lower ones. If we set layer 3's indicator
// to none, then it will NOT show layer 2 or layer 1
@@ -2166,6 +2353,10 @@ void backlight_init_drivers(void)
( index == 54+13 ) || // LD13
( index >= 72+0 && index <= 72+8 ) || // LE0-LE8
( index == 90+13 ) ); // LF13
+#elif defined(RGB_BACKLIGHT_DAWN60)
+ bool enabled = !( ( index == 15+7 && !g_config.use_split_backspace ) || //other backspace
+ ( index == 47+13 && g_config.use_7u_spacebar ) || //LD13
+ ( index == 47+15 && g_config.use_7u_spacebar ) ); //LD15
#endif
// This only caches it for later
IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
@@ -2434,3 +2625,4 @@ void backlight_debug_led( bool state )
}
#endif // defined(RGB_DEBUGGING_ONLY)
+
diff --git a/keyboards/wilba_tech/wt_rgb_backlight.h b/keyboards/wilba_tech/wt_rgb_backlight.h
index aa24e3491d..6484658866 100644
--- a/keyboards/wilba_tech/wt_rgb_backlight.h
+++ b/keyboards/wilba_tech/wt_rgb_backlight.h
@@ -107,4 +107,3 @@ void backlight_color_2_sat_decrease(void);
void backlight_test_led( uint8_t index, bool red, bool green, bool blue );
void backlight_debug_led(bool state);
-
diff --git a/keyboards/wilba_tech/zeal60/config.h b/keyboards/wilba_tech/zeal60/config.h
index 6b9529a6f9..cb2f6a96bd 100644
--- a/keyboards/wilba_tech/zeal60/config.h
+++ b/keyboards/wilba_tech/zeal60/config.h
@@ -115,24 +115,6 @@
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-#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 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+31)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 68
-// Dynamic macro starts after dynamic keymaps (68+(4*5*14*2)) = (68+560)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 628
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 396
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31 \ No newline at end of file
diff --git a/keyboards/wilba_tech/zeal60/keymaps/via/keymap.c b/keyboards/wilba_tech/zeal60/keymaps/via/keymap.c
new file mode 100644
index 0000000000..395790d290
--- /dev/null
+++ b/keyboards/wilba_tech/zeal60/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+// Default layout for Zeal60
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_MO13, FN_MO23, KC_RCTL),
+
+// Fn1 Layer
+[1] = LAYOUT_60_all(
+ 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_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_all(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/wilba_tech/zeal60/keymaps/via/rules.mk b/keyboards/wilba_tech/zeal60/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/zeal60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/zeal60/rules.mk b/keyboards/wilba_tech/zeal60/rules.mk
index 11f3867de3..3067be73d3 100644
--- a/keyboards/wilba_tech/zeal60/rules.mk
+++ b/keyboards/wilba_tech/zeal60/rules.mk
@@ -20,7 +20,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# 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)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -36,8 +36,6 @@ 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
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
CIE1931_CURVE = yes
LAYOUTS = 60_ansi 60_iso 60_hhkb 60_ansi_split_bs_rshift
diff --git a/keyboards/wilba_tech/zeal60/zeal60.h b/keyboards/wilba_tech/zeal60/zeal60.h
index 0d4f1b908b..016531d227 100644
--- a/keyboards/wilba_tech/zeal60/zeal60.h
+++ b/keyboards/wilba_tech/zeal60/zeal60.h
@@ -17,7 +17,7 @@
#include "quantum.h"
#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "keyboards/wilba_tech/via_keycodes.h"
+#include "via.h"
#define XXX KC_NO
diff --git a/keyboards/wilba_tech/zeal65/config.h b/keyboards/wilba_tech/zeal65/config.h
index f452fbd475..01649d76fe 100644
--- a/keyboards/wilba_tech/zeal65/config.h
+++ b/keyboards/wilba_tech/zeal65/config.h
@@ -115,24 +115,6 @@
#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
-#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 34
-// 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 36
-
-// Backlight config starts after EEPROM version
-#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 37
-// Dynamic keymap starts after backlight config (37+31)
-#define DYNAMIC_KEYMAP_EEPROM_ADDR 68
-// Dynamic macro starts after dynamic keymaps (68+(4*5*15*2)) = (68+600)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 668
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 356
-#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
diff --git a/keyboards/wilba_tech/zeal65/info.json b/keyboards/wilba_tech/zeal65/info.json
index d83895ed95..709f7cefe1 100644
--- a/keyboards/wilba_tech/zeal65/info.json
+++ b/keyboards/wilba_tech/zeal65/info.json
@@ -6,7 +6,7 @@
"width": 16,
"height": 5,
"layouts": {
- "LAYOUT_65_split_bs": {
+ "LAYOUT_65_all": {
"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":"|", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Home", "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":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Control", "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":"Win", "x":0, "y":4, "w":1.5}, {"label":"Alt", "x":1.5, "y":4, "w":1.5}, {"x":3, "y":4, "w":7}, {"label":"Fn2", "x":10, "y":4, "w":1.5}, {"label":"Fn1", "x":11.5, "y":4, "w":1.5}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
},
"LAYOUT_65_normie": {
diff --git a/keyboards/wilba_tech/zeal65/keymaps/split_bs/keymap.c b/keyboards/wilba_tech/zeal65/keymaps/split_bs/keymap.c
index 96b04c358d..2c6d24e8fa 100644
--- a/keyboards/wilba_tech/zeal65/keymaps/split_bs/keymap.c
+++ b/keyboards/wilba_tech/zeal65/keymaps/split_bs/keymap.c
@@ -4,7 +4,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Default layer
-[0] = LAYOUT_65_split_bs(
+[0] = LAYOUT_65_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_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,
@@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LGUI, KC_LALT, KC_SPC, FN_MO23, FN_MO13, KC_LEFT, KC_DOWN, KC_RGHT),
// Fn1 Layer
-[1] = LAYOUT_65_split_bs(
+[1] = LAYOUT_65_all(
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_INS, KC_DEL, KC_TRNS,
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -20,7 +20,7 @@ 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),
// Fn2 Layer
-[2] = LAYOUT_65_split_bs(
+[2] = LAYOUT_65_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -28,7 +28,7 @@ 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),
// Fn3 Layer (zeal60 Configuration)
-[3] = LAYOUT_65_split_bs(
+[3] = LAYOUT_65_all(
KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, 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/wilba_tech/zeal65/keymaps/via/keymap.c b/keyboards/wilba_tech/zeal65/keymaps/via/keymap.c
new file mode 100644
index 0000000000..2c6d24e8fa
--- /dev/null
+++ b/keyboards/wilba_tech/zeal65/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+// Split-backspace layout for Zeal65
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_65_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_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_LGUI, KC_LALT, KC_SPC, FN_MO23, FN_MO13, KC_LEFT, KC_DOWN, KC_RGHT),
+
+// Fn1 Layer
+[1] = LAYOUT_65_all(
+ 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_INS, KC_DEL, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_65_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_65_all(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/wilba_tech/zeal65/keymaps/via/rules.mk b/keyboards/wilba_tech/zeal65/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/wilba_tech/zeal65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/wilba_tech/zeal65/rules.mk b/keyboards/wilba_tech/zeal65/rules.mk
index 6c8783eb29..94d487cbb7 100644
--- a/keyboards/wilba_tech/zeal65/rules.mk
+++ b/keyboards/wilba_tech/zeal65/rules.mk
@@ -20,7 +20,7 @@ OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# 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)
+BOOTMAGIC_ENABLE = lite # 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)
@@ -36,8 +36,6 @@ 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
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
CIE1931_CURVE = yes
# project specific files
diff --git a/keyboards/wilba_tech/zeal65/zeal65.h b/keyboards/wilba_tech/zeal65/zeal65.h
index d8528e6c51..34c1294165 100644
--- a/keyboards/wilba_tech/zeal65/zeal65.h
+++ b/keyboards/wilba_tech/zeal65/zeal65.h
@@ -17,11 +17,11 @@
#include "quantum.h"
#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
-#include "keyboards/wilba_tech/via_keycodes.h"
+#include "via.h"
#define XXX KC_NO
-#define LAYOUT_65_split_bs( \
+#define LAYOUT_65_all( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, 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, K2E, \
diff --git a/keyboards/winkeyless/bface/README.md b/keyboards/winkeyless/bface/README.md
index da0eb8088b..ab39a97db0 100644
--- a/keyboards/winkeyless/bface/README.md
+++ b/keyboards/winkeyless/bface/README.md
@@ -2,45 +2,18 @@
A 60% keyboard with RGB that runs ps2avrgb natively. Please note that the B.face and B.fake have different switch matrices. Firmware on one, will not work on the other.
-Keyboard Maintainer: QMK Community
-Hardware Supported: B.face PCB
-Hardware Availability: [Winkeyless](https://winkeyless.kr/product/b-face-x2-pcb/)
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: B.face PCB
+* Hardware Availability: [Winkeyless](https://winkeyless.kr/product/b-face-x2-pcb/)
Make example for this keyboard (after setting up your build environment):
make winkeyless/bface:default
-Flashing
-
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
-
-**Reset Key:** Hold down the key located at K00, commonly programmed as left control while plugging in the keyboard.
-
-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
- pip3 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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make winkeyless/bface:default:flash
+
+**Reset Key**: Hold down the key located at *K00*, commonly programmed as *left control* while plugging in the keyboard.
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/winkeyless/bface/config.h b/keyboards/winkeyless/bface/config.h
index 9d90e16a3d..95d44557a5 100644
--- a/keyboards/winkeyless/bface/config.h
+++ b/keyboards/winkeyless/bface/config.h
@@ -35,6 +35,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7}
#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+
#define RGBLED_NUM 16
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/winkeyless/bmini/bmini.c b/keyboards/winkeyless/bmini/bmini.c
index 87a31d0520..f44fd36a8c 100644
--- a/keyboards/winkeyless/bmini/bmini.c
+++ b/keyboards/winkeyless/bmini/bmini.c
@@ -16,6 +16,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "bmini.h"
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
diff --git a/keyboards/winkeyless/bmini/config.h b/keyboards/winkeyless/bmini/config.h
index 37df80f80a..f8a26e4f00 100644
--- a/keyboards/winkeyless/bmini/config.h
+++ b/keyboards/winkeyless/bmini/config.h
@@ -31,6 +31,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define DIODE_DIRECTION COL2ROW
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/winkeyless/bmini/matrix.c b/keyboards/winkeyless/bmini/matrix.c
deleted file mode 100644
index 57aa36b5ff..0000000000
--- a/keyboards/winkeyless/bmini/matrix.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-#define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_user();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/winkeyless/bmini/readme.md b/keyboards/winkeyless/bmini/readme.md
index 3401b97444..b8cc854950 100644
--- a/keyboards/winkeyless/bmini/readme.md
+++ b/keyboards/winkeyless/bmini/readme.md
@@ -2,42 +2,18 @@
A 75% keyboard with RGB
-Keyboard Maintainer: QMK Community
-Hardware Supported: B.mini PCB
-Hardware Availability: http://winkeyless.kr/product/b-mini-x2-pcb/
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: B.mini PCB
+* Hardware Availability: <http://winkeyless.kr/product/b-mini-x2-pcb/>
Make example for this keyboard (after setting up your build environment):
make winkeyless/bmini:default
-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.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make winkeyless/bmini:default:flash
+
+**Reset Key**: Hold down the key located at *LOCATION*, commonly programmed as *KEY* while plugging in the keyboard.
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/winkeyless/bmini/rules.mk b/keyboards/winkeyless/bmini/rules.mk
index 7822bd8301..530e8ea329 100644
--- a/keyboards/winkeyless/bmini/rules.mk
+++ b/keyboards/winkeyless/bmini/rules.mk
@@ -22,7 +22,3 @@ RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c
diff --git a/keyboards/winkeyless/bminiex/config.h b/keyboards/winkeyless/bminiex/config.h
index 35c8ce933d..037ca00284 100644
--- a/keyboards/winkeyless/bminiex/config.h
+++ b/keyboards/winkeyless/bminiex/config.h
@@ -30,6 +30,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define DIODE_DIRECTION COL2ROW
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/winkeyless/bminiex/matrix.c b/keyboards/winkeyless/bminiex/matrix.c
deleted file mode 100644
index 8faaed8ac0..0000000000
--- a/keyboards/winkeyless/bminiex/matrix.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-#include "backlight.h"
-
-#ifndef DEBOUNCE
-#define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-__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) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum();
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/winkeyless/bminiex/readme.md b/keyboards/winkeyless/bminiex/readme.md
index 7dbabedbaf..31a9e2608f 100644
--- a/keyboards/winkeyless/bminiex/readme.md
+++ b/keyboards/winkeyless/bminiex/readme.md
@@ -2,12 +2,16 @@
A compact fullsize keyboard with RGB
-Keyboard Maintainer: QMK Community
-Hardware Supported: B.mini EX PCB
-Hardware Availability: https://winkeyless.kr/product/b-mini-ex-x2-pcb/
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: B.mini EX PCB
+* Hardware Availability: <https://winkeyless.kr/product/b-mini-ex-x2-pcb/>
Make example for this keyboard (after setting up your build environment):
make winkeyless/bminiex:default
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ make winkeyless/bminiex:default:flash
+
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/winkeyless/bminiex/rules.mk b/keyboards/winkeyless/bminiex/rules.mk
index 39a77bda12..2c999dcbf6 100644
--- a/keyboards/winkeyless/bminiex/rules.mk
+++ b/keyboards/winkeyless/bminiex/rules.mk
@@ -29,6 +29,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c backlight.c
+SRC += backlight.c
diff --git a/keyboards/xbows/knight/config.h b/keyboards/xbows/knight/config.h
index 1e561642f7..f019c46e02 100644
--- a/keyboards/xbows/knight/config.h
+++ b/keyboards/xbows/knight/config.h
@@ -13,7 +13,7 @@
#define MATRIX_COLS 15
// wiring of each half
-#define MATRIX_ROW_PINS { D2, E6, C7, F7, F6, F5 }
+#define MATRIX_ROW_PINS { D2, E6, E2, F7, F6, F5 }
#define MATRIX_COL_PINS { B0, B1, B2, B3, F4, F1, C6, B6, B5, B4, D7, D6, D4, D5, D3}
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/xbows/knight/info.json b/keyboards/xbows/knight/info.json
index 9eafde01bc..63ff8d293e 100644
--- a/keyboards/xbows/knight/info.json
+++ b/keyboards/xbows/knight/info.json
@@ -1,12 +1,121 @@
{
- "keyboard_name": "knight",
- "url": "",
- "maintainer": "xbows",
- "width": 23.5,
- "height": 6.5,
+ "keyboard_name": "knight",
+ "url": "",
+ "maintainer": "xbows",
+ "width": 23,
+ "height": 6.5,
"layouts": {
"LAYOUT": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.5, "y":0}, {"label":"F2", "x":2.5, "y":0}, {"label":"F3", "x":3.5, "y":0}, {"label":"F4", "x":4.5, "y":0}, {"label":"F5", "x":6, "y":0}, {"label":"F6", "x":7, "y":0}, {"label":"F7", "x":8, "y":0}, {"label":"F8", "x":9, "y":0}, {"label":"F9", "x":10.5, "y":0}, {"label":"F10", "x":11.5, "y":0}, {"label":"F11", "x":12.5, "y":0}, {"label":"F12", "x":13.5, "y":0}, {"x":14.5, "y":0, "w":2}, {"x":16.5, "y":0, "w":2}, {"x":19.5, "y":0}, {"x":20.5, "y":0}, {"x":21.5, "y":0}, {"x":22.5, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":9.5, "y":1.5}, {"label":"&", "x":10.5, "y":1.5}, {"label":"*", "x":11.5, "y":1.5}, {"label":"(", "x":12.5, "y":1.5}, {"label":")", "x":13.5, "y":1.5}, {"label":"_", "x":14.5, "y":1.5}, {"label":"+", "x":15.5, "y":1.5}, {"label":"Backspace", "x":16.5, "y":1.5, "w":2}, {"label":"Num Lock", "x":19.5, "y":1.5}, {"label":"/", "x":20.5, "y":1.5}, {"label":"*", "x":21.5, "y":1.5}, {"label":"-", "x":22.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5}, {"label":"Q", "x":1, "y":2.5}, {"label":"W", "x":2, "y":2.5}, {"label":"E", "x":3, "y":2.5}, {"label":"R", "x":4, "y":2.5}, {"label":"T", "x":5, "y":2.5}, {"label":"Y", "x":9.5, "y":2.5}, {"label":"U", "x":10.5, "y":2.5}, {"label":"I", "x":11.5, "y":2.5}, {"label":"O", "x":12.5, "y":2.5}, {"label":"P", "x":13.5, "y":2.5}, {"label":"{", "x":14.5, "y":2.5}, {"label":"}", "x":15.5, "y":2.5}, {"label":"|", "x":16.5, "y":2.5}, {"x":17.5, "y":2.5}, {"label":"7", "x":19.5, "y":2.5}, {"label":"8", "x":20.5, "y":2.5}, {"label":"9", "x":21.5, "y":2.5}, {"label":"+", "x":22.5, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5}, {"label":"A", "x":1, "y":3.5}, {"label":"S", "x":2, "y":3.5}, {"label":"D", "x":3, "y":3.5}, {"label":"F", "x":4, "y":3.5}, {"label":"G", "x":5, "y":3.5}, {"label":"Backspace", "x":6, "y":3.5, "w":3.25}, {"label":"H", "x":9.25, "y":3.5}, {"label":"J", "x":10.25, "y":3.5}, {"label":"K", "x":11.25, "y":3.5}, {"label":"L", "x":12.25, "y":3.5}, {"label":":", "x":13.25, "y":3.5}, {"label":"\"", "x":14.25, "y":3.5}, {"label":"Enter", "x":15.25, "y":3.5, "w":2.25}, {"x":17.5, "y":3.5}, {"label":"4", "x":19.5, "y":3.5}, {"label":"5", "x":20.5, "y":3.5}, {"label":"6", "x":21.5, "y":3.5}, {"x":22.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5}, {"label":"Z", "x":1, "y":4.5}, {"label":"X", "x":2, "y":4.5}, {"label":"C", "x":3, "y":4.5}, {"label":"V", "x":4, "y":4.5}, {"label":"B", "x":5, "y":4.5}, {"label":"Enter", "x":6, "y":4.5, "w":3.25}, {"label":"N", "x":9.25, "y":4.5}, {"label":"M", "x":10.25, "y":4.5}, {"label":"<", "x":11.25, "y":4.5}, {"label":">", "x":12.25, "y":4.5}, {"label":"?", "x":13.25, "y":4.5}, {"label":"Shift", "x":14.25, "y":4.5}, {"x":16.5, "y":4.5}, {"label":"1", "x":19.5, "y":4.5}, {"label":"2", "x":20.5, "y":4.5}, {"label":"3", "x":21.5, "y":4.5}, {"label":"Enter", "x":22.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":2.25}, {"label":"Ctrl", "x":6, "y":5.5, "w":1.25}, {"label":"Shift", "x":7.25, "y":5.5, "w":1.25}, {"x":8.5, "y":5.5, "w":2.25}, {"label":"Alt", "x":10.75, "y":5.5, "w":2.25}, {"x":13, "y":5.5}, {"label":"Ctrl", "x":14, "y":5.5}, {"x":15.5, "y":5.5}, {"x":16.5, "y":5.5}, {"x":17.5, "y":5.5}, {"x":19.5, "y":5.5, "w":2}, {"x":21.5, "y":5.5}]
+ "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":"Delete", "x":14, "y":0, "w":2},
+ {"label":"Print Screen", "x":16, "y":0, "w":2},
+ {"label":"Esc", "x":19, "y":0},
+ {"label":"Tab", "x":20, "y":0},
+ {"label":"Backspace", "x":21, "y":0},
+ {"label":"Fn", "x":22, "y":0},
+ {"label":"~", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"@", "x":2, "y":1.5},
+ {"label":"#", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":9, "y":1.5},
+ {"label":"&", "x":10, "y":1.5},
+ {"label":"*", "x":11, "y":1.5},
+ {"label":"(", "x":12, "y":1.5},
+ {"label":")", "x":13, "y":1.5},
+ {"label":"_", "x":14, "y":1.5},
+ {"label":"+", "x":15, "y":1.5},
+ {"label":"Backspace", "x":16, "y":1.5, "w":2},
+ {"label":"Num Lock", "x":19, "y":1.5},
+ {"label":"/", "x":20, "y":1.5},
+ {"label":"*", "x":21, "y":1.5},
+ {"label":"-", "x":22, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5},
+ {"label":"Q", "x":1, "y":2.5},
+ {"label":"W", "x":2, "y":2.5},
+ {"label":"E", "x":3, "y":2.5},
+ {"label":"R", "x":4, "y":2.5},
+ {"label":"T", "x":5, "y":2.5},
+ {"label":"Y", "x":9, "y":2.5},
+ {"label":"U", "x":10, "y":2.5},
+ {"label":"I", "x":11, "y":2.5},
+ {"label":"O", "x":12, "y":2.5},
+ {"label":"P", "x":13, "y":2.5},
+ {"label":"{", "x":14, "y":2.5},
+ {"label":"}", "x":15, "y":2.5},
+ {"label":"|", "x":16, "y":2.5},
+ {"label":"Page Up", "x":17, "y":2.5},
+ {"label":"7", "x":19, "y":2.5},
+ {"label":"8", "x":20, "y":2.5},
+ {"label":"9", "x":21, "y":2.5},
+ {"label":"+", "x":22, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5},
+ {"label":"A", "x":1, "y":3.5},
+ {"label":"S", "x":2, "y":3.5},
+ {"label":"D", "x":3, "y":3.5},
+ {"label":"F", "x":4, "y":3.5},
+ {"label":"G", "x":5, "y":3.5},
+ {"label":"Backspace", "x":6, "y":3.5, "w":3},
+ {"label":"H", "x":9, "y":3.5},
+ {"label":"J", "x":10, "y":3.5},
+ {"label":"K", "x":11, "y":3.5},
+ {"label":"L", "x":12, "y":3.5},
+ {"label":":", "x":13, "y":3.5},
+ {"label":"\"", "x":14, "y":3.5},
+ {"label":"Enter", "x":15, "y":3.5, "w":2},
+ {"label":"Page Down", "x":17, "y":3.5},
+ {"label":"4", "x":19, "y":3.5},
+ {"label":"5", "x":20, "y":3.5},
+ {"label":"6", "x":21, "y":3.5},
+ {"label":"+", "x":22, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5},
+ {"label":"Z", "x":1, "y":4.5},
+ {"label":"X", "x":2, "y":4.5},
+ {"label":"C", "x":3, "y":4.5},
+ {"label":"V", "x":4, "y":4.5},
+ {"label":"B", "x":5, "y":4.5},
+ {"label":"Enter", "x":6, "y":4.5, "w":3},
+ {"label":"N", "x":9, "y":4.5},
+ {"label":"M", "x":10, "y":4.5},
+ {"label":"<", "x":11, "y":4.5},
+ {"label":">", "x":12, "y":4.5},
+ {"label":"?", "x":13, "y":4.5},
+ {"label":"Shift", "x":14, "y":4.5},
+ {"label":"Up", "x":16, "y":4.5},
+ {"label":"1", "x":19, "y":4.5},
+ {"label":"2", "x":20, "y":4.5},
+ {"label":"3", "x":21, "y":4.5},
+ {"label":"Enter", "x":22, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5},
+ {"label":"Win", "x":1, "y":5.5},
+ {"label":"Alt", "x":2, "y":5.5, "w":2},
+ {"label":"Space", "x":4, "y":5.5, "w":2},
+ {"label":"Ctrl", "x":6, "y":5.5, "w":1.5},
+ {"label":"Shift", "x":7.5, "y":5.5, "w":1.5},
+ {"label":"Space", "x":9, "y":5.5, "w":2},
+ {"label":"Alt", "x":11, "y":5.5, "w":2},
+ {"label":"Fn", "x":13, "y":5.5},
+ {"label":"Ctrl", "x":14, "y":5.5},
+ {"label":"Left", "x":15, "y":5.5},
+ {"label":"Down", "x":16, "y":5.5},
+ {"label":"Right", "x":17, "y":5.5},
+ {"label":"0", "x":19, "y":5.5, "w":2},
+ {"label":".", "x":21, "y":5.5}
+ ]
}
}
}
diff --git a/keyboards/xbows/knight/knight.c b/keyboards/xbows/knight/knight.c
index f697f23f97..dcc5035d51 100644
--- a/keyboards/xbows/knight/knight.c
+++ b/keyboards/xbows/knight/knight.c
@@ -11,12 +11,12 @@ void matrix_init_kb(void) {
void led_init_ports(void) {
setPinOutput(D1);
writePinHigh(D1);
- setPinOutput(E2);
- writePinHigh(E2);
+ setPinOutput(C7);
+ writePinHigh(C7);
}
bool led_update_kb(led_t led_state) {
if(led_update_user(led_state)) {
- writePin(E2, !led_state.caps_lock);
+ writePin(C7, !led_state.caps_lock);
writePin(D1, !led_state.num_lock);
}
return true;
diff --git a/keyboards/xbows/woody/keymaps/default/keymap.c b/keyboards/xbows/woody/keymaps/default/keymap.c
index 3010f568d9..383963fbf5 100644
--- a/keyboards/xbows/woody/keymaps/default/keymap.c
+++ b/keyboards/xbows/woody/keymaps/default/keymap.c
@@ -8,9 +8,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_INS, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT( /* FN */
- KC_GESC, 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_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_HOME, \
- KC_CAPS, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_END, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT)
+ KC_GESC, 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_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_HOME, \
+ KC_CAPS, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_END, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT)
};
diff --git a/keyboards/xd68/config.h b/keyboards/xd68/config.h
new file mode 100644
index 0000000000..f0a78c1fd2
--- /dev/null
+++ b/keyboards/xd68/config.h
@@ -0,0 +1,112 @@
+/*
+Copyright 2019 Michael Campbell
+
+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 0xCDCD
+#define PRODUCT_ID 0x6868
+#define DEVICE_VER 0x0001
+#define MANUFACTURER xiudi
+#define PRODUCT XD68
+#define DESCRIPTION XD68 65pc 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 { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN F5
+#define BACKLIGHT_LEVELS 6
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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
+
+/*
+ * 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
+
+/*
+ * 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
+
+// ws2812 options
+#define RGB_DI_PIN F6 // pin the DI on the ws2812 is hooked-up to
+#define RGBLIGHT_ANIMATIONS // run RGB animations
+#define RGBLED_NUM 12 // number of LEDs
+#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
+#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation
+#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
diff --git a/keyboards/xd68/info.json b/keyboards/xd68/info.json
new file mode 100644
index 0000000000..01b5bb201e
--- /dev/null
+++ b/keyboards/xd68/info.json
@@ -0,0 +1,156 @@
+{
+ "keyboard_name": "xd68",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_ansi": {
+ "key_count": 68,
+ "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":"Home", "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":"Menu", "x":10, "y":4},
+ {"label":"Ctrl", "x":11, "y":4},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Left", "x":13, "y":4},
+ {"label":"Down", "x":14, "y":4},
+ {"label":"Right", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_iso": {
+ "key_count": 69,
+ "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":"Home", "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":"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":"Menu", "x":10, "y":4},
+ {"label":"Ctrl", "x":11, "y":4},
+ {"label":"Fn", "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/xd68/keymaps/default/keymap.c b/keyboards/xd68/keymaps/default/keymap.c
new file mode 100644
index 0000000000..d9cfe5bf0d
--- /dev/null
+++ b/keyboards/xd68/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |App|Ctrl|FN |Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_65_ansi(
+ 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_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_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_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_APP, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * |~ `| F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
+ * |----------------------------------------------------------------|
+ * |RESET| |Up | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * |HUI |SAI|VAI|RGBMOD|BL-|BL |BL+| | | | |Play |V+ |Mut |
+ * |----------------------------------------------------------------|
+ * |HUD |SAD |VAD | RGB_Tog | | | | <M|V- |M> |
+ * `----------------------------------------------------------------'
+ */
+ [_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_DEL, KC_INS,
+ RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
+ RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, _______, _______, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+};
diff --git a/keyboards/xd68/keymaps/default/readme.md b/keyboards/xd68/keymaps/default/readme.md
new file mode 100644
index 0000000000..f26e1bd63f
--- /dev/null
+++ b/keyboards/xd68/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# XD68 layout for Default ANSI
+
+```
+make xd68:default
+```
diff --git a/keyboards/xd68/keymaps/default_iso/keymap.c b/keyboards/xd68/keymaps/default_iso/keymap.c
new file mode 100644
index 0000000000..428715a669
--- /dev/null
+++ b/keyboards/xd68/keymaps/default_iso/keymap.c
@@ -0,0 +1,48 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |PgUp|
+ * |------------------------------------------------------- -----|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgDn|
+ * |----------------------------------------------------------------|
+ * |Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|End |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |App|Ctrl |Fn|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_65_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_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_APP, KC_RCTL, MO(_FL), 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|
+ * |----------------------------------------------------------------|
+ * |RESET| | ↑ | | | | | | | | | | | | |
+ * |------------------------------------------------------- -----|
+ * | | ↠| ↓ | → | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * |HUI |SAI|VAI |RGBMOD| L+|LED| L-| | | | | |Play|V+|Mut|
+ * |----------------------------------------------------------------|
+ * |HUD |SAD |VAD | RGB_Tog | | | | <M | V-| M> |
+ * `----------------------------------------------------------------'
+ */
+ [_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, KC_DEL, KC_INS,
+ RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
+ RGB_HUD, RGB_SAD, RGB_VAD, RGB_TOG, _______, _______, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
diff --git a/keyboards/xd68/keymaps/default_iso/readme.md b/keyboards/xd68/keymaps/default_iso/readme.md
new file mode 100644
index 0000000000..d61877e77e
--- /dev/null
+++ b/keyboards/xd68/keymaps/default_iso/readme.md
@@ -0,0 +1,5 @@
+# XD68 layout for Default ISO
+
+```
+make xd68:default_iso
+```
diff --git a/keyboards/xd68/readme.md b/keyboards/xd68/readme.md
new file mode 100644
index 0000000000..a62d9c7c56
--- /dev/null
+++ b/keyboards/xd68/readme.md
@@ -0,0 +1,53 @@
+# XD68
+
+![Kitteh](https://i.imgur.com/qkA5Of5.jpg)
+
+65% board with USB-C, RGB underglow and backlight. Powered by ATM32U4.
+
+![Top View of XD68 Keyboard](https://i.imgur.com/OLkQQ17.jpg)
+
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: XD68
+* Hardware Availability: [KPRepublic on AliExpress](http://kprepublic.com/products/xiudi-xd68-pcb-65-custom-mechanical-keyboard-support-tkg-tools-underglow-rgb-pcb-programmed-kle-lots-of-layouts)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xd68:default
+ make xd68:default_iso # default ISO UK layout
+
+## Layouts
+
+### ANSI
+
+```
+,----------------------------------------------------------------.
+|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
+|----------------------------------------------------------------|
+|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
+|----------------------------------------------------------------|
+|CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
+|----------------------------------------------------------------|
+|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
+|----------------------------------------------------------------|
+|Ctrl|Win |Alt | Space |App|Ctrl|FN |Lef|Dow|Rig |
+`----------------------------------------------------------------'
+```
+
+### ISO-UK
+
+```
+,----------------------------------------------------------------.
+|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
+|----------------------------------------------------------------|
+|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |PgUp|
+|------------------------------------------------------- -----|
+|CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgDn|
+|----------------------------------------------------------------|
+|Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|End |
+|----------------------------------------------------------------|
+|Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+`----------------------------------------------------------------'
+```
+
+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/xd68/rules.mk b/keyboards/xd68/rules.mk
new file mode 100644
index 0000000000..c8b7950c91
--- /dev/null
+++ b/keyboards/xd68/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# QMK Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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 = 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 = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+UNICODE_ENABLE = no # Unicode
+
+LAYOUTS = 65_ansi 65_iso \ No newline at end of file
diff --git a/keyboards/xd68/xd68.c b/keyboards/xd68/xd68.c
new file mode 100755
index 0000000000..2a5a52bdae
--- /dev/null
+++ b/keyboards/xd68/xd68.c
@@ -0,0 +1,22 @@
+#include "xd68.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 led_init_ports(void) {
+ // * Set our LED pins as output
+ setPinOutput(B2);
+ writePinHigh(B2);
+}
+
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(B2, !led_state.caps_lock);
+ }
+ return true;
+}
+
diff --git a/keyboards/xd68/xd68.h b/keyboards/xd68/xd68.h
new file mode 100755
index 0000000000..2916d72d40
--- /dev/null
+++ b/keyboards/xd68/xd68.h
@@ -0,0 +1,69 @@
+
+#pragma once
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+/* XD68 ANSI layout
+ * ,----------------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
+ * |----------------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e |
+ * |----------------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | 2e |
+ * |----------------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
+ * |----------------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 48| 4a| 4b| 4c| 4d| 4e |
+ * `----------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_65_ansi( \
+ 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, k45, k48, 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, XXX, k2d, k2e}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, k4b, XXX, k48, k4a, k4c, k4d, k4e} \
+}
+
+/* XD68 ISO layout
+ * ,----------------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
+ * |----------------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| | 1e |
+ * |------------------------------------------------------. -----|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c| 2d| 2e |
+ * |----------------------------------------------------------------|
+ * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
+ * |----------------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 48| 4a| 4b| 4c| 4d| 4e |
+ * `----------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_65_iso( \
+ 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, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k45, k48, 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, XXX, 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, k3b, k3c, k3d, k3e}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, k4b, XXX, k48, k4a, k4c, k4d, k4e} \
+}
diff --git a/keyboards/xd84/custom_matrix_helper.c b/keyboards/xd84/custom_matrix_helper.c
deleted file mode 100644
index a4c5b6afa5..0000000000
--- a/keyboards/xd84/custom_matrix_helper.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright 2019
- *
- * 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 <stdint.h>
-#include <stdbool.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "debounce.h"
-#include "quantum.h"
-
-//_____COMMON__________________________________________________________________
-// user-defined overridable functions
-__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) {}
-
-
-//_____COULD BE COMMON_________________________________________________________
-/* matrix state(1:on, 0:off) */
-/*static*/ matrix_row_t raw_matrix[MATRIX_ROWS];
-/*static*/ matrix_row_t matrix[MATRIX_ROWS];
-
-#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
-
-__attribute__ ((weak))
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-__attribute__ ((weak))
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-__attribute__ ((weak))
-matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-__attribute__ ((weak))
-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;
-}
-
-__attribute__ ((weak))
-void matrix_print(void) {
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-
-//_____CUSTOM MATRIX 'LITE'____________________________________________________
-__attribute__ ((weak))
-void custom_matrix_init(void) {
-}
-
-__attribute__ ((weak))
-bool custom_matrix_scan(matrix_row_t current_matrix[]) {
- bool changed = true;
- return changed;
-}
-
-__attribute__ ((weak))
-void matrix_init(void) {
-
- custom_matrix_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- raw_matrix[i] = 0;
- matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
-
- matrix_init_quantum();
-}
-
-__attribute__ ((weak))
-uint8_t matrix_scan(void) {
- bool changed = custom_matrix_scan(raw_matrix);
-
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
- matrix_scan_quantum();
- return 1;
-}
diff --git a/keyboards/xd84/matrix.c b/keyboards/xd84/matrix.c
index 4cb5544ca4..92b8ff8546 100644
--- a/keyboards/xd84/matrix.c
+++ b/keyboards/xd84/matrix.c
@@ -30,65 +30,69 @@
//_____Utility funcs___________________________________________________________
static void init_pins(void) {
- // init all cols high - IC2 all input
- pca9555_set_config(IC2, PCA9555_PORT0, ALL_INPUT);//same as initial state
- pca9555_set_config(IC2, PCA9555_PORT1, ALL_INPUT);//same as initial state
+ // init all cols high - IC2 all input
+ pca9555_set_config(IC2, PCA9555_PORT0, ALL_INPUT); // same as initial state
+ pca9555_set_config(IC2, PCA9555_PORT1, ALL_INPUT); // same as initial state
- // init all rows - IC1 port0 input
- pca9555_set_config(IC1, PCA9555_PORT0, ALL_INPUT);//same as initial state
+ // init all rows - IC1 port0 input
+ pca9555_set_config(IC1, PCA9555_PORT0, ALL_INPUT); // same as initial state
+ pca9555_set_output(IC1, PCA9555_PORT0, ALL_LOW);
}
static void select_row(uint8_t row) {
- // For the XD84 all rows are on the same IC and port
- // so its safe enough to assume here row == pin
- uint8_t pin = row;
- uint8_t mask = 1 << pin;
-
- pca9555_set_output(IC1, PCA9555_PORT0, ALL_HIGH & (~mask));
- pca9555_set_config(IC1, PCA9555_PORT0, ALL_INPUT & (~mask));
+ // For the XD84 all rows are on the same IC and port
+ // so its safe enough to assume here row == pin
+ uint8_t pin = row;
+ uint8_t mask = 1 << pin;
+
+ // we configure output once in init, as pca9555 remembers state when flipping between input/output
+ // pca9555_set_output(IC1, PCA9555_PORT0, ALL_HIGH & (~mask));
+ pca9555_set_config(IC1, PCA9555_PORT0, ALL_INPUT & (~mask));
}
static uint16_t read_cols(void) {
- uint16_t state_1 = pca9555_readPins(IC2, PCA9555_PORT0);
- uint16_t state_2 = pca9555_readPins(IC2, PCA9555_PORT1);
-
- // For the XD84 all cols are on the same IC and mapped sequentially
- // while this technically gives 16 column reads,
- // the 16th column can never be set so is safely ignored
- return ~((state_2 << 8) | state_1);
+ // uint16_t state_1 = pca9555_readPins(IC2, PCA9555_PORT0);
+ // uint16_t state_2 = pca9555_readPins(IC2, PCA9555_PORT1);
+ uint16_t state = pca9555_readAllPins(IC2);
+
+ // For the XD84 all cols are on the same IC and mapped sequentially
+ // while this technically gives 16 column reads,
+ // the 16th column can never be set so is safely ignored
+ // return ~((state_2 << 8) | state_1);
+ return ~state;
}
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];
+ // 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;
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
- // Select row and wait for row selection to stabilize
- select_row(current_row);
- wait_us(30);
+ // Select row and wait for row selection to stabilize
+ select_row(current_row);
+ // Skip the wait_us(30); as i2c is slow enough to debounce the io changes
- current_matrix[current_row] = read_cols();
+ current_matrix[current_row] = read_cols();
- // No need to Unselect row as the next `select_row` will blank everything
+ // No need to Unselect row as the next `select_row` will blank everything
- return (last_row_value != current_matrix[current_row]);
+ return (last_row_value != current_matrix[current_row]);
}
//_____CUSTOM MATRIX IMPLEMENTATION____________________________________________________
-void custom_matrix_init(void) {
- pca9555_init(IC1);
- pca9555_init(IC2);
+void matrix_init_custom(void) {
+ pca9555_init(IC1);
+ pca9555_init(IC2);
- init_pins();
+ init_pins();
}
-bool custom_matrix_scan(matrix_row_t current_matrix[]) {
- bool changed = false;
- for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
- changed |= read_cols_on_row(current_matrix, current_row);
- }
- return changed;
-} \ No newline at end of file
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(current_matrix, current_row);
+ }
+ return changed;
+}
diff --git a/keyboards/xd84/rules.mk b/keyboards/xd84/rules.mk
index d9d316c133..13e1b4ba37 100644
--- a/keyboards/xd84/rules.mk
+++ b/keyboards/xd84/rules.mk
@@ -34,10 +34,10 @@ HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
LINK_TIME_OPTIMIZATION_ENABLE = yes
# custom matrix setup
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = lite
VPATH += drivers/gpio
-SRC += custom_matrix_helper.c pca9555.c matrix.c
+SRC += pca9555.c matrix.c
QUANTUM_LIB_SRC += i2c_master.c
LAYOUTS = 75_ansi 75_iso
diff --git a/keyboards/xd96/custom_matrix_helper.c b/keyboards/xd96/custom_matrix_helper.c
deleted file mode 100644
index a4c5b6afa5..0000000000
--- a/keyboards/xd96/custom_matrix_helper.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright 2019
- *
- * 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 <stdint.h>
-#include <stdbool.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "debounce.h"
-#include "quantum.h"
-
-//_____COMMON__________________________________________________________________
-// user-defined overridable functions
-__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) {}
-
-
-//_____COULD BE COMMON_________________________________________________________
-/* matrix state(1:on, 0:off) */
-/*static*/ matrix_row_t raw_matrix[MATRIX_ROWS];
-/*static*/ matrix_row_t matrix[MATRIX_ROWS];
-
-#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
-
-__attribute__ ((weak))
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-__attribute__ ((weak))
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-__attribute__ ((weak))
-matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-__attribute__ ((weak))
-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;
-}
-
-__attribute__ ((weak))
-void matrix_print(void) {
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-
-//_____CUSTOM MATRIX 'LITE'____________________________________________________
-__attribute__ ((weak))
-void custom_matrix_init(void) {
-}
-
-__attribute__ ((weak))
-bool custom_matrix_scan(matrix_row_t current_matrix[]) {
- bool changed = true;
- return changed;
-}
-
-__attribute__ ((weak))
-void matrix_init(void) {
-
- custom_matrix_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- raw_matrix[i] = 0;
- matrix[i] = 0;
- }
-
- debounce_init(MATRIX_ROWS);
-
- matrix_init_quantum();
-}
-
-__attribute__ ((weak))
-uint8_t matrix_scan(void) {
- bool changed = custom_matrix_scan(raw_matrix);
-
- debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
-
- matrix_scan_quantum();
- return 1;
-}
diff --git a/keyboards/xd96/matrix.c b/keyboards/xd96/matrix.c
index e8fd850edb..8cecc79c26 100644
--- a/keyboards/xd96/matrix.c
+++ b/keyboards/xd96/matrix.c
@@ -80,14 +80,14 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
//_____CUSTOM MATRIX IMPLEMENTATION____________________________________________________
-void custom_matrix_init(void) {
+void matrix_init_custom(void) {
pca9555_init(IC1);
pca9555_init(IC2);
init_pins();
}
-bool custom_matrix_scan(matrix_row_t current_matrix[]) {
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
bool changed = false;
for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
changed |= read_cols_on_row(current_matrix, current_row);
diff --git a/keyboards/xd96/rules.mk b/keyboards/xd96/rules.mk
index 2079e436c0..9afd4eec4e 100644
--- a/keyboards/xd96/rules.mk
+++ b/keyboards/xd96/rules.mk
@@ -34,8 +34,8 @@ HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
LINK_TIME_OPTIMIZATION_ENABLE = yes
# custom matrix setup
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = lite
VPATH += drivers/gpio
-SRC += custom_matrix_helper.c pca9555.c matrix.c
+SRC += pca9555.c matrix.c
QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/xelus/dawn60/config.h b/keyboards/xelus/dawn60/config.h
new file mode 100644
index 0000000000..7691bb301f
--- /dev/null
+++ b/keyboards/xelus/dawn60/config.h
@@ -0,0 +1,142 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * 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 0x5845 // XE
+#define PRODUCT_ID 0x0060 // Dawn60
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Xelus
+#define PRODUCT Dawn60
+#define DESCRIPTION Dawn60
+
+// key matrix size
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+//no underglow - prototype
+//#define MATRIX_ROW_PINS { B1, B3, B7, F6, F7 }
+//#define MATRIX_COL_PINS { B0, D5, B2, F5, D2, D3, D4, D6, D7, B4, B5, B6, C6, C7 }
+//#define UNUSED_PINS
+
+//underglow
+#define MATRIX_ROW_PINS { B1, B3, F1, F6, F7 }
+#define MATRIX_COL_PINS { B0, D5, B2, F5, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS
+
+// IS31FL3731 driver
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 64
+
+// COL2ROW or ROW2COL
+#define DIODE_DIRECTION COL2ROW
+
+// Set 0 if debouncing isn't 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
+
+/*
+ * 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 RGB_BACKLIGHT_ENABLED 1
+
+// This conditionally compiles the backlight code for Dawn60 specifics
+#define RGB_BACKLIGHT_DAWN60
+
+//RGB Underglow defines
+#define RGB_DI_PIN F0
+#define WS2812_LED_TOTAL 20
+
+#define RGB_UNDERGLOW_ALPHA_TOP_START 0
+#define RGB_UNDERGLOW_ALPHA_TOP_END 6
+#define RGB_UNDERGLOW_ALPHA_BOT_START 12
+#define RGB_UNDERGLOW_ALPHA_BOT_END 15
+
+// enable/disable LEDs based on layout
+// switch between split backspace (1) or normal backspace(0)
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+// switch between Tsangan (1) or Arrows Bottom Row (0)
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+// switch between standard split rshift (0) or arrows r shift (1)
+// .------------------. .-------------------.
+// | ? | Shift | Fn | vs | Shift | Up | Fn |
+// `------------------' `-------------------'
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 1
+
+//not used
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
+
+// the default brightness
+#define RGB_BACKLIGHT_BRIGHTNESS 255
+
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
+
+// the default effect speed (0-3)
+#define RGB_BACKLIGHT_EFFECT_SPEED 0
+
+// the default color1 and color2
+#define RGB_BACKLIGHT_COLOR_1 { .h = 0, .s = 255 }
+#define RGB_BACKLIGHT_COLOR_2 { .h = 127, .s = 255 }
+
+// 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 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011111000011111
+
+#define RGB_BACKLIGHT_CAPS_LOCK_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+#define RGB_BACKLIGHT_LAYER_1_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+
+// Backlight config starts after VIA's EEPROM usage,
+// dynamic keymaps start after this.
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
diff --git a/keyboards/xelus/dawn60/dawn60.c b/keyboards/xelus/dawn60/dawn60.c
new file mode 100644
index 0000000000..bce6eea9df
--- /dev/null
+++ b/keyboards/xelus/dawn60/dawn60.c
@@ -0,0 +1,18 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * 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 RGB_BACKLIGHT_DAWN60
+#error RGB_BACKLIGHT_DAWN60 not defined, you done goofed somehao, brah
+#endif
diff --git a/keyboards/xelus/dawn60/dawn60.h b/keyboards/xelus/dawn60/dawn60.h
new file mode 100644
index 0000000000..b1de35a7eb
--- /dev/null
+++ b/keyboards/xelus/dawn60/dawn60.h
@@ -0,0 +1,36 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * 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"
+#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
+#include "via.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_60_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ 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, K3B, K3C, K3D, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { 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, XXX, K3B, K3C, K3D }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, K4C, K4D } \
+}
diff --git a/keyboards/xelus/dawn60/keymaps/default/config.h b/keyboards/xelus/dawn60/keymaps/default/config.h
new file mode 100644
index 0000000000..8f4e8ac4c2
--- /dev/null
+++ b/keyboards/xelus/dawn60/keymaps/default/config.h
@@ -0,0 +1,17 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+// switch between split backspace (1) or normal backspace(0)
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+// switch between Tsangan (1) or Arrows Bottom Row (0)
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+// switch between standard split rshift (0) or arrows r shift (1)
+// .------------------. .-------------------.
+// | ? | Shift | Fn | vs | Shift | Up | Fn |
+// `------------------' `-------------------'
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
diff --git a/keyboards/xelus/dawn60/keymaps/default/keymap.c b/keyboards/xelus/dawn60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..522997342c
--- /dev/null
+++ b/keyboards/xelus/dawn60/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+// Default layout for Dawn60
+#include QMK_KEYBOARD_H
+
+// RGB-specific keys:
+// EF_INC, EF_DEC, // next/previous backlight effect
+// H1_INC, H1_DEC, // Color 1 hue increase/decrease
+// S1_INC, S1_DEC, // Color 1 saturation increase/decrease
+// H2_INC, H2_DEC, // Color 2 hue increase/decrease
+// S2_INC, S2_DEC, // Color 2 saturation increase/decrease
+// BR_INC, BR_DEC, // backlight brightness increase/decrease
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Default layer: Pressing caps-lock momentarily switches to Layer 1.
+// This is the default layer. Pressing an empty keycode on another layer will take you here.
+ [0] = LAYOUT_60_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_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_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_DEL ,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_60_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_CAPS, KC_TRNS, KC_UP , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE,
+ 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_PSCR,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [2] = LAYOUT_60_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/xelus/dawn60/keymaps/via/config.h b/keyboards/xelus/dawn60/keymaps/via/config.h
new file mode 100644
index 0000000000..45c7e511f1
--- /dev/null
+++ b/keyboards/xelus/dawn60/keymaps/via/config.h
@@ -0,0 +1,17 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+// switch between split backspace (1) or normal backspace(0)
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+
+// switch between Tsangan (1) or Arrows Bottom Row (0)
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+// switch between standard split rshift (0) or arrows r shift (1)
+// .------------------. .-------------------.
+// | ? | Shift | Fn | vs | Shift | Up | Fn |
+// `------------------' `-------------------'
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
diff --git a/keyboards/xelus/dawn60/keymaps/via/keymap.c b/keyboards/xelus/dawn60/keymaps/via/keymap.c
new file mode 100644
index 0000000000..522997342c
--- /dev/null
+++ b/keyboards/xelus/dawn60/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+// Default layout for Dawn60
+#include QMK_KEYBOARD_H
+
+// RGB-specific keys:
+// EF_INC, EF_DEC, // next/previous backlight effect
+// H1_INC, H1_DEC, // Color 1 hue increase/decrease
+// S1_INC, S1_DEC, // Color 1 saturation increase/decrease
+// H2_INC, H2_DEC, // Color 2 hue increase/decrease
+// S2_INC, S2_DEC, // Color 2 saturation increase/decrease
+// BR_INC, BR_DEC, // backlight brightness increase/decrease
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Default layer: Pressing caps-lock momentarily switches to Layer 1.
+// This is the default layer. Pressing an empty keycode on another layer will take you here.
+ [0] = LAYOUT_60_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_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_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_DEL ,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_60_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_CAPS, KC_TRNS, KC_UP , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE,
+ 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_PSCR,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [2] = LAYOUT_60_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/xelus/dawn60/keymaps/via/rules.mk b/keyboards/xelus/dawn60/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/xelus/dawn60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/xelus/dawn60/readme.md b/keyboards/xelus/dawn60/readme.md
new file mode 100644
index 0000000000..3409bac1ee
--- /dev/null
+++ b/keyboards/xelus/dawn60/readme.md
@@ -0,0 +1,13 @@
+# Dawn60
+
+An in-switch RGB LED keyboard with RGB underglow.
+
+* Keyboard Maintainer: [Xelus22](https://github.com/Xelus22)
+* Hardware Supported: Dawn60
+* Hardware Availability: [Keyboard Treehouse](https://keyboardtreehouse.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xelus/dawn60: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/xelus/dawn60/rules.mk b/keyboards/xelus/dawn60/rules.mk
new file mode 100644
index 0000000000..3ac5f9977d
--- /dev/null
+++ b/keyboards/xelus/dawn60/rules.mk
@@ -0,0 +1,49 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+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
+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
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. - We have custom RGB underglow
+
+CIE1931_CURVE = yes
+
+
+# project specific files
+SRC += keyboards/wilba_tech/wt_main.c \
+ keyboards/wilba_tech/wt_rgb_backlight.c \
+ quantum/color.c \
+ drivers/issi/is31fl3731.c \
+ ws2812.c
+
+QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/xiaomi/mk02/README.md b/keyboards/xiaomi/mk02/README.md
new file mode 100644
index 0000000000..2dea99ff19
--- /dev/null
+++ b/keyboards/xiaomi/mk02/README.md
@@ -0,0 +1,104 @@
+# Xiaomi Yuemi Pro MK02
+
+A tenkeyless keyboard sold under Xiaomi brand. It uses an STM32F072C8T6 microcontroller and can be flashed with QMK.
+
+LED backlight is currently not supported.
+
+* Keyboard Maintainer: [@xyzz](https://github.com/xyzz)
+* Hardware Supported: Xiaomi Yuemi Pro MK02
+* Hardware Availability: Aliexpress
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xiaomi/mk02: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).
+
+## Installation
+
+Please understand that following these steps will void your warranty and might irrecoverably damage your keyboard.
+
+### Installing the bootloader
+
+You only need to do this step once (unless you destroy your user bootloader which is not possible so long as you follow these steps correctly).
+
+Unplug the keyboard. Disassemble the keyboard and look at the area around the MCU. Make sure your keyboard looks the same as in the picture and that the chip says STM32F072C8T6 on it:
+
+![mcu](https://i.imgur.com/HM8tUWU.jpg)
+
+Using a piece of wire, connect TP28 (indicated in red) and 3v3 (square pad indicated in green) together with tweezers or a piece of wire. Make sure to not touch the case with your wire when shorting!!! Don't push it all the way through the hole.
+
+Plug the keyboard in with the wire connected. You should see the following device appear:
+```
+[5067851.560317] usb 2-1.5.3.1: new full-speed USB device number 6 using ehci-pci
+[5067851.670006] usb 2-1.5.3.1: New USB device found, idVendor=0483, idProduct=df11, bcdDevice=22.00
+[5067851.670010] usb 2-1.5.3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
+[5067851.670013] usb 2-1.5.3.1: Product: STM32 BOOTLOADER
+[5067851.670015] usb 2-1.5.3.1: Manufacturer: STMicroelectronics
+[5067851.670017] usb 2-1.5.3.1: SerialNumber: FFFFFFFEFFFF
+```
+
+If you don't see this, you did something wrong. Disconnect the keyboard and try again.
+
+If you do see this, remove the wire before continuing.
+
+Make a backup of internal flash memory in case you'd like to revert to the original firmware in the future:
+```
+dfu-util -d 0483:df11 -a 0 -s 0x08000000 -U flash-backup.bin
+```
+
+Ensure the dumped flash is correct:
+```
+strings flash.bin | grep KB
+```
+(You should see 2 entries of "USB KB")
+
+Finally, flash the bootloader ([jumploader-xiaomi_mk02-padded.bin](https://github.com/xyzz/stm32f072-keyboard-jumploader/releases/download/r1/jumploader-xiaomi_mk02-padded.bin)) with:
+```
+dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D jumploader-xiaomi_mk02-padded.bin
+```
+
+At this point the keyboard should reboot into bootloader mode; if it doesn't, wait a couple seconds and replug the USB cable.
+
+### Installing the firmware
+
+To install QMK, first boot into bootloader mode as detailed below. When the keyboard boots in bootloader mode, you should see the following device:
+
+```
+[5067851.560317] usb 2-1.5.3.1: new full-speed USB device number 6 using ehci-pci
+[5067851.670006] usb 2-1.5.3.1: New USB device found, idVendor=0483, idProduct=df11, bcdDevice=22.00
+[5067851.670010] usb 2-1.5.3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
+[5067851.670013] usb 2-1.5.3.1: Product: STM32 BOOTLOADER
+[5067851.670015] usb 2-1.5.3.1: Manufacturer: STMicroelectronics
+[5067851.670017] usb 2-1.5.3.1: SerialNumber: FFFFFFFEFFFF
+```
+
+Flash the keyboard normally by executing:
+
+```
+make xiaomi/mk02:default:flash
+```
+
+Warning! If you flash the firmware manually by using `dfu-util`, make sure to use the following arguments:
+
+```
+-d 0483:df11 -a 0 -s 0x08002000:leave
+```
+
+If you don't, you'll blow away the user bootloader and will have to repeat the installation steps.
+
+## Booting into bootloader
+
+To boot into bootloader, do either of the following:
+- map a RESET key in your keymap and tap it, or
+- hold spacebar while plugging in the keyboard.
+
+If neither of these work, you must have blown away the user bootloader somehow and will need to repeat the installation guide from the first step.
+
+## Restoring the original firmware
+
+If you wish to restore the original firmware, boot into the bootloader and then execute:
+
+```
+dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D flash-backup.bin
+```
diff --git a/keyboards/xiaomi/mk02/chconf.h b/keyboards/xiaomi/mk02/chconf.h
new file mode 100644
index 0000000000..99fa8ce398
--- /dev/null
+++ b/keyboards/xiaomi/mk02/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/xiaomi/mk02/config.h b/keyboards/xiaomi/mk02/config.h
new file mode 100644
index 0000000000..14ce3875b1
--- /dev/null
+++ b/keyboards/xiaomi/mk02/config.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2015 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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0B91
+#define DEVICE_VER 0x0001
+/* in python2: list(u"whatever".encode('utf-16-le')) */
+/* at most 32 characters or the ugly hack in usb_main.c borks */
+#define MANUFACTURER Xiaomi
+#define PRODUCT MK02
+#define DESCRIPTION Yuemi Pro MK02
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+#define MATRIX_ROW_PINS { A3, A4, A5, A6, A7, B0 }
+#define MATRIX_COL_PINS { B13, B14, B15, A15, B3, B4, B5, B6, B7, B8, B9, C14, C15, B11, A1, A2, B12 }
+#define DIODE_DIRECTION ROW2COL
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/*
+ * 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/xiaomi/mk02/halconf.h b/keyboards/xiaomi/mk02/halconf.h
new file mode 100644
index 0000000000..9bcb477c03
--- /dev/null
+++ b/keyboards/xiaomi/mk02/halconf.h
@@ -0,0 +1,354 @@
+/*
+ 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 TRUE
+#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 TRUE
+#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/xiaomi/mk02/keymaps/default/keymap.c b/keyboards/xiaomi/mk02/keymaps/default/keymap.c
new file mode 100644
index 0000000000..cea3aae57c
--- /dev/null
+++ b/keyboards/xiaomi/mk02/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2019 Ryota Goto
+
+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_tkl_ansi( /* Base */
+ 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, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+};
diff --git a/keyboards/xiaomi/mk02/ld/STM32F072_0x2000_bootloader.ld b/keyboards/xiaomi/mk02/ld/STM32F072_0x2000_bootloader.ld
new file mode 100644
index 0000000000..65441f471a
--- /dev/null
+++ b/keyboards/xiaomi/mk02/ld/STM32F072_0x2000_bootloader.ld
@@ -0,0 +1,85 @@
+/*
+ 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.
+*/
+
+/*
+ * STM32F072x8 memory setup - with a 0x2000 user bootloader
+ */
+MEMORY
+{
+ flash0 : org = 0x08002000, len = 64k - 0x2000
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 16k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/xiaomi/mk02/mcuconf.h b/keyboards/xiaomi/mk02/mcuconf.h
new file mode 100644
index 0000000000..43fe0a462e
--- /dev/null
+++ b/keyboards/xiaomi/mk02/mcuconf.h
@@ -0,0 +1,176 @@
+/*
+ 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
+// #define STM32F070xB
+
+/*
+ * 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_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#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 TRUE
+#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 TRUE
+#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_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#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/xiaomi/mk02/mk02.c b/keyboards/xiaomi/mk02/mk02.c
new file mode 100644
index 0000000000..d3ecc155f1
--- /dev/null
+++ b/keyboards/xiaomi/mk02/mk02.c
@@ -0,0 +1,8 @@
+#include "mk02.h"
+
+void bootloader_jump(void) {
+ uint32_t *magic_address = (void*)0x20000FFC;
+ *magic_address = 0x626c6472;
+
+ NVIC_SystemReset();
+}
diff --git a/keyboards/xiaomi/mk02/mk02.h b/keyboards/xiaomi/mk02/mk02.h
new file mode 100644
index 0000000000..12a7c8e1ad
--- /dev/null
+++ b/keyboards/xiaomi/mk02/mk02.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_tkl_ansi( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K412, K414, \
+ K500, K501, K502, K505, K509, K510, K511, K512, K513, K514, K515 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015, K016 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, KC_NO, K412, KC_NO, K414, KC_NO, KC_NO }, \
+ { K500, K501, K502, KC_NO, KC_NO, K505, KC_NO, KC_NO, KC_NO, K509, K510, K511, K512, K513, K514, K515, KC_NO } \
+}
diff --git a/keyboards/xiaomi/mk02/rules.mk b/keyboards/xiaomi/mk02/rules.mk
new file mode 100644
index 0000000000..93ff487dc8
--- /dev/null
+++ b/keyboards/xiaomi/mk02/rules.mk
@@ -0,0 +1,17 @@
+# MCU name
+MCU = STM32F072
+MCU_LDSCRIPT = STM32F072_0x2000_bootloader
+
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08002000:leave
+DFU_SUFFIX_ARGS = -v 0483 -p DF11
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover
+CUSTOM_MATRIX = no # Custom matrix file
+# BACKLIGHT_ENABLE = yes # This is broken on 072 for some reason
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/ymd75/README.md b/keyboards/ymd75/README.md
index d1c4e95ae7..9a618c5943 100644
--- a/keyboards/ymd75/README.md
+++ b/keyboards/ymd75/README.md
@@ -1,83 +1,19 @@
-YMD75 / MT84
-==========================
+# YMD75 / MT84
-This is a port of the QMK firmware for boards that are based on the
-ps2avrGB firmware, like the [ps2avrGB keyboard] (https://www.keyclack.com/product/gb-ps2avrgb/), for use on the YMD75, from YMDK. YMDK sell the board and name it "YMD75", however the PCB has "MT84" printed on both sides.
+75% keyboard from YMDK. YMDK sell the board and name it "YMD75", however the PCB has "MT84" printed on both sides.
-Most of the code was taken and amended from YMD96 and my port JJ50, which in itself was taken from ps2avrGB and amended by Andrew Novak.
-
-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.
-
-Hardware Supported: YMD75/MT84 with the ATmega32a chip.
-Hardware Availability: The YMD75/MT84 PCB is available from YMDK on AliExpress and suchlike.
-
-This version by Wayne K Jones (github.com/WarmCatUK)
-
-## Installing and Building
+* Keyboard Maintainer: [Wayne K Jones](github.com/WarmCatUK)
+* Hardware Supported: YMD75/MT84 with the ATmega32a chip.
+* Hardware Availability: <https://www.aliexpress.com/item/32812690592.html>
Make example for this keyboard (after setting up your build environment):
-```
-$ 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/#/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
-USB report options are supported.
-In addition you may need 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
-```
-
-In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
-the bootloader, you'll need Python 2 with PyUSB installed:
-
-```
-$ pip install pyusb
-```
-
-If you prefer, you can just build it and flash the firmware directly with
-`bootloadHID` if you boot the board while holding down `Left Control` to keep it
-in the bootloader:
-
-```
-$ make ymd75
-$ bootloadHID -r ymd75_default.hex
-```
-I dont use windows personally, but the following is from ymd96 regarding flashing the atmega32a:
-
-Since the YMD75/MT84 uses an ATmega32a chip instead of the 32u4, you need to download [HIDBootFlash v.1.0](http://vusb.wikidot.com/project:hidbootflash) for Windows. If anyone knows of a Linux/Mac bootflasher that works, edit this readme!
-On Windows, I use [MINGw](http://www.mingw.org/) to compile the keymaps. On Linux or OSX you can simply use the terminal.
-
-Once you have those two pieces of software:
-Build the keyboard with
-```
-$ make ymd75:default
-```
-If you make your own layout, change the `default` word to whatever your layout is.
-
-And flash the compiled hex file with `HIDBootFlash`. Simply put the board in flashing mode by plugging it in while holding the key below the top right key, and click `find device`. Then you can specify the .hex file and flash it to the device.
-
-
-## Troubleshooting
+ make ymd75:default
-1. Try plugging the board in while pressing `Backspace` (`Key below the top right 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.
-3. If you get an error such as "Resource Unavailable" when attemting to flash on Linux, you may want to compile and run `tools/usb_detach.c`. See `tools/README.md` for more info.
-4. I was occasionally finding that I wasn't flashing changes that I was making to my keymap. If that happens, remove the previous build and simply force rebuild by making with:
-```
-$ rm ymd75_default.hex
-$ make -B ymd75:default
-$ make -B ymd75:default:program
-```
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+ make ymd75:default:flash
+**Reset Key**: Hold down the key located at *Key below the top right key*, commonly programmed as *Backspace* while plugging in the keyboard.
+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/ymd75/config.h b/keyboards/ymd75/config.h
index a56a1b54b8..00f6bd292c 100644
--- a/keyboards/ymd75/config.h
+++ b/keyboards/ymd75/config.h
@@ -35,7 +35,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 15
-#define DIODE_DIRECTION ROW2COL
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_LEVELS 12
diff --git a/keyboards/ymd75/matrix.c b/keyboards/ymd75/matrix.c
deleted file mode 100644
index a726ee889f..0000000000
--- a/keyboards/ymd75/matrix.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-Modified 2018 by Wayne K Jones <github.com/WarmCatUK>
-
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
- matrix_init_quantum(); // missing from original port by Luiz
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
- matrix_scan_quantum(); // also missing in original PS2AVRGB implementation
- //matrix_scan_user();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/ymd75/rules.mk b/keyboards/ymd75/rules.mk
index 0c1c9110ca..eb41e19cf3 100644
--- a/keyboards/ymd75/rules.mk
+++ b/keyboards/ymd75/rules.mk
@@ -33,6 +33,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
#OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c backlight.c
+SRC = backlight.c
diff --git a/keyboards/ymd75/ymd75.c b/keyboards/ymd75/ymd75.c
index 74f7c6a493..e32a745bfd 100644
--- a/keyboards/ymd75/ymd75.c
+++ b/keyboards/ymd75/ymd75.c
@@ -20,16 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "backlight.h"
#include "backlight_custom.h"
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
void backlight_init_ports(void) {
diff --git a/keyboards/ymd75/ymd75.h b/keyboards/ymd75/ymd75.h
index e17dedeb31..0c9fff58cb 100644
--- a/keyboards/ymd75/ymd75.h
+++ b/keyboards/ymd75/ymd75.h
@@ -25,8 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "keycode.h"
#include "action.h"
-void matrix_init_user(void);
-
#define LAYOUT( \
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \
diff --git a/keyboards/ymd96/config.h b/keyboards/ymd96/config.h
index 5c496d8d25..1232f90c28 100644
--- a/keyboards/ymd96/config.h
+++ b/keyboards/ymd96/config.h
@@ -31,7 +31,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 15
-//#define DIODE_DIRECTION ROW2COL
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
//#define RGB_DI_PIN C4
/* COL2ROW or ROW2COL */
diff --git a/keyboards/ymd96/matrix.c b/keyboards/ymd96/matrix.c
deleted file mode 100644
index 2932976dde..0000000000
--- a/keyboards/ymd96/matrix.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_set_row_status(uint8_t row);
-uint8_t bit_reverse(uint8_t x);
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum(); // missing from original port by Luiz
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum(); // also missing in original PS2AVRGB implementation
-
- return 1;
-}
-
-// declarations
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/ymd96/readme.md b/keyboards/ymd96/readme.md
index 9cb3760582..59d6b73379 100644
--- a/keyboards/ymd96/readme.md
+++ b/keyboards/ymd96/readme.md
@@ -1,63 +1,19 @@
-YMD96
-==========================
+# YMD96
-This is a port of the QMK firmware for boards that are based on the
-ps2avrGB firmware, like the [ps2avrGB
-keyboard](https://www.keyclack.com/product/gb-ps2avrgb/), for use on the YMD96.
+A 96-keyboard which supports both ANSI and ISO along with many different layout combinations, and RGB underglow.
-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.
+* Keyboard maintainer: [Andrew](https://github.com/sparkyman215)
+* Hardware Supported: YMD96 with the ATmega32a chip.
+* Hardware Availability: The GB was run June 2017, [in this thread](https://www.reddit.com/r/mechmarket/comments/6hu3yx/vendor_ymd96_gb_is_now_live_68_an_universal_and/). The vendor has stated that they plan on selling more rounds.
-Here is the default layout, it is fairly simple with a few function keys:
-![YMD96 Layout](https://i.imgur.com/3QnqVPn.png)
-If you have a different layout (since there were many options during the GB), please feel free to contribute!
+Make example for this keyboard (after setting up your build environment):
-Keyboard maintainer: [Andrew](https://github.com/sparkyman215)
-Hardware Supported: YMD96 with the ATmega32a chip.
-Hardware Availability: The GB was run June 2017, [in this thread](https://www.reddit.com/r/mechmarket/comments/6hu3yx/vendor_ymd96_gb_is_now_live_68_an_universal_and/). The vendor has stated that they plan on selling more rounds.
+ make ymd96:default
-A very big thanks to @krusli for making the RGB underglow, Backlight, CapsLock and NumLock LEDs working correctly.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-## Finding your specific matrix
+ make ymd96:default:flash
-This firmware was modified from [ps2avrGB](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB), also found on this qmk repo, to work with the YMD96 keyboard. However, I only have one board to test with, which might have a different layout than yours. To get qmk working with your specific layout, you'll need to follow these steps:
+**Reset Key**: Hold down the key commonly programmed as *L_Ctrl* while plugging in the keyboard.
-1. Follow the [guide here](https://www.massdrop.com/talk/1392/programming-kbd-keyboards-via-bootmapper-client) to get Bootmapper Client setup. While you won't need it after you get qmk working, you need to use Bootmapper Client to figure out how the matrix is laid out. In the end, here's an example of what it should look like: ![BMC](https://i.imgur.com/wNihDwn.png)
-2. Next is the tricky part: editing the `ymd96.h` file. Here, you have to figure out how the keys are laid out physically and assign each key the right keycode. Study how the codes in brackets correspond to the BMC columns. Consider the first column: K000 corresponds to Col 1 Row 1, and K100 corresponds to Col 2 Row 1. K111 = Col 2 Row 10.
-3. First, you need to define the codes that are actually used in the brackets. KC_NO is used whenever a cell isn't used, such as col 1 row 4-6 in BMC.
-4. Once you have all those set up, you need to put the keycodes where they physically are in the KEYMAP( area. Since the columns aren't all uniform (e.g. col2row6 is B, but col2row7 is the numpad 1), the keycodes will be all over the place.
-5. Finally! Hard part is pretty much done. Next, you simply have to edit the `keymap.c` file to actually assign the keycodes to do something. You essentially replace the keycodes (e.g. K000) with actual codes that do something, e.g. KC_ENTER. Modify these to your hearts content, and of course this is where all the extra functionality of QMK shines. I won't get into it here, but hopefully you've made it this far!
-
-## Installing and Building
-
-Since the YMD96 uses an ATmega32a chip instead of the 32u4, you need to download [HIDBootFlash v.1.0](http://vusb.wikidot.com/project:hidbootflash) for Windows. For Linux you can use the [bootloadHID](https://www.obdev.at/products/vusb/bootloadhid.html) utility (which will require building). Arch Linux users can alternatively install this from the [AUR](https://aur.archlinux.org/packages/bootloadhid/).
-On Windows, I use [MINGw](http://www.mingw.org/) to compile the keymaps. On Linux, you can simply use the terminal.
-
-Once you have those two pieces of software:
-Build the keyboard by navigating to the root folder of the QMK repo and running
-```
-$ make ymd96:default
-```
-If you make your own layout, change the `default` word to whatever your layout is.
-
-To flash the compiled hex file, simply put the board in flashing mode by plugging it in while holding control.
-In `HIDBootFlash` first click `find device`, then you can specify the .hex file and flash it to the device.
-For `bootloadHID`, from a terminal that is in the same folder as your firmware file, run
-```
-$ sudo bootloadHID ymd96_default.hex
-```
-Again replacing default with your custom keymap name if required.
-
-## 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 pressing `L_Ctrl`. 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.
-
-Lastly, if you still need help, you can add me on Discord and I'll be happy to help.
+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/ymd96/rules.mk b/keyboards/ymd96/rules.mk
index 19d9fd81ab..3c892daabb 100644
--- a/keyboards/ymd96/rules.mk
+++ b/keyboards/ymd96/rules.mk
@@ -31,6 +31,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c backlight.c
+SRC = backlight.c
diff --git a/keyboards/ymd96/ymd96.c b/keyboards/ymd96/ymd96.c
index 546a4c6e3a..eae84ade19 100644
--- a/keyboards/ymd96/ymd96.c
+++ b/keyboards/ymd96/ymd96.c
@@ -21,16 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "backlight.h"
#include "backlight_custom.h"
-void matrix_init_kb(void) { matrix_init_user(); }
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-void matrix_scan_kb(void) { matrix_scan_user(); }
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
void backlight_init_ports(void) {
diff --git a/keyboards/ymd96/ymd96.h b/keyboards/ymd96/ymd96.h
index a516297c19..c89be71686 100644
--- a/keyboards/ymd96/ymd96.h
+++ b/keyboards/ymd96/ymd96.h
@@ -20,8 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "quantum.h"
-void matrix_init_user(void); // TODO port this to other PS2AVRGB boards
-
#define LAYOUT_default( \
K50, K52, K53, K54, K55, K60, K6A, K7A, K70, K5B, K5C, K5D, K5E, K1D, K2E, K0D, K76, K79, K78, \
K40, K41, K42, K43, K44, K45, K61, K6B, K7B, K71, K4A, K4B, K4C, K4E, K46, K47, K48, K49, \
diff --git a/keyboards/ymdk/bface/README.md b/keyboards/ymdk/bface/README.md
index f6a703bece..04ba680de1 100644
--- a/keyboards/ymdk/bface/README.md
+++ b/keyboards/ymdk/bface/README.md
@@ -1,55 +1,21 @@
-# The YMDK "Bface" PCB
+# The YMDK Bface
![ymdk_bface](https://i.imgur.com/qhFxN0g.jpg)
A 60% keyboard that runs ps2avrgb natively and fits the popular GH60 form factor. Another "bfake" or clone of the original B.face PCB by [Winkeyless](https://winkeyless.kr/product/b-face-x2-pcb/). This PCB has slightly different switch matrix than the origninal B.face, and is also different than the bfake. It commonly comes as the PCB in 60% keyboard kits sold by YMDK on Aliexpress.
-Keyboard Maintainer: QMK Community
-Hardware Supported: White Bface Mini USB PCB with no RGB.
-Hardware Availability: [Shenzhen YMD Tech Co. (YMDK) on Aliexpress](https://www.aliexpress.com/item/32799437588.html)
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: White Bface Mini USB PCB with no RGB.
+* Hardware Availability: [Shenzhen YMD Tech Co. (YMDK) on Aliexpress](https://www.aliexpress.com/item/32799437588.html)
Make example for this keyboard (after setting up your build environment):
make ymdk/bface:default
-Flashing:
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+ make ymdk/bface:default:flash
This board has a pair of jumper holes on the left edge of the PCB marked "Jb", near TAB and CAPS LOCK. If you short the contacts with tweezers or wire the board will enter into the bootloader and you can flash it.
-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
- pip3 install pyusb
- brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
- ```
-
-4. Place your keyboard into reset by shorting the jumper on the left edge of the PCB..
-5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
-
-Another method for Mac or Linux:
-After installing `bootloadHID`, you can use the `./util/atmega32a_program.py` program included in QMK. You will need to have `python` and the `pyusb` library installed.
-
-Then you can run this to compile the firmware and flash the board without using the jumper:
-```
-make ymdk/bface:default:program
-```
-
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/ymdk/bface/config.h b/keyboards/ymdk/bface/config.h
index 9e5a9134ff..2273b7e84e 100644
--- a/keyboards/ymdk/bface/config.h
+++ b/keyboards/ymdk/bface/config.h
@@ -34,6 +34,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7}
#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+
#define NO_UART 1
#define BACKLIGHT_PIN D4
diff --git a/keyboards/ymdk/bface/rules.mk b/keyboards/ymdk/bface/rules.mk
index 7b829530b2..f6f026cf30 100644
--- a/keyboards/ymdk/bface/rules.mk
+++ b/keyboards/ymdk/bface/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2019 Ethan Durrant (emdarcher)
-#
-# 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
diff --git a/keyboards/ymdk/ymd09/README.md b/keyboards/ymdk/ymd09/README.md
new file mode 100644
index 0000000000..dce883c1f5
--- /dev/null
+++ b/keyboards/ymdk/ymd09/README.md
@@ -0,0 +1,15 @@
+# YMD09
+
+![YMD09](https://ae01.alicdn.com/kf/HTB1x6BATYvpK1RjSZPiq6zmwXXai/9-Key-QMK-Hotswap-YMDK-RGB-Support-Macro-Function-Type-C-MX-Switches-Mechanical-Keyboard-Numpad.jpg)
+
+A 9-key macropad by [YMDK](https://ymdk.aliexpress.com/store/429151) with per-key RGB lighting.
+
+* Keyboard Maintainer: [Patrick Fruh](https://github.com/kaeltis)
+* Hardware Supported: YMD09
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/i/4000510880374.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/ymd09: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/ymdk/ymd09/config.h b/keyboards/ymdk/ymd09/config.h
new file mode 100644
index 0000000000..b7e5539df2
--- /dev/null
+++ b/keyboards/ymdk/ymd09/config.h
@@ -0,0 +1,66 @@
+/*
+Copyright 2020 Patrick Fruh
+
+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 0x0909
+#define DEVICE_VER 0x0001
+#define MANUFACTURER YMDK
+#define PRODUCT YMD09
+#define DESCRIPTION 9-Key Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { F5, F4, F1 }
+#define MATRIX_COL_PINS { D6, D2, D1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 9
+ #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 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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#endif
diff --git a/keyboards/ymdk/ymd09/info.json b/keyboards/ymdk/ymd09/info.json
new file mode 100644
index 0000000000..cb11ac97fb
--- /dev/null
+++ b/keyboards/ymdk/ymd09/info.json
@@ -0,0 +1,23 @@
+{
+ "keyboard_name": "YMD09",
+ "url": "https://www.aliexpress.com/item/4000510880374.html",
+ "maintainer": "kaeltis",
+ "width": 3,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 9,
+ "layout": [
+ {"label": "7", "x": 0, "y": 0},
+ {"label": "8", "x": 1, "y": 0},
+ {"label": "9", "x": 2, "y": 0},
+ {"label": "4", "x": 0, "y": 1},
+ {"label": "5", "x": 1, "y": 1},
+ {"label": "6", "x": 2, "y": 1},
+ {"label": "1", "x": 0, "y": 2},
+ {"label": "2", "x": 1, "y": 2},
+ {"label": "3", "x": 2, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ymdk/ymd09/keymaps/default/keymap.c b/keyboards/ymdk/ymd09/keymaps/default/keymap.c
new file mode 100644
index 0000000000..330e41db63
--- /dev/null
+++ b/keyboards/ymdk/ymd09/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(KC_KP_7, KC_KP_8, KC_KP_9,
+ KC_KP_4, LT(1, KC_KP_5), KC_KP_6,
+ KC_KP_1, KC_KP_2, KC_KP_3),
+
+ [1] = LAYOUT(RGB_RMOD, RGB_VAI, RGB_MOD,
+ RGB_HUI, KC_TRNS, RGB_SAI,
+ RGB_HUD, RGB_VAD, RGB_SAD),
+
+};
diff --git a/keyboards/ymdk/ymd09/rules.mk b/keyboards/ymdk/ymd09/rules.mk
new file mode 100644
index 0000000000..171e9b1fcb
--- /dev/null
+++ b/keyboards/ymdk/ymd09/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # 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
+# 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
diff --git a/keyboards/ymdk/ymd09/ymd09.c b/keyboards/ymdk/ymd09/ymd09.c
new file mode 100644
index 0000000000..179c0c6b3e
--- /dev/null
+++ b/keyboards/ymdk/ymd09/ymd09.c
@@ -0,0 +1 @@
+#include "ymd09.h"
diff --git a/keyboards/ymdk/ymd09/ymd09.h b/keyboards/ymdk/ymd09/ymd09.h
new file mode 100644
index 0000000000..76cb5d3f0c
--- /dev/null
+++ b/keyboards/ymdk/ymd09/ymd09.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, \
+ K10, K11, K12, \
+ K20, K21, K22 \
+) { \
+ { K00, K01, K02 }, \
+ { K10, K11, K12 }, \
+ { K20, K21, K22 } \
+}
diff --git a/keyboards/ymdk/ymd67/config.h b/keyboards/ymdk/ymd67/config.h
new file mode 100644
index 0000000000..05963e57ea
--- /dev/null
+++ b/keyboards/ymdk/ymd67/config.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER YMDK
+#define PRODUCT YMD67
+#define DESCRIPTION Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, F7, B5, B4, D7, D6, B3, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 5
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* prevent stuck modifiers */
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/ymdk/ymd67/info.json b/keyboards/ymdk/ymd67/info.json
new file mode 100644
index 0000000000..e027b173c4
--- /dev/null
+++ b/keyboards/ymdk/ymd67/info.json
@@ -0,0 +1,81 @@
+{
+ "keyboard_name": "ymd67",
+ "url": "https://www.aliexpress.com/item/4000311811121.html",
+ "maintainer": "SwiftLawnGnome",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 67,
+ "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": "&amp;", "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": "Bs", "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},
+ {"label": "Z", "x": 2, "y": 3},
+ {"label": "X", "x": 3, "y": 3},
+ {"label": "C", "x": 4, "y": 3},
+ {"label": "V", "x": 5, "y": 3},
+ {"label": "B", "x": 6, "y": 3},
+ {"label": "N", "x": 7, "y": 3},
+ {"label": "M", "x": 8, "y": 3},
+ {"label": "&lt;", "x": 9, "y": 3},
+ {"label": "&gt;", "x": 10, "y": 3},
+ {"label": "?", "x": 11, "y": 3},
+ {"label": "Shift", "x": 12, "y": 3},
+ {"label": "Up", "x": 13, "y": 3},
+ {"label": "Del", "x": 14, "y": 3},
+ {"label": "Ctrl", "x": 0, "y": 4, "w": 1.75},
+ {"label": "Win", "x": 1.75, "y": 4, "w": 1.25},
+ {"label": "Alt", "x": 3, "y": 4, "w": 1.25},
+ {"x": 4.25, "y": 4, "w": 1.25},
+ {"x": 5.5, "y": 4, "w": 3},
+ {"label": "Alt", "x": 8.5, "y": 4, "w": 1.25},
+ {"label": "Ctrl", "x": 9.75, "y": 4, "w": 1.25},
+ {"x": 11, "y": 4},
+ {"label": "Left", "x": 12, "y": 4},
+ {"label": "Down", "x": 13, "y": 4},
+ {"label": "Right", "x": 14, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ymdk/ymd67/keymaps/default/keymap.c b/keyboards/ymdk/ymd67/keymaps/default/keymap.c
new file mode 100644
index 0000000000..7ce144d62c
--- /dev/null
+++ b/keyboards/ymdk/ymd67/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_H
+
+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_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_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_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, MO(1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = 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_DEL,
+ KC_TRNS, RGB_TOG, KC_UP, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/ymdk/ymd67/keymaps/default/readme.md b/keyboards/ymdk/ymd67/keymaps/default/readme.md
new file mode 100644
index 0000000000..511cc94dd1
--- /dev/null
+++ b/keyboards/ymdk/ymd67/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# Default YMD67 layout
+
+![YMD67 layout image](https://i.imgur.com/YghD1LH.png)
+
+This is the default layout the keyboard comes with.
diff --git a/keyboards/ymdk/ymd67/readme.md b/keyboards/ymdk/ymd67/readme.md
new file mode 100644
index 0000000000..f8c10168ec
--- /dev/null
+++ b/keyboards/ymdk/ymd67/readme.md
@@ -0,0 +1,15 @@
+# YMD67
+
+![YMD67](https://ae01.alicdn.com/kf/Hbb4b59f9ab94484ab396a8e0200968ecd.jpg)
+
+A low-profile minila keyboard kit by [YMDK](https://ymdk.aliexpress.com/store/429151?spm=2114.10010108.0.0.3ab23641lIkgzm). Available in multiple colors and has RGB side-lighting.
+
+* Keyboard Maintainer: [Zach Shaftel](https://github.com/swiftlawngnome)
+* Hardware Supported: YMD67
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/4000311811121.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/ymd67: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/ymdk/ymd67/rules.mk b/keyboards/ymdk/ymd67/rules.mk
new file mode 100644
index 0000000000..891c7739a9
--- /dev/null
+++ b/keyboards/ymdk/ymd67/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/ymdk/ymd67/ymd67.c b/keyboards/ymdk/ymd67/ymd67.c
new file mode 100644
index 0000000000..f6d40ea0c3
--- /dev/null
+++ b/keyboards/ymdk/ymd67/ymd67.c
@@ -0,0 +1 @@
+#include "ymd67.h"
diff --git a/keyboards/ymdk/ymd67/ymd67.h b/keyboards/ymdk/ymd67/ymd67.h
new file mode 100644
index 0000000000..5e7d846694
--- /dev/null
+++ b/keyboards/ymdk/ymd67/ymd67.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "quantum.h"
+
+#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, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K47, K48, K49, 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, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, K43, KC_NO, KC_NO, KC_NO, K47, K48, K49, K4A, K4B, K4C, K4D, KC_NO } \
+}
diff --git a/keyboards/ymdk_np21/README.md b/keyboards/ymdk_np21/README.md
index 79e3386f09..decd30b275 100644
--- a/keyboards/ymdk_np21/README.md
+++ b/keyboards/ymdk_np21/README.md
@@ -4,14 +4,18 @@
ps2avrGB based number-pad sold fully assembled by YMDK on Aliexpress.
-Keyboard Maintainer: [QMK Community](https://github.com/qmk)
-Hardware Supported: Atmega32A
-Hardware Availability: [AliExpress](https://www.aliexpress.com/item/21-Key-NPKC-Programmable-Cherry-MX-Kailh-Gateron-Switches-Mechanical-Keyboard-Numpad-Free-shipping/32812732361.html)
+* Keyboard Maintainer: [QMK Community](https://github.com/qmk)
+* Hardware Supported: Atmega32A
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/21-Key-NPKC-Programmable-Cherry-MX-Kailh-Gateron-Switches-Mechanical-Keyboard-Numpad-Free-shipping/32812732361.html)
Make example for this keyboard (after setting up your build environment):
- make ymdk_np21:default:program
+ make ymdk_np21:default
-Plugging the board in while pressing 'Top Left Key' (USB on top) will force it to boot bootloader without loading the firmware.
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
-The code for NP21 is a minor edit of jj40.
+ make ymdk_np21:default:flash
+
+**Reset Key**: Hold down the 'Top Left Key' (USB on top) while plugging in the keyboard.
+
+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/ymdk_np21/config.h b/keyboards/ymdk_np21/config.h
index 4a846f5e94..60c5277761 100644
--- a/keyboards/ymdk_np21/config.h
+++ b/keyboards/ymdk_np21/config.h
@@ -29,8 +29,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT np21
/* matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 15
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 6
+#define MATRIX_ROW_PINS { B0, B1, B2, B3 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/ymdk_np21/matrix.c b/keyboards/ymdk_np21/matrix.c
deleted file mode 100644
index b2bfb2f0bb..0000000000
--- a/keyboards/ymdk_np21/matrix.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-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 <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_set_row_status(uint8_t row);
-uint8_t bit_reverse(uint8_t x);
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- matrix_init_quantum(); // missing from original port by Luiz
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum(); // also missing in original PS2AVRGB implementation
-
- return 1;
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {};
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- // Looping keyboard code goes here
- // This runs every cycle (a lot)
- matrix_scan_user();
-};
-
-__attribute__ ((weak))
-void matrix_init_user(void) {};
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-// declarations
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/ymdk_np21/rules.mk b/keyboards/ymdk_np21/rules.mk
index 2bab3043e8..772bee9285 100644
--- a/keyboards/ymdk_np21/rules.mk
+++ b/keyboards/ymdk_np21/rules.mk
@@ -31,6 +31,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c backlight.c
+SRC = backlight.c
diff --git a/keyboards/ymdk_np21/ymdk_np21.h b/keyboards/ymdk_np21/ymdk_np21.h
index 728406d6e5..2cd2d13c21 100644
--- a/keyboards/ymdk_np21/ymdk_np21.h
+++ b/keyboards/ymdk_np21/ymdk_np21.h
@@ -23,8 +23,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "keycode.h"
#include "action.h"
-void matrix_init_user(void); // TODO port this to other PS2AVRGB boards
-
#define LAYOUT( \
K01, K02, K03, K04, K05, K06, \
K11, K12, K13, K14, K15, K16, \
diff --git a/keyboards/yurei/config.h b/keyboards/yurei/config.h
new file mode 100644
index 0000000000..da37d3ce88
--- /dev/null
+++ b/keyboards/yurei/config.h
@@ -0,0 +1,252 @@
+/*
+Copyright 2019 Koichi Katano
+
+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 0x5D5E
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Koichi Katano
+#define PRODUCT Yurei
+#define DESCRIPTION A Tenkeyless PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * 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 { B5, B4, B3, B2, B1, B0 }
+#define MATRIX_COL_PINS { D5, C7, C6, D4, D0, E6, F0, F1, F4, F5, F6, F7, D7, D6, D1, D2, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#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
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* 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_HELP H
+//#define MAGIC_KEY_HELP_ALT 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 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#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 B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#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
+
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#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 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/yurei/info.json b/keyboards/yurei/info.json
new file mode 100644
index 0000000000..ff6fec7a5f
--- /dev/null
+++ b/keyboards/yurei/info.json
@@ -0,0 +1,101 @@
+{
+ "keyboard_name": "Yurei",
+ "url": "https://github.com/kkatano/yurei",
+ "maintainer": "Koichi Katano",
+ "width": 18.26,
+ "height": 6.47,
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "key_count": 87,
+ "layout": [
+ {"label":"1", "x":0, "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.5, "y":0},
+ {"label":"7", "x":7.5, "y":0},
+ {"label":"8", "x":8.5, "y":0},
+ {"label":"9", "x":9.5, "y":0},
+ {"label":"10", "x":11, "y":0},
+ {"label":"11", "x":12, "y":0},
+ {"label":"12", "x":13, "y":0},
+ {"label":"13", "x":14, "y":0},
+ {"label":"14", "x":15.26, "y":0},
+ {"label":"15", "x":16.26, "y":0},
+ {"label":"16", "x":17.26, "y":0},
+ {"label":"17", "x":0, "y":1.47},
+ {"label":"18", "x":1, "y":1.47},
+ {"label":"19", "x":2, "y":1.47},
+ {"label":"20", "x":3, "y":1.47},
+ {"label":"21", "x":4, "y":1.47},
+ {"label":"22", "x":5, "y":1.47},
+ {"label":"23", "x":6, "y":1.47},
+ {"label":"24", "x":7, "y":1.47},
+ {"label":"25", "x":8, "y":1.47},
+ {"label":"26", "x":9, "y":1.47},
+ {"label":"27", "x":10, "y":1.47},
+ {"label":"28", "x":11, "y":1.47},
+ {"label":"29", "x":12, "y":1.47},
+ {"label":"30", "x":13, "y":1.47, "w":2},
+ {"label":"31", "x":15.26, "y":1.47},
+ {"label":"32", "x":16.26, "y":1.47},
+ {"label":"33", "x":17.26, "y":1.47},
+ {"label":"34", "x":0, "y":2.47, "w":1.5},
+ {"label":"35", "x":1.5, "y":2.47},
+ {"label":"36", "x":2.5, "y":2.47},
+ {"label":"37", "x":3.5, "y":2.47},
+ {"label":"38", "x":4.5, "y":2.47},
+ {"label":"39", "x":5.5, "y":2.47},
+ {"label":"40", "x":6.5, "y":2.47},
+ {"label":"41", "x":7.5, "y":2.47},
+ {"label":"42", "x":8.5, "y":2.47},
+ {"label":"43", "x":9.5, "y":2.47},
+ {"label":"44", "x":10.5, "y":2.47},
+ {"label":"45", "x":11.5, "y":2.47},
+ {"label":"46", "x":12.5, "y":2.47},
+ {"label":"47", "x":13.5, "y":2.47, "w":1.5},
+ {"label":"48", "x":15.26, "y":2.47},
+ {"label":"49", "x":16.26, "y":2.47},
+ {"label":"50", "x":17.26, "y":2.47},
+ {"label":"51", "x":0, "y":3.47, "w":1.75},
+ {"label":"52", "x":1.75, "y":3.47},
+ {"label":"53", "x":2.75, "y":3.47},
+ {"label":"54", "x":3.75, "y":3.47},
+ {"label":"55", "x":4.75, "y":3.47},
+ {"label":"56", "x":5.75, "y":3.47},
+ {"label":"57", "x":6.75, "y":3.47},
+ {"label":"58", "x":7.75, "y":3.47},
+ {"label":"59", "x":8.75, "y":3.47},
+ {"label":"60", "x":9.75, "y":3.47},
+ {"label":"61", "x":10.75, "y":3.47},
+ {"label":"62", "x":11.75, "y":3.47},
+ {"label":"63", "x":12.75, "y":3.47, "w":2.25},
+ {"label":"64", "x":0, "y":4.47, "w":2.25},
+ {"label":"65", "x":2.25, "y":4.47},
+ {"label":"66", "x":3.25, "y":4.47},
+ {"label":"67", "x":4.25, "y":4.47},
+ {"label":"68", "x":5.25, "y":4.47},
+ {"label":"69", "x":6.25, "y":4.47},
+ {"label":"70", "x":7.25, "y":4.47},
+ {"label":"71", "x":8.25, "y":4.47},
+ {"label":"72", "x":9.25, "y":4.47},
+ {"label":"73", "x":10.25, "y":4.47},
+ {"label":"74", "x":11.25, "y":4.47},
+ {"label":"75", "x":12.25, "y":4.47, "w":2.75},
+ {"label":"76", "x":16.26, "y":4.47},
+ {"label":"77", "x":0, "y":5.47, "w":1.25},
+ {"label":"78", "x":1.25, "y":5.47, "w":1.25},
+ {"label":"79", "x":2.5, "y":5.47, "w":1.25},
+ {"label":"80", "x":3.75, "y":5.47, "w":6.25},
+ {"label":"81", "x":10, "y":5.47, "w":1.25},
+ {"label":"82", "x":11.25, "y":5.47, "w":1.25},
+ {"label":"83", "x":12.5, "y":5.47, "w":1.25},
+ {"label":"84", "x":13.75, "y":5.47, "w":1.25},
+ {"label":"85", "x":15.26, "y":5.47},
+ {"label":"86", "x":16.26, "y":5.47},
+ {"label":"87", "x":17.26, "y":5.47}
+ ]
+ }
+ }
+}
diff --git a/keyboards/yurei/keymaps/default/keymap.c b/keyboards/yurei/keymaps/default/keymap.c
new file mode 100644
index 0000000000..45f955fb0f
--- /dev/null
+++ b/keyboards/yurei/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2019 Koichi Katano
+ *
+ * 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] = {
+ LAYOUT_tkl_ansi(
+ 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, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/yurei/keymaps/default/readme.md b/keyboards/yurei/keymaps/default/readme.md
new file mode 100644
index 0000000000..4134a11e42
--- /dev/null
+++ b/keyboards/yurei/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for yurei
diff --git a/keyboards/yurei/readme.md b/keyboards/yurei/readme.md
new file mode 100644
index 0000000000..fc5b3eb5c0
--- /dev/null
+++ b/keyboards/yurei/readme.md
@@ -0,0 +1,13 @@
+# Yurei
+
+A Tenkeyless PCB inspired by Phantom, for customizing Filco Majestouch 2.
+
+* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
+* Hardware Supported: Yurei PCB
+* Hardware Availability: https://github.com/kkatano/yurei
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yurei: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/yurei/rules.mk b/keyboards/yurei/rules.mk
new file mode 100644
index 0000000000..37d7d6d4be
--- /dev/null
+++ b/keyboards/yurei/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = halfkay
+
+# Build Options
+# change yes to no to disable
+#
+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 = 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+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
+
+LAYOUTS = tkl_ansi
diff --git a/keyboards/yurei/yurei.c b/keyboards/yurei/yurei.c
new file mode 100644
index 0000000000..3ac0d32bef
--- /dev/null
+++ b/keyboards/yurei/yurei.c
@@ -0,0 +1,25 @@
+/* Copyright 2019 Koichi Katano
+ *
+ * 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 "yurei.h"
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(B6, led_state.caps_lock);
+ writePin(B7, led_state.scroll_lock);
+ }
+ return true;
+}
diff --git a/keyboards/yurei/yurei.h b/keyboards/yurei/yurei.h
new file mode 100644
index 0000000000..d117d2a02f
--- /dev/null
+++ b/keyboards/yurei/yurei.h
@@ -0,0 +1,44 @@
+/* Copyright 2019 Koichi Katano
+ *
+ * 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 is 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_tkl_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, \
+ k40, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4F, \
+ k50, k51, k52, k56, k5A, k5B, k5C, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, KC_NO, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, KC_NO, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, KC_NO, KC_NO, k4F, KC_NO }, \
+ { k50, k51, k52, KC_NO, KC_NO, KC_NO, k56, KC_NO, KC_NO, KC_NO, k5A, k5B, k5C, k5D, k5E, k5F, k5G } \
+}
diff --git a/keyboards/zinc/keymaps/toshi0383/keymap.c b/keyboards/zinc/keymaps/toshi0383/keymap.c
index d1738c83e8..45863a71e0 100644
--- a/keyboards/zinc/keymaps/toshi0383/keymap.c
+++ b/keyboards/zinc/keymaps/toshi0383/keymap.c
@@ -18,18 +18,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { \
* ,-----------------------------------------. ,-----------------------------------------.
* | Esc | Q | W | E | R | T | | Y | U | I | O | P |BSpace|
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | A | S | D | F | G | | H | J | K | L | : |Shift |
+ * | Tab | A | S | D | F | G | | H | J | K | L |Shift | GUI |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |Space | Z | X | C | V | B | | N | M | Ctrl | GUI | Alt | SCMD |
+ * |Space | Z | X | C | V | B | | N | M | Ctrl | . | Alt | SCMD |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | |Lower |Enter | |Enter |Raise | | | | |
+ * | GUI | | | |Lower |Enter | |Enter |Raise | | | | |
* `-----------------------------------------' `-----------------------------------------'
*/
[_BASE] = LAYOUT_ortho_4x12(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE, \
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RGUI, KC_RSFT, \
- KC_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_RGUI, KC_RALT, RGUI(KC_RSFT), \
- _______, _______, _______, _______, LOWER, KC_ENT, KC_ENT, RAISE, _______, _______, _______, _______ \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SCLN), KC_RGUI,
+ KC_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_RCTL, KC_DOT, KC_RALT, RGUI(KC_RSFT), \
+ KC_RGUI, _______, _______, _______, LOWER, KC_ENT, KC_ENT, RAISE, _______, _______, _______, _______ \
),
/* Lower
@@ -46,8 +46,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { \
[_LOWER] = LAYOUT_ortho_4x12( \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, _______, _______, _______,\
_______, KC_LT, KC_GT, KC_LPRN, KC_RPRN, KC_GRV, KC_MINS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_PIPE, \
- _______, _______, _______, _______, KC_EQL, KC_QUES, KC_UNDS, KC_PLUS, KC_COMM, KC_DOT, KC_SLSH, _______, \
- _______, _______, _______, _______, _______, KC_TRNS, ADJUST, KC_RGUI, _______, _______, _______, _______ \
+ KC_LALT, _______, _______, _______, KC_EQL, KC_QUES, KC_UNDS, KC_PLUS, KC_COMM, _______, KC_SLSH, _______, \
+ _______, _______, _______, KC_TRNS, _______, KC_TRNS, ADJUST, KC_RGUI, _______, _______, _______, _______ \
),
/* Raise
diff --git a/keyboards/zinc/rev1/config.h b/keyboards/zinc/rev1/config.h
index c8560233d7..6713b3098a 100644
--- a/keyboards/zinc/rev1/config.h
+++ b/keyboards/zinc/rev1/config.h
@@ -29,7 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT zinc rev.1
#define DESCRIPTION A split keyboard
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
diff --git a/keyboards/zinc/reva/config.h b/keyboards/zinc/reva/config.h
index 6ae12d54cc..8eeb154acc 100644
--- a/keyboards/zinc/reva/config.h
+++ b/keyboards/zinc/reva/config.h
@@ -26,7 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT zinc rev.A
#define DESCRIPTION A split keyboard
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
diff --git a/layouts/community/60_ansi_split_bs_rshift/bcat/keymap.c b/layouts/community/60_ansi_split_bs_rshift/bcat/keymap.c
index 92cc366aca..ac5f2dcef7 100644
--- a/layouts/community/60_ansi_split_bs_rshift/bcat/keymap.c
+++ b/layouts/community/60_ansi_split_bs_rshift/bcat/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Function layer: http://www.keyboard-layout-editor.com/#/gists/c7a55e75285d474b6301140eaf53f915 */
[LAYER_FUNCTION] = LAYOUT_60_ansi_split_bs_rshift(
_______, 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_DEL,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
@@ -31,9 +31,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Adjust layer: http://www.keyboard-layout-editor.com/#/gists/6e1068e4f91bbacccaf5ac0acbeec79c */
[LAYER_ADJUST] = LAYOUT_60_ansi_split_bs_rshift(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_CAPS, _______, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, KC_PSCR, KC_SLCK, KC_PAUS, RGB_VAI, _______, _______,
- _______, _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, RGB_HUI, RGB_SAI, RGB_RMOD, RGB_MOD, RGB_TOG,
- _______, _______, _______, KC_MUTE, _______, BL_BRTG, BL_DEC, BL_INC, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
+ _______, BL_BRTG, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, _______, _______, _______, RGB_VAI, _______, _______,
+ _______, BL_INC, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, RGB_SPI, RGB_HUI, RGB_SAI, RGB_RMOD, RGB_MOD, RGB_TOG,
+ _______, BL_DEC, _______, KC_MUTE, _______, _______, _______, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/layouts/community/60_ansi_split_bs_rshift/bcat/readme.md b/layouts/community/60_ansi_split_bs_rshift/bcat/readme.md
index 35ce63196c..d08ddb136d 100644
--- a/layouts/community/60_ansi_split_bs_rshift/bcat/readme.md
+++ b/layouts/community/60_ansi_split_bs_rshift/bcat/readme.md
@@ -15,12 +15,12 @@ backlight, as well as media keys centered around the ESDF cluster.
## Function layer
-![Function layer layout](https://i.imgur.com/oLdVfn0.png)
+![Function layer layout](https://i.imgur.com/3swWxPn.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/c7a55e75285d474b6301140eaf53f915))
## Adjust layer
-![Adjust layer layout](https://i.imgur.com/bqC6QYS.png)
+![Adjust layer layout](https://i.imgur.com/lQfcnQV.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/6e1068e4f91bbacccaf5ac0acbeec79c))
diff --git a/layouts/community/60_ansi_split_bs_rshift/yanfali/keymap.c b/layouts/community/60_ansi_split_bs_rshift/yanfali/keymap.c
index 73d6789c1b..5e5d163909 100644
--- a/layouts/community/60_ansi_split_bs_rshift/yanfali/keymap.c
+++ b/layouts/community/60_ansi_split_bs_rshift/yanfali/keymap.c
@@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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, \
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, 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(YFL), \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RGUI, KC_RALT, MO(FN), KC_RCTL),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, MO(FN), KC_RCTL),
[FN] = LAYOUT_60_ansi_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, \
diff --git a/layouts/community/60_tsangan_hhkb/bcat/keymap.c b/layouts/community/60_tsangan_hhkb/bcat/keymap.c
index 19516542f0..ab639b05ff 100644
--- a/layouts/community/60_tsangan_hhkb/bcat/keymap.c
+++ b/layouts/community/60_tsangan_hhkb/bcat/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Function layer: http://www.keyboard-layout-editor.com/#/gists/f6311fd7e315de781143b80eb040a551 */
[LAYER_FUNCTION] = LAYOUT_60_tsangan_hhkb(
_______, 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_DEL,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, _______, _______
@@ -31,9 +31,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Adjust layer: http://www.keyboard-layout-editor.com/#/gists/65ac939caec878401603bc36290852d4 */
[LAYER_ADJUST] = LAYOUT_60_tsangan_hhkb(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_CAPS, _______, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, KC_PSCR, KC_SLCK, KC_PAUS, RGB_VAI, _______, _______,
- _______, _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, _______, RGB_HUI, RGB_SAI, RGB_RMOD, RGB_MOD, RGB_TOG,
- _______, _______, _______, KC_MUTE, _______, BL_BRTG, BL_DEC, BL_INC, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
+ _______, BL_BRTG, KC_MPLY, KC_VOLU, KC_MSTP, _______, EEP_RST, RESET, _______, _______, _______, RGB_VAI, _______, _______,
+ _______, BL_INC, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, RGB_SPI, RGB_HUI, RGB_SAI, RGB_RMOD, RGB_MOD, RGB_TOG,
+ _______, BL_DEC, _______, KC_MUTE, _______, _______, _______, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
};
diff --git a/layouts/community/60_tsangan_hhkb/bcat/readme.md b/layouts/community/60_tsangan_hhkb/bcat/readme.md
index c0debdef5b..eb6722261e 100644
--- a/layouts/community/60_tsangan_hhkb/bcat/readme.md
+++ b/layouts/community/60_tsangan_hhkb/bcat/readme.md
@@ -14,12 +14,12 @@ the ESDF cluster.
## Function layer
-![Function layer layout](https://i.imgur.com/s2uyH2U.png)
+![Function layer layout](https://i.imgur.com/NdJTW9f.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/f6311fd7e315de781143b80eb040a551))
## Adjust layer
-![Adjust layer layout](https://i.imgur.com/BKNez3Z.png)
+![Adjust layer layout](https://i.imgur.com/XQR4AEf.png)
([KLE](http://www.keyboard-layout-editor.com/#/gists/65ac939caec878401603bc36290852d4))
diff --git a/layouts/community/65_ansi/mechmerlin/keymap.c b/layouts/community/65_ansi/mechmerlin/keymap.c
new file mode 100644
index 0000000000..e604c23c6f
--- /dev/null
+++ b/layouts/community/65_ansi/mechmerlin/keymap.c
@@ -0,0 +1,49 @@
+/* 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
+#include "mechmerlin.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│FN │Ctl│ ↠│ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [_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_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_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(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_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, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+};
+
diff --git a/layouts/community/65_ansi/mechmerlin/readme.md b/layouts/community/65_ansi/mechmerlin/readme.md
new file mode 100644
index 0000000000..a086084925
--- /dev/null
+++ b/layouts/community/65_ansi/mechmerlin/readme.md
@@ -0,0 +1,10 @@
+# MechMerlin's 65_ansi layout
+
+This is the 65% layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin)
+YouTube channel.
+
+It is used on his
+* [Novelkeys NK65](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nk65)
+
+### Build
+To build the firmware file associated with this keymap, simply run `make your_keyboard:mechmerlin`. \ No newline at end of file
diff --git a/layouts/community/65_ansi/mechmerlin/rules.mk b/layouts/community/65_ansi/mechmerlin/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/layouts/community/65_ansi/mechmerlin/rules.mk
diff --git a/layouts/community/65_ansi/yanfali/keymap.c b/layouts/community/65_ansi/yanfali/keymap.c
new file mode 100755
index 0000000000..a0887da2bf
--- /dev/null
+++ b/layouts/community/65_ansi/yanfali/keymap.c
@@ -0,0 +1,40 @@
+#include QMK_KEYBOARD_H
+
+enum _layers {
+ BS,
+ FN
+};
+
+// shim wilba_tech
+#ifndef EF_DEC
+ #define EF_DEC RGB_RMOD
+ #define EF_INC RGB_MOD
+ #define H1_DEC RGB_HUD
+ #define H1_INC RGB_HUI
+ #define H2_DEC RGB_HUD
+ #define H2_INC RGB_HUI
+ #define S1_DEC RGB_SAD
+ #define S1_INC RGB_SAI
+ #define S2_DEC RGB_SAD
+ #define S2_INC RGB_SAI
+ #define BR_DEC RGB_VAD
+ #define BR_INC RGB_VAI
+ #define ES_DEC KC_TRNS
+ #define ES_INC KC_TRNS
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BS] = LAYOUT_65_ansi( /* Base */
+ 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_BSLS, KC_PGUP,\
+ 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, 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_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(FN), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[FN] = LAYOUT_65_ansi( /* FN */
+ 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_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, S1_DEC, S1_INC, S2_DEC, S2_INC, 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_TRNS, KC_TRNS,\
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/layouts/community/ergodox/drashna/config.h b/layouts/community/ergodox/drashna/config.h
index 0091ebcde8..ce25b0646b 100644
--- a/layouts/community/ergodox/drashna/config.h
+++ b/layouts/community/ergodox/drashna/config.h
@@ -6,10 +6,13 @@
# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3
# define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
+# ifdef RGB_MATRIX_ENABLE
+# define RGBLIGHT_DISABLE_KEYCODES
+# endif
#endif // RGBLIGHT_ENABLE
#undef PRODUCT
-#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Shine
+#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity
#undef DEBOUNCE
#define DEBOUNCE 30
@@ -17,3 +20,13 @@
#define TAPPING_TERM_PER_KEY
#define ERGODOX_LED_30
+
+#ifdef RGB_MATRIX_ENABLE
+# undef RGB_MATRIX_LED_PROCESS_LIMIT
+# undef RGB_MATRIX_LED_FLUSH_LIMIT
+# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
+# define RGBLIGHT_LIMIT_VAL 175
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS (RGBLIGHT_LIMIT_VAL + 25)
+# undef RGBLIGHT_SLEEP
+# endif
+#endif
diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c
index 8308bfdaa1..69066a47cc 100644
--- a/layouts/community/ergodox/drashna/keymap.c
+++ b/layouts/community/ergodox/drashna/keymap.c
@@ -280,7 +280,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
- KC_MAKE, _______, _______, _______, _______, _______, _______, KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
+ KC_MAKE, _______, _______, _______, _______, _______, UC_MOD, KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
VRSN, _________________ADJUST_L1_________________, _______, _______, _______, _______, _______, _______, _______, EEP_RST,
_______, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, RGB_IDL,
_______, _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________, TG(_MODS),
@@ -382,31 +382,32 @@ void suspend_power_down_keymap(void) { rgb_matrix_set_suspend_state(true); }
void suspend_wakeup_init_keymap(void) { rgb_matrix_set_suspend_state(false); }
void rgb_matrix_indicators_user(void) {
- if (userspace_config.rgb_layer_change &&
-# ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
- !g_suspend_state &&
-# endif
+ if (g_suspend_state || !rgb_matrix_config.enable) return;
+
+ if (layer_state_is(_GAMEPAD)) {
+ rgb_matrix_set_color(32, 0x00, 0xFF, 0x00); // Q
+ rgb_matrix_set_color(31, 0x00, 0xFF, 0xFF); // W
+ rgb_matrix_set_color(30, 0xFF, 0x00, 0x00); // E
+ rgb_matrix_set_color(29, 0xFF, 0x80, 0x00); // R
+ rgb_matrix_set_color(37, 0x00, 0xFF, 0xFF); // A
+ rgb_matrix_set_color(36, 0x00, 0xFF, 0xFF); // S
+ rgb_matrix_set_color(35, 0x00, 0xFF, 0xFF); // D
+ rgb_matrix_set_color(34, 0x7A, 0x00, 0xFF); // F
+
+ rgb_matrix_set_color(userspace_config.swapped_numbers ? 27 : 26, 0xFF, 0xFF, 0xFF); // 1
+ rgb_matrix_set_color(userspace_config.swapped_numbers ? 26 : 27, 0x00, 0xFF, 0x00); // 2
+ rgb_matrix_set_color(25, 0x7A, 0x00, 0xFF); // 3
+ }
+
# if defined(RGBLIGHT_ENABLE)
- (!rgblight_config.enable && rgb_matrix_config.enable)
+ if (!userspace_config.rgb_layer_change)
# else
- rgb_matrix_config.enable
+ if (userspace_config.rgb_layer_change)
# endif
- ) {
+ {
switch (get_highest_layer(layer_state)) {
case _GAMEPAD:
rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
- rgb_matrix_set_color(32, 0x00, 0xFF, 0x00); // Q
- rgb_matrix_set_color(31, 0x00, 0xFF, 0xFF); // W
- rgb_matrix_set_color(30, 0xFF, 0x00, 0x00); // E
- rgb_matrix_set_color(29, 0xFF, 0x80, 0x00); // R
- rgb_matrix_set_color(37, 0x00, 0xFF, 0xFF); // A
- rgb_matrix_set_color(36, 0x00, 0xFF, 0xFF); // S
- rgb_matrix_set_color(35, 0x00, 0xFF, 0xFF); // D
- rgb_matrix_set_color(34, 0x7A, 0x00, 0xFF); // F
-
- rgb_matrix_set_color(userspace_config.swapped_numbers ? 27 : 26, 0xFF, 0xFF, 0xFF); // 1
- rgb_matrix_set_color(userspace_config.swapped_numbers ? 26 : 27, 0x00, 0xFF, 0x00); // 2
- rgb_matrix_set_color(25, 0x7A, 0x00, 0xFF); // 3
break;
case _DIABLO:
rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed * 8, LED_FLAG_MODIFIER);
diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk
index 3aee59df6c..78a3d15840 100644
--- a/layouts/community/ergodox/drashna/rules.mk
+++ b/layouts/community/ergodox/drashna/rules.mk
@@ -1,19 +1,20 @@
-TAP_DANCE_ENABLE = yes
+BOOTMAGIC_ENABLE = lite
+TAP_DANCE_ENABLE = no
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
COMMAND_ENABLE = no # Commands for debug and configuration
+CONSOLE_ENABLE = no
SPACE_CADET_ENABLE = no
+
ifeq ($(strip $(KEYBOARD)), ergodox_ez)
- RGBLIGHT_ENABLE = yes
- RGB_MATRIX_ENABLE = no
+ RGBLIGHT_ENABLE = yes
+ RGB_MATRIX_ENABLE = yes
+ RGBLIGHT_TWINKLE = no
+ INDICATOR_LIGHTS = no
+ RGBLIGHT_STARTUP_ANIMATION = no
endif
-CONSOLE_ENABLE = no
-BOOTMAGIC_ENABLE = yes
UNICODE_ENABLE = yes
UNICDOEMAP_ENABLE = no
-RGBLIGHT_TWINKLE = no
-INDICATOR_LIGHTS = no
-RGBLIGHT_STARTUP_ANIMATION = yes
DEBOUNCE_TYPE = eager_pr
diff --git a/layouts/community/ergodox/drashna_glow/config.h b/layouts/community/ergodox/drashna_glow/config.h
deleted file mode 100644
index 6431cb4ff8..0000000000
--- a/layouts/community/ergodox/drashna_glow/config.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma once
-
-#include "../drashna/config.h"
-
-#undef PRODUCT
-#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Glow
-
-#undef RGB_MATRIX_LED_PROCESS_LIMIT
-#undef RGB_MATRIX_LED_FLUSH_LIMIT
diff --git a/layouts/community/ergodox/drashna_glow/rules.mk b/layouts/community/ergodox/drashna_glow/rules.mk
deleted file mode 100644
index 45addc7c22..0000000000
--- a/layouts/community/ergodox/drashna_glow/rules.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-USER_NAME := drashna
-
-CORRECTED_LAYOUT := $(LAYOUTS_REPO)/$(LAYOUT)/drashna
-
-SRC += $(CORRECTED_LAYOUT)/keymap.c
-
--include $(CORRECTED_LAYOUT)/rules.mk
-
-ifeq ($(strip $(KEYBOARD)), ergodox_ez)
- RGBLIGHT_ENABLE = no
- RGB_MATRIX_ENABLE = yes
-# TAP_DANCE_ENABLE = no
-endif
diff --git a/layouts/community/ergodox/manna-harbour_miryoku/keymap.c b/layouts/community/ergodox/manna-harbour_miryoku/keymap.c
index 86547df98e..1c715a68f7 100644
--- a/layouts/community/ergodox/manna-harbour_miryoku/keymap.c
+++ b/layouts/community/ergodox/manna-harbour_miryoku/keymap.c
@@ -1,5 +1,4 @@
-
-// generated from users/manna-harbour_miryoku/miryoku.org
+// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
#define LAYOUT_miryoku(\
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c
index c3899cd036..d2957d8fdc 100644
--- a/layouts/community/ortho_4x12/drashna/keymap.c
+++ b/layouts/community/ortho_4x12/drashna/keymap.c
@@ -224,16 +224,14 @@ void rgb_matrix_indicators_user(void) {
is_ez = true;
# endif
- if (userspace_config.rgb_layer_change &&
-# ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
- !g_suspend_state &&
-# endif
+ if (g_suspend_state || !rgb_matrix_config.enable) return;
+
# if defined(RGBLIGHT_ENABLE)
- (!rgblight_config.enable && rgb_matrix_config.enable)
+ if (!userspace_config.rgb_layer_change)
# else
- rgb_matrix_config.enable
+ if (userspace_config.rgb_layer_change)
# endif
- ) {
+ {
switch (get_highest_layer(layer_state)) {
case _GAMEPAD:
rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
@@ -297,6 +295,7 @@ void rgb_matrix_indicators_user(void) {
rgb_matrix_set_color(is_ez ? 41 : 42, 0xD9, 0xA5, 0x21);
break;
}
+
if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) {
if (!layer_state_cmp(layer_state, _ADJUST)) {
rgb_matrix_set_color(24, 0x00, 0xFF, 0x00);
diff --git a/layouts/community/ortho_4x12/drashna/rules.mk b/layouts/community/ortho_4x12/drashna/rules.mk
index 38d0d45176..e4fe905341 100644
--- a/layouts/community/ortho_4x12/drashna/rules.mk
+++ b/layouts/community/ortho_4x12/drashna/rules.mk
@@ -2,7 +2,6 @@ BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
TAP_DANCE_ENABLE = no
-AUDIO_ENABLE = yes
SPACE_CADET_ENABLE = no
NKRO_ENABLE = yes
@@ -11,20 +10,22 @@ ifneq ($(strip $(KEYBOARD)), planck/rev6)
COMMAND_ENABLE = no
ifeq ($(strip $(LAYOUT_HAS_RGB)), yes)
RGBLIGHT_ENABLE = yes
- endif
- INDICATOR_LIGHTS = yes
- RGBLIGHT_TWINKLE = yes
- RGBLIGHT_STARTUP_ANIMATION = yes
+ INDICATOR_LIGHTS = yes
+ RGBLIGHT_TWINKLE = yes
+ RGBLIGHT_STARTUP_ANIMATION = yes
+ endif
else
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
- RGBLIGHT_ENABLE = no
- RGB_MATRIX_ENABLE = WS2812
+ RGBLIGHT_ENABLE = yes
+ RGB_MATRIX_ENABLE = no
+ AUDIO_ENABLE = yes
endif
ifeq ($(strip $(KEYBOARD)), planck/light)
RGB_MATRIX_ENABLE = yes
- RGBLIGHT_ENABLE = no
- RGBLIGHT_STARTUP_ANIMATION = no
+ RGBLIGHT_ENABLE = yes
+ RGBLIGHT_STARTUP_ANIMATION = yes
+ AUDIO_ENABLE = yes
# HAPTIC_ENABLE += SOLENOID
endif
ifeq ($(strip $(KEYBOARD)), planck/ez)
@@ -37,4 +38,5 @@ ifeq ($(strip $(KEYBOARD)), planck/ez)
RGBLIGHT_STARTUP_ANIMATION = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
+ AUDIO_ENABLE = yes
endif
diff --git a/layouts/community/ortho_4x12/jotix/keymap.c b/layouts/community/ortho_4x12/jotix/keymap.c
index 1d6e8f89aa..9d7727de89 100644
--- a/layouts/community/ortho_4x12/jotix/keymap.c
+++ b/layouts/community/ortho_4x12/jotix/keymap.c
@@ -32,9 +32,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────â”
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- _______,KC_VOLD,KC_MUTE,KC_VOLU,KC_MINS, KC_EQL,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,
+ _______,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- _______,KC_MPRV,KC_MPLY,KC_MNXT,KC_UNDS,KC_PLUS,KC_BTN1,KC_BTN2,_______,_______,_______,_______,
+ _______,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,KC_BTN1,KC_BTN2,_______,_______,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
diff --git a/keyboards/planck/keymaps/juno/config.h b/layouts/community/ortho_4x12/juno/config.h
index eae636c57e..eae636c57e 100644
--- a/keyboards/planck/keymaps/juno/config.h
+++ b/layouts/community/ortho_4x12/juno/config.h
diff --git a/layouts/community/ortho_4x12/juno/keymap.c b/layouts/community/ortho_4x12/juno/keymap.c
new file mode 100644
index 0000000000..a22c229e29
--- /dev/null
+++ b/layouts/community/ortho_4x12/juno/keymap.c
@@ -0,0 +1,446 @@
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST,
+
+ _FN1,
+ _DPAD,
+ _DPADNUM
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ BACKLIT,
+ EXT_PLV,
+
+ DP_ON,
+ DP_OFF
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define SPACEFN LT(_FN1, KC_SPC)
+
+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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | App | Ctrl | GUI | Alt |Lower | SpaceFn |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_ortho_4x12(
+ 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, RSFT_T(KC_ENT),
+ KC_APP, KC_LCTL, KC_LGUI, KC_LALT, LOWER, SPACEFN, SPACEFN, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ /* 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_ortho_4x12(
+ 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_ortho_4x12(
+ 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
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_ortho_4x12(
+ 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_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, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ /* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_ortho_4x12(
+ 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_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_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_ortho_4x12(
+ 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_ortho_4x12(
+ _______, 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ // Two personal additional layers below
+
+ /* Personal custom Fn layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | Vol+ | PgUp | Up | PdDn | Ins | | | Up | | PScr | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Vol- | Left | Down | Right| Home | | Left | Down |Right | | Del |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | Prev | Play | Next | Brite| End | | | Vol- | Vol+ | Mute | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Caps | | | | | Space | | DP_ON| | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_FN1] = LAYOUT_ortho_4x12(
+ _______, KC_VOLU, KC_PGUP, KC_UP, KC_PGDN, KC_INS, _______, _______, KC_UP, _______, KC_PSCR, _______,
+ _______, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL ,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, BACKLIT, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DP_ON, _______, _______, _______
+ ),
+
+ /* DPAD layer, to activate arrow cluster at the bottom right corner
+
+ * ,-----------------------------------------------------------------------------------.
+ * | 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 | GUI | Alt | |DNUM | Space | |DP_OFF| Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+ [_DPAD] = LAYOUT_ortho_4x12(
+ 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_UP, KC_ENT ,
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, MO(_DPADNUM),
+ KC_SPC, KC_SPC, LOWER, DP_OFF, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ // Extended layer for weapon switching
+
+ [_DPADNUM] = LAYOUT_ortho_4x12(
+ XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, XXXXXXX, MO(_DPADNUM),
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+ // Borrowing audio from unused audio
+ // Caps Lock on and off sound too similar
+
+ float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND);
+ float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+
+ float dpad_song_on[][2] = SONG(ODE_TO_JOY);
+ float dpad_song_off[][2] = SONG(UNICODE_WINDOWS);
+#endif
+
+// Disable LED on Rev6
+#ifdef KEYBOARD_planck_rev6
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+#else
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // LED control, lighting up when Fn layer is activated
+ state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+ switch (get_highest_layer(state)) {
+ case _QWERTY:
+ backlight_set(0);
+ break;
+ case _FN1:
+ backlight_set(3);
+ break;
+ case _DPAD:
+ backlight_set(3);
+ break;
+ }
+ return state;
+}
+
+#endif
+
+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
+ writePinLow(E6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ writePinHigh(E6);
+ #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;
+
+
+// Play audio upon switching Caps Lock and custom layers
+
+ case KC_CAPS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ if (host_keyboard_led_state().caps_lock) {
+ PLAY_SONG(caps_song_off);
+ } else {
+ PLAY_SONG(caps_song_on);
+ }
+ #endif
+ }
+ return true;
+
+ case DP_ON:
+ if (record->event.pressed) {
+
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(dpad_song_on);
+ #endif
+
+ layer_off(_FN1);
+ layer_on(_DPAD);
+ }
+
+ case DP_OFF:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(dpad_song_off);
+ #endif
+
+ layer_off(_DPAD);
+ }
+ }
+ 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) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+
+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/layouts/community/ortho_4x12/juno/readme.md b/layouts/community/ortho_4x12/juno/readme.md
new file mode 100644
index 0000000000..b8ce97ec52
--- /dev/null
+++ b/layouts/community/ortho_4x12/juno/readme.md
@@ -0,0 +1,16 @@
+# Juno's Universal ortholinear 4x12 Layout
+created by Juno Nguyen
+
+## Features:
+* **Minimal changes from the default keymap**: to minimize re-adaptation.
+* **Top corner Esc**: swapped with Tab.
+* **Double function ShiftEnter**: hold for Right Shift; tap for Enter.
+* **Removed infrequently used keys**: Euro-specific keys.
+* **Custom Fn layer**: inspired by Pok3r and refined over time.
+* **SpaceFn**: the ultimate way to Fn.
+* **Double arrow clusters**: both Fn + WASD and Fn + IJKL are simultaneously usable for maximum comfort.
+* **Gaming-specific layer**: T-inverted arrow cluster shape; swapped Raise and Lower for easy access to numeric keys (for switching weapons in action games); standard-positioned bottom modifiers.
+* **LED indicator**: lighting up when Fn or Gaming layer is activated.
+* **Audio indicators**: Caps Lock and gaming layer.
+
+Refined since September 2017. \ No newline at end of file
diff --git a/keyboards/planck/keymaps/juno/rules.mk b/layouts/community/ortho_4x12/juno/rules.mk
index e9f1b13360..cf0942b718 100644
--- a/keyboards/planck/keymaps/juno/rules.mk
+++ b/layouts/community/ortho_4x12/juno/rules.mk
@@ -1,7 +1,11 @@
-BACKLIGHT_ENABLE = yes
-
SRC += muse.c
+ifeq ($(strip $(KEYBOARD)), planck/rev6)
+ BACKLIGHT_ENABLE = no
+else
+ BACKLIGHT_ENABLE = yes
+endif
+
MIDI_ENABLE=no
RGBLIGHT_ENABLE = no
MOUSEKEY_ENABLE = no # Mouse keys
diff --git a/layouts/community/ortho_4x12/junonum/config.h b/layouts/community/ortho_4x12/junonum/config.h
new file mode 100644
index 0000000000..23ef0e122a
--- /dev/null
+++ b/layouts/community/ortho_4x12/junonum/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
+
+// Reduce power consumption for iOS compatibility
+#define USB_MAX_POWER_CONSUMPTION 100 \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/junonum/keymap.c b/layouts/community/ortho_4x12/junonum/keymap.c
new file mode 100644
index 0000000000..365b8ad4ef
--- /dev/null
+++ b/layouts/community/ortho_4x12/junonum/keymap.c
@@ -0,0 +1,342 @@
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST,
+
+ _FN1,
+ _DPAD,
+ _DPADNUM
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ BACKLIT,
+ EXT_PLV,
+
+ DP_ON,
+ DP_OFF
+};
+
+#define SHIFTEN RSFT_T(KC_ENT)
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define SPACEFN LT(_FN1, KC_SPC)
+#define DPADNUM MO(_DPADNUM)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_ortho_4x12(
+ 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, SHIFTEN,
+ _______, KC_LCTL, KC_LGUI, KC_LALT, LOWER, SPACEFN, SPACEFN, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ [_COLEMAK] = LAYOUT_ortho_4x12(
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_TAB, 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, SHIFTEN,
+ _______, KC_LCTL, KC_LGUI, KC_LALT, LOWER, SPACEFN, SPACEFN, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ [_DVORAK] = LAYOUT_ortho_4x12(
+ KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SHIFTEN,
+ _______, KC_LCTL, KC_LGUI, KC_LALT, LOWER, SPACEFN, SPACEFN, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+
+ [_LOWER] = LAYOUT_ortho_4x12(
+ KC_TILD, _______, _______, _______, _______, _______, _______, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_DLR, KC_PERC, KC_CIRC, KC_UNDS, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_EXLM, KC_AT, KC_HASH, KC_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [_RAISE] = LAYOUT_ortho_4x12(
+ KC_GRV, _______, _______, KC_LBRC, KC_RBRC, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, KC_4, KC_5, KC_6, KC_MINUS, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_EQUAL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [_PLOVER] = LAYOUT_ortho_4x12(
+ 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] = LAYOUT_ortho_4x12(
+ _______, 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, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN1] = LAYOUT_ortho_4x12(
+ KC_MENU, _______, KC_PGUP, KC_UP, KC_PGDN, KC_INS, _______, _______, KC_UP, _______, KC_PSCR, _______,
+ KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL ,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, DP_ON, _______, _______, _______
+ ),
+
+ // Slightly modified layer with inverted T-shaped directional pad
+ [_DPAD] = LAYOUT_ortho_4x12(
+ 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_UP, KC_ENT ,
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, DPADNUM, KC_SPC, KC_SPC, LOWER, DP_OFF, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ // Extended layer for weapon switching
+ [_DPADNUM] = LAYOUT_ortho_4x12(
+ XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, XXXXXXX, DPADNUM, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+
+ // Borrowing audio from unused audio
+ // Caps Lock on and off sound too similar
+
+ float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND);
+ float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+
+ float dpad_song_on[][2] = SONG(ROCK_A_BYE_BABY);
+ float dpad_song_off[][2] = SONG(MAJOR_SOUND);
+#endif
+
+// Disable LED on Rev6
+#ifdef KEYBOARD_planck_rev6
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+#else
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // LED control, lighting up when Fn layer is activated
+ state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+ switch (get_highest_layer(state)) {
+ case _QWERTY:
+ backlight_set(0);
+ break;
+ case _FN1:
+ backlight_set(3);
+ break;
+ case _DPAD:
+ backlight_set(3);
+ break;
+ }
+ return state;
+}
+
+#endif
+
+
+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
+ writePinLow(E6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ writePinHigh(E6);
+ #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;
+
+
+// Play audio upon switching Caps Lock and custom layers
+
+ case KC_CAPS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ if (host_keyboard_led_state().caps_lock) {
+ PLAY_SONG(caps_song_off);
+ } else {
+ PLAY_SONG(caps_song_on);
+ }
+ #endif
+ }
+ return true;
+
+ case DP_ON:
+ if (record->event.pressed) {
+
+ } else { // only actived upon key release
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(dpad_song_on);
+ #endif
+
+ layer_off(_FN1);
+ layer_on(_DPAD);
+ }
+
+ case DP_OFF:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(dpad_song_off);
+ #endif
+
+ layer_off(_DPAD);
+ }
+ }
+ 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) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+
+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;
+ }
+} \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/junonum/readme.md b/layouts/community/ortho_4x12/junonum/readme.md
new file mode 100644
index 0000000000..f6c148596d
--- /dev/null
+++ b/layouts/community/ortho_4x12/junonum/readme.md
@@ -0,0 +1,11 @@
+# junonum
+A universal ortholinear 4x12 keymap created by Juno Nguyen
+
+## Features:
+* Successor to *juno*
+* Numpad-like cluster for the numerics.
+* ESDF and IJKL arrow cluster from SpaceFn
+* Huge amount of omissions of the redundant keys.
+* minimalism (not really).
+
+Refined since Oct 2019 \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/junonum/rules.mk b/layouts/community/ortho_4x12/junonum/rules.mk
new file mode 100644
index 0000000000..e206273f82
--- /dev/null
+++ b/layouts/community/ortho_4x12/junonum/rules.mk
@@ -0,0 +1,16 @@
+SRC += muse.c
+
+ifeq ($(strip $(KEYBOARD)), planck/rev6)
+ BACKLIGHT_ENABLE = no
+else
+ BACKLIGHT_ENABLE = yes
+endif
+
+MIDI_ENABLE=no
+RGBLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+
+BOOTMAGIC_ENABLE = no # mainly to save space \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c b/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
index b1341d41f9..07bc15c2af 100644
--- a/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
+++ b/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
@@ -1,5 +1,4 @@
-
-// generated from users/manna-harbour_miryoku/miryoku.org
+// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
#define LAYOUT_miryoku(\
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09,\
diff --git a/layouts/community/ortho_5x12/drashna/rules.mk b/layouts/community/ortho_5x12/drashna/rules.mk
index cae4b27bab..b5d55a681d 100644
--- a/layouts/community/ortho_5x12/drashna/rules.mk
+++ b/layouts/community/ortho_5x12/drashna/rules.mk
@@ -4,7 +4,6 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
TAP_DANCE_ENABLE = no
-AUDIO_ENABLE = yes
NKRO_ENABLE = yes
ifeq ($(strip $(KEYBOARD)), fractal)
diff --git a/layouts/default/60_abnt2/default_60_abnt2/keymap.c b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
index c66cba7bee..e1e4a5a7e1 100644
--- a/layouts/default/60_abnt2/default_60_abnt2/keymap.c
+++ b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
@@ -1,16 +1,42 @@
#include QMK_KEYBOARD_H
+
#include "keymap_br_abnt2.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ´ │ [ │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ç │ ~ │ ] │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │ Shift│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│ MO1│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
[0] = LAYOUT_60_abnt2(
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, BR_ACUT, BR_LBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCDL, BR_TILD, BR_RBRC, KC_ENT,
KC_LSFT, BR_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, BR_SCLN, BR_SLSH, KC_RSFT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_RCTL
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │ ' │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Delete│
+ * └───┴───┴───┴───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───────┘
+ * │ Tab │ Q │ W │ E │Rst│ T │Ins│Hom│ ↑ │End│PgU│ ´ │ [ │     │
+ * ├─────┴┬──┴┬──┴┬──└───┘┬──└───┴┬──┴┬──┴┬──┴┬──┴â”──┴┬──┴â” Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ â†Â â”‚ ↓ │ → │PgD│ ~ │ ] │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─└───┴───┴───┴───┘─┬─┴─┬─┴────┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │ Shift│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│ MO1│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
[1] = LAYOUT_60_abnt2(
BR_QUOT, 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,
_______, _______, _______, _______, RESET, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______,
@@ -18,5 +44,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
-
};
diff --git a/layouts/default/60_ansi/default_60_ansi/keymap.c b/layouts/default/60_ansi/default_60_ansi/keymap.c
index ec98612fa5..832fc99d5e 100644
--- a/layouts/default/60_ansi/default_60_ansi/keymap.c
+++ b/layouts/default/60_ansi/default_60_ansi/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi(
- 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_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 , KC_RGUI , KC_APP , KC_RCTL
- )
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_ansi(
+ 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_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, KC_RGUI, KC_APP, KC_RCTL
+ )
};
diff --git a/layouts/default/60_ansi/readme.md b/layouts/default/60_ansi/readme.md
index 15f51d3fa1..1b43cab4d9 100644
--- a/layouts/default/60_ansi/readme.md
+++ b/layouts/default/60_ansi/readme.md
@@ -1,3 +1,3 @@
# 60_ansi
- LAYOUT_60_ansi \ No newline at end of file
+ LAYOUT_60_ansi
diff --git a/layouts/default/60_ansi_split_bs_rshift/default_60_ansi_split_bs_rshift/keymap.c b/layouts/default/60_ansi_split_bs_rshift/default_60_ansi_split_bs_rshift/keymap.c
index efb6fbcf07..7a65706322 100644
--- a/layouts/default/60_ansi_split_bs_rshift/default_60_ansi_split_bs_rshift/keymap.c
+++ b/layouts/default/60_ansi_split_bs_rshift/default_60_ansi_split_bs_rshift/keymap.c
@@ -1,21 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = 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,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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT ,KC_RSFT,
- KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , KC_RGUI , KC_APP , KC_RCTL
- )
-};
-
-// 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) {
-
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Sft│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = 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, 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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
};
diff --git a/layouts/default/60_ansi_split_bs_rshift/readme.md b/layouts/default/60_ansi_split_bs_rshift/readme.md
index 479463f9a3..362392ef8e 100644
--- a/layouts/default/60_ansi_split_bs_rshift/readme.md
+++ b/layouts/default/60_ansi_split_bs_rshift/readme.md
@@ -1,3 +1,3 @@
# 60_ansi_split_bs_rshift
- LAYOUT_60_ansi_split_bs_rshift \ No newline at end of file
+ LAYOUT_60_ansi_split_bs_rshift
diff --git a/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c b/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c
index e4562ede51..5487f0982c 100644
--- a/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c
+++ b/layouts/default/60_ansi_tsangan/default_60_ansi_tsangan/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi_tsangan(
- 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_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, KC_RGUI, KC_RCTL
- )
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤
+ * │Ctrl │GUI│ Alt │                           │ Alt │GUI│ Ctrl│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
+ [0] = LAYOUT_60_ansi_tsangan(
+ 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_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, KC_RGUI, KC_RCTL
+ )
};
diff --git a/layouts/default/60_hhkb/default_60_hhkb/keymap.c b/layouts/default/60_hhkb/default_60_hhkb/keymap.c
index 60d628f128..3885d3ae2b 100644
--- a/layouts/default/60_hhkb/default_60_hhkb/keymap.c
+++ b/layouts/default/60_hhkb/default_60_hhkb/keymap.c
@@ -1,65 +1,45 @@
#include QMK_KEYBOARD_H
-#define BASE 0
-#define HHKB 1
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* BASE Level: Default Layer
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
-
- |------+------+-----------------------+------+------|
- | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
- |------+------+-----------------------+------+------|
- */
-
- [BASE] = LAYOUT_60_hhkb( // 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_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, \
- 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(HHKB), \
- KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
-
-
-
- /* Layer HHKB: HHKB mode (HHKB Fn)
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | | | | | | | + | - | End | PgD | Dow | | | | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
-
- |------+------+----------------------+------+------+
- | **** | **** | ******************** | **** | **** |
- |------+------+----------------------+------+------+
-
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ Bspc│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│MO1│
+ * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
+ * │Alt│ GUI │                           │ GUI │Alt│
+ * └───┴─────┴───────────────────────────┴─────┴───┘
*/
-
- [HHKB] = LAYOUT_60_hhkb(
- 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_INS, 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)};
-
-// 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) {
-
+ [0] = LAYOUT_60_hhkb(
+ 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,
+ 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_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT
+ ),
+
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │Pwr│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Ins│Del│
+ * ├───┴─┬─┴───┴───┴───┴───┴───┴───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┘
+ * │Caps │ Q │ W │ E │ R │ T │ Y │ U │PSc│Scr│Pse│ ↑ │ ] │ Bspc│
+ * └─────┘┌───┬───┬───â”──┴┬──┴┌───┬──┴┬──┴┬──┴┬──┴┬──┴┬────────â”
+ * │ Ctrl │Vl-│Vl+│Mut│ F │ G │ * │ / │Hom│PgU│ â†Â â”‚ → │  Enter │
+ * ├──────└───┴───┴───┘─┬─┴─┬─└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┘
+ * │ Shift  │ Z │ X │ C │ V │ B │ + │ - │End│PgD│ ↓ │ Shift│MO1│
+ * └─────┬──┴┬──┴──┬┴───┴───┴───└───┴───┴───┴───┴───┘┬───┬─┴───┘
+ * │Alt│ GUI │                           │ GUI │Alt│
+ * └───┴─────┴───────────────────────────┴─────┴───┘
+ */
+ [1] = LAYOUT_60_hhkb(
+ 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_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______
+ )
};
diff --git a/layouts/default/60_hhkb/readme.md b/layouts/default/60_hhkb/readme.md
index f02d13e4d9..346cd6ef8a 100644
--- a/layouts/default/60_hhkb/readme.md
+++ b/layouts/default/60_hhkb/readme.md
@@ -1,3 +1,3 @@
# 60_hhkb
- LAYOUT_60_hhkb \ No newline at end of file
+ LAYOUT_60_hhkb
diff --git a/layouts/default/60_iso/default_60_iso/keymap.c b/layouts/default/60_iso/default_60_iso/keymap.c
index 85e0d3e3d1..f5cad85b16 100644
--- a/layouts/default/60_iso/default_60_iso/keymap.c
+++ b/layouts/default/60_iso/default_60_iso/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_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_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_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_LCTRL, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, KC_MENU, KC_RCTL
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_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_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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
)
};
diff --git a/layouts/default/60_iso/readme.md b/layouts/default/60_iso/readme.md
index 42ff805fb6..cd1071f2f3 100644
--- a/layouts/default/60_iso/readme.md
+++ b/layouts/default/60_iso/readme.md
@@ -1,3 +1,3 @@
# 60_iso
- LAYOUT_60_iso \ No newline at end of file
+ LAYOUT_60_iso
diff --git a/layouts/default/60_iso_split_bs_rshift/default_60_iso_split_bs_rshift/keymap.c b/layouts/default/60_iso_split_bs_rshift/default_60_iso_split_bs_rshift/keymap.c
new file mode 100644
index 0000000000..135f8ba9f9
--- /dev/null
+++ b/layouts/default/60_iso_split_bs_rshift/default_60_iso_split_bs_rshift/keymap.c
@@ -0,0 +1,24 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Sft│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+ [0] = LAYOUT_60_iso_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, 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_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_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
+};
diff --git a/layouts/default/60_iso_split_bs_rshift/info.json b/layouts/default/60_iso_split_bs_rshift/info.json
new file mode 100644
index 0000000000..29a88507b9
--- /dev/null
+++ b/layouts/default/60_iso_split_bs_rshift/info.json
@@ -0,0 +1,81 @@
+{
+ "keyboard_name": "60% ISO layout with split Backspace and Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "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":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},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"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":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":12.5, "y":4, "w":1.25},
+ {"x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_split_bs_rshift/layout.json b/layouts/default/60_iso_split_bs_rshift/layout.json
new file mode 100644
index 0000000000..1ace1f3864
--- /dev/null
+++ b/layouts/default/60_iso_split_bs_rshift/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:1.75},"",""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},""]
diff --git a/layouts/default/60_iso_split_bs_rshift/readme.md b/layouts/default/60_iso_split_bs_rshift/readme.md
new file mode 100644
index 0000000000..ff7fa16454
--- /dev/null
+++ b/layouts/default/60_iso_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_split_bs_rshift
+
+ LAYOUT_60_iso_split_bs_rshift
diff --git a/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c b/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c
index 94d7630207..4082dc024a 100644
--- a/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c
+++ b/layouts/default/60_iso_tsangan/default_60_iso_tsangan/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤
+ * │Ctrl │GUI│ Alt │                           │ Alt │GUI│ Ctrl│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
[0] = LAYOUT_60_iso_tsangan(
- 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_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_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_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
)
};
diff --git a/layouts/default/60_tsangan_hhkb/default_60_tsangan_hhkb/keymap.c b/layouts/default/60_tsangan_hhkb/default_60_tsangan_hhkb/keymap.c
index c9c8313298..c4d102ad18 100644
--- a/layouts/default/60_tsangan_hhkb/default_60_tsangan_hhkb/keymap.c
+++ b/layouts/default/60_tsangan_hhkb/default_60_tsangan_hhkb/keymap.c
@@ -1,21 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_tsangan_hhkb(
- 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_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_RSFT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│Sft│
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │Ctrl │GUI│ Alt │                           │ Alt │GUI│ Ctrl│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
+ [0] = LAYOUT_60_tsangan_hhkb(
+ 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_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_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
)
};
-
-// 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) {
-
-};
diff --git a/layouts/default/60_tsangan_hhkb/readme.md b/layouts/default/60_tsangan_hhkb/readme.md
index f1e955f1e7..78a0b82bee 100644
--- a/layouts/default/60_tsangan_hhkb/readme.md
+++ b/layouts/default/60_tsangan_hhkb/readme.md
@@ -1,3 +1,3 @@
# 60_tsangan_hhkb
- LAYOUT_60_tsangan_hhkb \ No newline at end of file
+ LAYOUT_60_tsangan_hhkb
diff --git a/layouts/default/65_ansi/default_65_ansi/keymap.c b/layouts/default/65_ansi/default_65_ansi/keymap.c
index 69fcccd632..cc88c6342e 100644
--- a/layouts/default/65_ansi/default_65_ansi/keymap.c
+++ b/layouts/default/65_ansi/default_65_ansi/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_65_ansi(\
- 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_BSLS, 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_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
- }; \ No newline at end of file
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │PgD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │                        │Alt│GUI│Ctl│ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_65_ansi(
+ 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_BSLS, 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_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/65_ansi/readme.md b/layouts/default/65_ansi/readme.md
index 0cde8e727e..861a1e3200 100644
--- a/layouts/default/65_ansi/readme.md
+++ b/layouts/default/65_ansi/readme.md
@@ -2,4 +2,4 @@
LAYOUT_65_ansi
-This is the 65% ANSI 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). \ No newline at end of file
+This is the 65% ANSI 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).
diff --git a/layouts/default/65_ansi_blocker/default_65_ansi_blocker/keymap.c b/layouts/default/65_ansi_blocker/default_65_ansi_blocker/keymap.c
index fedcc0c73b..1c0fdc91d1 100644
--- a/layouts/default/65_ansi_blocker/default_65_ansi_blocker/keymap.c
+++ b/layouts/default/65_ansi_blocker/default_65_ansi_blocker/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_65_ansi_blocker(\
- 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_BSLS, 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_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, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
- }; \ No newline at end of file
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │PgD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │                        │ Alt│Ctrl│ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_65_ansi_blocker(
+ 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_BSLS, 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_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, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/65_ansi_blocker/readme.md b/layouts/default/65_ansi_blocker/readme.md
index 9e9a5f4541..fb7f58b46d 100644
--- a/layouts/default/65_ansi_blocker/readme.md
+++ b/layouts/default/65_ansi_blocker/readme.md
@@ -1,5 +1,5 @@
-# 65_blocker_ansi
+# 65_ansi_blocker
- LAYOUT_65_blocker_ansi
+ LAYOUT_65_ansi_blocker
-This is the 65% ANSI layout made popular by boards such as the Percent Canoe. \ No newline at end of file
+This is the 65% ANSI layout made popular by boards such as the Percent Canoe.
diff --git a/layouts/default/65_iso/default_65_iso/keymap.c b/layouts/default/65_iso/default_65_iso/keymap.c
index 085304a87f..6f9144c034 100644
--- a/layouts/default/65_iso/default_65_iso/keymap.c
+++ b/layouts/default/65_iso/default_65_iso/keymap.c
@@ -1,12 +1,24 @@
#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 \
- )
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │PgD│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │                        │Alt│GUI│Ctl│ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [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_blocker/default_65_iso_blocker/keymap.c b/layouts/default/65_iso_blocker/default_65_iso_blocker/keymap.c
new file mode 100644
index 0000000000..1bf0306a48
--- /dev/null
+++ b/layouts/default/65_iso_blocker/default_65_iso_blocker/keymap.c
@@ -0,0 +1,24 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │PgD│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │                        │ Alt│Ctrl│ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_65_iso_blocker(
+ 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/65_iso_blocker/info.json b/layouts/default/65_iso_blocker/info.json
new file mode 100644
index 0000000000..e709f28d76
--- /dev/null
+++ b/layouts/default/65_iso_blocker/info.json
@@ -0,0 +1,85 @@
+{
+ "keyboard_name": "65% ISO layout with blocker",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_iso_blocker": {
+ "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, "w":2},
+ {"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":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},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/65_iso_blocker/layout.json b/layouts/default/65_iso_blocker/layout.json
new file mode 100644
index 0000000000..a8081edaf2
--- /dev/null
+++ b/layouts/default/65_iso_blocker/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","",{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},"",{w:1.25},"",{w:1.25},"",{x:0.5},"","",""]
diff --git a/layouts/default/65_iso_blocker/readme.md b/layouts/default/65_iso_blocker/readme.md
new file mode 100644
index 0000000000..93799cb7d2
--- /dev/null
+++ b/layouts/default/65_iso_blocker/readme.md
@@ -0,0 +1,5 @@
+# 65_iso_blocker
+
+ LAYOUT_65_iso_blocker
+
+This is the 65% ISO layout made popular by boards such as the Percent Canoe.
diff --git a/layouts/default/66_ansi/default_66_ansi/keymap.c b/layouts/default/66_ansi/default_66_ansi/keymap.c
index 7895ae9467..bf8eedc2aa 100644
--- a/layouts/default/66_ansi/default_66_ansi/keymap.c
+++ b/layouts/default/66_ansi/default_66_ansi/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â” ┌───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │ │PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┬─┴─â”
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift  │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┼────┬───┼───┼───â”
+ * │Ctrl│GUI │Alt │                        │ Alt│GUI│ Ctl│ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴───┴────┴───┴───┴───┘
+ */
[0] = LAYOUT_66_ansi(
- 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_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, 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_RCTL,KC_LEFT,KC_DOWN,KC_RGHT
+ 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_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, 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_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
index 4f97acf41f..cd6363780f 100644
--- a/layouts/default/66_iso/default_66_iso/keymap.c
+++ b/layouts/default/66_iso/default_66_iso/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â” ┌───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │ │PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│ └───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┬─┴─â”
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift  │ ↑ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┼────┬───┼───┼───â”
+ * │Ctrl│GUI │Alt │                        │ Alt│GUI│ Ctl│ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴───┴────┴───┴───┴───┘
+ */
[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
+ 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_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_UP,
+ 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/68_ansi/default_68_ansi/keymap.c b/layouts/default/68_ansi/default_68_ansi/keymap.c
index 544f9c156a..6562e583e0 100644
--- a/layouts/default/68_ansi/default_68_ansi/keymap.c
+++ b/layouts/default/68_ansi/default_68_ansi/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_68_ansi(\
- 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_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_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
- }; \ No newline at end of file
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”┌───┬───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  ││Del│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤┌───â”
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift    ││ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬─┬──┴┼───┼───â”
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Ctrl│ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_68_ansi(
+ 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_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_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/68_ansi/info.json b/layouts/default/68_ansi/info.json
index 1aabb1cce7..8dc17fd9e8 100644
--- a/layouts/default/68_ansi/info.json
+++ b/layouts/default/68_ansi/info.json
@@ -1,5 +1,5 @@
{
- "keyboard_name": "68% ANSI layout",
+ "keyboard_name": "68-key ANSI layout",
"url": "",
"maintainer": "qmk",
"width": 17.25,
diff --git a/layouts/default/68_ansi/readme.md b/layouts/default/68_ansi/readme.md
index 2180973de8..941e4246eb 100644
--- a/layouts/default/68_ansi/readme.md
+++ b/layouts/default/68_ansi/readme.md
@@ -2,4 +2,4 @@
LAYOUT_68_ansi
-This is the 68 key ANSI layout made popular by boards such as the Magicforce 68 and Varmilo VA68M. \ No newline at end of file
+This is the 68 key ANSI layout made popular by boards such as the Magicforce 68 and Varmilo VA68M.
diff --git a/layouts/default/68_iso/default_68_iso/keymap.c b/layouts/default/68_iso/default_68_iso/keymap.c
new file mode 100644
index 0000000000..46f9245816
--- /dev/null
+++ b/layouts/default/68_iso/default_68_iso/keymap.c
@@ -0,0 +1,24 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”┌───┬───â”
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     ││Del│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│└───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤┌───â”
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift    ││ ↑ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬─┬──┴┼───┼───â”
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Ctrl│ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_68_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_INS, 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_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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/68_iso/info.json b/layouts/default/68_iso/info.json
new file mode 100644
index 0000000000..e427ee8f6f
--- /dev/null
+++ b/layouts/default/68_iso/info.json
@@ -0,0 +1,86 @@
+{
+ "keyboard_name": "68-key ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_68_iso": {
+ "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, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "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":15.25, "y":1},
+ {"x":16.25, "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},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"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":2.75},
+ {"x":15.25, "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":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/68_iso/layout.json b/layouts/default/68_iso/layout.json
new file mode 100644
index 0000000000..b1a0c13e7b
--- /dev/null
+++ b/layouts/default/68_iso/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:2.75},"",{x:0.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.5},"","",""]
diff --git a/layouts/default/68_iso/readme.md b/layouts/default/68_iso/readme.md
new file mode 100644
index 0000000000..0223b1121a
--- /dev/null
+++ b/layouts/default/68_iso/readme.md
@@ -0,0 +1,5 @@
+# 68_iso
+
+ LAYOUT_68_iso
+
+This is the 68 (actually 69) key ISO layout made popular by boards such as the Magicforce 69-key and Varmilo VA69M.
diff --git a/layouts/default/75_ansi/default_75_ansi/keymap.c b/layouts/default/75_ansi/default_75_ansi/keymap.c
index cba2f21c03..b2c91eb2d3 100644
--- a/layouts/default/75_ansi/default_75_ansi/keymap.c
+++ b/layouts/default/75_ansi/default_75_ansi/keymap.c
@@ -1,12 +1,27 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_75_ansi(\
- 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_PAUS, 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_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_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_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
- }; \ No newline at end of file
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Pse│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │PgD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │                        │Alt│GUI│Ctl│ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_75_ansi(
+ 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_PAUS, 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_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_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_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/75_ansi/readme.md b/layouts/default/75_ansi/readme.md
index 2ad7222721..df25851906 100644
--- a/layouts/default/75_ansi/readme.md
+++ b/layouts/default/75_ansi/readme.md
@@ -1,3 +1,3 @@
# 75_ansi
- LAYOUT_75_ansi \ No newline at end of file
+ LAYOUT_75_ansi
diff --git a/layouts/default/75_iso/default_75_iso/keymap.c b/layouts/default/75_iso/default_75_iso/keymap.c
index 2fcca4d2b5..06c641f531 100644
--- a/layouts/default/75_iso/default_75_iso/keymap.c
+++ b/layouts/default/75_iso/default_75_iso/keymap.c
@@ -1,13 +1,27 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_75_iso(\
- 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_PAUS, 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_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
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Pse│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │PgU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │PgD│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │                        │Alt│GUI│Ctl│ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_75_iso(
+ 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_PAUS, 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_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/75_iso/readme.md b/layouts/default/75_iso/readme.md
index cbcaeaf9e5..8c601b7e82 100644
--- a/layouts/default/75_iso/readme.md
+++ b/layouts/default/75_iso/readme.md
@@ -1,3 +1,3 @@
# 75_iso
- LAYOUT_75_iso \ No newline at end of file
+ LAYOUT_75_iso
diff --git a/layouts/default/ergodox/default_ergodox/keymap.c b/layouts/default/ergodox/default_ergodox/keymap.c
index 697b53f9f5..5cb4a4f482 100644
--- a/layouts/default/ergodox/default_ergodox/keymap.c
+++ b/layouts/default/ergodox/default_ergodox/keymap.c
@@ -1,23 +1,40 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌──────┬───┬───┬───┬───┬───┬───â”                     ┌───┬───┬───┬───┬───┬───┬──────â”
+ * │ `    │ 1 │ 2 │ 3 │ 4 │ 5 │ = │                     │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │    - │
+ * ├──────┼───┼───┼───┼───┼───┼───┤                     ├───┼───┼───┼───┼───┼───┼──────┤
+ * │ Tab  │ Q │ W │ E │ R │ T │ = │                     │ Y │ Y │ U │ I │ O │ P │    \ │
+ * ├──────┼───┼───┼───┼───┼───┤   │                     │   ├───┼───┼───┼───┼───┼──────┤
+ * │Escape│ A │ S │ D │ F │ G ├───┤                     ├───┤ H │ J │ K │ L │ ; │    ' │
+ * ├──────┼───┼───┼───┼───┼───┤   │                     │   ├───┼───┼───┼───┼───┼──────┤
+ * │Shift │ Z │ X │ C │ V │ B │ B │                     │ N │ N │ M │ , │ . │ / │ Shift│
+ * └──┬───┼───┼───┼───┼───┼───┴───┘ ┌───┬───â” ┌───┬───â” └───┴───┼───┼───┼───┼───┼───┬──┘
+ *    │Ctl│F4 │F5 │GUI│Alt│         │ C │ V │ │Alt│ A │         │ â†Â â”‚ ↓ │ ↑ │ → │GUI│
+ *    └───┴───┴───┴───┴───┘     ┌───┼───┼───┤ ├───┼───┼───â”     └───┴───┴───┴───┴───┘
+ *                              │   │   │PgU│ │PgD│   │   │
+ *                              │Bsp│Bsp├───┤ ├───┤Ent│   │
+ *                              │   │   │Del│ │Ctl│   │   │
+ *                              └───┴───┴───┘ └───┴───┴───┘
+ */
[0] = LAYOUT_ergodox(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_EQL,
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B,
- KC_LCTL, KC_F4, KC_F5, KC_LGUI,KC_LALT,
- KC_C, KC_V,
- KC_PGUP,
- KC_BSPC, KC_BSPC, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_EQL,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B,
+ KC_LCTL, KC_F4, KC_F5, KC_LGUI, KC_LALT,
+ KC_C, KC_V,
+ KC_PGUP,
+ KC_BSPC, KC_BSPC, KC_DEL,
- KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_N , KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
- KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_RGUI,
- KC_RALT, KC_A,
- KC_PGDN,
- KC_RCTL, KC_ENT, KC_SPC
- ),
-}; \ No newline at end of file
+ KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_N, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RGUI,
+ KC_RALT, KC_A,
+ KC_PGDN,
+ KC_RCTL, KC_ENT, KC_SPC
+ )
+};
diff --git a/layouts/default/ergodox/readme.md b/layouts/default/ergodox/readme.md
index ddbe1933c2..e69af2bdef 100644
--- a/layouts/default/ergodox/readme.md
+++ b/layouts/default/ergodox/readme.md
@@ -1,3 +1,3 @@
# ergodox
- LAYOUT_ergodox \ No newline at end of file
+ LAYOUT_ergodox
diff --git a/layouts/default/fullsize_ansi/default_fullsize_ansi/keymap.c b/layouts/default/fullsize_ansi/default_fullsize_ansi/keymap.c
index e5acc683aa..ee80eb4865 100644
--- a/layouts/default/fullsize_ansi/default_fullsize_ansi/keymap.c
+++ b/layouts/default/fullsize_ansi/default_fullsize_ansi/keymap.c
@@ -1,12 +1,29 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_fullsize_ansi(\
- 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_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_DEL, KC_END, KC_PGDN, 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_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_P1, KC_P2, KC_P3, KC_PENT,
- 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
- )
+ /*
+ * ┌───â”   ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───â”
+ * │Esc│   │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â” ┌───┬───┬───â” ┌───┬───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │ │Del│End│PgD│ │ 7 │ 8 │ 9 │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │               │ 4 │ 5 │ 6 │   │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───â”     ├───┼───┼───┼───┤
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │     │ ↑ │     │ 1 │ 2 │ 3 │   │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───â” ├───┴───┼───┤Ent│
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│ │ â†Â â”‚ ↓ │ → │ │   0   │ . │   │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
+ */
+ [0] = LAYOUT_fullsize_ansi(
+ 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_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_DEL, KC_END, KC_PGDN, 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_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_P1, KC_P2, KC_P3, KC_PENT,
+ 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
+ )
};
diff --git a/layouts/default/fullsize_ansi/readme.md b/layouts/default/fullsize_ansi/readme.md
index 4789b40fcc..9589abe0d7 100644
--- a/layouts/default/fullsize_ansi/readme.md
+++ b/layouts/default/fullsize_ansi/readme.md
@@ -1,3 +1,3 @@
# fullsize_ansi
- LAYOUT_fullsize_ansi \ No newline at end of file
+ LAYOUT_fullsize_ansi
diff --git a/layouts/default/fullsize_iso/default_fullsize_iso/keymap.c b/layouts/default/fullsize_iso/default_fullsize_iso/keymap.c
index d25c7e685c..f709ef5a6f 100644
--- a/layouts/default/fullsize_iso/default_fullsize_iso/keymap.c
+++ b/layouts/default/fullsize_iso/default_fullsize_iso/keymap.c
@@ -1,12 +1,29 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_fullsize_iso(\
- 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_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_DEL, KC_END, KC_PGDN, 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- 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
- )
+ /*
+ * ┌───â”   ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───â”
+ * │Esc│   │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â” ┌───┬───┬───â” ┌───┬───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │ │Del│End│PgD│ │ 7 │ 8 │ 9 │   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│ └───┴───┴───┘ ├───┼───┼───┤ + │
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │               │ 4 │ 5 │ 6 │   │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤     ┌───â”     ├───┼───┼───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │     │ ↑ │     │ 1 │ 2 │ 3 │   │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───â” ├───┴───┼───┤Ent│
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│ │ â†Â â”‚ ↓ │ → │ │   0   │ . │   │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
+ */
+ [0] = LAYOUT_fullsize_iso(
+ 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_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_DEL, KC_END, KC_PGDN, 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ 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
+ )
};
diff --git a/layouts/default/fullsize_iso/readme.md b/layouts/default/fullsize_iso/readme.md
index c369ba912f..65c7a89044 100644
--- a/layouts/default/fullsize_iso/readme.md
+++ b/layouts/default/fullsize_iso/readme.md
@@ -1,3 +1,3 @@
# fullsize_iso
- LAYOUT_fullsize_iso \ No newline at end of file
+ LAYOUT_fullsize_iso
diff --git a/layouts/default/numpad_4x4/default_numpad_4x4/keymap.c b/layouts/default/numpad_4x4/default_numpad_4x4/keymap.c
index 5ece34a672..b5f6e36bd9 100644
--- a/layouts/default/numpad_4x4/default_numpad_4x4/keymap.c
+++ b/layouts/default/numpad_4x4/default_numpad_4x4/keymap.c
@@ -1,11 +1,21 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_numpad_4x4(
- 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 \
- ),
-
+ /*
+ * ┌───┬───┬───┬───â”
+ * │ 7 │ 8 │ 9 │   │
+ * ├───┼───┼───┤ + │
+ * │ 4 │ 5 │ 6 │   │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │   │
+ * ├───┴───┼───┤Ent│
+ * │   0   │ . │   │
+ * └───────┴───┴───┘
+ */
+ [0] = LAYOUT_numpad_4x4(
+ 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
+ )
};
diff --git a/layouts/default/numpad_4x4/readme.md b/layouts/default/numpad_4x4/readme.md
index 2543da6345..5d4b8c6e31 100644
--- a/layouts/default/numpad_4x4/readme.md
+++ b/layouts/default/numpad_4x4/readme.md
@@ -1,3 +1,3 @@
# numpad_4x4
- LAYOUT_numpad_4x4 \ No newline at end of file
+ LAYOUT_numpad_4x4
diff --git a/layouts/default/numpad_5x4/default_numpad_5x4/keymap.c b/layouts/default/numpad_5x4/default_numpad_5x4/keymap.c
index 0e913248f2..31ec8cea67 100644
--- a/layouts/default/numpad_5x4/default_numpad_5x4/keymap.c
+++ b/layouts/default/numpad_5x4/default_numpad_5x4/keymap.c
@@ -1,19 +1,45 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_numpad_5x4(
- TG(1), 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 \
- ),
+ /*
+ * ┌───┬───┬───┬───â”
+ * │TG1│ / │ * │ - │
+ * ├───┼───┼───┼───┤
+ * │ 7 │ 8 │ 9 │   │
+ * ├───┼───┼───┤ + │
+ * │ 4 │ 5 │ 6 │   │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │   │
+ * ├───┴───┼───┤Ent│
+ * │   0   │ . │   │
+ * └───────┴───┴───┘
+ */
+ [0] = LAYOUT_numpad_5x4(
+ TG(1), 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
+ ),
- [1] = LAYOUT_numpad_5x4(
- _______, _______, _______, _______, \
- KC_HOME, KC_UP, KC_PGUP, \
- KC_LEFT, XXXXXXX, KC_RGHT, _______, \
- KC_END, KC_DOWN, KC_PGDN, \
- KC_INS, KC_DEL, _______ \
- ),
+ /*
+ * ┌───┬───┬───┬───â”
+ * │TG1│ / │ * │ - │
+ * ┌───┬───┬───â”───┤
+ * │Hom│ ↑ │PgU│   │
+ * ├───┼───┼───┤ + │
+ * │ â†Â â”‚   │ → │   │
+ * ├───┼───┼───┤───┤
+ * │End│ ↓ │PgD│   │
+ * ├───┴───┼───┤Ent│
+ * │Insert │Del│   │
+ * └───────┴───┘───┘
+ */
+ [1] = LAYOUT_numpad_5x4(
+ _______, _______, _______, _______,
+ KC_HOME, KC_UP, KC_PGUP,
+ KC_LEFT, XXXXXXX, KC_RGHT, _______,
+ KC_END, KC_DOWN, KC_PGDN,
+ KC_INS, KC_DEL, _______
+ )
};
diff --git a/layouts/default/numpad_5x4/readme.md b/layouts/default/numpad_5x4/readme.md
index 9465cef1c7..e3fb7171bc 100644
--- a/layouts/default/numpad_5x4/readme.md
+++ b/layouts/default/numpad_5x4/readme.md
@@ -1,3 +1,3 @@
# numpad_5x4
- LAYOUT_numpad_5x4 \ No newline at end of file
+ LAYOUT_numpad_5x4
diff --git a/layouts/default/numpad_5x6/default_numpad_5x6/keymap.c b/layouts/default/numpad_5x6/default_numpad_5x6/keymap.c
index 527d089052..4e1e9d7ed6 100644
--- a/layouts/default/numpad_5x6/default_numpad_5x6/keymap.c
+++ b/layouts/default/numpad_5x6/default_numpad_5x6/keymap.c
@@ -1,18 +1,45 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_numpad_5x6(
- KC_ESC, KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST, KC_PMNS,
- KC_A, KC_B, KC_P7, KC_P8, KC_P9,
- KC_C, KC_D, KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_E, KC_F, KC_P1, KC_P2, KC_P3,
- KC_LCTL, TG(1), KC_P0, KC_PDOT, KC_PENT
- ),
- [1] = LAYOUT_numpad_5x6(
- RESET, KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST, KC_PMNS,
- KC_A, KC_B, KC_HOME, KC_UP, KC_PGUP,
- KC_C, KC_D, KC_LEFT, KC_NO, KC_RGHT, KC_PPLS,
- KC_E, KC_F, KC_END, KC_DOWN, KC_PGDN,
- KC_LCTL, _______, KC_INS, KC_DEL, KC_PENT
+ /*
+ * ┌───┬───┬───┬───┬───┬───â”
+ * │Esc│ ( │ ) │ / │ * │ - │
+ * ├───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ 7 │ 8 │ 9 │   │
+ * ├───┼───┼───┼───┼───┤ + │
+ * │ C │ D │ 4 │ 5 │ 6 │   │
+ * ├───┼───┼───┼───┼───┼───┤
+ * │ E │ F │ 1 │ 2 │ 3 │   │
+ * ├───┼───┼───┴───┼───┤Ent│
+ * │Ctl│TG1│ 0     │ . │   │
+ * └───┴───┴───────┴───┴───┘
+ */
+ [0] = LAYOUT_numpad_5x6(
+ KC_ESC, KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_A, KC_B, KC_P7, KC_P8, KC_P9,
+ KC_C, KC_D, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_E, KC_F, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, TG(1), KC_P0, KC_PDOT, KC_PENT
),
+
+ /*
+ * ┌───â”───┬───┬───┬───┬───â”
+ * │Rst│ ( │ ) │ / │ * │ - │
+ * └───┘───┌───┬───┬───┬───â”
+ * │ A │ B │Hom│ ↑ │PgU│   │
+ * ├───┼───├───┼───┼───┤ + │
+ * │ C │ D │ â†Â â”‚   │ → │   │
+ * ├───┼───├───┼───┼───┼───┤
+ * │ E │ F │End│ ↓ │PgD│   │
+ * ├───┼───├───┴───┼───┤Ent│
+ * │Ctl│TG1│Insert │Del│   │
+ * └───┴───└───────┴───┴───┘
+ */
+ [1] = LAYOUT_numpad_5x6(
+ RESET, _______, _______, _______, _______, _______,
+ _______, _______, KC_HOME, KC_UP, KC_PGUP,
+ _______, _______, KC_LEFT, XXXXXXX, KC_RGHT, _______,
+ _______, _______, KC_END, KC_DOWN, KC_PGDN,
+ _______, _______, KC_INS, KC_DEL, _______
+ )
};
diff --git a/layouts/default/numpad_6x4/default_numpad_6x4/keymap.c b/layouts/default/numpad_6x4/default_numpad_6x4/keymap.c
index 3901595b71..b8669025fb 100644
--- a/layouts/default/numpad_6x4/default_numpad_6x4/keymap.c
+++ b/layouts/default/numpad_6x4/default_numpad_6x4/keymap.c
@@ -1,21 +1,51 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_numpad_6x4(
- KC_ESC, KC_TAB, MO(1), KC_BSPC, \
- 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 \
- ),
+ /*
+ * ┌───┬───┬───┬───â”
+ * │Esc│Tab│MO1│Bsp│
+ * ├───┼───┼───┼───┤
+ * │Num│ / │ * │ - │
+ * ├───┼───┼───┼───┤
+ * │ 7 │ 8 │ 9 │   │
+ * ├───┼───┼───┤ + │
+ * │ 4 │ 5 │ 6 │   │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │   │
+ * ├───┴───┼───┤Ent│
+ * │ 0     │ . │   │
+ * └───────┴───┴───┘
+ */
+ [0] = LAYOUT_numpad_6x4(
+ KC_ESC, KC_TAB, MO(1), KC_BSPC,
+ 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
+ ),
- [1] = LAYOUT_numpad_6x4(
- RESET, KC_TAB, KC_TRNS, KC_PEQL, \
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
- KC_HOME, KC_UP, KC_PGUP, \
- KC_LEFT, KC_NO, KC_RGHT, KC_PPLS, \
- KC_END, KC_DOWN, KC_PGDN, \
- KC_INS, KC_DEL, KC_PENT \
- ),
+ /*
+ * ┌───â”───┬───┬───â”
+ * │Rst│Tab│MO1│Bsp│
+ * └───┘───┼───┼───┤
+ * │Num│ / │ * │ - │
+ * ┌───┬───┬───â”───┤
+ * │Hom│ ↑ │PgU│   │
+ * ├───┼───┼───┤ + │
+ * │ â†Â â”‚   │ → │   │
+ * ├───┼───┼───┤───┤
+ * │End│ ↓ │PgD│   │
+ * ├───┴───┼───┤Ent│
+ * │Insert │Del│   │
+ * └───────┴───┘───┘
+ */
+ [1] = LAYOUT_numpad_6x4(
+ RESET, _______, _______, _______,
+ _______, _______, _______, _______,
+ KC_HOME, KC_UP, KC_PGUP,
+ KC_LEFT, XXXXXXX, KC_RGHT, _______,
+ KC_END, KC_DOWN, KC_PGDN,
+ KC_INS, KC_DEL, _______
+ )
};
diff --git a/layouts/default/numpad_6x4/readme.md b/layouts/default/numpad_6x4/readme.md
index c539baef75..063700d420 100644
--- a/layouts/default/numpad_6x4/readme.md
+++ b/layouts/default/numpad_6x4/readme.md
@@ -1,3 +1,3 @@
# numpad_6x4
- LAYOUT_numpad_6x4 \ No newline at end of file
+ LAYOUT_numpad_6x4
diff --git a/layouts/default/ortho_3x10/default_ortho_3x10/keymap.c b/layouts/default/ortho_3x10/default_ortho_3x10/keymap.c
index b779afc8af..7b8578a827 100644
--- a/layouts/default/ortho_3x10/default_ortho_3x10/keymap.c
+++ b/layouts/default/ortho_3x10/default_ortho_3x10/keymap.c
@@ -1,9 +1,18 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_3x10(
- 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_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
- )
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_3x10(
+ 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_SCLN,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+ )
};
diff --git a/layouts/default/ortho_4x10/default_ortho_4x10/keymap.c b/layouts/default/ortho_4x10/default_ortho_4x10/keymap.c
index 3f6285e2dd..ab39a2b6a7 100644
--- a/layouts/default/ortho_4x10/default_ortho_4x10/keymap.c
+++ b/layouts/default/ortho_4x10/default_ortho_4x10/keymap.c
@@ -1,10 +1,21 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_4x10(
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_4x10(
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J
)
};
diff --git a/layouts/default/ortho_4x12/default_ortho_4x12/keymap.c b/layouts/default/ortho_4x12/default_ortho_4x12/keymap.c
index 4a2f8fd955..b021fc32dc 100644
--- a/layouts/default/ortho_4x12/default_ortho_4x12/keymap.c
+++ b/layouts/default/ortho_4x12/default_ortho_4x12/keymap.c
@@ -1,10 +1,21 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_4x12(
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_4x12(
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L
)
-}; \ No newline at end of file
+};
diff --git a/layouts/default/ortho_4x12/readme.md b/layouts/default/ortho_4x12/readme.md
index 6963727c6e..5273e296d8 100644
--- a/layouts/default/ortho_4x12/readme.md
+++ b/layouts/default/ortho_4x12/readme.md
@@ -1,3 +1,3 @@
# ortho_4x12
- LAYOUT_ortho_4x12 \ No newline at end of file
+ LAYOUT_ortho_4x12
diff --git a/layouts/default/ortho_4x4/default_ortho_4x4/keymap.c b/layouts/default/ortho_4x4/default_ortho_4x4/keymap.c
index 79581fa618..8045da8083 100644
--- a/layouts/default/ortho_4x4/default_ortho_4x4/keymap.c
+++ b/layouts/default/ortho_4x4/default_ortho_4x4/keymap.c
@@ -1,10 +1,21 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_4x4(
- KC_A, KC_B, KC_C, KC_D,
- KC_A, KC_B, KC_C, KC_D,
- KC_A, KC_B, KC_C, KC_D,
- KC_A, KC_B, KC_C, KC_D
+ /*
+ * ┌───┬───┬───┬───â”
+ * │ 7 │ 8 │ 9 │ / │
+ * ├───┼───┼───┼───┤
+ * │ 4 │ 5 │ 6 │ * │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │ - │
+ * ├───┼───┼───┼───┤
+ * │ 0 │ . │Ent│ + │
+ * └───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_4x4(
+ KC_P7, KC_P8, KC_P9, KC_PSLS,
+ KC_P4, KC_P5, KC_P6, KC_PAST,
+ KC_P1, KC_P2, KC_P3, KC_PMNS,
+ KC_P0, KC_PDOT, KC_PENT, KC_PPLS
)
-}; \ No newline at end of file
+};
diff --git a/layouts/default/ortho_4x4/readme.md b/layouts/default/ortho_4x4/readme.md
index b7afef7b88..2c94c4c1cd 100644
--- a/layouts/default/ortho_4x4/readme.md
+++ b/layouts/default/ortho_4x4/readme.md
@@ -1,3 +1,3 @@
# ortho_4x4
- LAYOUT_ortho_4x4 \ No newline at end of file
+ LAYOUT_ortho_4x4
diff --git a/layouts/default/ortho_5x12/default_ortho_5x12/keymap.c b/layouts/default/ortho_5x12/default_ortho_5x12/keymap.c
index 89ad14bba7..51ef263a09 100644
--- a/layouts/default/ortho_5x12/default_ortho_5x12/keymap.c
+++ b/layouts/default/ortho_5x12/default_ortho_5x12/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_ortho_5x12(
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L
)
-}; \ No newline at end of file
+};
diff --git a/layouts/default/ortho_5x12/readme.md b/layouts/default/ortho_5x12/readme.md
index b5037efecd..956f2b7023 100644
--- a/layouts/default/ortho_5x12/readme.md
+++ b/layouts/default/ortho_5x12/readme.md
@@ -1,3 +1,3 @@
# ortho_5x12
- LAYOUT_ortho_5x12 \ No newline at end of file
+ LAYOUT_ortho_5x12
diff --git a/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c b/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c
index 2968cecdf1..9ad127db5b 100644
--- a/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c
+++ b/layouts/default/ortho_5x14/default_ortho_5x14/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Esc│Tab│ Q │ W │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Del│Cap│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Sft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Sft│ ↑ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ â†Â â”‚ → │Ctl│GUI│Alt│Ent│Ent│   │   │Alt│GUI│App│Ctl│ ↓ │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_ortho_5x14(
- 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_ESC, KC_TAB, KC_Q, KC_W, 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_NUHS,
- 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_LEFT, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_ENT, KC_ENT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_DOWN
+ 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_ESC, KC_TAB, KC_Q, KC_W, 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_NUHS,
+ 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_LEFT, KC_RGHT, KC_LCTL, KC_LGUI, KC_LALT, KC_ENT, KC_ENT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_DOWN
)
};
diff --git a/layouts/default/ortho_5x15/default_ortho_5x15/keymap.c b/layouts/default/ortho_5x15/default_ortho_5x15/keymap.c
index f67f324738..e6b12aecef 100644
--- a/layouts/default/ortho_5x15/default_ortho_5x15/keymap.c
+++ b/layouts/default/ortho_5x15/default_ortho_5x15/keymap.c
@@ -1,11 +1,24 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │ J │ K │ L │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ A │ B │ C │ D │ E │ F │ G │ H │ I │ J │ K │ L │ J │ K │ L │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
[0] = LAYOUT_ortho_5x15(
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
- KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, KC_L, KC_J, KC_K, KC_L
)
-}; \ No newline at end of file
+};
diff --git a/layouts/default/ortho_5x15/readme.md b/layouts/default/ortho_5x15/readme.md
index 137af0aeb0..2fe7c7f769 100644
--- a/layouts/default/ortho_5x15/readme.md
+++ b/layouts/default/ortho_5x15/readme.md
@@ -1,3 +1,3 @@
# ortho_5x15
- LAYOUT_ortho_5x15 \ No newline at end of file
+ LAYOUT_ortho_5x15
diff --git a/layouts/default/ortho_5x4/default_ortho_5x4/keymap.c b/layouts/default/ortho_5x4/default_ortho_5x4/keymap.c
index 39d397d909..ff22c3d60d 100644
--- a/layouts/default/ortho_5x4/default_ortho_5x4/keymap.c
+++ b/layouts/default/ortho_5x4/default_ortho_5x4/keymap.c
@@ -4,32 +4,58 @@ enum custom_keycodes {
KC_P00 = SAFE_RANGE
};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───â”
+ * │TG1│ / │ * │ - │
+ * ├───┼───┼───┼───┤
+ * │ 7 │ 8 │ 9 │ + │
+ * ├───┼───┼───┼───┤
+ * │ 4 │ 5 │ 6 │ % │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │ = │
+ * ├───┼───┼───┼───┤
+ * │ 0 │00 │ . │Ent│
+ * └───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_5x4(
+ TG(1), KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PERC,
+ KC_P1, KC_P2, KC_P3, KC_EQL,
+ KC_P0, KC_P00, KC_PDOT, KC_PENT
+ ),
+
+ /*
+ * ┌───┬───┬───┬───â”
+ * │TG1│ / │ * │ - │
+ * ┌───┬───┬───â”───┤
+ * │Hom│ ↑ │PgU│ + │
+ * ├───┼───┼───┤───┤
+ * │ â†Â â”‚   │ → │ % │
+ * ├───┼───┼───┤───┤
+ * │End│ ↓ │PgD│ = │
+ * ├───┼───┼───┤───┤
+ * │Ins│   │Del│Ent│
+ * └───┴───┴───┘───┘
+ */
+ [1] = LAYOUT_ortho_5x4(
+ _______, _______, _______, _______,
+ KC_HOME, KC_UP, KC_PGUP, _______,
+ KC_LEFT, XXXXXXX, KC_RGHT, _______,
+ KC_END, KC_DOWN, KC_PGDN, _______,
+ KC_INS, XXXXXXX, KC_DEL, _______
+ )
+};
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch(keycode) {
case KC_P00:
- // types Numpad 0 twice
- SEND_STRING(SS_TAP(X_KP_0) SS_TAP(X_KP_0));
+ tap_code(KC_P0);
+ tap_code(KC_P0);
return false;
}
}
return true;
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_5x4(
- TG(1), 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_P00, KC_PDOT, KC_PENT \
- ),
-
- [1] = LAYOUT_ortho_5x4(
- _______, _______, _______, _______, \
- KC_HOME, KC_UP, KC_PGUP, _______, \
- KC_LEFT, XXXXXXX, KC_RGHT, _______, \
- KC_END, KC_DOWN, KC_PGDN, _______, \
- KC_INS, XXXXXXX, KC_DEL, _______ \
- ),
-};
+}
diff --git a/layouts/default/ortho_5x4/readme.md b/layouts/default/ortho_5x4/readme.md
index f5b77e0fec..c953628ef6 100644
--- a/layouts/default/ortho_5x4/readme.md
+++ b/layouts/default/ortho_5x4/readme.md
@@ -1,3 +1,3 @@
# ortho_5x4
- LAYOUT_ortho_5x4 \ No newline at end of file
+ LAYOUT_ortho_5x4
diff --git a/layouts/default/ortho_6x4/default_ortho_6x4/keymap.c b/layouts/default/ortho_6x4/default_ortho_6x4/keymap.c
index 39c1ed4810..04e806cbd5 100644
--- a/layouts/default/ortho_6x4/default_ortho_6x4/keymap.c
+++ b/layouts/default/ortho_6x4/default_ortho_6x4/keymap.c
@@ -1,12 +1,67 @@
#include QMK_KEYBOARD_H
+enum custom_keycodes {
+ KC_P00 = SAFE_RANGE
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_ortho_6x4(
- KC_F1, KC_F2, KC_F3, KC_F4, \
- KC_F5, KC_F6, KC_F7, KC_F8, \
- KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_F13, KC_F14, KC_F15, KC_F16, \
- KC_F17, KC_F18, KC_F19, KC_F20, \
- KC_F21, KC_F22, KC_F23, KC_F24 \
- ),
+ /*
+ * ┌───┬───┬───┬───â”
+ * │Esc│Tab│MO1│Bsp│
+ * ├───┼───┼───┼───┤
+ * │Num│ / │ * │ - │
+ * ├───┼───┼───┼───┤
+ * │ 7 │ 8 │ 9 │ + │
+ * ├───┼───┼───┼───┤
+ * │ 4 │ 5 │ 6 │ % │
+ * ├───┼───┼───┼───┤
+ * │ 1 │ 2 │ 3 │ = │
+ * ├───┼───┼───┼───┤
+ * │ 0 │00 │ . │Ent│
+ * └───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_ortho_6x4(
+ KC_ESC, KC_TAB, MO(1), KC_BSPC,
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PERC,
+ KC_P1, KC_P2, KC_P3, KC_EQL,
+ KC_P0, KC_P00, KC_PDOT, KC_PENT
+ ),
+
+ /*
+ * ┌───â”───┬───┬───â”
+ * │Rst│Tab│MO1│Bsp│
+ * └───┘───┼───┼───┤
+ * │Num│ / │ * │ - │
+ * ┌───┬───┬───â”───┤
+ * │Hom│ ↑ │PgU│ + │
+ * ├───┼───┼───┤───┤
+ * │ â†Â â”‚   │ → │ % │
+ * ├───┼───┼───┤───┤
+ * │End│ ↓ │PgD│ = │
+ * ├───┼───┼───┤───┤
+ * │Ins│   │Del│Ent│
+ * └───┴───┴───┘───┘
+ */
+ [1] = LAYOUT_ortho_6x4(
+ RESET, _______, _______, _______,
+ _______, _______, _______, _______,
+ KC_HOME, KC_UP, KC_PGUP, _______,
+ KC_LEFT, XXXXXXX, KC_RGHT, _______,
+ KC_END, KC_DOWN, KC_PGDN, _______,
+ KC_INS, XXXXXXX, KC_DEL, _______
+ )
};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case KC_P00:
+ tap_code(KC_P0);
+ tap_code(KC_P0);
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/layouts/default/ortho_6x4/readme.md b/layouts/default/ortho_6x4/readme.md
index 6014d4b196..02b1c32d58 100644
--- a/layouts/default/ortho_6x4/readme.md
+++ b/layouts/default/ortho_6x4/readme.md
@@ -1,3 +1,3 @@
# ortho_6x4
- LAYOUT_ortho_6x4 \ No newline at end of file
+ LAYOUT_ortho_6x4
diff --git a/layouts/default/planck_mit/default_planck_mit/keymap.c b/layouts/default/planck_mit/default_planck_mit/keymap.c
index 3bf122b28a..54ddad2c4b 100644
--- a/layouts/default/planck_mit/default_planck_mit/keymap.c
+++ b/layouts/default/planck_mit/default_planck_mit/keymap.c
@@ -1,12 +1,21 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT_planck_mit(
- 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_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_APP, KC_LCTL, KC_LALT, KC_LGUI, KC_LT, KC_SPC, KC_GT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
- )
-
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │Tab│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │Bsp│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Esc│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Sft│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Ent│
+ * ├───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │App│Ctl│Alt│GUI│ < │       │ > │ â†Â â”‚ ↓ │ ↑ │ → │
+ * └───┴───┴───┴───┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_planck_mit(
+ 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_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_APP, KC_LCTL, KC_LALT, KC_LGUI, KC_LT, KC_SPC, KC_GT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ )
};
diff --git a/layouts/default/planck_mit/readme.md b/layouts/default/planck_mit/readme.md
index 171f704758..e1cf2c9e36 100644
--- a/layouts/default/planck_mit/readme.md
+++ b/layouts/default/planck_mit/readme.md
@@ -1,3 +1,3 @@
# planck_mit
- LAYOUT_planck_mit \ No newline at end of file
+ LAYOUT_planck_mit
diff --git a/layouts/default/tkl_ansi/default_tkl_ansi/keymap.c b/layouts/default/tkl_ansi/default_tkl_ansi/keymap.c
index 1db717c8d5..6ec646e34f 100644
--- a/layouts/default/tkl_ansi/default_tkl_ansi/keymap.c
+++ b/layouts/default/tkl_ansi/default_tkl_ansi/keymap.c
@@ -1,11 +1,29 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT_tkl_ansi(\
- 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,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT) \
+ /*
+ * ┌───â”   ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───â”
+ * │Esc│   │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â” ┌───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───â”
+ * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │     │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───â”
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi(
+ 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, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/layouts/default/tkl_ansi/readme.md b/layouts/default/tkl_ansi/readme.md
index 94d5df1220..cd4197ef4e 100644
--- a/layouts/default/tkl_ansi/readme.md
+++ b/layouts/default/tkl_ansi/readme.md
@@ -1,3 +1,3 @@
# tkl_ansi
- LAYOUT_tkl_ansi \ No newline at end of file
+ LAYOUT_tkl_ansi
diff --git a/layouts/default/tkl_iso/default_tkl_iso/keymap.c b/layouts/default/tkl_iso/default_tkl_iso/keymap.c
index eb4c48d657..bd2d83b3bc 100644
--- a/layouts/default/tkl_iso/default_tkl_iso/keymap.c
+++ b/layouts/default/tkl_iso/default_tkl_iso/keymap.c
@@ -1,12 +1,29 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_tkl_iso(\
- 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_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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ) \
+ /*
+ * ┌───â”   ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───┬───â” ┌───┬───┬───â”
+ * │Esc│   │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â” ┌───┬───┬───â”
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │     │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â” Ent│ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │    │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤     ┌───â”
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │     │ ↑ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───â”
+ * │Ctrl│GUI │Alt │                        │ Alt│ GUI│Menu│Ctrl│ │ â†Â â”‚ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_iso(
+ 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_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_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
};
diff --git a/layouts/default/tkl_iso/readme.md b/layouts/default/tkl_iso/readme.md
index 8bd8e694d7..27281687cd 100644
--- a/layouts/default/tkl_iso/readme.md
+++ b/layouts/default/tkl_iso/readme.md
@@ -1,3 +1,3 @@
# tkl_iso
- LAYOUT_tkl_iso \ No newline at end of file
+ LAYOUT_tkl_iso
diff --git a/lib/python/milc.py b/lib/python/milc.py
index e8599eff3f..4392c8376a 100644
--- a/lib/python/milc.py
+++ b/lib/python/milc.py
@@ -595,23 +595,25 @@ class MILC(object):
return entrypoint_func
- def add_subcommand(self, handler, description, name=None, **kwargs):
+ def add_subcommand(self, handler, description, name=None, hidden=False, **kwargs):
"""Register a subcommand.
If name is not provided we use `handler.__name__`.
"""
+
if self._inside_context_manager:
raise RuntimeError('You must run this before the with statement!')
if self._subparsers is None:
- self.add_subparsers()
+ self.add_subparsers(metavar="")
if not name:
name = handler.__name__.replace("_", "-")
self.acquire_lock()
-
- kwargs['help'] = description
+ if not hidden:
+ self._subparsers.metavar = "{%s,%s}" % (self._subparsers.metavar[1:-1], name) if self._subparsers.metavar else "{%s%s}" % (self._subparsers.metavar[1:-1], name)
+ kwargs['help'] = description
self.subcommands[name] = SubparserWrapper(self, name, self._subparsers.add_parser(name, **kwargs))
self.subcommands[name].set_defaults(entrypoint=handler)
@@ -619,11 +621,11 @@ class MILC(object):
return handler
- def subcommand(self, description, **kwargs):
+ def subcommand(self, description, hidden=False, **kwargs):
"""Decorator to register a subcommand.
"""
def subcommand_function(handler):
- return self.add_subcommand(handler, description, **kwargs)
+ return self.add_subcommand(handler, description, hidden=hidden, **kwargs)
return subcommand_function
diff --git a/lib/python/qmk/cli/compile.py b/lib/python/qmk/cli/compile.py
index 234ffb12ca..8e2d0cdbf4 100755
--- a/lib/python/qmk/cli/compile.py
+++ b/lib/python/qmk/cli/compile.py
@@ -37,7 +37,7 @@ def compile(cli):
cli.log.info('Creating {fg_cyan}%s{style_reset_all} keymap in {fg_cyan}%s', user_keymap['keymap'], keymap_path)
# Compile the keymap
- command = compile_configurator_json(cli.args.filename)
+ command = compile_configurator_json(user_keymap)
cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
diff --git a/lib/python/qmk/cli/docs.py b/lib/python/qmk/cli/docs.py
index b419891396..163c8b8015 100644
--- a/lib/python/qmk/cli/docs.py
+++ b/lib/python/qmk/cli/docs.py
@@ -1,21 +1,19 @@
"""Serve QMK documentation locally
"""
import http.server
+import os
from milc import cli
-class DocsHandler(http.server.SimpleHTTPRequestHandler):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, directory='docs', **kwargs)
-
-
@cli.argument('-p', '--port', default=8936, type=int, help='Port number to use.')
@cli.subcommand('Run a local webserver for QMK documentation.')
def docs(cli):
"""Spin up a local HTTPServer instance for the QMK docs.
"""
- with http.server.HTTPServer(('', cli.config.docs.port), DocsHandler) as httpd:
+ os.chdir('docs')
+
+ with http.server.HTTPServer(('', cli.config.docs.port), http.server.SimpleHTTPRequestHandler) as httpd:
cli.log.info("Serving QMK docs at http://localhost:%d/", cli.config.docs.port)
cli.log.info("Press Control+C to exit.")
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 1010eafb33..6ddc5571b4 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -2,13 +2,24 @@
Check up for QMK environment.
"""
+import os
import platform
import shutil
import subprocess
+import glob
from milc import cli
+def _udev_rule(vid, pid=None):
+ """ Helper function that return udev rules
+ """
+ if pid:
+ return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", ATTRS{idProduct}=="%s", MODE:="0666"' % (vid, pid)
+ else:
+ return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", MODE:="0666"' % vid
+
+
@cli.subcommand('Basic QMK environment checks')
def doctor(cli):
"""Basic QMK environment checks.
@@ -17,7 +28,6 @@ def doctor(cli):
TODO(unclaimed):
* [ ] Compile a trivial program with each compiler
- * [ ] Check for udev entries on linux
"""
cli.log.info('QMK Doctor is checking your environment.')
@@ -39,30 +49,49 @@ def doctor(cli):
ok = False
# Determine our OS and run platform specific tests
- OS = platform.system()
+ OS = platform.system() # noqa (N806), uppercase name is ok in this instance
if OS == "Darwin":
cli.log.info("Detected {fg_cyan}macOS.")
elif OS == "Linux":
cli.log.info("Detected {fg_cyan}Linux.")
- if shutil.which('systemctl'):
- mm_check = subprocess.run(['systemctl', 'list-unit-files'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=10, universal_newlines=True)
- if mm_check.returncode == 0:
- mm = False
- for line in mm_check.stdout.split('\n'):
- if 'ModemManager' in line and 'enabled' in line:
- mm = True
-
- if mm:
- cli.log.warn("{bg_yellow}Detected ModemManager. Please disable it if you are using a Pro-Micro.")
-
- else:
- cli.log.error('{bg_red}Could not run `systemctl list-unit-files`:')
- cli.log.error(mm_check.stderr)
-
- else:
- cli.log.warn("Can't find systemctl to check for ModemManager.")
+ # Checking for udev rules
+ udev_dir = "/etc/udev/rules.d/"
+ # These are the recommended udev rules
+ desired_rules = {
+ 'dfu': {_udev_rule("03eb", "2ff4"), _udev_rule("03eb", "2ffb"), _udev_rule("03eb", "2ff0")},
+ 'tmk': {_udev_rule("feed")},
+ 'input_club': {_udev_rule("1c11")},
+ 'stm32': {_udev_rule("1eaf", "0003"), _udev_rule("0483", "df11")},
+ 'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'},
+ }
+
+ if os.path.exists(udev_dir):
+ udev_rules = [rule for rule in glob.iglob(os.path.join(udev_dir, "*.rules")) if os.path.isfile(rule)]
+ # Collect all rules from the config files
+ current_rules = set()
+ for rule in udev_rules:
+ with open(rule, "r") as fd:
+ for line in fd.readlines():
+ line = line.strip()
+ if not line.startswith("#") and len(line):
+ current_rules.add(line)
+
+ # Check if the desired rules are among the currently present rules
+ for bootloader, rules in desired_rules.items():
+ if not rules.issubset(current_rules):
+ # If the rules for catalina are not present, check if ModemManager is running
+ if bootloader == "caterina":
+ if shutil.which("systemctl"):
+ mm_check = subprocess.run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10)
+ if mm_check.returncode == 0:
+ ok = False
+ cli.log.warn("{bg_yellow}Detected ModemManager without udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.")
+ else:
+ cli.log.warn("Can't find systemctl to check for ModemManager.")
+ else:
+ cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
else:
cli.log.info("Assuming {fg_cyan}Windows.")
diff --git a/lib/python/qmk/cli/flash.py b/lib/python/qmk/cli/flash.py
index 031cb94967..e897174a20 100644
--- a/lib/python/qmk/cli/flash.py
+++ b/lib/python/qmk/cli/flash.py
@@ -4,6 +4,7 @@ You can compile a keymap already in the repo or using a QMK Configurator export.
A bootloader must be specified.
"""
import subprocess
+from argparse import FileType
import qmk.path
from milc import cli
@@ -28,7 +29,7 @@ def print_bootloader_help():
@cli.argument('-bl', '--bootloader', default='flash', help='The flash command, corresponding to qmk\'s make options of bootloaders.')
-@cli.argument('filename', nargs='?', arg_only=True, help='The configurator export JSON to compile. Use this if you dont want to specify a keymap and keyboard.')
+@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), help='The configurator export JSON to compile.')
@cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Use this if you dont have a configurator file. Ignored when a configurator file is supplied.')
@cli.argument('-kb', '--keyboard', help='The keyboard to build a firmware for. Use this if you dont have a configurator file. Ignored when a configurator file is supplied.')
@cli.argument('-b', '--bootloaders', action='store_true', help='List the available bootloaders.')
@@ -65,7 +66,7 @@ def flash(cli):
cli.log.info('Creating {fg_cyan}%s{style_reset_all} keymap in {fg_cyan}%s', user_keymap['keymap'], keymap_path)
# Convert the JSON into a C file and write it to disk.
- command = compile_configurator_json(cli.args.filename, cli.args.bootloader)
+ command = compile_configurator_json(user_keymap, cli.args.bootloader)
cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py
index f83a89578e..6067d49ae7 100644
--- a/lib/python/qmk/commands.py
+++ b/lib/python/qmk/commands.py
@@ -25,16 +25,14 @@ def create_make_command(keyboard, keymap, target=None):
return ['make', ':'.join((keyboard, keymap, target))]
-def parse_configurator_json(configurator_filename):
+def parse_configurator_json(configurator_file):
"""Open and parse a configurator json export
"""
- file = open(configurator_filename)
- user_keymap = json.load(file)
- file.close()
+ user_keymap = json.load(configurator_file)
return user_keymap
-def compile_configurator_json(configurator_filename, bootloader=None):
+def compile_configurator_json(user_keymap, bootloader=None):
"""Convert a configurator export JSON file into a C file
Args:
@@ -47,9 +45,6 @@ def compile_configurator_json(configurator_filename, bootloader=None):
Returns:
A command to run to compile and flash the C file.
"""
- # Parse the configurator json
- user_keymap = parse_configurator_json(configurator_filename)
-
# Write the keymap C file
qmk.keymap.write(user_keymap['keyboard'], user_keymap['keymap'], user_keymap['layout'], user_keymap['layers'])
diff --git a/lib/python/qmk/tests/test_qmk_errors.py b/lib/python/qmk/tests/test_qmk_errors.py
index 1d8690b7ef..948e7ef741 100644
--- a/lib/python/qmk/tests/test_qmk_errors.py
+++ b/lib/python/qmk/tests/test_qmk_errors.py
@@ -1,7 +1,7 @@
from qmk.errors import NoSuchKeyboardError
-def test_NoSuchKeyboardError():
+def test_nosuchkeyboarderror():
try:
raise NoSuchKeyboardError("test message")
except NoSuchKeyboardError as e:
diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c
index 708022f68f..e57b31d103 100644
--- a/quantum/backlight/backlight.c
+++ b/quantum/backlight/backlight.c
@@ -21,6 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
backlight_config_t backlight_config;
+// TODO: migrate to backlight_config_t
+static uint8_t breathing_period = BREATHING_PERIOD;
+
/** \brief Backlight initialization
*
* FIXME: needs doc
@@ -191,3 +194,21 @@ void backlight_disable_breathing(void) {
*/
bool is_backlight_breathing(void) { return backlight_config.breathing; }
#endif
+
+// following are marked as weak purely for backwards compatibility
+__attribute__((weak)) void breathing_period_set(uint8_t value) { breathing_period = value ? value : 1; }
+
+__attribute__((weak)) uint8_t get_breathing_period(void) { return breathing_period; }
+
+__attribute__((weak)) void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
+
+__attribute__((weak)) void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
+
+__attribute__((weak)) void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
+
+// defaults for backlight api
+__attribute__((weak)) void backlight_init_ports(void) {}
+
+__attribute__((weak)) void backlight_set(uint8_t level) {}
+
+__attribute__((weak)) void backlight_task(void) {}
diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h
index 1e581055db..9f0a5e81d7 100644
--- a/quantum/backlight/backlight.h
+++ b/quantum/backlight/backlight.h
@@ -41,22 +41,39 @@ typedef union {
} backlight_config_t;
void backlight_init(void);
-void backlight_increase(void);
-void backlight_decrease(void);
void backlight_toggle(void);
void backlight_enable(void);
void backlight_disable(void);
bool is_backlight_enabled(void);
void backlight_step(void);
-void backlight_set(uint8_t level);
+void backlight_increase(void);
+void backlight_decrease(void);
void backlight_level(uint8_t level);
uint8_t get_backlight_level(void);
+// implementation specific
+void backlight_init_ports(void);
+void backlight_set(uint8_t level);
+void backlight_task(void);
+
#ifdef BACKLIGHT_BREATHING
+
void backlight_toggle_breathing(void);
void backlight_enable_breathing(void);
void backlight_disable_breathing(void);
bool is_backlight_breathing(void);
+
+void breathing_period_set(uint8_t value);
+uint8_t get_breathing_period(void);
+void breathing_period_default(void);
+void breathing_period_inc(void);
+void breathing_period_dec(void);
+
+// implementation specific
void breathing_enable(void);
void breathing_disable(void);
+void breathing_toggle(void);
+bool is_breathing(void);
+void breathing_pulse(void);
+void breathing_task(void);
#endif
diff --git a/quantum/backlight/backlight_arm.c b/quantum/backlight/backlight_arm.c
index 3f94ccef8e..f7065906f8 100644
--- a/quantum/backlight/backlight_arm.c
+++ b/quantum/backlight/backlight_arm.c
@@ -10,10 +10,6 @@
# error "Backlight support for STMF072 is not available. Please disable."
# endif
-# if defined(STM32F1XX) || defined(STM32F1xx)
-# define USE_GPIOV1
-# endif
-
// GPIOV2 && GPIOV3
# ifndef BACKLIGHT_PAL_MODE
# define BACKLIGHT_PAL_MODE 2
@@ -110,7 +106,6 @@ void backlight_task(void) {}
# define BREATHING_HALT_ON 2
# define BREATHING_STEPS 128
-static uint8_t breathing_period = BREATHING_PERIOD;
static uint8_t breathing_halt = BREATHING_NO_HALT;
static uint16_t breathing_counter = 0;
@@ -118,7 +113,7 @@ bool is_breathing(void) { return BACKLIGHT_PWM_DRIVER.config == &pwmCFG_breathin
static inline void breathing_min(void) { breathing_counter = 0; }
-static inline void breathing_max(void) { breathing_counter = breathing_period * 256 / 2; }
+static inline void breathing_max(void) { breathing_counter = get_breathing_period() * 256 / 2; }
void breathing_interrupt_enable(void) {
pwmStop(&BACKLIGHT_PWM_DRIVER);
@@ -170,17 +165,6 @@ void breathing_toggle(void) {
breathing_enable();
}
-void breathing_period_set(uint8_t value) {
- if (!value) value = 1;
- breathing_period = value;
-}
-
-void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
-
-void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
-
-void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
-
/* To generate breathing curve in python:
* from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
*/
@@ -191,7 +175,8 @@ static inline uint16_t scale_backlight(uint16_t v) { return v / BACKLIGHT_LEVELS
static void breathing_callback(PWMDriver *pwmp) {
(void)pwmp;
- uint16_t interval = (uint16_t)breathing_period * 256 / BREATHING_STEPS;
+ uint8_t breathing_period = get_breathing_period();
+ uint16_t interval = (uint16_t)breathing_period * 256 / BREATHING_STEPS;
// resetting after one period to prevent ugly reset at overflow.
breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
uint8_t index = breathing_counter / interval % BREATHING_STEPS;
@@ -207,12 +192,4 @@ static void breathing_callback(PWMDriver *pwmp) {
chSysUnlockFromISR();
}
-#else
-
-__attribute__((weak)) void backlight_init_ports(void) {}
-
-__attribute__((weak)) void backlight_set(uint8_t level) {}
-
-__attribute__((weak)) void backlight_task(void) {}
-
#endif
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index edda6ea0b6..7cf1e0fb30 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -206,7 +206,7 @@ static const pin_t backlight_pin = BACKLIGHT_PIN;
# endif
# ifdef NO_HARDWARE_PWM
-__attribute__((weak)) void backlight_init_ports(void) {
+void backlight_init_ports(void) {
// Setup backlight pin as output and output to on state.
FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
@@ -217,8 +217,6 @@ __attribute__((weak)) void backlight_init_ports(void) {
# endif
}
-__attribute__((weak)) void backlight_set(uint8_t level) {}
-
uint8_t backlight_tick = 0;
# ifndef BACKLIGHT_CUSTOM_DRIVER
@@ -303,7 +301,7 @@ static uint16_t cie_lightness(uint16_t v) {
static inline void set_pwm(uint16_t val) { OCRxx = val; }
# ifndef BACKLIGHT_CUSTOM_DRIVER
-__attribute__((weak)) void backlight_set(uint8_t level) {
+void backlight_set(uint8_t level) {
if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS;
if (level == 0) {
@@ -342,7 +340,6 @@ void backlight_task(void) {}
# define BREATHING_HALT_ON 2
# define BREATHING_STEPS 128
-static uint8_t breathing_period = BREATHING_PERIOD;
static uint8_t breathing_halt = BREATHING_NO_HALT;
static uint16_t breathing_counter = 0;
@@ -377,9 +374,9 @@ bool is_breathing(void) { return !!(TIMSKx & _BV(TOIEx)); }
do { \
breathing_counter = 0; \
} while (0)
-# define breathing_max() \
- do { \
- breathing_counter = breathing_period * 244 / 2; \
+# define breathing_max() \
+ do { \
+ breathing_counter = get_breathing_period() * 244 / 2; \
} while (0)
void breathing_enable(void) {
@@ -417,17 +414,6 @@ void breathing_toggle(void) {
breathing_enable();
}
-void breathing_period_set(uint8_t value) {
- if (!value) value = 1;
- breathing_period = value;
-}
-
-void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
-
-void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
-
-void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
-
/* To generate breathing curve in python:
* from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
*/
@@ -445,6 +431,7 @@ void breathing_task(void)
ISR(TIMERx_OVF_vect)
# endif
{
+ uint8_t breathing_period = get_breathing_period();
uint16_t interval = (uint16_t)breathing_period * 244 / BREATHING_STEPS;
// resetting after one period to prevent ugly reset at overflow.
breathing_counter = (breathing_counter + 1) % (breathing_period * 244);
@@ -459,7 +446,7 @@ ISR(TIMERx_OVF_vect)
# endif // BACKLIGHT_BREATHING
-__attribute__((weak)) void backlight_init_ports(void) {
+void backlight_init_ports(void) {
// Setup backlight pin as output and output to on state.
FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
@@ -500,10 +487,4 @@ __attribute__((weak)) void backlight_init_ports(void) {
# endif // hardware backlight
-#else // no backlight
-
-__attribute__((weak)) void backlight_init_ports(void) {}
-
-__attribute__((weak)) void backlight_set(uint8_t level) {}
-
-#endif // backlight \ No newline at end of file
+#endif // backlight
diff --git a/quantum/backlight/backlight_soft.c b/quantum/backlight/backlight_soft.c
index a6aba7782c..096b41d910 100644
--- a/quantum/backlight/backlight_soft.c
+++ b/quantum/backlight/backlight_soft.c
@@ -10,7 +10,7 @@
#endif
#ifndef BACKLIGHT_ON_STATE
-# define BACKLIGHT_ON_STATE 0
+# define BACKLIGHT_ON_STATE 1
#endif
#ifdef BACKLIGHT_PINS
@@ -20,6 +20,7 @@
{ BACKLIGHT_PIN }
#endif
+static uint16_t s_duty_pattern = 0;
static const pin_t backlight_pins[] = BACKLIGHT_PIN_INIT;
#define BACKLIGHT_LED_COUNT (sizeof(backlight_pins) / sizeof(pin_t))
@@ -46,14 +47,38 @@ void backlight_off(pin_t backlight_pin) {
}
void backlight_init_ports(void) {
- // Setup backlight pin as output and output to on state.
- FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
+ // Setup backlight pin as output and output to off state.
+ FOR_EACH_LED(setPinOutput(backlight_pin); backlight_off(backlight_pin);)
}
+// clang-format off
+
+/** \brief PWM duty patterns
+ *
+ * We scale the current backlight level to an index within this array. This allows
+ * backlight_task to focus on just switching LEDs on/off, and we can predict the duty pattern
+ */
+static uint16_t backlight_duty_table[] = {
+ 0b0000000000000000,
+ 0b1000000000000000,
+ 0b1000000010000000,
+ 0b1000001000010000,
+ 0b1000100010001000,
+ 0b1001001001001000,
+ 0b1010101010101010,
+ 0b1110111011101110,
+ 0b1111111111111111,
+};
+#define backlight_duty_table_size (sizeof(backlight_duty_table) / sizeof(backlight_duty_table[0]))
+
+// clang-format on
+
+static uint8_t scale_backlight(uint8_t v) { return v * (backlight_duty_table_size - 1) / BACKLIGHT_LEVELS; }
+
void backlight_task(void) {
static uint8_t backlight_tick = 0;
- if ((0xFFFF >> (get_backlight_level() * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
+ if (s_duty_pattern & ((uint16_t)1 << backlight_tick)) {
FOR_EACH_LED(backlight_on(backlight_pin);)
} else {
FOR_EACH_LED(backlight_off(backlight_pin);)
@@ -61,6 +86,4 @@ void backlight_task(void) {
backlight_tick = (backlight_tick + 1) % 16;
}
-void backlight_set(uint8_t level) {
- // noop as backlight_task uses get_backlight_level()
-}
+void backlight_set(uint8_t level) { s_duty_pattern = backlight_duty_table[scale_backlight(level)]; }
diff --git a/quantum/color.c b/quantum/color.c
index 1f398e2403..8bd52444fa 100644
--- a/quantum/color.c
+++ b/quantum/color.c
@@ -85,3 +85,17 @@ RGB hsv_to_rgb(HSV hsv) {
return rgb;
}
+
+#ifdef RGBW
+#ifndef MIN
+# define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+void convert_rgb_to_rgbw(LED_TYPE *led) {
+ // Determine lowest value in all three colors, put that into
+ // the white channel and then shift all colors by that amount
+ led->w = MIN(led->r, MIN(led->g, led->b));
+ led->r -= led->w;
+ led->g -= led->w;
+ led->b -= led->w;
+}
+#endif
diff --git a/quantum/color.h b/quantum/color.h
index 6781646628..58d4f0407f 100644
--- a/quantum/color.h
+++ b/quantum/color.h
@@ -64,5 +64,7 @@ typedef struct PACKED {
#endif
RGB hsv_to_rgb(HSV hsv);
-
+#ifdef RGBW
+void convert_rgb_to_rgbw(LED_TYPE *led);
+#endif
#endif // COLOR_H
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index ca056f630e..11d28592d6 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -20,28 +20,37 @@
#include "progmem.h" // to read default from flash
#include "quantum.h" // for send_string()
#include "dynamic_keymap.h"
-
-#ifdef DYNAMIC_KEYMAP_ENABLE
-
-# ifndef DYNAMIC_KEYMAP_EEPROM_ADDR
-# error DYNAMIC_KEYMAP_EEPROM_ADDR not defined
-# endif
-
-# ifndef DYNAMIC_KEYMAP_LAYER_COUNT
-# error DYNAMIC_KEYMAP_LAYER_COUNT not defined
-# endif
-
-# ifndef DYNAMIC_KEYMAP_MACRO_COUNT
-# error DYNAMIC_KEYMAP_MACRO_COUNT not defined
-# endif
-
-# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-# error DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR not defined
-# endif
-
-# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE
-# error DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE not defined
-# endif
+#include "via.h" // for default VIA_EEPROM_ADDR_END
+
+#ifndef DYNAMIC_KEYMAP_LAYER_COUNT
+# define DYNAMIC_KEYMAP_LAYER_COUNT 4
+#endif
+
+#ifndef DYNAMIC_KEYMAP_MACRO_COUNT
+# define DYNAMIC_KEYMAP_MACRO_COUNT 16
+#endif
+
+// If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h,
+// default it start after VIA_EEPROM_CUSTOM_ADDR+VIA_EEPROM_CUSTOM_SIZE
+#ifndef DYNAMIC_KEYMAP_EEPROM_ADDR
+# ifdef VIA_EEPROM_CUSTOM_CONFIG_ADDR
+# define DYNAMIC_KEYMAP_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR+VIA_EEPROM_CUSTOM_CONFIG_SIZE)
+# else
+# error DYNAMIC_KEYMAP_EEPROM_ADDR not defined
+# endif
+#endif
+
+// Dynamic macro starts after dynamic keymaps
+#ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+# define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_EEPROM_ADDR+(DYNAMIC_KEYMAP_LAYER_COUNT*MATRIX_ROWS*MATRIX_COLS*2))
+#endif
+
+// Dynamic macro uses up all remaining memory
+// Assumes 1K EEPROM on ATMega32U4
+// Override for anything different
+#ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE
+# define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR)
+#endif
uint8_t dynamic_keymap_get_layer_count(void) { return DYNAMIC_KEYMAP_LAYER_COUNT; }
@@ -208,5 +217,3 @@ void dynamic_keymap_macro_send(uint8_t id) {
send_string(data);
}
}
-
-#endif // DYNAMIC_KEYMAP_ENABLE
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 4aeb3d0cde..c41b89f495 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -37,8 +37,8 @@ static pin_t encoders_pad_b[] = ENCODERS_PAD_B;
static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
-static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0};
-static int8_t encoder_pulses[NUMBER_OF_ENCODERS] = {0};
+static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0};
+static int8_t encoder_pulses[NUMBER_OF_ENCODERS] = {0};
#ifdef SPLIT_KEYBOARD
// right half encoders come over as second set of encoders
@@ -79,27 +79,27 @@ void encoder_init(void) {
}
static void encoder_update(int8_t index, uint8_t state) {
- encoder_pulses[index] += encoder_LUT[state & 0xF];
- if (encoder_pulses[index] >= ENCODER_RESOLUTION) {
+ uint8_t i = index;
+#ifdef SPLIT_KEYBOARD
+ index += thisHand;
+#endif
+ encoder_pulses[i] += encoder_LUT[state & 0xF];
+ if (encoder_pulses[i] >= ENCODER_RESOLUTION) {
encoder_value[index]++;
encoder_update_kb(index, true);
}
- if (encoder_pulses[index] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
+ if (encoder_pulses[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
encoder_value[index]--;
encoder_update_kb(index, false);
}
- encoder_pulses[index] %= ENCODER_RESOLUTION;
+ encoder_pulses[i] %= ENCODER_RESOLUTION;
}
void encoder_read(void) {
- for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
+ for (uint8_t i = 0; i < NUMBER_OF_ENCODERS; i++) {
encoder_state[i] <<= 2;
encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
-#if SPLIT_KEYBOARD
- encoder_update(i + thisHand, encoder_state[i]);
-#else
encoder_update(i, encoder_state[i]);
-#endif
}
}
@@ -107,9 +107,9 @@ void encoder_read(void) {
void encoder_state_raw(uint8_t* slave_state) { memcpy(slave_state, &encoder_value[thisHand], sizeof(uint8_t) * NUMBER_OF_ENCODERS); }
void encoder_update_raw(uint8_t* slave_state) {
- for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
+ for (uint8_t i = 0; i < NUMBER_OF_ENCODERS; i++) {
uint8_t index = i + thatHand;
- int8_t delta = slave_state[i] - encoder_value[index];
+ int8_t delta = slave_state[i] - encoder_value[index];
while (delta > 0) {
delta--;
encoder_value[index]++;
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 4fa45ac37b..c82c446399 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -48,13 +48,10 @@ action_t action_for_key(uint8_t layer, keypos_t key) {
// keycode remapping
keycode = keycode_config(keycode);
- action_t action;
+ action_t action = {};
uint8_t action_layer, when, mod;
switch (keycode) {
- case KC_FN0 ... KC_FN31:
- action.code = keymap_function_id_to_action(FN_INDEX(keycode));
- break;
case KC_A ... KC_EXSEL:
case KC_LCTRL ... KC_RGUI:
action.code = ACTION_KEY(keycode);
@@ -65,9 +62,11 @@ action_t action_for_key(uint8_t layer, keypos_t key) {
case KC_AUDIO_MUTE ... KC_BRIGHTNESS_DOWN:
action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
break;
+#ifdef MOUSEKEY_ENABLE
case KC_MS_UP ... KC_MS_ACCEL2:
action.code = ACTION_MOUSEKEY(keycode);
break;
+#endif
case KC_TRNS:
action.code = ACTION_TRANSPARENT;
break;
@@ -76,17 +75,24 @@ action_t action_for_key(uint8_t layer, keypos_t key) {
// Split it up
action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key
break;
+#ifndef NO_ACTION_FUNCTION
+ case KC_FN0 ... KC_FN31:
+ action.code = keymap_function_id_to_action(FN_INDEX(keycode));
+ break;
case QK_FUNCTION ... QK_FUNCTION_MAX:;
// Is a shortcut for function action_layer, pull last 12bits
// This means we have 4,096 FN macros at our disposal
action.code = keymap_function_id_to_action((int)keycode & 0xFFF);
break;
+#endif
+#ifndef NO_ACTION_MACRO
case QK_MACRO ... QK_MACRO_MAX:
if (keycode & 0x800) // tap macros have upper bit set
action.code = ACTION_MACRO_TAP(keycode & 0xFF);
else
action.code = ACTION_MACRO(keycode & 0xFF);
break;
+#endif
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);
break;
diff --git a/quantum/matrix.c b/quantum/matrix.c
index 907492a0f6..1675f2477b 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -17,34 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include <stdbool.h>
#include "wait.h"
-#include "print.h"
-#include "debug.h"
#include "util.h"
#include "matrix.h"
#include "debounce.h"
#include "quantum.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)
-#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
-
-#ifdef MATRIX_MASKED
-extern const matrix_row_t matrix_mask[];
-#endif
-
#ifdef DIRECT_PINS
static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
#elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
@@ -53,61 +30,10 @@ static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
#endif
/* matrix state(1:on, 0:off) */
-static matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
-static matrix_row_t matrix[MATRIX_ROWS]; // debounced values
-
-__attribute__((weak)) void matrix_init_quantum(void) { matrix_init_kb(); }
-
-__attribute__((weak)) void matrix_scan_quantum(void) { matrix_scan_kb(); }
-
-__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
-__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; }
-
-// Deprecated.
-bool matrix_is_modified(void) {
- if (debounce_active()) 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) {
- // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
- // switch blocker installed and the switch is always pressed.
-#ifdef MATRIX_MASKED
- return matrix[row] & matrix_mask[row];
-#else
- return matrix[row];
-#endif
-}
-
-void matrix_print(void) {
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row);
- print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-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;
-}
+// matrix code
#ifdef DIRECT_PINS
@@ -129,7 +55,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
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);
+ current_matrix[current_row] |= readPin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
}
}
@@ -175,7 +101,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
uint8_t pin_state = readPin(col_pins[col_index]);
// Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ current_matrix[current_row] |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
}
// Unselect row
@@ -221,10 +147,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
// Check row pin state
if (readPin(row_pins[row_index]) == 0) {
// Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
} else {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
}
// Determine if the matrix changed state
diff --git a/quantum/matrix_common.c b/quantum/matrix_common.c
new file mode 100644
index 0000000000..c326e59ca3
--- /dev/null
+++ b/quantum/matrix_common.c
@@ -0,0 +1,107 @@
+#include "matrix.h"
+#include "debounce.h"
+#include "print.h"
+#include "debug.h"
+
+/* matrix state(1:on, 0:off) */
+matrix_row_t raw_matrix[MATRIX_ROWS];
+matrix_row_t matrix[MATRIX_ROWS];
+
+#ifdef MATRIX_MASKED
+extern const matrix_row_t matrix_mask[];
+#endif
+
+// user-defined overridable functions
+
+__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) {}
+
+// helper functions
+
+inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
+
+inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
+
+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) {
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+// Deprecated.
+bool matrix_is_modified(void) {
+ if (debounce_active()) return false;
+ return true;
+}
+
+#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(row) bitpop(matrix_get_row(row))
+#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(row) bitpop16(matrix_get_row(row))
+#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(row) bitpop32(matrix_get_row(row))
+#endif
+
+void matrix_print(void) {
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row);
+ print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+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;
+}
+
+// CUSTOM MATRIX 'LITE'
+__attribute__((weak)) void matrix_init_custom(void) {}
+
+__attribute__((weak)) bool matrix_scan_custom(matrix_row_t current_matrix[]) { return true; }
+
+__attribute__((weak)) void matrix_init(void) {
+ matrix_init_custom();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+__attribute__((weak)) uint8_t matrix_scan(void) {
+ bool changed = matrix_scan_custom(raw_matrix);
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return changed;
+}
diff --git a/quantum/mcu_selection.mk b/quantum/mcu_selection.mk
index 6815a0d8a5..bddafa6a4c 100644
--- a/quantum/mcu_selection.mk
+++ b/quantum/mcu_selection.mk
@@ -1,9 +1,15 @@
ifneq ($(findstring STM32F303, $(MCU)),)
+ # Cortex version
+ MCU = cortex-m4
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 7
+
## 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
+ MCU_FAMILY = STM32
+ MCU_SERIES = STM32F3xx
# Linker script to use
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
@@ -18,22 +24,110 @@ ifneq ($(findstring STM32F303, $(MCU)),)
# <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= GENERIC_STM32_F303XC
+ USE_FPU ?= yes
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+endif
+
+ifneq ($(findstring STM32F072, $(MCU)),)
# Cortex version
- MCU = cortex-m4
+ MCU = cortex-m0
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
- ARMV ?= 7
+ ARMV = 6
- USE_FPU = yes
+ ## 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
- # Vector table for application
- # 0x00000000-0x00001000 area is occupied by bootloader.*/
- # The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
- # OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+ # Linker script to use
+ # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+ # or <keyboard_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/,
+ # <keyboard_dir>/boards/, or drivers/boards/
+ BOARD ?= ST_STM32F072B_DISCOVERY
+
+ USE_FPU ?= no
# Options to pass to dfu-util when flashing
DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS = -p DF11 -v 0483
+ DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+endif
+
+ifneq ($(findstring STM32F042, $(MCU)),)
+ # Cortex version
+ MCU = cortex-m0
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 6
+
+ ## 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 <keyboard_dir>/ld/
+ MCU_LDSCRIPT ?= STM32F042x6
+
+ # 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/,
+ # <keyboard_dir>/boards/, or drivers/boards/
+ BOARD ?= GENERIC_STM32_F042X6
+
+ USE_FPU ?= no
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+endif
+
+ifneq ($(findstring STM32F103, $(MCU)),)
+ # Cortex version
+ MCU = cortex-m3
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 7
+
+ ## chip/board settings
+ # - the next two should match the directories in
+ # <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+ MCU_FAMILY = STM32
+ MCU_SERIES = STM32F1xx
+
+ # Linker script to use
+ # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+ # or <keyboard_dir>/ld/
+ MCU_LDSCRIPT ?= STM32F103x8
+
+ # Startup code to use
+ # - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+ MCU_STARTUP ?= stm32f1xx
+
+ # Board: it should exist either in <chibios>/os/hal/boards/,
+ # <keyboard_dir>/boards/, or drivers/boards/
+ BOARD ?= GENERIC_STM32_F103
+
+ USE_FPU ?= no
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p df11
endif
ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb1286))
@@ -75,6 +169,9 @@ ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 a
endif
ifneq (,$(filter $(MCU),atmega32a))
+ # MCU name for avrdude
+ AVRDUDE_MCU = m32
+
PROTOCOL = VUSB
# Processor frequency.
@@ -87,12 +184,12 @@ ifneq (,$(filter $(MCU),atmega32a))
# unsupported features for now
NO_UART ?= yes
NO_SUSPEND_POWER_DOWN ?= yes
-
- # Programming options
- PROGRAM_CMD ?= ./util/atmega32a_program.py $(TARGET).hex
endif
ifneq (,$(filter $(MCU),atmega328p))
+ # MCU name for avrdude
+ AVRDUDE_MCU = m328p
+
PROTOCOL = VUSB
# Processor frequency.
diff --git a/quantum/process_keycode/process_magic.c b/quantum/process_keycode/process_magic.c
new file mode 100644
index 0000000000..44dd5f0579
--- /dev/null
+++ b/quantum/process_keycode/process_magic.c
@@ -0,0 +1,178 @@
+/* Copyright 2019 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 "process_magic.h"
+
+#ifdef AUDIO_ENABLE
+# ifndef AG_NORM_SONG
+# define AG_NORM_SONG SONG(AG_NORM_SOUND)
+# endif
+# ifndef AG_SWAP_SONG
+# define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
+# endif
+# ifndef CG_NORM_SONG
+# define CG_NORM_SONG SONG(AG_NORM_SOUND)
+# endif
+# ifndef CG_SWAP_SONG
+# define CG_SWAP_SONG SONG(AG_SWAP_SOUND)
+# endif
+float ag_norm_song[][2] = AG_NORM_SONG;
+float ag_swap_song[][2] = AG_SWAP_SONG;
+float cg_norm_song[][2] = CG_NORM_SONG;
+float cg_swap_song[][2] = CG_SWAP_SONG;
+#endif
+
+/**
+ * MAGIC actions (BOOTMAGIC without the boot)
+ */
+bool process_magic(uint16_t keycode, keyrecord_t *record) {
+ // skip anything that isn't a keyup
+ if (record->event.pressed) {
+ switch (keycode) {
+ case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI:
+ case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT:
+ /* keymap config */
+ keymap_config.raw = eeconfig_read_keymap();
+ switch (keycode) {
+ case MAGIC_SWAP_CONTROL_CAPSLOCK:
+ keymap_config.swap_control_capslock = true;
+ break;
+ case MAGIC_CAPSLOCK_TO_CONTROL:
+ keymap_config.capslock_to_control = true;
+ break;
+ case MAGIC_SWAP_LALT_LGUI:
+ keymap_config.swap_lalt_lgui = true;
+ break;
+ case MAGIC_SWAP_RALT_RGUI:
+ keymap_config.swap_ralt_rgui = true;
+ break;
+ case MAGIC_SWAP_LCTL_LGUI:
+ keymap_config.swap_lctl_lgui = true;
+ break;
+ case MAGIC_SWAP_RCTL_RGUI:
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ case MAGIC_NO_GUI:
+ keymap_config.no_gui = true;
+ break;
+ case MAGIC_SWAP_GRAVE_ESC:
+ keymap_config.swap_grave_esc = true;
+ break;
+ case MAGIC_SWAP_BACKSLASH_BACKSPACE:
+ keymap_config.swap_backslash_backspace = true;
+ break;
+ case MAGIC_HOST_NKRO:
+ clear_keyboard(); // clear first buffer to prevent stuck keys
+ keymap_config.nkro = true;
+ break;
+ case MAGIC_SWAP_ALT_GUI:
+ keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true;
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(ag_swap_song);
+#endif
+ break;
+ case MAGIC_SWAP_CTL_GUI:
+ keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = true;
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(cg_swap_song);
+#endif
+ break;
+ case MAGIC_UNSWAP_CONTROL_CAPSLOCK:
+ keymap_config.swap_control_capslock = false;
+ break;
+ case MAGIC_UNCAPSLOCK_TO_CONTROL:
+ keymap_config.capslock_to_control = false;
+ break;
+ case MAGIC_UNSWAP_LALT_LGUI:
+ keymap_config.swap_lalt_lgui = false;
+ break;
+ case MAGIC_UNSWAP_RALT_RGUI:
+ keymap_config.swap_ralt_rgui = false;
+ break;
+ case MAGIC_UNSWAP_LCTL_LGUI:
+ keymap_config.swap_lctl_lgui = false;
+ break;
+ case MAGIC_UNSWAP_RCTL_RGUI:
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case MAGIC_UNNO_GUI:
+ keymap_config.no_gui = false;
+ break;
+ case MAGIC_UNSWAP_GRAVE_ESC:
+ keymap_config.swap_grave_esc = false;
+ break;
+ case MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
+ keymap_config.swap_backslash_backspace = false;
+ break;
+ case MAGIC_UNHOST_NKRO:
+ clear_keyboard(); // clear first buffer to prevent stuck keys
+ keymap_config.nkro = false;
+ break;
+ case MAGIC_UNSWAP_ALT_GUI:
+ keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false;
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(ag_norm_song);
+#endif
+ break;
+ case MAGIC_UNSWAP_CTL_GUI:
+ keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = false;
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(cg_norm_song);
+#endif
+ break;
+ case MAGIC_TOGGLE_ALT_GUI:
+ keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
+ keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
+#ifdef AUDIO_ENABLE
+ if (keymap_config.swap_ralt_rgui) {
+ PLAY_SONG(ag_swap_song);
+ } else {
+ PLAY_SONG(ag_norm_song);
+ }
+#endif
+ break;
+ case MAGIC_TOGGLE_CTL_GUI:
+ keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui;
+ keymap_config.swap_rctl_rgui = keymap_config.swap_lctl_lgui;
+#ifdef AUDIO_ENABLE
+ if (keymap_config.swap_rctl_rgui) {
+ PLAY_SONG(cg_swap_song);
+ } else {
+ PLAY_SONG(cg_norm_song);
+ }
+#endif
+ break;
+ case MAGIC_TOGGLE_NKRO:
+ clear_keyboard(); // clear first buffer to prevent stuck keys
+ keymap_config.nkro = !keymap_config.nkro;
+ break;
+ case MAGIC_EE_HANDS_LEFT:
+ eeconfig_update_handedness(true);
+ break;
+ case MAGIC_EE_HANDS_RIGHT:
+ eeconfig_update_handedness(false);
+ break;
+ }
+
+ eeconfig_update_keymap(keymap_config.raw);
+ clear_keyboard(); // clear to prevent stuck keys
+
+ return false;
+ }
+ }
+
+ // Not a magic keycode so continue processing
+ return true;
+}
diff --git a/quantum/process_keycode/process_magic.h b/quantum/process_keycode/process_magic.h
new file mode 100644
index 0000000000..1eb39f1455
--- /dev/null
+++ b/quantum/process_keycode/process_magic.h
@@ -0,0 +1,20 @@
+/* Copyright 2019
+ *
+ * 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"
+
+bool process_magic(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/process_keycode/process_rgb.c b/quantum/process_keycode/process_rgb.c
new file mode 100644
index 0000000000..c76166342f
--- /dev/null
+++ b/quantum/process_keycode/process_rgb.c
@@ -0,0 +1,141 @@
+/* Copyright 2019
+ *
+ * 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 "process_rgb.h"
+#include "rgb.h"
+
+typedef void (*rgb_func_pointer)(void);
+
+/**
+ * Wrapper for inc/dec rgb keycode
+ *
+ * noinline to optimise for firmware size not speed (not in hot path)
+ */
+static void __attribute__((noinline)) handleKeycodeRGB(const uint8_t is_shifted, const rgb_func_pointer inc_func, const rgb_func_pointer dec_func) {
+ if (is_shifted) {
+ dec_func();
+ } else {
+ inc_func();
+ }
+}
+
+/**
+ * Wrapper for animation mode
+ * - if not in animation family -> jump to that animation
+ * - otherwise -> wrap round animation speed
+ *
+ * noinline to optimise for firmware size not speed (not in hot path)
+ */
+static void __attribute__((noinline,unused)) handleKeycodeRGBMode(const uint8_t start, const uint8_t end) {
+ if ((start <= rgblight_get_mode()) && (rgblight_get_mode() < end)) {
+ rgblight_step();
+ } else {
+ rgblight_mode(start);
+ }
+}
+
+/**
+ * Handle keycodes for both rgblight and rgbmatrix
+ */
+bool process_rgb(const uint16_t keycode, const keyrecord_t *record) {
+#ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+#else
+ // Split keyboards need to trigger on key-up for edge-case issue
+ if (!record->event.pressed) {
+#endif
+ uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
+ switch (keycode) {
+ case RGB_TOG:
+ rgblight_toggle();
+ return false;
+ case RGB_MODE_FORWARD:
+ handleKeycodeRGB(shifted, rgblight_step, rgblight_step_reverse);
+ return false;
+ case RGB_MODE_REVERSE:
+ handleKeycodeRGB(shifted, rgblight_step_reverse, rgblight_step);
+ return false;
+ case RGB_HUI:
+ handleKeycodeRGB(shifted, rgblight_increase_hue, rgblight_decrease_hue);
+ return false;
+ case RGB_HUD:
+ handleKeycodeRGB(shifted, rgblight_decrease_hue, rgblight_increase_hue);
+ return false;
+ case RGB_SAI:
+ handleKeycodeRGB(shifted, rgblight_increase_sat, rgblight_decrease_sat);
+ return false;
+ case RGB_SAD:
+ handleKeycodeRGB(shifted, rgblight_decrease_sat, rgblight_increase_sat);
+ return false;
+ case RGB_VAI:
+ handleKeycodeRGB(shifted, rgblight_increase_val, rgblight_decrease_val);
+ return false;
+ case RGB_VAD:
+ handleKeycodeRGB(shifted, rgblight_decrease_val, rgblight_increase_val);
+ return false;
+ case RGB_SPI:
+ handleKeycodeRGB(shifted, rgblight_increase_speed, rgblight_decrease_speed);
+ return false;
+ case RGB_SPD:
+ handleKeycodeRGB(shifted, rgblight_decrease_speed, rgblight_increase_speed);
+ return false;
+ case RGB_MODE_PLAIN:
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ return false;
+ case RGB_MODE_BREATHE:
+#ifdef RGBLIGHT_EFFECT_BREATHING
+ handleKeycodeRGBMode(RGBLIGHT_MODE_BREATHING, RGBLIGHT_MODE_BREATHING_end);
+#endif
+ return false;
+ case RGB_MODE_RAINBOW:
+#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD
+ handleKeycodeRGBMode(RGBLIGHT_MODE_RAINBOW_MOOD, RGBLIGHT_MODE_RAINBOW_MOOD_end);
+#endif
+ return false;
+ case RGB_MODE_SWIRL:
+#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ handleKeycodeRGBMode(RGBLIGHT_MODE_RAINBOW_SWIRL, RGBLIGHT_MODE_RAINBOW_SWIRL_end);
+#endif
+ return false;
+ case RGB_MODE_SNAKE:
+#ifdef RGBLIGHT_EFFECT_SNAKE
+ handleKeycodeRGBMode(RGBLIGHT_MODE_SNAKE, RGBLIGHT_MODE_SNAKE_end);
+#endif
+ return false;
+ case RGB_MODE_KNIGHT:
+#ifdef RGBLIGHT_EFFECT_KNIGHT
+ handleKeycodeRGBMode(RGBLIGHT_MODE_KNIGHT, RGBLIGHT_MODE_KNIGHT_end);
+#endif
+ return false;
+ case RGB_MODE_XMAS:
+#ifdef RGBLIGHT_EFFECT_CHRISTMAS
+ rgblight_mode(RGBLIGHT_MODE_CHRISTMAS);
+#endif
+ return false;
+ case RGB_MODE_GRADIENT:
+#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
+ handleKeycodeRGBMode(RGBLIGHT_MODE_STATIC_GRADIENT, RGBLIGHT_MODE_STATIC_GRADIENT_end);
+#endif
+ return false;
+ case RGB_MODE_RGBTEST:
+#ifdef RGBLIGHT_EFFECT_RGB_TEST
+ rgblight_mode(RGBLIGHT_MODE_RGB_TEST);
+#endif
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/quantum/process_keycode/process_rgb.h b/quantum/process_keycode/process_rgb.h
new file mode 100644
index 0000000000..26aca46896
--- /dev/null
+++ b/quantum/process_keycode/process_rgb.h
@@ -0,0 +1,20 @@
+/* Copyright 2019
+ *
+ * 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"
+
+bool process_rgb(const uint16_t keycode, const keyrecord_t *record);
diff --git a/quantum/process_keycode/process_steno.c b/quantum/process_keycode/process_steno.c
index e0b33ec861..57e279f211 100644
--- a/quantum/process_keycode/process_steno.c
+++ b/quantum/process_keycode/process_steno.c
@@ -73,7 +73,9 @@ static void steno_clear_state(void) {
static void send_steno_state(uint8_t size, bool send_empty) {
for (uint8_t i = 0; i < size; ++i) {
if (chord[i] || send_empty) {
+#ifdef VIRTSER_ENABLE
virtser_send(chord[i]);
+#endif
}
}
}
@@ -105,7 +107,9 @@ static void send_steno_chord(void) {
switch (mode) {
case STENO_MODE_BOLT:
send_steno_state(BOLT_STATE_SIZE, false);
+#ifdef VIRTSER_ENABLE
virtser_send(0); // terminating byte
+#endif
break;
case STENO_MODE_GEMINI:
chord[0] |= 0x80; // Indicate start of packet
diff --git a/quantum/process_keycode/process_steno.h b/quantum/process_keycode/process_steno.h
index 3675423728..ed049eb13f 100644
--- a/quantum/process_keycode/process_steno.h
+++ b/quantum/process_keycode/process_steno.h
@@ -18,10 +18,6 @@
#include "quantum.h"
-#if defined(STENO_ENABLE) && !defined(VIRTSER_ENABLE)
-# error "must have virtser enabled to use steno"
-#endif
-
typedef enum { STENO_MODE_BOLT, STENO_MODE_GEMINI } steno_mode_t;
bool process_steno(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/process_keycode/process_terminal.c b/quantum/process_keycode/process_terminal.c
index f48f3d702d..7d1eefa9ed 100644
--- a/quantum/process_keycode/process_terminal.c
+++ b/quantum/process_keycode/process_terminal.c
@@ -61,7 +61,7 @@ void enable_terminal(void) {
memset(cmd_buffer, 0, CMD_BUFF_SIZE * 80);
for (int i = 0; i < 6; i++) strcpy(arguments[i], "");
// select all text to start over
- // SEND_STRING(SS_LCTRL("a"));
+ // SEND_STRING(SS_LCTL("a"));
send_string(terminal_prompt);
}
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 2e5e6376b7..9cd50b11d8 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -16,10 +16,6 @@
#include "quantum.h"
-#if !defined(RGBLIGHT_ENABLE) && !defined(RGB_MATRIX_ENABLE)
-# include "rgb.h"
-#endif
-
#ifdef PROTOCOL_LUFA
# include "outputselect.h"
#endif
@@ -57,26 +53,13 @@ extern backlight_config_t backlight_config;
# ifndef GOODBYE_SONG
# define GOODBYE_SONG SONG(GOODBYE_SOUND)
# endif
-# ifndef AG_NORM_SONG
-# define AG_NORM_SONG SONG(AG_NORM_SOUND)
-# endif
-# ifndef AG_SWAP_SONG
-# define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
-# endif
-# ifndef CG_NORM_SONG
-# define CG_NORM_SONG SONG(AG_NORM_SOUND)
-# endif
-# ifndef CG_SWAP_SONG
-# define CG_SWAP_SONG SONG(AG_SWAP_SOUND)
-# endif
float goodbye_song[][2] = GOODBYE_SONG;
-float ag_norm_song[][2] = AG_NORM_SONG;
-float ag_swap_song[][2] = AG_SWAP_SONG;
-float cg_norm_song[][2] = CG_NORM_SONG;
-float cg_swap_song[][2] = CG_SWAP_SONG;
# ifdef DEFAULT_LAYER_SONGS
float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS;
# endif
+# ifdef SENDSTRING_BELL
+float bell_song[][2] = SONG(TERMINAL_SOUND);
+# endif
#endif
static void do_code16(uint16_t code, void (*f)(uint8_t)) {
@@ -164,11 +147,6 @@ void reset_keyboard(void) {
bootloader_jump();
}
-/* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise.
- * Used to ensure that the correct keycode is released if the key is released.
- */
-static bool grave_esc_was_shifted = false;
-
/* Convert record into usable keycode via the contained event. */
uint16_t get_record_keycode(keyrecord_t *record) { return get_event_keycode(record->event); }
@@ -235,6 +213,9 @@ bool process_record_quantum(keyrecord_t *record) {
#if defined(RGB_MATRIX_ENABLE)
process_rgb_matrix(keycode, record) &&
#endif
+#if defined(VIA_ENABLE)
+ process_record_via(keycode, record) &&
+#endif
process_record_kb(keycode, record) &&
#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
process_midi(keycode, record) &&
@@ -272,402 +253,77 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef SPACE_CADET_ENABLE
process_space_cadet(keycode, record) &&
#endif
+#ifdef MAGIC_KEYCODE_ENABLE
+ process_magic(keycode, record) &&
+#endif
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ process_rgb(keycode, record) &&
+#endif
true)) {
return false;
}
- // Shift / paren setup
-
- switch (keycode) {
- case RESET:
- if (record->event.pressed) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case RESET:
reset_keyboard();
- }
- return false;
- case DEBUG:
- if (record->event.pressed) {
+ return false;
+#ifndef NO_DEBUG
+ case DEBUG:
debug_enable ^= 1;
if (debug_enable) {
print("DEBUG: enabled.\n");
} else {
print("DEBUG: disabled.\n");
}
- }
- return false;
- case EEPROM_RESET:
- if (record->event.pressed) {
+#endif
+ return false;
+ case EEPROM_RESET:
eeconfig_init();
- }
- return false;
+ return false;
#ifdef FAUXCLICKY_ENABLE
- case FC_TOG:
- if (record->event.pressed) {
+ case FC_TOG:
FAUXCLICKY_TOGGLE;
- }
- return false;
- case FC_ON:
- if (record->event.pressed) {
+ return false;
+ case FC_ON:
FAUXCLICKY_ON;
- }
- return false;
- case FC_OFF:
- if (record->event.pressed) {
+ return false;
+ case FC_OFF:
FAUXCLICKY_OFF;
- }
- return false;
+ return false;
#endif
-#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
- case RGB_TOG:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_toggle();
- }
- return false;
- case RGB_MODE_FORWARD:
- if (record->event.pressed) {
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
- if (shifted) {
- rgblight_step_reverse();
- } else {
- rgblight_step();
- }
- }
- return false;
- case RGB_MODE_REVERSE:
- if (record->event.pressed) {
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
- if (shifted) {
- rgblight_step();
- } else {
- rgblight_step_reverse();
- }
- }
- return false;
- case RGB_HUI:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_increase_hue();
- }
- return false;
- case RGB_HUD:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_decrease_hue();
- }
- return false;
- case RGB_SAI:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_increase_sat();
- }
- return false;
- case RGB_SAD:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_decrease_sat();
- }
- return false;
- case RGB_VAI:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_increase_val();
- }
- return false;
- case RGB_VAD:
-// Split keyboards need to trigger on key-up for edge-case issue
-# ifndef SPLIT_KEYBOARD
- if (record->event.pressed) {
-# else
- if (!record->event.pressed) {
-# endif
- rgblight_decrease_val();
- }
- return false;
- case RGB_SPI:
- if (record->event.pressed) {
- rgblight_increase_speed();
- }
- return false;
- case RGB_SPD:
- if (record->event.pressed) {
- rgblight_decrease_speed();
- }
- return false;
- case RGB_MODE_PLAIN:
- if (record->event.pressed) {
- rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
- }
- return false;
- case RGB_MODE_BREATHE:
-# ifdef RGBLIGHT_EFFECT_BREATHING
- if (record->event.pressed) {
- if ((RGBLIGHT_MODE_BREATHING <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_BREATHING_end)) {
- rgblight_step();
- } else {
- rgblight_mode(RGBLIGHT_MODE_BREATHING);
- }
- }
-# endif
- return false;
- case RGB_MODE_RAINBOW:
-# ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD
- if (record->event.pressed) {
- if ((RGBLIGHT_MODE_RAINBOW_MOOD <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_RAINBOW_MOOD_end)) {
- rgblight_step();
- } else {
- rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD);
- }
- }
-# endif
- return false;
- case RGB_MODE_SWIRL:
-# ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL
- if (record->event.pressed) {
- if ((RGBLIGHT_MODE_RAINBOW_SWIRL <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_RAINBOW_SWIRL_end)) {
- rgblight_step();
- } else {
- rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
- }
- }
-# endif
- return false;
- case RGB_MODE_SNAKE:
-# ifdef RGBLIGHT_EFFECT_SNAKE
- if (record->event.pressed) {
- if ((RGBLIGHT_MODE_SNAKE <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_SNAKE_end)) {
- rgblight_step();
- } else {
- rgblight_mode(RGBLIGHT_MODE_SNAKE);
- }
- }
-# endif
- return false;
- case RGB_MODE_KNIGHT:
-# ifdef RGBLIGHT_EFFECT_KNIGHT
- if (record->event.pressed) {
- if ((RGBLIGHT_MODE_KNIGHT <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_KNIGHT_end)) {
- rgblight_step();
- } else {
- rgblight_mode(RGBLIGHT_MODE_KNIGHT);
- }
- }
-# endif
- return false;
- case RGB_MODE_XMAS:
-# ifdef RGBLIGHT_EFFECT_CHRISTMAS
- if (record->event.pressed) {
- rgblight_mode(RGBLIGHT_MODE_CHRISTMAS);
- }
-# endif
- return false;
- case RGB_MODE_GRADIENT:
-# ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
- if (record->event.pressed) {
- if ((RGBLIGHT_MODE_STATIC_GRADIENT <= rgblight_get_mode()) && (rgblight_get_mode() < RGBLIGHT_MODE_STATIC_GRADIENT_end)) {
- rgblight_step();
- } else {
- rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT);
- }
- }
-# endif
- return false;
- case RGB_MODE_RGBTEST:
-# ifdef RGBLIGHT_EFFECT_RGB_TEST
- if (record->event.pressed) {
- rgblight_mode(RGBLIGHT_MODE_RGB_TEST);
- }
-# endif
- return false;
-#endif // defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
#ifdef VELOCIKEY_ENABLE
- case VLK_TOG:
- if (record->event.pressed) {
+ case VLK_TOG:
velocikey_toggle();
- }
- return false;
+ return false;
#endif
-#ifdef PROTOCOL_LUFA
- case OUT_AUTO:
- if (record->event.pressed) {
+#ifdef BLUETOOTH_ENABLE
+ case OUT_AUTO:
set_output(OUTPUT_AUTO);
- }
- return false;
- case OUT_USB:
- if (record->event.pressed) {
+ return false;
+ case OUT_USB:
set_output(OUTPUT_USB);
- }
- return false;
-# ifdef BLUETOOTH_ENABLE
- case OUT_BT:
- if (record->event.pressed) {
+ return false;
+ case OUT_BT:
set_output(OUTPUT_BLUETOOTH);
- }
- return false;
-# endif
-#endif
- case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI:
- case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT:
- if (record->event.pressed) {
- // MAGIC actions (BOOTMAGIC without the boot)
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- /* keymap config */
- keymap_config.raw = eeconfig_read_keymap();
- switch (keycode) {
- case MAGIC_SWAP_CONTROL_CAPSLOCK:
- keymap_config.swap_control_capslock = true;
- break;
- case MAGIC_CAPSLOCK_TO_CONTROL:
- keymap_config.capslock_to_control = true;
- break;
- case MAGIC_SWAP_LALT_LGUI:
- keymap_config.swap_lalt_lgui = true;
- break;
- case MAGIC_SWAP_RALT_RGUI:
- keymap_config.swap_ralt_rgui = true;
- break;
- case MAGIC_SWAP_LCTL_LGUI:
- keymap_config.swap_lctl_lgui = true;
- break;
- case MAGIC_SWAP_RCTL_RGUI:
- keymap_config.swap_rctl_rgui = true;
- break;
- case MAGIC_NO_GUI:
- keymap_config.no_gui = true;
- break;
- case MAGIC_SWAP_GRAVE_ESC:
- keymap_config.swap_grave_esc = true;
- break;
- case MAGIC_SWAP_BACKSLASH_BACKSPACE:
- keymap_config.swap_backslash_backspace = true;
- break;
- case MAGIC_HOST_NKRO:
- clear_keyboard(); // clear first buffer to prevent stuck keys
- keymap_config.nkro = true;
- break;
- case MAGIC_SWAP_ALT_GUI:
- keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true;
-#ifdef AUDIO_ENABLE
- PLAY_SONG(ag_swap_song);
-#endif
- break;
- case MAGIC_SWAP_CTL_GUI:
- keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = true;
-#ifdef AUDIO_ENABLE
- PLAY_SONG(cg_swap_song);
-#endif
- break;
- case MAGIC_UNSWAP_CONTROL_CAPSLOCK:
- keymap_config.swap_control_capslock = false;
- break;
- case MAGIC_UNCAPSLOCK_TO_CONTROL:
- keymap_config.capslock_to_control = false;
- break;
- case MAGIC_UNSWAP_LALT_LGUI:
- keymap_config.swap_lalt_lgui = false;
- break;
- case MAGIC_UNSWAP_RALT_RGUI:
- keymap_config.swap_ralt_rgui = false;
- break;
- case MAGIC_UNSWAP_LCTL_LGUI:
- keymap_config.swap_lctl_lgui = false;
- break;
- case MAGIC_UNSWAP_RCTL_RGUI:
- keymap_config.swap_rctl_rgui = false;
- break;
- case MAGIC_UNNO_GUI:
- keymap_config.no_gui = false;
- break;
- case MAGIC_UNSWAP_GRAVE_ESC:
- keymap_config.swap_grave_esc = false;
- break;
- case MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
- keymap_config.swap_backslash_backspace = false;
- break;
- case MAGIC_UNHOST_NKRO:
- clear_keyboard(); // clear first buffer to prevent stuck keys
- keymap_config.nkro = false;
- break;
- case MAGIC_UNSWAP_ALT_GUI:
- keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false;
-#ifdef AUDIO_ENABLE
- PLAY_SONG(ag_norm_song);
-#endif
- break;
- case MAGIC_UNSWAP_CTL_GUI:
- keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = false;
-#ifdef AUDIO_ENABLE
- PLAY_SONG(cg_norm_song);
+ return false;
#endif
- break;
- case MAGIC_TOGGLE_ALT_GUI:
- keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
- keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
-#ifdef AUDIO_ENABLE
- if (keymap_config.swap_ralt_rgui) {
- PLAY_SONG(ag_swap_song);
- } else {
- PLAY_SONG(ag_norm_song);
- }
-#endif
- break;
- case MAGIC_TOGGLE_CTL_GUI:
- keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui;
- keymap_config.swap_rctl_rgui = keymap_config.swap_lctl_lgui;
-#ifdef AUDIO_ENABLE
- if (keymap_config.swap_rctl_rgui) {
- PLAY_SONG(cg_swap_song);
- } else {
- PLAY_SONG(cg_norm_song);
- }
-#endif
- break;
- case MAGIC_TOGGLE_NKRO:
- clear_keyboard(); // clear first buffer to prevent stuck keys
- keymap_config.nkro = !keymap_config.nkro;
- break;
- case MAGIC_EE_HANDS_LEFT:
- eeconfig_update_handedness(true);
- break;
- case MAGIC_EE_HANDS_RIGHT:
- eeconfig_update_handedness(false);
- break;
- default:
- break;
- }
- eeconfig_update_keymap(keymap_config.raw);
- clear_keyboard(); // clear to prevent stuck keys
-
+#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
+ case BL_BRTG:
+ backlight_toggle_breathing();
return false;
- }
- break;
+#endif
+ }
+ }
+ // keycodes that depend on both pressed and non-pressed state
+ switch (keycode) {
case GRAVE_ESC: {
+ /* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise.
+ * Used to ensure that the correct keycode is released if the key is released.
+ */
+ static bool grave_esc_was_shifted = false;
+
uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)));
#ifdef GRAVE_ESC_ALT_OVERRIDE
@@ -710,15 +366,6 @@ bool process_record_quantum(keyrecord_t *record) {
send_keyboard_report();
return false;
}
-
-#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
- case BL_BRTG: {
- if (record->event.pressed) {
- backlight_toggle_breathing();
- }
- return false;
- }
-#endif
}
return process_action_kb(record);
@@ -829,6 +476,13 @@ void send_string_with_delay_P(const char *str, uint8_t interval) {
}
void send_char(char ascii_code) {
+#if defined(AUDIO_ENABLE) && defined(SENDSTRING_BELL)
+ if (ascii_code == '\a') { // BEL
+ PLAY_SONG(bell_song);
+ return;
+ }
+#endif
+
uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]);
bool is_shifted = pgm_read_byte(&ascii_to_shift_lut[(uint8_t)ascii_code]);
bool is_altgred = pgm_read_byte(&ascii_to_altgr_lut[(uint8_t)ascii_code]);
@@ -909,9 +563,7 @@ __attribute__((weak)) void bootmagic_lite(void) {
// We need multiple scans because debouncing can't be turned off.
matrix_scan();
-#if defined(DEBOUNCING_DELAY) && DEBOUNCING_DELAY > 0
- wait_ms(DEBOUNCING_DELAY * 2);
-#elif defined(DEBOUNCE) && DEBOUNCE > 0
+#if defined(DEBOUNCE) && DEBOUNCE > 0
wait_ms(DEBOUNCE * 2);
#else
wait_ms(30);
@@ -982,12 +634,8 @@ void matrix_scan_quantum() {
matrix_scan_combo();
#endif
-#if defined(BACKLIGHT_ENABLE)
-# if defined(LED_MATRIX_ENABLE)
+#ifdef LED_MATRIX_ENABLE
led_matrix_task();
-# elif defined(BACKLIGHT_PIN) || defined(BACKLIGHT_PINS)
- backlight_task();
-# endif
#endif
#ifdef RGB_MATRIX_ENABLE
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 6beab65a32..09550fec30 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -22,6 +22,7 @@
#endif
#if defined(PROTOCOL_CHIBIOS)
# include "hal.h"
+# include "chibios_config.h"
#endif
#include "wait.h"
@@ -133,6 +134,14 @@ extern layer_state_t layer_state;
# include "process_space_cadet.h"
#endif
+#ifdef MAGIC_KEYCODE_ENABLE
+# include "process_magic.h"
+#endif
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+# include "process_rgb.h"
+#endif
+
#ifdef HD44780_ENABLE
# include "hd44780.h"
#endif
@@ -153,6 +162,14 @@ extern layer_state_t layer_state;
# include "process_dynamic_macro.h"
#endif
+#ifdef DYNAMIC_KEYMAP_ENABLE
+# include "dynamic_keymap.h"
+#endif
+
+#ifdef VIA_ENABLE
+# include "via.h"
+#endif
+
// Function substitutions to ease GPIO manipulation
#if defined(__AVR__)
typedef uint8_t pin_t;
@@ -182,30 +199,8 @@ typedef ioline_t pin_t;
# define readPin(pin) palReadLine(pin)
#endif
-// Send string macros
-#define STRINGIZE(z) #z
-#define ADD_SLASH_X(y) STRINGIZE(\x##y)
-#define SYMBOL_STR(x) ADD_SLASH_X(x)
-
-#define SS_TAP_CODE 1
-#define SS_DOWN_CODE 2
-#define SS_UP_CODE 3
-
-#define SS_TAP(keycode) "\1" SYMBOL_STR(keycode)
-#define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode)
-#define SS_UP(keycode) "\3" SYMBOL_STR(keycode)
-
-// `string` arguments must not be parenthesized
-#define SS_LCTRL(string) SS_DOWN(X_LCTRL) string SS_UP(X_LCTRL)
-#define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI)
-#define SS_LCMD(string) SS_LGUI(string)
-#define SS_LWIN(string) SS_LGUI(string)
-#define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT)
-#define SS_LSFT(string) SS_DOWN(X_LSHIFT) string SS_UP(X_LSHIFT)
-#define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT)
-#define SS_ALGR(string) SS_RALT(string)
-
#define SEND_STRING(string) send_string_P(PSTR(string))
+#define SEND_STRING_DELAY(string, interval) send_string_with_delay_P(PSTR(string), interval)
extern const bool ascii_to_shift_lut[128];
extern const bool ascii_to_altgr_lut[128];
@@ -256,30 +251,6 @@ void register_code16(uint16_t code);
void unregister_code16(uint16_t code);
void tap_code16(uint16_t code);
-#ifdef BACKLIGHT_ENABLE
-void backlight_init_ports(void);
-void backlight_task(void);
-void backlight_task_internal(void);
-void backlight_on(pin_t backlight_pin);
-void backlight_off(pin_t backlight_pin);
-
-# ifdef BACKLIGHT_BREATHING
-void breathing_task(void);
-void breathing_enable(void);
-void breathing_pulse(void);
-void breathing_disable(void);
-void breathing_self_disable(void);
-void breathing_toggle(void);
-bool is_breathing(void);
-
-void breathing_intensity_default(void);
-void breathing_period_default(void);
-void breathing_period_set(uint8_t value);
-void breathing_period_inc(void);
-void breathing_period_dec(void);
-# endif
-#endif
-
void send_dword(uint32_t number);
void send_word(uint16_t number);
void send_byte(uint8_t number);
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 66a3c66e85..c8d0e354b0 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -655,13 +655,42 @@ enum quantum_keycodes {
// L-ayer, T-ap - 256 keycode max, 16 layer max
#define LT(layer, kc) (QK_LAYER_TAP | (((layer)&0xF) << 8) | ((kc)&0xFF))
+#define CL_SWAP MAGIC_SWAP_CONTROL_CAPSLOCK
+#define CL_NORM MAGIC_UNSWAP_CONTROL_CAPSLOCK
+#define CL_CTRL MAGIC_CAPSLOCK_TO_CONTROL
+#define CL_CAPS MAGIC_UNCAPSLOCK_TO_CONTROL
+
+#define LCG_SWP MAGIC_SWAP_LCTL_LGUI
+#define LCG_NRM MAGIC_UNSWAP_LCTL_LGUI
+#define RCG_SWP MAGIC_SWAP_RCTL_RGUI
+#define RCG_NRM MAGIC_UNSWAP_RCTL_RGUI
+#define CG_SWAP MAGIC_SWAP_CTL_GUI
+#define CG_NORM MAGIC_UNSWAP_CTL_GUI
+#define CG_TOGG MAGIC_TOGGLE_CTL_GUI
+
+#define LAG_SWP MAGIC_SWAP_LALT_LGUI
+#define LAG_NRM MAGIC_UNSWAP_LALT_LGUI
+#define RAG_SWP MAGIC_SWAP_RALT_RGUI
+#define RAG_NRM MAGIC_UNSWAP_RALT_RGUI
#define AG_SWAP MAGIC_SWAP_ALT_GUI
#define AG_NORM MAGIC_UNSWAP_ALT_GUI
#define AG_TOGG MAGIC_TOGGLE_ALT_GUI
-#define CG_SWAP MAGIC_SWAP_CTL_GUI
-#define CG_NORM MAGIC_UNSWAP_CTL_GUI
-#define CG_TOGG MAGIC_TOGGLE_CTL_GUI
+#define GUI_OFF MAGIC_NO_GUI
+#define GUI_ON MAGIC_UNNO_GUI
+
+#define GE_SWAP MAGIC_SWAP_GRAVE_ESC
+#define GE_NORM MAGIC_UNSWAP_GRAVE_ESC
+
+#define BS_SWAP MAGIC_SWAP_BACKSLASH_BACKSPACE
+#define BS_NORM MAGIC_UNSWAP_BACKSLASH_BACKSPACE
+
+#define NK_ON MAGIC_HOST_NKRO
+#define NK_OFF MAGIC_UNHOST_NKRO
+#define NK_TOGG MAGIC_TOGGLE_NKRO
+
+#define EH_LEFT MAGIC_EE_HANDS_LEFT
+#define EH_RGHT MAGIC_EE_HANDS_RIGHT
// GOTO layer - 16 layers max
// when:
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c
index 55a6f74be7..25ca44054d 100644
--- a/quantum/rgb_matrix.c
+++ b/quantum/rgb_matrix.c
@@ -95,6 +95,23 @@ const point_t k_rgb_matrix_center = RGB_MATRIX_CENTER;
# endif
#endif
+#if !defined(RGB_MATRIX_STARTUP_HUE)
+# define RGB_MATRIX_STARTUP_HUE 0
+#endif
+
+#if !defined(RGB_MATRIX_STARTUP_SAT)
+# define RGB_MATRIX_STARTUP_SAT UINT8_MAX
+#endif
+
+#if !defined(RGB_MATRIX_STARTUP_VAL)
+# define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#endif
+
+#if !defined(RGB_MATRIX_STARTUP_SPD)
+# define RGB_MATRIX_STARTUP_SPD UINT8_MAX / 2
+#endif
+
+
bool g_suspend_state = false;
rgb_config_t rgb_matrix_config;
@@ -119,8 +136,8 @@ void eeconfig_update_rgb_matrix_default(void) {
dprintf("eeconfig_update_rgb_matrix_default\n");
rgb_matrix_config.enable = 1;
rgb_matrix_config.mode = RGB_MATRIX_STARTUP_MODE;
- rgb_matrix_config.hsv = (HSV){0, UINT8_MAX, RGB_MATRIX_MAXIMUM_BRIGHTNESS};
- rgb_matrix_config.speed = UINT8_MAX / 2;
+ rgb_matrix_config.hsv = (HSV){RGB_MATRIX_STARTUP_HUE, RGB_MATRIX_STARTUP_SAT, RGB_MATRIX_STARTUP_VAL};
+ rgb_matrix_config.speed = RGB_MATRIX_STARTUP_SPD;
eeconfig_update_rgb_matrix();
}
@@ -417,7 +434,12 @@ void rgb_matrix_init(void) {
eeconfig_debug_rgb_matrix(); // display current eeprom values
}
-void rgb_matrix_set_suspend_state(bool state) { g_suspend_state = state; }
+void rgb_matrix_set_suspend_state(bool state) {
+ if (RGB_DISABLE_WHEN_USB_SUSPENDED && state) {
+ rgb_matrix_set_color_all(0, 0, 0); // turn off all LEDs when suspending
+ }
+ g_suspend_state = state;
+}
void rgb_matrix_toggle(void) {
rgb_matrix_config.enable ^= 1;
diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h
index 16ec96f036..96494836ee 100644
--- a/quantum/rgb_matrix.h
+++ b/quantum/rgb_matrix.h
@@ -128,26 +128,26 @@ void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
#ifndef RGBLIGHT_ENABLE
-# define rgblight_toggle() rgb_matrix_toggle()
-# define rgblight_enable() rgb_matrix_enable()
-# define rgblight_enable_noeeprom() rgb_matrix_enable_noeeprom()
-# define rgblight_disable() rgb_matrix_disable()
-# define rgblight_disable_noeeprom() rgb_matrix_disable_noeeprom()
-# define rgblight_step() rgb_matrix_step()
-# define rgblight_sethsv(hue, sat, val) rgb_matrix_sethsv(hue, sat, val)
-# define rgblight_sethsv_noeeprom(hue, sat, val) rgb_matrix_sethsv_noeeprom(hue, sat, val)
-# define rgblight_step_reverse() rgb_matrix_step_reverse()
-# define rgblight_increase_hue() rgb_matrix_increase_hue()
-# define rgblight_decrease_hue() rgb_matrix_decrease_hue()
-# define rgblight_increase_sat() rgb_matrix_increase_sat()
-# define rgblight_decrease_sat() rgb_matrix_decrease_sat()
-# define rgblight_increase_val() rgb_matrix_increase_val()
-# define rgblight_decrease_val() rgb_matrix_decrease_val()
-# define rgblight_increase_speed() rgb_matrix_increase_speed()
-# define rgblight_decrease_speed() rgb_matrix_decrease_speed()
-# define rgblight_mode(mode) rgb_matrix_mode(mode)
-# define rgblight_mode_noeeprom(mode) rgb_matrix_mode_noeeprom(mode)
-# define rgblight_get_mode() rgb_matrix_get_mode()
+# define rgblight_toggle rgb_matrix_toggle
+# define rgblight_enable rgb_matrix_enable
+# define rgblight_enable_noeeprom rgb_matrix_enable_noeeprom
+# define rgblight_disable rgb_matrix_disable
+# define rgblight_disable_noeeprom rgb_matrix_disable_noeeprom
+# define rgblight_step rgb_matrix_step
+# define rgblight_sethsv rgb_matrix_sethsv
+# define rgblight_sethsv_noeeprom rgb_matrix_sethsv_noeeprom
+# define rgblight_step_reverse rgb_matrix_step_reverse
+# define rgblight_increase_hue rgb_matrix_increase_hue
+# define rgblight_decrease_hue rgb_matrix_decrease_hue
+# define rgblight_increase_sat rgb_matrix_increase_sat
+# define rgblight_decrease_sat rgb_matrix_decrease_sat
+# define rgblight_increase_val rgb_matrix_increase_val
+# define rgblight_decrease_val rgb_matrix_decrease_val
+# define rgblight_increase_speed rgb_matrix_increase_speed
+# define rgblight_decrease_speed rgb_matrix_decrease_speed
+# define rgblight_mode rgb_matrix_mode
+# define rgblight_mode_noeeprom rgb_matrix_mode_noeeprom
+# define rgblight_get_mode rgb_matrix_get_mode
#endif
typedef struct {
diff --git a/quantum/rgb_matrix_animations/gradient_left_right_anim.h b/quantum/rgb_matrix_animations/gradient_left_right_anim.h
new file mode 100644
index 0000000000..2eab2eb759
--- /dev/null
+++ b/quantum/rgb_matrix_animations/gradient_left_right_anim.h
@@ -0,0 +1,22 @@
+#ifndef DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+RGB_MATRIX_EFFECT(GRADIENT_LEFT_RIGHT)
+# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+bool GRADIENT_LEFT_RIGHT(effect_params_t* params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+
+ HSV hsv = rgb_matrix_config.hsv;
+ uint8_t scale = scale8(64, rgb_matrix_config.speed);
+ for (uint8_t i = led_min; i < led_max; i++) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ // The x range will be 0..224, map this to 0..7
+ // Relies on hue being 8-bit and wrapping
+ hsv.h = rgb_matrix_config.hsv.h + (scale * g_led_config.point[i].x >> 5);
+ RGB rgb = hsv_to_rgb(hsv);
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ return led_max < DRIVER_LED_TOTAL;
+}
+
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
diff --git a/quantum/rgb_matrix_animations/rgb_matrix_effects.inc b/quantum/rgb_matrix_animations/rgb_matrix_effects.inc
index 01332ed0dd..4c1723d933 100644
--- a/quantum/rgb_matrix_animations/rgb_matrix_effects.inc
+++ b/quantum/rgb_matrix_animations/rgb_matrix_effects.inc
@@ -2,6 +2,7 @@
#include "rgb_matrix_animations/solid_color_anim.h"
#include "rgb_matrix_animations/alpha_mods_anim.h"
#include "rgb_matrix_animations/gradient_up_down_anim.h"
+#include "rgb_matrix_animations/gradient_left_right_anim.h"
#include "rgb_matrix_animations/breathing_anim.h"
#include "rgb_matrix_animations/colorband_sat_anim.h"
#include "rgb_matrix_animations/colorband_val_anim.h"
diff --git a/quantum/rgb_matrix_drivers.c b/quantum/rgb_matrix_drivers.c
index 9729a3064e..ea41b0d396 100644
--- a/quantum/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix_drivers.c
@@ -113,7 +113,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
led[i].g = g;
led[i].b = b;
# ifdef RGBW
- led[i].w = 0;
+ convert_rgb_to_rgbw(led[i]);
# endif
}
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 7949bb688e..141dc2e7bc 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -611,6 +611,7 @@ void rgblight_set(void) {
# endif
}
}
+
# ifdef RGBLIGHT_LED_MAP
LED_TYPE led0[RGBLED_NUM];
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
@@ -620,7 +621,13 @@ void rgblight_set(void) {
# else
start_led = led + clipping_start_pos;
# endif
- ws2812_setleds(start_led, num_leds);
+
+#ifdef RGBW
+ for (uint8_t i = 0; i < num_leds; i++) {
+ convert_rgb_to_rgbw(&start_led[i]);
+ }
+#endif
+ ws2812_setleds(start_led, num_leds);
}
#endif
diff --git a/quantum/send_string_keycodes.h b/quantum/send_string_keycodes.h
index e71790a1dc..fc6467a741 100644
--- a/quantum/send_string_keycodes.h
+++ b/quantum/send_string_keycodes.h
@@ -1,207 +1,374 @@
-#ifndef SEND_STRING_KEYCODES
-#define SEND_STRING_KEYCODES
-
-#define X_NO 00
-#define X_ROLL_OVER 01
-#define X_POST_FAIL 02
-#define X_UNDEFINED 03
-#define X_A 04
-#define X_B 05
-#define X_C 06
-#define X_D 07
-#define X_E 08
-#define X_F 09
-#define X_G 0a
-#define X_H 0b
-#define X_I 0c
-#define X_J 0d
-#define X_K 0e
-#define X_L 0f
-#define X_M 10
-#define X_N 11
-#define X_O 12
-#define X_P 13
-#define X_Q 14
-#define X_R 15
-#define X_S 16
-#define X_T 17
-#define X_U 18
-#define X_V 19
-#define X_W 1a
-#define X_X 1b
-#define X_Y 1c
-#define X_Z 1d
-#define X_1 1e
-#define X_2 1f
-#define X_3 20
-#define X_4 21
-#define X_5 22
-#define X_6 23
-#define X_7 24
-#define X_8 25
-#define X_9 26
-#define X_0 27
-#define X_ENTER 28
-#define X_ESCAPE 29
-#define X_BSPACE 2a
-#define X_TAB 2b
-#define X_SPACE 2c
-#define X_MINUS 2d
-#define X_EQUAL 2e
-#define X_LBRACKET 2f
-#define X_RBRACKET 30
-#define X_BSLASH 31
-#define X_NONUS_HASH 32
-#define X_SCOLON 33
-#define X_QUOTE 34
-#define X_GRAVE 35
-#define X_COMMA 36
-#define X_DOT 37
-#define X_SLASH 38
-#define X_CAPSLOCK 39
-#define X_F1 3a
-#define X_F2 3b
-#define X_F3 3c
-#define X_F4 3d
-#define X_F5 3e
-#define X_F6 3f
-#define X_F7 40
-#define X_F8 41
-#define X_F9 42
-#define X_F10 43
-#define X_F11 44
-#define X_F12 45
-#define X_PSCREEN 46
-#define X_SCROLLLOCK 47
-#define X_PAUSE 48
-#define X_INSERT 49
-#define X_HOME 4a
-#define X_PGUP 4b
-#define X_DELETE 4c
-#define X_END 4d
-#define X_PGDOWN 4e
-#define X_RIGHT 4f
-#define X_LEFT 50
-#define X_DOWN 51
-#define X_UP 52
-#define X_NUMLOCK 53
-#define X_KP_SLASH 54
-#define X_KP_ASTERISK 55
-#define X_KP_MINUS 56
-#define X_KP_PLUS 57
-#define X_KP_ENTER 58
-#define X_KP_1 59
-#define X_KP_2 5a
-#define X_KP_3 5b
-#define X_KP_4 5c
-#define X_KP_5 5d
-#define X_KP_6 5e
-#define X_KP_7 5f
-#define X_KP_8 60
-#define X_KP_9 61
-#define X_KP_0 62
-#define X_KP_DOT 63
-#define X_NONUS_BSLASH 64
-#define X_APPLICATION 65
-#define X_POWER 66
-#define X_KP_EQUAL 67
-#define X_F13 68
-#define X_F14 69
-#define X_F15 6a
-#define X_F16 6b
-#define X_F17 6c
-#define X_F18 6d
-#define X_F19 6e
-#define X_F20 6f
-#define X_F21 70
-#define X_F22 71
-#define X_F23 72
-#define X_F24 73
-#define X_EXECUTE 74
-#define X_HELP 75
-#define X_MENU 76
-#define X_SELECT 77
-#define X_STOP 78
-#define X_AGAIN 79
-#define X_UNDO 7a
-#define X_CUT 7b
-#define X_COPY 7c
-#define X_PASTE 7d
-#define X_FIND 7e
-#define X__MUTE 7f
-#define X__VOLUP 80
-#define X__VOLDOWN 81
-#define X_LOCKING_CAPS 82
-#define X_LOCKING_NUM 83
-#define X_LOCKING_SCROLL 84
-#define X_KP_COMMA 85
-#define X_KP_EQUAL_AS400 86
-#define X_INT1 87
-#define X_INT2 88
-#define X_INT3 89
-#define X_INT4 8a
-#define X_INT5 8b
-#define X_INT6 8c
-#define X_INT7 8d
-#define X_INT8 8e
-#define X_INT9 8f
-#define X_LANG1 90
-#define X_LANG2 91
-#define X_LANG3 92
-#define X_LANG4 93
-#define X_LANG5 94
-#define X_LANG6 95
-#define X_LANG7 96
-#define X_LANG8 97
-#define X_LANG9 98
-#define X_ALT_ERASE 99
-#define X_SYSREQ 9a
-#define X_CANCEL 9b
-#define X_CLEAR 9c
-#define X_PRIOR 9d
-#define X_RETURN 9e
-#define X_SEPARATOR 9f
-#define X_OUT a0
-#define X_OPER a1
-#define X_CLEAR_AGAIN a2
-#define X_CRSEL a3
-#define X_EXSEL a4
+/* Copyright 2019
+ *
+ * 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
+
+// clang-format off
+
+/* Punctuation */
+#define X_ENT X_ENTER
+#define X_ESC X_ESCAPE
+#define X_BSPC X_BSPACE
+#define X_SPC X_SPACE
+#define X_MINS X_MINUS
+#define X_EQL X_EQUAL
+#define X_LBRC X_LBRACKET
+#define X_RBRC X_RBRACKET
+#define X_BSLS X_BSLASH
+#define X_NUHS X_NONUS_HASH
+#define X_SCLN X_SCOLON
+#define X_QUOT X_QUOTE
+#define X_GRV X_GRAVE
+#define X_COMM X_COMMA
+#define X_SLSH X_SLASH
+#define X_NUBS X_NONUS_BSLASH
+
+/* Lock Keys */
+#define X_CLCK X_CAPSLOCK
+#define X_CAPS X_CAPSLOCK
+#define X_SLCK X_SCROLLLOCK
+#define X_NLCK X_NUMLOCK
+#define X_LCAP X_LOCKING_CAPS
+#define X_LNUM X_LOCKING_NUM
+#define X_LSCR X_LOCKING_SCROLL
+
+/* Commands */
+#define X_PSCR X_PSCREEN
+#define X_PAUS X_PAUSE
+#define X_BRK X_PAUSE
+#define X_INS X_INSERT
+#define X_DEL X_DELETE
+#define X_PGDN X_PGDOWN
+#define X_RGHT X_RIGHT
+#define X_APP X_APPLICATION
+#define X_EXEC X_EXECUTE
+#define X_SLCT X_SELECT
+#define X_AGIN X_AGAIN
+#define X_PSTE X_PASTE
+#define X_ERAS X_ALT_ERASE
+#define X_CLR X_CLEAR
+
+/* Keypad */
+#define X_PSLS X_KP_SLASH
+#define X_PAST X_KP_ASTERISK
+#define X_PMNS X_KP_MINUS
+#define X_PPLS X_KP_PLUS
+#define X_PENT X_KP_ENTER
+#define X_P1 X_KP_1
+#define X_P2 X_KP_2
+#define X_P3 X_KP_3
+#define X_P4 X_KP_4
+#define X_P5 X_KP_5
+#define X_P6 X_KP_6
+#define X_P7 X_KP_7
+#define X_P8 X_KP_8
+#define X_P9 X_KP_9
+#define X_P0 X_KP_0
+#define X_PDOT X_KP_DOT
+#define X_PEQL X_KP_EQUAL
+#define X_PCMM X_KP_COMMA
+
+/* Japanese specific */
+#define X_ZKHK X_GRAVE
+#define X_RO X_INT1
+#define X_KANA X_INT2
+#define X_JYEN X_INT3
+#define X_HENK X_INT4
+#define X_MHEN X_INT5
+
+/* Korean specific */
+#define X_HAEN X_LANG1
+#define X_HANJ X_LANG2
+
+/* Modifiers */
+#define X_LCTL X_LCTRL
+#define X_LSFT X_LSHIFT
+#define X_LCMD X_LGUI
+#define X_LWIN X_LGUI
+#define X_RCTL X_RCTRL
+#define X_RSFT X_RSHIFT
+#define X_ALGR X_RALT
+#define X_RCMD X_RGUI
+#define X_RWIN X_RGUI
+
+/* Generic Desktop Page (0x01) */
+#define X_PWR X_SYSTEM_POWER
+#define X_SLEP X_SYSTEM_SLEEP
+#define X_WAKE X_SYSTEM_WAKE
+
+/* Consumer Page (0x0C) */
+#define X_MUTE X_AUDIO_MUTE
+#define X_VOLU X_AUDIO_VOL_UP
+#define X_VOLD X_AUDIO_VOL_DOWN
+#define X_MNXT X_MEDIA_NEXT_TRACK
+#define X_MPRV X_MEDIA_PREV_TRACK
+#define X_MSTP X_MEDIA_STOP
+#define X_MPLY X_MEDIA_PLAY_PAUSE
+#define X_MSEL X_MEDIA_SELECT
+#define X_EJCT X_MEDIA_EJECT
+#define X_CALC X_CALCULATOR
+#define X_MYCM X_MY_COMPUTER
+#define X_WSCH X_WWW_SEARCH
+#define X_WHOM X_WWW_HOME
+#define X_WBAK X_WWW_BACK
+#define X_WFWD X_WWW_FORWARD
+#define X_WSTP X_WWW_STOP
+#define X_WREF X_WWW_REFRESH
+#define X_WFAV X_WWW_FAVORITES
+#define X_MFFD X_MEDIA_FAST_FORWARD
+#define X_MRWD X_MEDIA_REWIND
+#define X_BRIU X_BRIGHTNESS_UP
+#define X_BRID X_BRIGHTNESS_DOWN
+
+/* System Specific */
+#define X_BRMU X_PAUSE
+#define X_BRMD X_SCROLLLOCK
+
+/* Keyboard/Keypad Page (0x07) */
+#define X_A 04
+#define X_B 05
+#define X_C 06
+#define X_D 07
+#define X_E 08
+#define X_F 09
+#define X_G 0a
+#define X_H 0b
+#define X_I 0c
+#define X_J 0d
+#define X_K 0e
+#define X_L 0f
+#define X_M 10
+#define X_N 11
+#define X_O 12
+#define X_P 13
+#define X_Q 14
+#define X_R 15
+#define X_S 16
+#define X_T 17
+#define X_U 18
+#define X_V 19
+#define X_W 1a
+#define X_X 1b
+#define X_Y 1c
+#define X_Z 1d
+#define X_1 1e
+#define X_2 1f
+#define X_3 20
+#define X_4 21
+#define X_5 22
+#define X_6 23
+#define X_7 24
+#define X_8 25
+#define X_9 26
+#define X_0 27
+#define X_ENTER 28
+#define X_ESCAPE 29
+#define X_BSPACE 2a
+#define X_TAB 2b
+#define X_SPACE 2c
+#define X_MINUS 2d
+#define X_EQUAL 2e
+#define X_LBRACKET 2f
+#define X_RBRACKET 30
+#define X_BSLASH 31
+#define X_NONUS_HASH 32
+#define X_SCOLON 33
+#define X_QUOTE 34
+#define X_GRAVE 35
+#define X_COMMA 36
+#define X_DOT 37
+#define X_SLASH 38
+#define X_CAPSLOCK 39
+#define X_F1 3a
+#define X_F2 3b
+#define X_F3 3c
+#define X_F4 3d
+#define X_F5 3e
+#define X_F6 3f
+#define X_F7 40
+#define X_F8 41
+#define X_F9 42
+#define X_F10 43
+#define X_F11 44
+#define X_F12 45
+#define X_PSCREEN 46
+#define X_SCROLLLOCK 47
+#define X_PAUSE 48
+#define X_INSERT 49
+#define X_HOME 4a
+#define X_PGUP 4b
+#define X_DELETE 4c
+#define X_END 4d
+#define X_PGDOWN 4e
+#define X_RIGHT 4f
+#define X_LEFT 50
+#define X_DOWN 51
+#define X_UP 52
+#define X_NUMLOCK 53
+#define X_KP_SLASH 54
+#define X_KP_ASTERISK 55
+#define X_KP_MINUS 56
+#define X_KP_PLUS 57
+#define X_KP_ENTER 58
+#define X_KP_1 59
+#define X_KP_2 5a
+#define X_KP_3 5b
+#define X_KP_4 5c
+#define X_KP_5 5d
+#define X_KP_6 5e
+#define X_KP_7 5f
+#define X_KP_8 60
+#define X_KP_9 61
+#define X_KP_0 62
+#define X_KP_DOT 63
+#define X_NONUS_BSLASH 64
+#define X_APPLICATION 65
+#define X_POWER 66
+#define X_KP_EQUAL 67
+#define X_F13 68
+#define X_F14 69
+#define X_F15 6a
+#define X_F16 6b
+#define X_F17 6c
+#define X_F18 6d
+#define X_F19 6e
+#define X_F20 6f
+#define X_F21 70
+#define X_F22 71
+#define X_F23 72
+#define X_F24 73
+#define X_EXECUTE 74
+#define X_HELP 75
+#define X_MENU 76
+#define X_SELECT 77
+#define X_STOP 78
+#define X_AGAIN 79
+#define X_UNDO 7a
+#define X_CUT 7b
+#define X_COPY 7c
+#define X_PASTE 7d
+#define X_FIND 7e
+#define X__MUTE 7f
+#define X__VOLUP 80
+#define X__VOLDOWN 81
+#define X_LOCKING_CAPS 82
+#define X_LOCKING_NUM 83
+#define X_LOCKING_SCROLL 84
+#define X_KP_COMMA 85
+#define X_KP_EQUAL_AS400 86
+#define X_INT1 87
+#define X_INT2 88
+#define X_INT3 89
+#define X_INT4 8a
+#define X_INT5 8b
+#define X_INT6 8c
+#define X_INT7 8d
+#define X_INT8 8e
+#define X_INT9 8f
+#define X_LANG1 90
+#define X_LANG2 91
+#define X_LANG3 92
+#define X_LANG4 93
+#define X_LANG5 94
+#define X_LANG6 95
+#define X_LANG7 96
+#define X_LANG8 97
+#define X_LANG9 98
+#define X_ALT_ERASE 99
+#define X_SYSREQ 9a
+#define X_CANCEL 9b
+#define X_CLEAR 9c
+#define X_PRIOR 9d
+#define X_RETURN 9e
+#define X_SEPARATOR 9f
+#define X_OUT a0
+#define X_OPER a1
+#define X_CLEAR_AGAIN a2
+#define X_CRSEL a3
+#define X_EXSEL a4
/* Modifiers */
-#define X_LCTRL e0
-#define X_LSHIFT e1
-#define X_LALT e2
-#define X_LGUI e3
-#define X_RCTRL e4
-#define X_RSHIFT e5
-#define X_RALT e6
-#define X_RGUI e7
-
-/* System Control */
-#define X_SYSTEM_POWER a5
-#define X_SYSTEM_SLEEP a6
-#define X_SYSTEM_WAKE a7
-
-/* Media Control */
-#define X_AUDIO_MUTE a8
-#define X_AUDIO_VOL_UP a9
-#define X_AUDIO_VOL_DOWN aa
-#define X_MEDIA_NEXT_TRACK ab
-#define X_MEDIA_PREV_TRACK ac
-#define X_MEDIA_STOP ad
-#define X_MEDIA_PLAY_PAUSE ae
-#define X_MEDIA_SELECT af
-#define X_MEDIA_EJECT b0
-#define X_MAIL b1
-#define X_CALCULATOR b2
-#define X_MY_COMPUTER b3
-#define X_WWW_SEARCH b4
-#define X_WWW_HOME b5
-#define X_WWW_BACK b6
-#define X_WWW_FORWARD b7
-#define X_WWW_STOP b8
-#define X_WWW_REFRESH b9
-#define X_WWW_FAVORITES ba
+#define X_LCTRL e0
+#define X_LSHIFT e1
+#define X_LALT e2
+#define X_LGUI e3
+#define X_RCTRL e4
+#define X_RSHIFT e5
+#define X_RALT e6
+#define X_RGUI e7
+
+/* Media and Function keys */
+/* Generic Desktop Page (0x01) */
+#define X_SYSTEM_POWER a5
+#define X_SYSTEM_SLEEP a6
+#define X_SYSTEM_WAKE a7
+
+/* Consumer Page (0x0C) */
+#define X_AUDIO_MUTE a8
+#define X_AUDIO_VOL_UP a9
+#define X_AUDIO_VOL_DOWN aa
+#define X_MEDIA_NEXT_TRACK ab
+#define X_MEDIA_PREV_TRACK ac
+#define X_MEDIA_STOP ad
+#define X_MEDIA_PLAY_PAUSE ae
+#define X_MEDIA_SELECT af
+#define X_MEDIA_EJECT b0
+#define X_MAIL b1
+#define X_CALCULATOR b2
+#define X_MY_COMPUTER b3
+#define X_WWW_SEARCH b4
+#define X_WWW_HOME b5
+#define X_WWW_BACK b6
+#define X_WWW_FORWARD b7
+#define X_WWW_STOP b8
+#define X_WWW_REFRESH b9
+#define X_WWW_FAVORITES ba
#define X_MEDIA_FAST_FORWARD bb
-#define X_MEDIA_REWIND bc
-#endif
+#define X_MEDIA_REWIND bc
+#define X_BRIGHTNESS_UP bd
+#define X_BRIGHTNESS_DOWN be
+
+// Send string macros
+#define STRINGIZE(z) #z
+#define ADD_SLASH_X(y) STRINGIZE(\x##y)
+#define SYMBOL_STR(x) ADD_SLASH_X(x)
+
+#define SS_TAP_CODE 1
+#define SS_DOWN_CODE 2
+#define SS_UP_CODE 3
+
+#define SS_TAP(keycode) "\1" SYMBOL_STR(keycode)
+#define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode)
+#define SS_UP(keycode) "\3" SYMBOL_STR(keycode)
+
+// `string` arguments must not be parenthesized
+#define SS_LCTL(string) SS_DOWN(X_LCTL) string SS_UP(X_LCTL)
+#define SS_LSFT(string) SS_DOWN(X_LSFT) string SS_UP(X_LSFT)
+#define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT)
+#define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI)
+#define SS_LCMD(string) SS_LGUI(string)
+#define SS_LWIN(string) SS_LGUI(string)
+
+#define SS_RCTL(string) SS_DOWN(X_RCTL) string SS_UP(X_RCTL)
+#define SS_RSFT(string) SS_DOWN(X_RSFT) string SS_UP(X_RSFT)
+#define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT)
+#define SS_RGUI(string) SS_DOWN(X_RGUI) string SS_UP(X_RGUI)
+#define SS_ALGR(string) SS_RALT(string)
+#define SS_RCMD(string) SS_RGUI(string)
+#define SS_RWIN(string) SS_RGUI(string)
+
+// DEPRECATED
+#define SS_LCTRL(string) SS_LCTL(string)
diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c
index 7176d0cc4f..ed1ff5acf3 100644
--- a/quantum/split_common/matrix.c
+++ b/quantum/split_common/matrix.c
@@ -14,10 +14,6 @@ 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 "wait.h"
@@ -33,23 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "encoder.h"
#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))
-# 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
-
#define ERROR_DISCONNECT_COUNT 5
#define ROWS_PER_HAND (MATRIX_ROWS / 2)
@@ -62,58 +41,15 @@ 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 raw_matrix[ROWS_PER_HAND];
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
// row offsets for each hand
uint8_t thisHand, thatHand;
// user-defined overridable functions
-
-__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) {}
-// helper functions
-
-inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
-
-inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
-
-bool matrix_is_modified(void) {
- if (debounce_active()) 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_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row);
- print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-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;
-}
-
// matrix code
#ifdef DIRECT_PINS
@@ -136,7 +72,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
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);
+ current_matrix[current_row] |= readPin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
}
}
@@ -179,7 +115,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
// 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);
+ current_matrix[current_row] |= readPin(col_pins[col_index]) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
}
// Unselect row
@@ -225,10 +161,10 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
// Check row pin state
if (readPin(row_pins[row_index])) {
// Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
} else {
// Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
}
// Determine if the matrix changed state
@@ -280,7 +216,8 @@ void matrix_init(void) {
// initialize matrix state: all keys off
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
}
debounce_init(ROWS_PER_HAND);
@@ -288,29 +225,7 @@ void matrix_init(void) {
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
-
- debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
-
- return (uint8_t)changed;
-}
-
-uint8_t matrix_scan(void) {
- uint8_t ret = _matrix_scan();
-
+void matrix_post_scan(void) {
if (is_keyboard_master()) {
static uint8_t error_count;
@@ -335,6 +250,25 @@ uint8_t matrix_scan(void) {
#endif
matrix_slave_scan_user();
}
+}
+
+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
+
+ debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
- return ret;
+ matrix_post_scan();
+ return (uint8_t)changed;
}
diff --git a/quantum/split_common/matrix.h b/quantum/split_common/matrix.h
deleted file mode 100644
index c2bdd3098c..0000000000
--- a/quantum/split_common/matrix.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-#include <common/matrix.h>
diff --git a/quantum/split_common/post_config.h b/quantum/split_common/post_config.h
index 5c0b414fb3..4ae1d52732 100644
--- a/quantum/split_common/post_config.h
+++ b/quantum/split_common/post_config.h
@@ -1,4 +1,4 @@
-#if defined(USE_I2C) || defined(EH)
+#if defined(USE_I2C)
// When using I2C, using rgblight implicitly involves split support.
# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_SPLIT)
# define RGBLIGHT_SPLIT
diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c
index 5c548de059..076f186649 100644
--- a/quantum/split_common/split_util.c
+++ b/quantum/split_common/split_util.c
@@ -33,9 +33,11 @@ bool waitForUsb(void) {
wait_ms(100);
}
-#if defined(__AVR__)
// Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow
+#if defined(__AVR__)
(USBCON &= ~(_BV(USBE) | _BV(OTGPADE)));
+#else
+ usbStop(&USBD1);
#endif
return false;
@@ -76,7 +78,7 @@ __attribute__((weak)) bool is_keyboard_master(void) {
}
static void keyboard_master_setup(void) {
-#if defined(USE_I2C) || defined(EH)
+#if defined(USE_I2C)
# ifdef SSD1306OLED
matrix_master_OLED_init();
# endif
diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c
index 3c783dc568..ab421adc4a 100644
--- a/quantum/split_common/transport.c
+++ b/quantum/split_common/transport.c
@@ -21,7 +21,7 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A;
# define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t))
#endif
-#if defined(USE_I2C) || defined(EH)
+#if defined(USE_I2C)
# include "i2c_master.h"
# include "i2c_slave.h"
diff --git a/quantum/stm32/proton_c.mk b/quantum/stm32/proton_c.mk
index ff28a4cb5d..b25b555045 100644
--- a/quantum/stm32/proton_c.mk
+++ b/quantum/stm32/proton_c.mk
@@ -5,9 +5,7 @@ AUDIO_ENABLE = yes
WS2812_DRIVER = bitbang
# Force task driven PWM until ARM can provide automatic configuration
-ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
- BACKLIGHT_ENABLE = software
-endif
+BACKLIGHT_DRIVER = software
# The rest of these settings shouldn't change
diff --git a/quantum/template/base/keymaps/default/keymap.c b/quantum/template/base/keymaps/default/keymap.c
index 3a68f5487c..af35ccec15 100644
--- a/quantum/template/base/keymaps/default/keymap.c
+++ b/quantum/template/base/keymaps/default/keymap.c
@@ -52,7 +52,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case QMKURL:
if (record->event.pressed) {
// when keycode QMKURL is pressed
- SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ SEND_STRING("https://qmk.fm/\n");
} else {
// when keycode QMKURL is released
}
diff --git a/quantum/via.c b/quantum/via.c
new file mode 100644
index 0000000000..64b05324a1
--- /dev/null
+++ b/quantum/via.c
@@ -0,0 +1,400 @@
+/* Copyright 2019 Jason Williams (Wilba)
+ *
+ * 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 RAW_ENABLE
+# error "RAW_ENABLE is not enabled"
+#endif
+
+#ifndef DYNAMIC_KEYMAP_ENABLE
+# error "DYNAMIC_KEYMAP_ENABLE is not enabled"
+#endif
+
+#include "quantum.h"
+
+#include "via.h"
+#include "raw_hid.h"
+#include "dynamic_keymap.h"
+#include "tmk_core/common/eeprom.h"
+#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
+
+// Can be called in an overriding via_init_kb() to test if keyboard level code usage of
+// EEPROM is invalid and use/save defaults.
+bool via_eeprom_is_valid(void)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
+ eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
+}
+
+// Sets VIA/keyboard level usage of EEPROM to valid/invalid
+// Keyboard level code (eg. via_init_kb()) should not call this
+void via_eeprom_set_valid(bool valid)
+{
+ char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
+ uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
+ uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
+
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
+ eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
+}
+
+// Flag QMK and VIA/keyboard level EEPROM as invalid.
+// Used in bootmagic_lite() and VIA command handler.
+// Keyboard level code should not need to call this.
+void via_eeprom_reset(void)
+{
+ // Set the VIA specific EEPROM state as invalid.
+ via_eeprom_set_valid(false);
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+}
+
+// Override bootmagic_lite() so it can flag EEPROM as invalid
+// as well as jump to bootloader, thus performing a "factory reset"
+// of dynamic keymaps and optionally backlight/other settings.
+void bootmagic_lite(void)
+{
+ // The lite version of TMK's bootmagic based on 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();
+#if defined(DEBOUNCE) && DEBOUNCE > 0
+ wait_ms(DEBOUNCE * 2);
+#else
+ wait_ms(30);
+#endif
+ 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].
+ // 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(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) {
+ // This is the only difference from the default implementation.
+ via_eeprom_reset();
+ // Jump to bootloader.
+ bootloader_jump();
+ }
+}
+
+// Override this at the keyboard code level to check
+// VIA's EEPROM valid state and reset to defaults as needed.
+// Used by keyboards that store their own state in EEPROM,
+// for backlight, rotary encoders, etc.
+// The override should not set via_eeprom_set_valid(true) as
+// the caller also needs to check the valid state.
+__attribute__((weak)) void via_init_kb(void) {
+}
+
+// Called by QMK core to initialize dynamic keymaps etc.
+void via_init(void)
+{
+ // Let keyboard level test EEPROM valid state,
+ // but not set it valid, it is done here.
+ via_init_kb();
+
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM.
+ if (via_eeprom_is_valid()) {
+ } else {
+ // This resets the layout options
+ via_set_layout_options(0);
+ // This resets the keymaps in EEPROM to what is in flash.
+ dynamic_keymap_reset();
+ // This resets the macros in EEPROM to nothing.
+ dynamic_keymap_macro_reset();
+ // Save the magic number last, in case saving was interrupted
+ via_eeprom_set_valid(true);
+ }
+}
+
+// This is generalized so the layout options EEPROM usage can be
+// variable, between 1 and 4 bytes.
+uint32_t via_get_layout_options(void)
+{
+ uint32_t value = 0;
+ // Start at the most significant byte
+ void * source = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR);
+ for ( uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++ ) {
+ value = value << 8;
+ value |= eeprom_read_byte(source);
+ source++;
+ }
+ return value;
+}
+
+void via_set_layout_options(uint32_t value)
+{
+ // Start at the least significant byte
+ void * target = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR+VIA_EEPROM_LAYOUT_OPTIONS_SIZE-1);
+ for ( uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++ ) {
+ eeprom_update_byte(target, value & 0xFF );
+ value = value >> 8;
+ target--;
+ }
+}
+
+// Called by QMK core to process VIA-specific keycodes.
+bool process_record_via(uint16_t keycode, keyrecord_t *record)
+{
+ // Handle macros
+ if (record->event.pressed) {
+ if ( keycode >= MACRO00 && keycode <= MACRO15 )
+ {
+ uint8_t id = keycode - MACRO00;
+ dynamic_keymap_macro_send(id);
+ return false;
+ }
+ }
+
+ // TODO: ideally this would be generalized and refactored into
+ // QMK core as advanced keycodes, until then, the simple case
+ // can be available here to keyboards using VIA
+ switch(keycode) {
+ case FN_MO13:
+ if (record->event.pressed) {
+ layer_on(1);
+ update_tri_layer(1, 2, 3);
+ } else {
+ layer_off(1);
+ update_tri_layer(1, 2, 3);
+ }
+ return false;
+ break;
+ case FN_MO23:
+ if (record->event.pressed) {
+ layer_on(2);
+ update_tri_layer(1, 2, 3);
+ } else {
+ layer_off(2);
+ update_tri_layer(1, 2, 3);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Keyboard level code can override this to handle custom messages from VIA.
+// See raw_hid_receive() implementation.
+// DO NOT call raw_hid_send() in the overide function.
+__attribute__((weak)) void raw_hid_receive_kb(uint8_t *data, uint8_t length) {
+ uint8_t *command_id = &(data[0]);
+ *command_id = id_unhandled;
+}
+
+// VIA handles received HID messages first, and will route to
+// raw_hid_receive_kb() for command IDs that are not handled here.
+// This gives the keyboard code level the ability to handle the command
+// specifically.
+//
+// raw_hid_send() is called at the end, with the same buffer, which was
+// possibly modified with returned values.
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+ uint8_t *command_id = &(data[0]);
+ uint8_t *command_data = &(data[1]);
+ switch ( *command_id )
+ {
+ case id_get_protocol_version:
+ {
+ command_data[0] = VIA_PROTOCOL_VERSION >> 8;
+ command_data[1] = VIA_PROTOCOL_VERSION & 0xFF;
+ break;
+ }
+ case id_get_keyboard_value:
+ {
+ switch ( command_data[0] )
+ {
+ case id_uptime:
+ {
+ uint32_t value = timer_read32();
+ command_data[1] = (value >> 24 ) & 0xFF;
+ command_data[2] = (value >> 16 ) & 0xFF;
+ command_data[3] = (value >> 8 ) & 0xFF;
+ command_data[4] = value & 0xFF;
+ break;
+ }
+ case id_layout_options:
+ {
+ uint32_t value = via_get_layout_options();
+ command_data[1] = (value >> 24 ) & 0xFF;
+ command_data[2] = (value >> 16 ) & 0xFF;
+ command_data[3] = (value >> 8 ) & 0xFF;
+ command_data[4] = value & 0xFF;
+ break;
+ }
+ case id_switch_matrix_state:
+ {
+#if ( (MATRIX_COLS/8+1)*MATRIX_ROWS <= 28 )
+ uint8_t i = 1;
+ for ( uint8_t row=0; row<MATRIX_ROWS; row++ ) {
+ matrix_row_t value = matrix_get_row(row);
+#if (MATRIX_COLS > 24)
+ command_data[i++] = (value >> 24 ) & 0xFF;
+#endif
+#if (MATRIX_COLS > 16)
+ command_data[i++] = (value >> 16 ) & 0xFF;
+#endif
+#if (MATRIX_COLS > 8)
+ command_data[i++] = (value >> 8 ) & 0xFF;
+#endif
+ command_data[i++] = value & 0xFF;
+ }
+#endif
+ break;
+ }
+ default:
+ {
+ raw_hid_receive_kb(data,length);
+ break;
+ }
+ }
+ break;
+ }
+ case id_set_keyboard_value:
+ {
+ switch ( command_data[0] )
+ {
+ case id_layout_options:
+ {
+ uint32_t value = ( (uint32_t)command_data[1] << 24 ) |
+ ( (uint32_t)command_data[2] << 16 ) |
+ ( (uint32_t)command_data[3] << 8 ) |
+ (uint32_t)command_data[4];
+ via_set_layout_options(value);
+ break;
+ }
+ default:
+ {
+ raw_hid_receive_kb(data,length);
+ break;
+ }
+ }
+ break;
+ }
+ case id_dynamic_keymap_get_keycode:
+ {
+ uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
+ command_data[3] = keycode >> 8;
+ command_data[4] = keycode & 0xFF;
+ break;
+ }
+ case id_dynamic_keymap_set_keycode:
+ {
+ dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] );
+ break;
+ }
+ case id_dynamic_keymap_reset:
+ {
+ dynamic_keymap_reset();
+ break;
+ }
+ case id_backlight_config_set_value:
+ case id_backlight_config_get_value:
+ case id_backlight_config_save:
+ {
+ raw_hid_receive_kb(data, length);
+ break;
+ }
+ case id_dynamic_keymap_macro_get_count:
+ {
+ command_data[0] = dynamic_keymap_macro_get_count();
+ break;
+ }
+ case id_dynamic_keymap_macro_get_buffer_size:
+ {
+ uint16_t size = dynamic_keymap_macro_get_buffer_size();
+ command_data[0] = size >> 8;
+ command_data[1] = size & 0xFF;
+ break;
+ }
+ case id_dynamic_keymap_macro_get_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_macro_get_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_macro_set_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_macro_set_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_macro_reset:
+ {
+ dynamic_keymap_macro_reset();
+ break;
+ }
+ case id_dynamic_keymap_get_layer_count:
+ {
+ command_data[0] = dynamic_keymap_get_layer_count();
+ break;
+ }
+ case id_dynamic_keymap_get_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_get_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_set_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_set_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_eeprom_reset:
+ {
+ via_eeprom_reset();
+ break;
+ }
+ case id_bootloader_jump:
+ {
+ // Need to send data back before the jump
+ // Informs host that the command is handled
+ raw_hid_send( data, length );
+ // Give host time to read it
+ wait_ms(100);
+ bootloader_jump();
+ break;
+ }
+ default:
+ {
+ // The command ID is not known
+ // Return the unhandled state
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+
+ // Return the same buffer, optionally with values changed
+ // (i.e. returning state to the host, or the unhandled state).
+ raw_hid_send( data, length );
+}
diff --git a/quantum/via.h b/quantum/via.h
new file mode 100644
index 0000000000..f9a8017b24
--- /dev/null
+++ b/quantum/via.h
@@ -0,0 +1,151 @@
+/* Copyright 2019 Jason Williams (Wilba)
+ *
+ * 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 <tmk_core/common/eeconfig.h> // for EECONFIG_SIZE
+
+// Keyboard level code can change where VIA stores the magic.
+// The magic is the build date YYMMDD encoded as BCD in 3 bytes,
+// thus installing firmware built on a different date to the one
+// already installed can be detected and the EEPROM data is reset.
+// The only reason this is important is in case EEPROM usage changes
+// and the EEPROM was not explicitly reset by bootmagic lite.
+#ifndef VIA_EEPROM_MAGIC_ADDR
+# define VIA_EEPROM_MAGIC_ADDR (EECONFIG_SIZE)
+#endif
+
+#define VIA_EEPROM_LAYOUT_OPTIONS_ADDR (VIA_EEPROM_MAGIC_ADDR+3)
+
+// Changing the layout options size after release will invalidate EEPROM,
+// but this is something that should be set correctly on initial implementation.
+// 1 byte is enough for most uses (i.e. 8 binary states, or 6 binary + 1 ternary/quaternary )
+#ifndef VIA_EEPROM_LAYOUT_OPTIONS_SIZE
+# define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 1
+#endif
+
+// The end of the EEPROM memory used by VIA
+// By default, dynamic keymaps will start at this if there is no
+// custom config
+#define VIA_EEPROM_CUSTOM_CONFIG_ADDR (VIA_EEPROM_LAYOUT_OPTIONS_ADDR+VIA_EEPROM_LAYOUT_OPTIONS_SIZE)
+
+#ifndef VIA_EEPROM_CUSTOM_CONFIG_SIZE
+# define VIA_EEPROM_CUSTOM_CONFIG_SIZE 0
+#endif
+
+// This is changed only when the command IDs change,
+// so VIA Configurator can detect compatible firmware.
+#define VIA_PROTOCOL_VERSION 0x0009
+
+enum via_command_id
+{
+ id_get_protocol_version = 0x01, // always 0x01
+ id_get_keyboard_value,
+ id_set_keyboard_value,
+ id_dynamic_keymap_get_keycode,
+ id_dynamic_keymap_set_keycode,
+ id_dynamic_keymap_reset,
+ id_backlight_config_set_value,
+ id_backlight_config_get_value,
+ id_backlight_config_save,
+ id_eeprom_reset,
+ id_bootloader_jump,
+ id_dynamic_keymap_macro_get_count,
+ id_dynamic_keymap_macro_get_buffer_size,
+ id_dynamic_keymap_macro_get_buffer,
+ id_dynamic_keymap_macro_set_buffer,
+ id_dynamic_keymap_macro_reset,
+ id_dynamic_keymap_get_layer_count,
+ id_dynamic_keymap_get_buffer,
+ id_dynamic_keymap_set_buffer,
+ id_unhandled = 0xFF,
+};
+
+enum via_keyboard_value_id
+{
+ id_uptime = 0x01,
+ id_layout_options,
+ id_switch_matrix_state
+};
+
+// Can't use SAFE_RANGE here, it might change if someone adds
+// new values to enum quantum_keycodes.
+// Need to keep checking 0x5F10 is still in the safe range.
+// TODO: merge this into quantum_keycodes
+// Backlight keycodes are in range 0x5F00-0x5F0F
+enum via_keycodes {
+ FN_MO13 = 0x5F10,
+ FN_MO23,
+ MACRO00,
+ MACRO01,
+ MACRO02,
+ MACRO03,
+ MACRO04,
+ MACRO05,
+ MACRO06,
+ MACRO07,
+ MACRO08,
+ MACRO09,
+ MACRO10,
+ MACRO11,
+ MACRO12,
+ MACRO13,
+ MACRO14,
+ MACRO15,
+};
+
+enum user_keycodes {
+ USER00 = 0x5F80,
+ USER01,
+ USER02,
+ USER03,
+ USER04,
+ USER05,
+ USER06,
+ USER07,
+ USER08,
+ USER09,
+ USER10,
+ USER11,
+ USER12,
+ USER13,
+ USER14,
+ USER15,
+};
+
+// Can be called in an overriding via_init_kb() to test if keyboard level code usage of
+// EEPROM is invalid and use/save defaults.
+bool via_eeprom_is_valid(void);
+
+// Sets VIA/keyboard level usage of EEPROM to valid/invalid
+// Keyboard level code (eg. via_init_kb()) should not call this
+void via_eeprom_set_valid(bool valid);
+
+// Flag QMK and VIA/keyboard level EEPROM as invalid.
+// Used in bootmagic_lite() and VIA command handler.
+// Keyboard level code should not need to call this.
+void via_eeprom_reset(void);
+
+// Called by QMK core to initialize dynamic keymaps etc.
+void via_init(void);
+
+// Used by VIA to store and retrieve the layout options.
+uint32_t via_get_layout_options(void);
+void via_set_layout_options(uint32_t value);
+
+// Called by QMK core to process VIA-specific keycodes.
+bool process_record_via(uint16_t keycode, keyrecord_t *record);
+
diff --git a/readme.md b/readme.md
index 2641e2c2ef..6092f209be 100644
--- a/readme.md
+++ b/readme.md
@@ -13,7 +13,9 @@ This is a keyboard firmware based on the [tmk\_keyboard firmware](https://github
* [See the official documentation on docs.qmk.fm](https://docs.qmk.fm)
-The docs are powered by [Docsify](https://docsify.js.org/) and hosted on [GitHub](/docs/). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware/pulls), or by clicking the "Edit Document" link at the bottom of any page.
+The docs are powered by [Docsify](https://docsify.js.org/) and hosted on [GitHub](/docs/). They are also viewable offline; see [Previewing the Documentation](https://docs.qmk.fm/#/contributing?id=previewing-the-documentation) for more details.
+
+You can request changes by making a fork and opening a [pull request](https://github.com/qmk/qmk_firmware/pulls), or by clicking the "Edit this page" link at the bottom of any page.
## Supported Keyboards
diff --git a/requirements.txt b/requirements.txt
index 033b688fc6..074b11a8ce 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,3 +6,4 @@ colorama
hjson
nose2
flake8
+pep8-naming
diff --git a/show_options.mk b/show_options.mk
index 63ab3b0d7b..b79653d5c3 100644
--- a/show_options.mk
+++ b/show_options.mk
@@ -10,7 +10,8 @@ BUILD_OPTION_NAMES = \
DEBOUNCE_TYPE \
SPLIT_KEYBOARD \
DYNAMIC_KEYMAP_ENABLE \
- USB_HID_ENABLE
+ USB_HID_ENABLE \
+ VIA_ENABLE
HARDWARE_OPTION_NAMES = \
SLEEP_LED_ENABLE \
@@ -67,16 +68,11 @@ OTHER_OPTION_NAMES = \
ISSI_ENABLE \
KEYBOARD_LOCK_ENABLE \
KEYLOGGER_ENABLE \
- KEYMAP_IN_EEPROM_ENABLE \
- KEYMAP_SECTION_ENABLE \
LCD_BACKLIGHT_ENABLE \
- LEDMAP_ENABLE \
- LEDMAP_IN_EEPROM_ENABLE \
MACROS_ENABLED \
ONEHAND_ENABLE \
PS2_MOUSE_ENABLE \
RAW_ENABLE \
- SOFTPWM_LED_ENABLE \
SWAP_HANDS_ENABLE \
USB_6KRO_ENABLE \
WATCHDOG_ENABLE \
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 1846a9b4bc..ecd2fd39a4 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -240,7 +240,7 @@ avrdude-split-right: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
$(call EXEC_AVRDUDE,eeprom-righthand.eep)
define EXEC_USBASP
- avrdude -p $(MCU) -c usbasp -U flash:w:$(BUILD_DIR)/$(TARGET).hex
+ avrdude -p $(AVRDUDE_MCU) -c usbasp -U flash:w:$(BUILD_DIR)/$(TARGET).hex
endef
usbasp: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
@@ -321,7 +321,7 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf
bootloader:
make -C lib/lufa/Bootloaders/DFU/ clean
$(TMK_DIR)/make_dfu_header.sh $(ALL_CONFIGS)
- $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) $(CFLAGS) $(OPT_DEFS) tmk_core/common/avr/bootloader_size.c 2> /dev/null | sed -ne '/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
+ $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) $(CFLAGS) $(OPT_DEFS) tmk_core/common/avr/bootloader_size.c 2> /dev/null | sed -ne 's/\r//;/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
$(eval PROGRAM_SIZE_KB=$(shell n=`expr $(MAX_SIZE) / 1024` && echo $$(($$n)) || echo 0))
$(eval BOOT_SECTION_SIZE_KB=$(shell n=`expr $(BOOTLOADER_SIZE) / 1024` && echo $$(($$n)) || echo 0))
$(eval FLASH_SIZE_KB=$(shell n=`expr $(PROGRAM_SIZE_KB) + $(BOOT_SECTION_SIZE_KB)` && echo $$(($$n)) || echo 0))
diff --git a/tmk_core/common.mk b/tmk_core/common.mk
index d43950299b..8f355da123 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -187,18 +187,6 @@ ifeq ($(strip $(NO_USB_STARTUP_CHECK)), yes)
TMK_COMMON_DEFS += -DNO_USB_STARTUP_CHECK
endif
-ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
- TMK_COMMON_DEFS += -DKEYMAP_SECTION_ENABLE
-
- ifeq ($(strip $(MCU)),atmega32u2)
- TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
- else ifeq ($(strip $(MCU)),atmega32u4)
- TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
- else
- TMK_COMMON_LDFLAGS = $(error no ldscript for keymap section)
- endif
-endif
-
ifeq ($(strip $(SHARED_EP_ENABLE)), yes)
TMK_COMMON_DEFS += -DSHARED_EP_ENABLE
endif
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index bd6aeba4f8..d6062703ee 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -47,6 +47,10 @@ int retro_tapping_counter = 0;
# include <fauxclicky.h>
#endif
+#ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+__attribute__ ((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode) { return false; }
+#endif
+
#ifndef TAP_CODE_DELAY
# define TAP_CODE_DELAY 0
#endif
@@ -308,8 +312,12 @@ void process_action(keyrecord_t *record, action_t action) {
default:
if (event.pressed) {
if (tap_count > 0) {
-# ifndef IGNORE_MOD_TAP_INTERRUPT
- if (record->tap.interrupted) {
+# if !defined(IGNORE_MOD_TAP_INTERRUPT) || defined(IGNORE_MOD_TAP_INTERRUPT_PER_KEY)
+ if (
+# ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+ !get_ignore_mod_tap_interrupt(get_event_keycode(record->event)) &&
+# endif
+ record->tap.interrupted) {
dprint("mods_tap: tap: cancel: add_mods\n");
// ad hoc: set 0 to cancel tap
record->tap.count = 0;
@@ -552,7 +560,7 @@ void process_action(keyrecord_t *record, action_t action) {
action_macro_play(action_get_macro(record, action.func.id, action.func.opt));
break;
#endif
-#if defined(BACKLIGHT_ENABLE) | defined(LED_MATRIX_ENABLE)
+#if defined(BACKLIGHT_ENABLE) || defined(LED_MATRIX_ENABLE)
case ACT_BACKLIGHT:
if (!event.pressed) {
switch (action.backlight.opt) {
diff --git a/tmk_core/common/action_tapping.c b/tmk_core/common/action_tapping.c
index e0f524ad7a..c0f1f694b7 100644
--- a/tmk_core/common/action_tapping.c
+++ b/tmk_core/common/action_tapping.c
@@ -27,6 +27,10 @@ __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode) { return TAPPI
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < TAPPING_TERM)
# endif
+# ifdef TAPPING_FORCE_HOLD_PER_KEY
+__attribute__((weak)) bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { return false; }
+# endif
+
static keyrecord_t tapping_key = {};
static keyrecord_t waiting_buffer[WAITING_BUFFER_SIZE] = {};
static uint8_t waiting_buffer_head = 0;
@@ -111,7 +115,7 @@ bool process_tapping(keyrecord_t *keyp) {
* This can register the key before settlement of tapping,
* useful for long TAPPING_TERM but may prevent fast typing.
*/
-# if defined(TAPPING_TERM_PER_KEY) || (!defined(PER_KEY_TAPPING_TERM) && TAPPING_TERM >= 500) || defined(PERMISSIVE_HOLD)
+# if defined(TAPPING_TERM_PER_KEY) || (TAPPING_TERM >= 500) || defined(PERMISSIVE_HOLD)
# ifdef TAPPING_TERM_PER_KEY
else if ((get_tapping_term(get_event_keycode(tapping_key.event)) >= 500) && IS_RELEASED(event) && waiting_buffer_typed(event))
# else
@@ -232,8 +236,13 @@ bool process_tapping(keyrecord_t *keyp) {
if (WITHIN_TAPPING_TERM(event)) {
if (event.pressed) {
if (IS_TAPPING_KEY(event.key)) {
-# ifndef TAPPING_FORCE_HOLD
- if (!tapping_key.tap.interrupted && tapping_key.tap.count > 0) {
+//# ifndef TAPPING_FORCE_HOLD
+# if !defined(TAPPING_FORCE_HOLD) || defined(TAPPING_FORCE_HOLD_PER_KEY)
+ if (
+# ifdef TAPPING_FORCE_HOLD_PER_KEY
+ !get_tapping_force_hold(get_event_keycode(tapping_key.event), keyp) &&
+# endif
+ !tapping_key.tap.interrupted && tapping_key.tap.count > 0) {
// sequential tap.
keyp->tap = tapping_key.tap;
if (keyp->tap.count < 15) keyp->tap.count += 1;
diff --git a/tmk_core/common/chibios/chibios_config.h b/tmk_core/common/chibios/chibios_config.h
new file mode 100644
index 0000000000..2725296083
--- /dev/null
+++ b/tmk_core/common/chibios/chibios_config.h
@@ -0,0 +1,24 @@
+/* Copyright 2019
+ *
+ * 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
+
+#if defined(STM32F1XX)
+# define USE_GPIOV1
+#endif
+
+#if defined(STM32F1XX) || defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32L1XX)
+# define USE_I2CV1
+#endif
diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c
index 82cd806091..0d6661d603 100644
--- a/tmk_core/common/command.c
+++ b/tmk_core/common/command.c
@@ -192,9 +192,6 @@ static void print_version(void) {
#ifdef NKRO_ENABLE
" NKRO"
#endif
-#ifdef KEYMAP_SECTION_ENABLE
- " KEYMAP_SECTION"
-#endif
" " STR(BOOTLOADER_SIZE) "\n");
diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h
index 308f865e19..6fbe789031 100644
--- a/tmk_core/common/eeconfig.h
+++ b/tmk_core/common/eeconfig.h
@@ -48,6 +48,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EECONFIG_RGB_MATRIX_SPEED (uint8_t *)32
// TODO: Combine these into a single word and single block of EEPROM
#define EECONFIG_KEYMAP_UPPER_BYTE (uint8_t *)33
+// Size of EEPROM being used, other code can refer to this for available EEPROM
+#define EECONFIG_SIZE 34
/* debug bit */
#define EECONFIG_DEBUG_ENABLE (1 << 0)
#define EECONFIG_DEBUG_MATRIX (1 << 1)
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index 63ace9793c..cb4e7637fa 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -83,6 +83,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef VELOCIKEY_ENABLE
# include "velocikey.h"
#endif
+#ifdef VIA_ENABLE
+# include "via.h"
+#endif
// Only enable this if console is enabled to print to
#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE)
@@ -217,6 +220,9 @@ __attribute__((weak)) bool is_keyboard_master(void) { return true; }
void keyboard_init(void) {
timer_init();
matrix_init();
+#ifdef VIA_ENABLE
+ via_init();
+#endif
#ifdef QWIIC_ENABLE
qwiic_init();
#endif
@@ -254,6 +260,7 @@ void keyboard_init(void) {
#endif
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
#endif
keyboard_post_init_kb(); /* Always keep this last */
}
@@ -296,13 +303,14 @@ void keyboard_task(void) {
}
#endif
if (debug_matrix) matrix_print();
- for (uint8_t c = 0; c < MATRIX_COLS; c++) {
- if (matrix_change & ((matrix_row_t)1 << c)) {
+ matrix_row_t col_mask = 1;
+ for (uint8_t c = 0; c < MATRIX_COLS; c++, col_mask <<= 1) {
+ if (matrix_change & col_mask) {
action_exec((keyevent_t){
- .key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & ((matrix_row_t)1 << c)), .time = (timer_read() | 1) /* time should not be 0 */
+ .key = (keypos_t){.row = r, .col = c}, .pressed = (matrix_row & col_mask), .time = (timer_read() | 1) /* time should not be 0 */
});
// record a processed key
- matrix_prev[r] ^= ((matrix_row_t)1 << c);
+ matrix_prev[r] ^= col_mask;
#ifdef QMK_KEYS_PER_SCAN
// only jump out if we have processed "enough" keys.
if (++keys_processed >= QMK_KEYS_PER_SCAN)
@@ -327,6 +335,16 @@ MATRIX_LOOP_END:
matrix_scan_perf_task();
#endif
+#if defined(RGBLIGHT_ANIMATIONS) && defined(RGBLIGHT_ENABLE)
+ rgblight_task();
+#endif
+
+#if defined(BACKLIGHT_ENABLE)
+# if defined(BACKLIGHT_PIN) || defined(BACKLIGHT_PINS)
+ backlight_task();
+# endif
+#endif
+
#ifdef QWIIC_ENABLE
qwiic_task();
#endif
diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h
index fd5d606805..e1059fadf0 100644
--- a/tmk_core/common/keycode.h
+++ b/tmk_core/common/keycode.h
@@ -175,7 +175,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define KC_MPLY KC_MEDIA_PLAY_PAUSE
#define KC_MSEL KC_MEDIA_SELECT
#define KC_EJCT KC_MEDIA_EJECT
-#define KC_MAIL KC_MAIL
#define KC_CALC KC_CALCULATOR
#define KC_MYCM KC_MY_COMPUTER
#define KC_WSCH KC_WWW_SEARCH
diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h
index 7624d51376..a2fedf5ff0 100644
--- a/tmk_core/common/matrix.h
+++ b/tmk_core/common/matrix.h
@@ -40,6 +40,8 @@ typedef uint32_t matrix_col_t;
# error "MATRIX_ROWS: invalid value"
#endif
+#define MATRIX_ROW_SHIFTER ((matrix_row_t)1)
+
#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1 << col))
#ifdef __cplusplus
@@ -79,11 +81,6 @@ void matrix_scan_kb(void);
void matrix_init_user(void);
void matrix_scan_user(void);
-#ifdef I2C_SPLIT
-void slave_matrix_init(void);
-uint8_t slave_matrix_scan(void);
-#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/tmk_core/common/mbed/bootloader.c b/tmk_core/common/mbed/bootloader.c
deleted file mode 100644
index 88945eb050..0000000000
--- a/tmk_core/common/mbed/bootloader.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "bootloader.h"
-
-void bootloader_jump(void) {}
diff --git a/tmk_core/common/mbed/suspend.c b/tmk_core/common/mbed/suspend.c
deleted file mode 100644
index 3d0554f87b..0000000000
--- a/tmk_core/common/mbed/suspend.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <stdbool.h>
-
-void suspend_power_down(void) {}
-bool suspend_wakeup_condition(void) { return true; }
-void suspend_wakeup_init(void) {}
diff --git a/tmk_core/common/mbed/timer.c b/tmk_core/common/mbed/timer.c
deleted file mode 100644
index 7e4070af29..0000000000
--- a/tmk_core/common/mbed/timer.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "cmsis.h"
-#include "timer.h"
-
-/* Mill second tick count */
-volatile uint32_t timer_count = 0;
-
-/* Timer interrupt handler */
-void SysTick_Handler(void) { timer_count++; }
-
-void timer_init(void) {
- timer_count = 0;
- SysTick_Config(SystemCoreClock / 1000); /* 1ms tick */
-}
-
-void timer_clear(void) { timer_count = 0; }
-
-uint16_t timer_read(void) { return (uint16_t)(timer_count & 0xFFFF); }
-
-uint32_t timer_read32(void) { return timer_count; }
-
-uint16_t timer_elapsed(uint16_t last) { return TIMER_DIFF_16(timer_read(), last); }
-
-uint32_t timer_elapsed32(uint32_t last) { return TIMER_DIFF_32(timer_read32(), last); }
diff --git a/tmk_core/common/mbed/xprintf.cpp b/tmk_core/common/mbed/xprintf.cpp
deleted file mode 100644
index 184b7fa7a0..0000000000
--- a/tmk_core/common/mbed/xprintf.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <cstdarg>
-//#include <stdarg.h>
-#include "mbed.h"
-#include "mbed/xprintf.h"
-
-#define STRING_STACK_LIMIT 120
-
-// TODO
-int __xprintf(const char* format, ...) { return 0; }
-
-#if 0
-/* mbed Serial */
-Serial ser(UART_TX, UART_RX);
-
-/* TODO: Need small implementation for embedded */
-int xprintf(const char* format, ...)
-{
- /* copy from mbed/common/RawSerial.cpp */
- std::va_list arg;
- va_start(arg, format);
- int len = vsnprintf(NULL, 0, format, arg);
- if (len < STRING_STACK_LIMIT) {
- char temp[STRING_STACK_LIMIT];
- vsprintf(temp, format, arg);
- ser.puts(temp);
- } else {
- char *temp = new char[len + 1];
- vsprintf(temp, format, arg);
- ser.puts(temp);
- delete[] temp;
- }
- va_end(arg);
- return len;
-
-/* Fail: __builtin_va_arg_pack?
- * https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Constructing-Calls.html#Constructing-Calls
- void *arg = __builtin_apply_args();
- void *ret = __builtin_apply((void*)(&(ser.printf)), arg, 100);
- __builtin_return(ret)
-*/
-/* Fail: varargs can not be passed to printf
- //int r = ser.printf("test %i\r\n", 123);
- va_list arg;
- va_start(arg, format);
- int r = ser.printf(format, arg);
- va_end(arg);
- return r;
-*/
-}
-#endif
diff --git a/tmk_core/common/mbed/xprintf.h b/tmk_core/common/mbed/xprintf.h
deleted file mode 100644
index e27822d3a8..0000000000
--- a/tmk_core/common/mbed/xprintf.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef XPRINTF_H
-#define XPRINTF_H
-
-//#define xprintf(format, ...) __xprintf(format, ##__VA_ARGS__)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int __xprintf(const char *format, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h
index 20189838fe..04ca558109 100644
--- a/tmk_core/common/print.h
+++ b/tmk_core/common/print.h
@@ -128,38 +128,7 @@ extern "C"
# endif /* USER_PRINT / NORMAL PRINT */
-# elif defined(__arm__) /* __arm__ */
-
-# include "mbed/xprintf.h"
-
-# ifdef USER_PRINT /* USER_PRINT */
-
-// Remove normal print defines
-# define print(s)
-# define println(s)
-# define xprintf(fmt, ...)
-
-// Create user print defines
-# define uprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
-# define uprint(s) xprintf(s)
-# define uprintln(s) xprintf(s "\r\n")
-
-# else /* NORMAL PRINT */
-
-// Create user & normal print defines
-# define xprintf(fmt, ...) __xprintf(fmt, ##__VA_ARGS__)
-# define print(s) xprintf(s)
-# define println(s) xprintf(s "\r\n")
-# define uprint(s) print(s)
-# define uprintln(s) println(s)
-# define uprintf(fmt, ...) xprintf(fmt, ##__VA_ARGS__)
-
-# endif /* USER_PRINT / NORMAL PRINT */
-
-/* TODO: to select output destinations: UART/USBSerial */
-# define print_set_sendchar(func)
-
-# endif /* __AVR__ / PROTOCOL_CHIBIOS / PROTOCOL_ARM_ATSAM / __arm__ */
+# endif /* __AVR__ / PROTOCOL_CHIBIOS / PROTOCOL_ARM_ATSAM */
// User print disables the normal print messages in the body of QMK/TMK code and
// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do
diff --git a/tmk_core/common/wait.h b/tmk_core/common/wait.h
index cb1f386a61..c82cd2d65a 100644
--- a/tmk_core/common/wait.h
+++ b/tmk_core/common/wait.h
@@ -33,8 +33,6 @@ extern "C" {
# 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
void wait_ms(uint32_t ms);
# define wait_us(us) wait_ms(us / 1000)
diff --git a/tmk_core/ldscript_keymap_avr35.x b/tmk_core/ldscript_keymap_avr35.x
deleted file mode 100644
index 6665020af9..0000000000
--- a/tmk_core/ldscript_keymap_avr35.x
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * linker script for configurable keymap
- *
- * This adds keymap section which places keymap at fixed address and
- * is based on binutils-avr ldscripts(/usr/lib/ldscripts/avr5.x).
- */
-OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
-OUTPUT_ARCH(avr:35)
-MEMORY
-{
- /* With keymap section
- *
- * Flash Map of ATMega32U4(32KB)
- * +------------+ 0x0000
- * | .vectors |
- * | .progmem |
- * | .init0-9 | > text region
- * | .text |
- * | .fini9-0 |
- * | |
- * |------------| _etext
- * | .data |
- * | .bss | > data region
- * | .noinit |
- * | |
- * |------------| 0x6800
- * | .keymap | > keymap region(2KB)
- * |------------| 0x7000
- * | bootloader | 4KB
- * +------------+ 0x7FFF
- */
- text (rx) : ORIGIN = 0, LENGTH = 64K
- keymap (rw!x) : ORIGIN = 0x6800, LENGTH = 2K
- data (rw!x) : ORIGIN = 0x800060, LENGTH = 0xffa0
- eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
- fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
- lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
- signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
-}
-SECTIONS
-{
- /* Read-only sections, merged into text segment: */
- .hash : { *(.hash) }
- .dynsym : { *(.dynsym) }
- .dynstr : { *(.dynstr) }
- .gnu.version : { *(.gnu.version) }
- .gnu.version_d : { *(.gnu.version_d) }
- .gnu.version_r : { *(.gnu.version_r) }
- .rel.init : { *(.rel.init) }
- .rela.init : { *(.rela.init) }
- .rel.text :
- {
- *(.rel.text)
- *(.rel.text.*)
- *(.rel.gnu.linkonce.t*)
- }
- .rela.text :
- {
- *(.rela.text)
- *(.rela.text.*)
- *(.rela.gnu.linkonce.t*)
- }
- .rel.fini : { *(.rel.fini) }
- .rela.fini : { *(.rela.fini) }
- .rel.rodata :
- {
- *(.rel.rodata)
- *(.rel.rodata.*)
- *(.rel.gnu.linkonce.r*)
- }
- .rela.rodata :
- {
- *(.rela.rodata)
- *(.rela.rodata.*)
- *(.rela.gnu.linkonce.r*)
- }
- .rel.data :
- {
- *(.rel.data)
- *(.rel.data.*)
- *(.rel.gnu.linkonce.d*)
- }
- .rela.data :
- {
- *(.rela.data)
- *(.rela.data.*)
- *(.rela.gnu.linkonce.d*)
- }
- .rel.ctors : { *(.rel.ctors) }
- .rela.ctors : { *(.rela.ctors) }
- .rel.dtors : { *(.rel.dtors) }
- .rela.dtors : { *(.rela.dtors) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.bss : { *(.rel.bss) }
- .rela.bss : { *(.rela.bss) }
- .rel.plt : { *(.rel.plt) }
- .rela.plt : { *(.rela.plt) }
- /* Internal text space or external memory. */
- .text :
- {
- *(.vectors)
- KEEP(*(.vectors))
- /* For data that needs to reside in the lower 64k of progmem. */
- *(.progmem.gcc*)
- *(.progmem*)
- . = ALIGN(2);
- __trampolines_start = . ;
- /* The jump trampolines for the 16-bit limited relocs will reside here. */
- *(.trampolines)
- *(.trampolines*)
- __trampolines_end = . ;
- /* For future tablejump instruction arrays for 3 byte pc devices.
- We don't relax jump/call instructions within these sections. */
- *(.jumptables)
- *(.jumptables*)
- /* For code that needs to reside in the lower 128k progmem. */
- *(.lowtext)
- *(.lowtext*)
- __ctors_start = . ;
- *(.ctors)
- __ctors_end = . ;
- __dtors_start = . ;
- *(.dtors)
- __dtors_end = . ;
- KEEP(SORT(*)(.ctors))
- KEEP(SORT(*)(.dtors))
- /* From this point on, we don't bother about wether the insns are
- below or above the 16 bits boundary. */
- *(.init0) /* Start here after reset. */
- KEEP (*(.init0))
- *(.init1)
- KEEP (*(.init1))
- *(.init2) /* Clear __zero_reg__, set up stack pointer. */
- KEEP (*(.init2))
- *(.init3)
- KEEP (*(.init3))
- *(.init4) /* Initialize data and BSS. */
- KEEP (*(.init4))
- *(.init5)
- KEEP (*(.init5))
- *(.init6) /* C++ constructors. */
- KEEP (*(.init6))
- *(.init7)
- KEEP (*(.init7))
- *(.init8)
- KEEP (*(.init8))
- *(.init9) /* Call main(). */
- KEEP (*(.init9))
- *(.text)
- . = ALIGN(2);
- *(.text.*)
- . = ALIGN(2);
- *(.fini9) /* _exit() starts here. */
- KEEP (*(.fini9))
- *(.fini8)
- KEEP (*(.fini8))
- *(.fini7)
- KEEP (*(.fini7))
- *(.fini6) /* C++ destructors. */
- KEEP (*(.fini6))
- *(.fini5)
- KEEP (*(.fini5))
- *(.fini4)
- KEEP (*(.fini4))
- *(.fini3)
- KEEP (*(.fini3))
- *(.fini2)
- KEEP (*(.fini2))
- *(.fini1)
- KEEP (*(.fini1))
- *(.fini0) /* Infinite loop after program termination. */
- KEEP (*(.fini0))
- _etext = . ;
- } > text
- .data : AT (ADDR (.text) + SIZEOF (.text))
- {
- PROVIDE (__data_start = .) ;
- *(.data)
- *(.data*)
- *(.rodata) /* We need to include .rodata here if gcc is used */
- *(.rodata*) /* with -fdata-sections. */
- *(.gnu.linkonce.d*)
- . = ALIGN(2);
- _edata = . ;
- PROVIDE (__data_end = .) ;
- } > data
- .bss : AT (ADDR (.bss))
- {
- PROVIDE (__bss_start = .) ;
- *(.bss)
- *(.bss*)
- *(COMMON)
- PROVIDE (__bss_end = .) ;
- } > data
- __data_load_start = LOADADDR(.data);
- __data_load_end = __data_load_start + SIZEOF(.data);
- /* Global data not cleared after reset. */
- .noinit :
- {
- PROVIDE (__noinit_start = .) ;
- *(.noinit*)
- PROVIDE (__noinit_end = .) ;
- _end = . ;
- PROVIDE (__heap_start = .) ;
- } > data
- /* keymap region is located at end of flash
- * .fn_actions Fn actions definitions
- * .keymaps Mapping layers
- */
- .keymap :
- {
- PROVIDE(__keymap_start = .) ;
- *(.keymap.fn_actions) /* 32*actions = 64bytes */
- . = ALIGN(0x40);
- *(.keymap.keymaps) /* rest of .keymap section */
- *(.keymap*)
- /* . = ALIGN(0x800); */ /* keymap section takes 2KB- */
- } > keymap = 0x00 /* zero fill */
- .eeprom :
- {
- *(.eeprom*)
- __eeprom_end = . ;
- } > eeprom
- .fuse :
- {
- KEEP(*(.fuse))
- KEEP(*(.lfuse))
- KEEP(*(.hfuse))
- KEEP(*(.efuse))
- } > fuse
- .lock :
- {
- KEEP(*(.lock*))
- } > lock
- .signature :
- {
- KEEP(*(.signature*))
- } > signature
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
- /* DWARF debug sections.
- Symbols in the DWARF debugging sections are relative to the beginning
- of the section so we begin them at 0. */
- /* DWARF 1 */
- .debug 0 : { *(.debug) }
- .line 0 : { *(.line) }
- /* GNU DWARF 1 extensions */
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- /* DWARF 2 */
- .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
- .debug_abbrev 0 : { *(.debug_abbrev) }
- .debug_line 0 : { *(.debug_line) }
- .debug_frame 0 : { *(.debug_frame) }
- .debug_str 0 : { *(.debug_str) }
- .debug_loc 0 : { *(.debug_loc) }
- .debug_macinfo 0 : { *(.debug_macinfo) }
-}
diff --git a/tmk_core/ldscript_keymap_avr5.x b/tmk_core/ldscript_keymap_avr5.x
deleted file mode 100644
index 9b46e6c36f..0000000000
--- a/tmk_core/ldscript_keymap_avr5.x
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * linker script for configurable keymap
- *
- * This adds keymap section which places keymap at fixed address and
- * is based on binutils-avr ldscripts(/usr/lib/ldscripts/avr5.x).
- */
-OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
-OUTPUT_ARCH(avr:5)
-MEMORY
-{
- /* With keymap section
- *
- * Flash Map of ATMega32U4(32KB)
- * +------------+ 0x0000
- * | .vectors |
- * | .progmem |
- * | .init0-9 | > text region
- * | .text |
- * | .fini9-0 |
- * | |
- * |------------| _etext
- * | .data |
- * | .bss | > data region
- * | .noinit |
- * | |
- * |------------| 0x6800
- * | .keymap | > keymap region(2KB)
- * |------------| 0x7000
- * | bootloader | 4KB
- * +------------+ 0x7FFF
- */
- text (rx) : ORIGIN = 0, LENGTH = 128K
- keymap (rw!x) : ORIGIN = 0x6800, LENGTH = 2K
- data (rw!x) : ORIGIN = 0x800060, LENGTH = 0xffa0
- eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K
- fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K
- lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K
- signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K
-}
-SECTIONS
-{
- /* Read-only sections, merged into text segment: */
- .hash : { *(.hash) }
- .dynsym : { *(.dynsym) }
- .dynstr : { *(.dynstr) }
- .gnu.version : { *(.gnu.version) }
- .gnu.version_d : { *(.gnu.version_d) }
- .gnu.version_r : { *(.gnu.version_r) }
- .rel.init : { *(.rel.init) }
- .rela.init : { *(.rela.init) }
- .rel.text :
- {
- *(.rel.text)
- *(.rel.text.*)
- *(.rel.gnu.linkonce.t*)
- }
- .rela.text :
- {
- *(.rela.text)
- *(.rela.text.*)
- *(.rela.gnu.linkonce.t*)
- }
- .rel.fini : { *(.rel.fini) }
- .rela.fini : { *(.rela.fini) }
- .rel.rodata :
- {
- *(.rel.rodata)
- *(.rel.rodata.*)
- *(.rel.gnu.linkonce.r*)
- }
- .rela.rodata :
- {
- *(.rela.rodata)
- *(.rela.rodata.*)
- *(.rela.gnu.linkonce.r*)
- }
- .rel.data :
- {
- *(.rel.data)
- *(.rel.data.*)
- *(.rel.gnu.linkonce.d*)
- }
- .rela.data :
- {
- *(.rela.data)
- *(.rela.data.*)
- *(.rela.gnu.linkonce.d*)
- }
- .rel.ctors : { *(.rel.ctors) }
- .rela.ctors : { *(.rela.ctors) }
- .rel.dtors : { *(.rel.dtors) }
- .rela.dtors : { *(.rela.dtors) }
- .rel.got : { *(.rel.got) }
- .rela.got : { *(.rela.got) }
- .rel.bss : { *(.rel.bss) }
- .rela.bss : { *(.rela.bss) }
- .rel.plt : { *(.rel.plt) }
- .rela.plt : { *(.rela.plt) }
- /* Internal text space or external memory. */
- .text :
- {
- *(.vectors)
- KEEP(*(.vectors))
- /* For data that needs to reside in the lower 64k of progmem. */
- *(.progmem.gcc*)
- *(.progmem*)
- . = ALIGN(2);
- __trampolines_start = . ;
- /* The jump trampolines for the 16-bit limited relocs will reside here. */
- *(.trampolines)
- *(.trampolines*)
- __trampolines_end = . ;
- /* For future tablejump instruction arrays for 3 byte pc devices.
- We don't relax jump/call instructions within these sections. */
- *(.jumptables)
- *(.jumptables*)
- /* For code that needs to reside in the lower 128k progmem. */
- *(.lowtext)
- *(.lowtext*)
- __ctors_start = . ;
- *(.ctors)
- __ctors_end = . ;
- __dtors_start = . ;
- *(.dtors)
- __dtors_end = . ;
- KEEP(SORT(*)(.ctors))
- KEEP(SORT(*)(.dtors))
- /* From this point on, we don't bother about wether the insns are
- below or above the 16 bits boundary. */
- *(.init0) /* Start here after reset. */
- KEEP (*(.init0))
- *(.init1)
- KEEP (*(.init1))
- *(.init2) /* Clear __zero_reg__, set up stack pointer. */
- KEEP (*(.init2))
- *(.init3)
- KEEP (*(.init3))
- *(.init4) /* Initialize data and BSS. */
- KEEP (*(.init4))
- *(.init5)
- KEEP (*(.init5))
- *(.init6) /* C++ constructors. */
- KEEP (*(.init6))
- *(.init7)
- KEEP (*(.init7))
- *(.init8)
- KEEP (*(.init8))
- *(.init9) /* Call main(). */
- KEEP (*(.init9))
- *(.text)
- . = ALIGN(2);
- *(.text.*)
- . = ALIGN(2);
- *(.fini9) /* _exit() starts here. */
- KEEP (*(.fini9))
- *(.fini8)
- KEEP (*(.fini8))
- *(.fini7)
- KEEP (*(.fini7))
- *(.fini6) /* C++ destructors. */
- KEEP (*(.fini6))
- *(.fini5)
- KEEP (*(.fini5))
- *(.fini4)
- KEEP (*(.fini4))
- *(.fini3)
- KEEP (*(.fini3))
- *(.fini2)
- KEEP (*(.fini2))
- *(.fini1)
- KEEP (*(.fini1))
- *(.fini0) /* Infinite loop after program termination. */
- KEEP (*(.fini0))
- _etext = . ;
- } > text
- .data : AT (ADDR (.text) + SIZEOF (.text))
- {
- PROVIDE (__data_start = .) ;
- *(.data)
- *(.data*)
- *(.rodata) /* We need to include .rodata here if gcc is used */
- *(.rodata*) /* with -fdata-sections. */
- *(.gnu.linkonce.d*)
- . = ALIGN(2);
- _edata = . ;
- PROVIDE (__data_end = .) ;
- } > data
- .bss : AT (ADDR (.bss))
- {
- PROVIDE (__bss_start = .) ;
- *(.bss)
- *(.bss*)
- *(COMMON)
- PROVIDE (__bss_end = .) ;
- } > data
- __data_load_start = LOADADDR(.data);
- __data_load_end = __data_load_start + SIZEOF(.data);
- /* Global data not cleared after reset. */
- .noinit :
- {
- PROVIDE (__noinit_start = .) ;
- *(.noinit*)
- PROVIDE (__noinit_end = .) ;
- _end = . ;
- PROVIDE (__heap_start = .) ;
- } > data
- /* keymap region is located at end of flash
- * .fn_actions Fn actions definitions
- * .keymaps Mapping layers
- */
- .keymap :
- {
- PROVIDE(__keymap_start = .) ;
- *(.keymap.fn_actions) /* 32*actions = 64bytes */
- . = ALIGN(0x40);
- *(.keymap.keymaps) /* rest of .keymap section */
- *(.keymap*)
- /* . = ALIGN(0x800); */ /* keymap section takes 2KB- */
- } > keymap = 0x00 /* zero fill */
- .eeprom :
- {
- *(.eeprom*)
- __eeprom_end = . ;
- } > eeprom
- .fuse :
- {
- KEEP(*(.fuse))
- KEEP(*(.lfuse))
- KEEP(*(.hfuse))
- KEEP(*(.efuse))
- } > fuse
- .lock :
- {
- KEEP(*(.lock*))
- } > lock
- .signature :
- {
- KEEP(*(.signature*))
- } > signature
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
- /* DWARF debug sections.
- Symbols in the DWARF debugging sections are relative to the beginning
- of the section so we begin them at 0. */
- /* DWARF 1 */
- .debug 0 : { *(.debug) }
- .line 0 : { *(.line) }
- /* GNU DWARF 1 extensions */
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- /* DWARF 2 */
- .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
- .debug_abbrev 0 : { *(.debug_abbrev) }
- .debug_line 0 : { *(.debug_line) }
- .debug_frame 0 : { *(.debug_frame) }
- .debug_str 0 : { *(.debug_str) }
- .debug_loc 0 : { *(.debug_loc) }
- .debug_macinfo 0 : { *(.debug_macinfo) }
-}
diff --git a/tmk_core/protocol.mk b/tmk_core/protocol.mk
index 78b9deb297..0c41642b9b 100644
--- a/tmk_core/protocol.mk
+++ b/tmk_core/protocol.mk
@@ -1,58 +1,57 @@
PROTOCOL_DIR = protocol
-
-ifdef PS2_MOUSE_ENABLE
+ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
SRC += $(PROTOCOL_DIR)/ps2_mouse.c
OPT_DEFS += -DPS2_MOUSE_ENABLE
OPT_DEFS += -DMOUSE_ENABLE
endif
-ifdef PS2_USE_BUSYWAIT
+ifeq ($(strip $(PS2_USE_BUSYWAIT)), yes)
SRC += protocol/ps2_busywait.c
SRC += protocol/ps2_io_avr.c
OPT_DEFS += -DPS2_USE_BUSYWAIT
endif
-ifdef PS2_USE_INT
+ifeq ($(strip $(PS2_USE_INT)), yes)
SRC += protocol/ps2_interrupt.c
SRC += protocol/ps2_io_avr.c
OPT_DEFS += -DPS2_USE_INT
endif
-ifdef PS2_USE_USART
+ifeq ($(strip $(PS2_USE_USART)), yes)
SRC += protocol/ps2_usart.c
SRC += protocol/ps2_io_avr.c
OPT_DEFS += -DPS2_USE_USART
endif
-ifdef SERIAL_MOUSE_MICROSOFT_ENABLE
+ifeq ($(strip $(SERIAL_MOUSE_MICROSOFT_ENABLE)), yes)
SRC += $(PROTOCOL_DIR)/serial_mouse_microsoft.c
OPT_DEFS += -DSERIAL_MOUSE_ENABLE -DSERIAL_MOUSE_MICROSOFT \
-DMOUSE_ENABLE
endif
-ifdef SERIAL_MOUSE_MOUSESYSTEMS_ENABLE
+ifeq ($(strip $(SERIAL_MOUSE_MOUSESYSTEMS_ENABLE)), yes)
SRC += $(PROTOCOL_DIR)/serial_mouse_mousesystems.c
OPT_DEFS += -DSERIAL_MOUSE_ENABLE -DSERIAL_MOUSE_MOUSESYSTEMS \
-DMOUSE_ENABLE
endif
-ifdef SERIAL_MOUSE_USE_SOFT
+ifeq ($(strip $(SERIAL_MOUSE_USE_SOFT)), yes)
SRC += $(PROTOCOL_DIR)/serial_soft.c
endif
-ifdef SERIAL_MOUSE_USE_UART
+ifeq ($(strip $(SERIAL_MOUSE_USE_UART)), yes)
SRC += $(PROTOCOL_DIR)/serial_uart.c
endif
-ifdef ADB_MOUSE_ENABLE
- OPT_DEFS += -DADB_MOUSE_ENABLE -DMOUSE_ENABLE
+ifeq ($(strip $(ADB_MOUSE_ENABLE)), yes)
+ OPT_DEFS += -DADB_MOUSE_ENABLE -DMOUSE_ENABLE
endif
-ifdef XT_ENABLE
- SRC += $(PROTOCOL_DIR)/xt_interrupt.c
- OPT_DEFS += -DXT_ENABLE
+ifeq ($(strip $(XT_ENABLE)), yes)
+ SRC += $(PROTOCOL_DIR)/xt_interrupt.c
+ OPT_DEFS += -DXT_ENABLE
endif
# Search Path
diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c
index c304f4d795..4b66bc5224 100644
--- a/tmk_core/protocol/chibios/main.c
+++ b/tmk_core/protocol/chibios/main.c
@@ -220,8 +220,5 @@ int main(void) {
#ifdef RAW_ENABLE
raw_hid_task();
#endif
-#if defined(RGBLIGHT_ANIMATIONS) && defined(RGBLIGHT_ENABLE)
- rgblight_task();
-#endif
}
}
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index b90bcd0372..8fbe877dbf 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -15,6 +15,16 @@
* GPL v2 or later.
*/
+/*
+ * Implementation notes:
+ *
+ * USBEndpointConfig - Configured using explicit order instead of struct member name.
+ * This is due to ChibiOS hal LLD differences, which is dependent on hardware,
+ * "USBv1" devices have `ep_buffers` and "OTGv1" have `in_multiplier`.
+ * Given `USBv1/hal_usb_lld.h` marks the field as "not currently used" this code file
+ * makes the assumption this is safe to avoid littering with preprocessor directives.
+ */
+
#include "ch.h"
#include "hal.h"
@@ -98,7 +108,7 @@ static const USBDescriptor *usb_get_descriptor_cb(USBDriver *usbp, uint8_t dtype
#ifndef KEYBOARD_SHARED_EP
/* keyboard endpoint state structure */
static USBInEndpointState kbd_ep_state;
-/* keyboard endpoint initialization structure (IN) */
+/* keyboard endpoint initialization structure (IN) - see USBEndpointConfig comment at top of file */
static const USBEndpointConfig kbd_ep_config = {
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */
NULL, /* SETUP packet notification callback */
@@ -117,7 +127,7 @@ static const USBEndpointConfig kbd_ep_config = {
/* mouse endpoint state structure */
static USBInEndpointState mouse_ep_state;
-/* mouse endpoint initialization structure (IN) */
+/* mouse endpoint initialization structure (IN) - see USBEndpointConfig comment at top of file */
static const USBEndpointConfig mouse_ep_config = {
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */
NULL, /* SETUP packet notification callback */
@@ -136,7 +146,7 @@ static const USBEndpointConfig mouse_ep_config = {
/* shared endpoint state structure */
static USBInEndpointState shared_ep_state;
-/* shared endpoint initialization structure (IN) */
+/* shared endpoint initialization structure (IN) - see USBEndpointConfig comment at top of file */
static const USBEndpointConfig shared_ep_config = {
USB_EP_MODE_TYPE_INTR, /* Interrupt EP */
NULL, /* SETUP packet notification callback */
@@ -164,58 +174,62 @@ typedef struct {
QMKUSBDriver driver;
} usb_driver_config_t;
-#define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \
- { \
- .queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \
- .in_ep_config = {.ep_mode = stream##_IN_MODE, \
- .setup_cb = NULL, \
- .in_cb = qmkusbDataTransmitted, \
- .out_cb = NULL, \
- .in_maxsize = stream##_EPSIZE, \
- .out_maxsize = 0, /* The pointer to the states will be filled during initialization */ \
- .in_state = NULL, \
- .out_state = NULL, \
- .ep_buffers = 2, \
- .setup_buf = NULL}, \
- .out_ep_config = \
- { \
- .ep_mode = stream##_OUT_MODE, \
- .setup_cb = NULL, \
- .in_cb = NULL, \
- .out_cb = qmkusbDataReceived, \
- .in_maxsize = 0, \
- .out_maxsize = stream##_EPSIZE, /* The pointer to the states will be filled during initialization */ \
- .in_state = NULL, \
- .out_state = NULL, \
- .ep_buffers = 2, \
- .setup_buf = NULL, \
- }, \
- .int_ep_config = \
- { \
- .ep_mode = USB_EP_MODE_TYPE_INTR, \
- .setup_cb = NULL, \
- .in_cb = qmkusbInterruptTransmitted, \
- .out_cb = NULL, \
- .in_maxsize = CDC_NOTIFICATION_EPSIZE, \
- .out_maxsize = 0, /* The pointer to the states will be filled during initialization */ \
- .in_state = NULL, \
- .out_state = NULL, \
- .ep_buffers = 2, \
- .setup_buf = NULL, \
- }, \
- .config = { \
- .usbp = &USB_DRIVER, \
- .bulk_in = stream##_IN_EPNUM, \
- .bulk_out = stream##_OUT_EPNUM, \
- .int_in = notification, \
- .in_buffers = stream##_IN_CAPACITY, \
- .out_buffers = stream##_OUT_CAPACITY, \
- .in_size = stream##_EPSIZE, \
- .out_size = stream##_EPSIZE, \
- .fixed_size = fixedsize, \
- .ib = (uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \
- .ob = (uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \
- } \
+/* Reusable initialization structure - see USBEndpointConfig comment at top of file */
+#define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \
+ { \
+ .queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \
+ .in_ep_config = \
+ { \
+ stream##_IN_MODE, /* Interrupt EP */ \
+ NULL, /* SETUP packet notification callback */ \
+ qmkusbDataTransmitted, /* IN notification callback */ \
+ NULL, /* OUT notification callback */ \
+ stream##_EPSIZE, /* IN maximum packet size */ \
+ 0, /* OUT maximum packet size */ \
+ NULL, /* IN Endpoint state */ \
+ NULL, /* OUT endpoint state */ \
+ 2, /* IN multiplier */ \
+ NULL /* SETUP buffer (not a SETUP endpoint) */ \
+ }, \
+ .out_ep_config = \
+ { \
+ stream##_OUT_MODE, /* Interrupt EP */ \
+ NULL, /* SETUP packet notification callback */ \
+ NULL, /* IN notification callback */ \
+ qmkusbDataReceived, /* OUT notification callback */ \
+ 0, /* IN maximum packet size */ \
+ stream##_EPSIZE, /* OUT maximum packet size */ \
+ NULL, /* IN Endpoint state */ \
+ NULL, /* OUT endpoint state */ \
+ 2, /* IN multiplier */ \
+ NULL, /* SETUP buffer (not a SETUP endpoint) */ \
+ }, \
+ .int_ep_config = \
+ { \
+ USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ \
+ NULL, /* SETUP packet notification callback */ \
+ qmkusbInterruptTransmitted, /* IN notification callback */ \
+ NULL, /* OUT notification callback */ \
+ CDC_NOTIFICATION_EPSIZE, /* IN maximum packet size */ \
+ 0, /* OUT maximum packet size */ \
+ NULL, /* IN Endpoint state */ \
+ NULL, /* OUT endpoint state */ \
+ 2, /* IN multiplier */ \
+ NULL, /* SETUP buffer (not a SETUP endpoint) */ \
+ }, \
+ .config = { \
+ .usbp = &USB_DRIVER, \
+ .bulk_in = stream##_IN_EPNUM, \
+ .bulk_out = stream##_OUT_EPNUM, \
+ .int_in = notification, \
+ .in_buffers = stream##_IN_CAPACITY, \
+ .out_buffers = stream##_OUT_CAPACITY, \
+ .in_size = stream##_EPSIZE, \
+ .out_size = stream##_EPSIZE, \
+ .fixed_size = fixedsize, \
+ .ib = (uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \
+ .ob = (uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \
+ } \
}
typedef struct {
@@ -367,7 +381,7 @@ static uint16_t get_hword(uint8_t *p) {
* Other Device Required Optional Optional Optional Optional Optional
*/
-#ifdef SHARED_EP_ENABLE
+#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
static uint8_t set_report_buf[2] __attribute__((aligned(2)));
static void set_led_transfer_cb(USBDriver *usbp) {
if ((set_report_buf[0] == REPORT_ID_KEYBOARD) || (set_report_buf[0] == REPORT_ID_NKRO)) {
@@ -606,10 +620,8 @@ uint8_t keyboard_leds(void) { return (uint8_t)(keyboard_led_stats & 0xFF); }
void send_keyboard(report_keyboard_t *report) {
osalSysLock();
if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {
- osalSysUnlock();
- return;
+ goto unlock;
}
- osalSysUnlock();
#ifdef NKRO_ENABLE
if (keymap_config.nkro && keyboard_protocol) { /* NKRO protocol */
@@ -618,28 +630,35 @@ void send_keyboard(report_keyboard_t *report) {
* until *after* the packet has been transmitted. I think
* this is more efficient */
/* busy wait, should be short and not very common */
- osalSysLock();
if (usbGetTransmitStatusI(&USB_DRIVER, SHARED_IN_EPNUM)) {
/* Need to either suspend, or loop and call unlock/lock during
* every iteration - otherwise the system will remain locked,
* no interrupts served, so USB not going through as well.
* Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */
osalThreadSuspendS(&(&USB_DRIVER)->epc[SHARED_IN_EPNUM]->in_state->thread);
+
+ /* after osalThreadSuspendS returns USB status might have changed */
+ if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {
+ goto unlock;
+ }
}
usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)report, sizeof(struct nkro_report));
- osalSysUnlock();
} else
#endif /* NKRO_ENABLE */
{ /* regular protocol */
/* need to wait until the previous packet has made it through */
/* busy wait, should be short and not very common */
- osalSysLock();
if (usbGetTransmitStatusI(&USB_DRIVER, KEYBOARD_IN_EPNUM)) {
/* Need to either suspend, or loop and call unlock/lock during
* every iteration - otherwise the system will remain locked,
* no interrupts served, so USB not going through as well.
* Note: for suspend, need USB_USE_WAIT == TRUE in halconf.h */
osalThreadSuspendS(&(&USB_DRIVER)->epc[KEYBOARD_IN_EPNUM]->in_state->thread);
+
+ /* after osalThreadSuspendS returns USB status might have changed */
+ if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {
+ goto unlock;
+ }
}
uint8_t *data, size;
if (keyboard_protocol) {
@@ -650,9 +669,11 @@ void send_keyboard(report_keyboard_t *report) {
size = 8;
}
usbStartTransmitI(&USB_DRIVER, KEYBOARD_IN_EPNUM, data, size);
- osalSysUnlock();
}
keyboard_report_sent = *report;
+
+unlock:
+ osalSysUnlock();
}
/* ---------------------------------------------------------
diff --git a/tmk_core/protocol/iwrap/main.c b/tmk_core/protocol/iwrap/main.c
index 7ba780ede7..6e9b5455b1 100644
--- a/tmk_core/protocol/iwrap/main.c
+++ b/tmk_core/protocol/iwrap/main.c
@@ -393,7 +393,7 @@ static uint8_t key2asc(uint8_t key) {
case KC_BSLASH:
return '\\';
case KC_NONUS_HASH:
- return '\\';
+ return '#';
case KC_SCOLON:
return ';';
case KC_QUOTE:
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index eb166c828e..7d325a9ba2 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -914,14 +914,11 @@ void virtser_send(const uint8_t byte) {
*/
static void setup_mcu(void) {
/* Disable watchdog if enabled by bootloader/fuses */
- MCUSR &= ~(1 << WDRF);
+ MCUSR &= ~_BV(WDRF);
wdt_disable();
/* Disable clock division */
- // clock_prescale_set(clock_div_1);
-
- CLKPR = (1 << CLKPCE);
- CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);
+ clock_prescale_set(clock_div_1);
}
/** \brief Setup USB
@@ -1001,10 +998,6 @@ int main(void) {
MIDI_Device_USBTask(&USB_MIDI_Interface);
#endif
-#if defined(RGBLIGHT_ANIMATIONS) && defined(RGBLIGHT_ENABLE)
- rgblight_task();
-#endif
-
#ifdef MODULE_ADAFRUIT_BLE
adafruit_ble_task();
#endif
diff --git a/tmk_core/protocol/mbed/HIDKeyboard.cpp b/tmk_core/protocol/mbed/HIDKeyboard.cpp
deleted file mode 100644
index dbaf108fa1..0000000000
--- a/tmk_core/protocol/mbed/HIDKeyboard.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-#include <stdint.h>
-#include "USBHID.h"
-#include "USBHID_Types.h"
-#include "USBDescriptor.h"
-#include "HIDKeyboard.h"
-
-#define DEFAULT_CONFIGURATION (1)
-
-HIDKeyboard::HIDKeyboard(uint16_t vendor_id, uint16_t product_id, uint16_t product_release) : USBDevice(vendor_id, product_id, product_release) { USBDevice::connect(); }
-
-bool HIDKeyboard::sendReport(report_keyboard_t report) {
- USBDevice::write(EP1IN, report.raw, sizeof(report), MAX_PACKET_SIZE_EP1);
- return true;
-}
-
-uint8_t HIDKeyboard::leds() { return led_state; }
-
-bool HIDKeyboard::USBCallback_setConfiguration(uint8_t configuration) {
- if (configuration != DEFAULT_CONFIGURATION) {
- return false;
- }
-
- // Configure endpoints > 0
- addEndpoint(EPINT_IN, MAX_PACKET_SIZE_EPINT);
- // addEndpoint(EPINT_OUT, MAX_PACKET_SIZE_EPINT);
-
- // We activate the endpoint to be able to recceive data
- // readStart(EPINT_OUT, MAX_PACKET_SIZE_EPINT);
- return true;
-}
-
-uint8_t *HIDKeyboard::stringImanufacturerDesc() {
- static uint8_t stringImanufacturerDescriptor[] = {
- 0x18, /*bLength*/
- STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
- 't',
- 0,
- 'm',
- 0,
- 'k',
- 0,
- '-',
- 0,
- 'k',
- 0,
- 'b',
- 0,
- 'd',
- 0,
- '.',
- 0,
- 'c',
- 0,
- 'o',
- 0,
- 'm',
- 0 /*bString iManufacturer*/
- };
- return stringImanufacturerDescriptor;
-}
-
-uint8_t *HIDKeyboard::stringIproductDesc() {
- static uint8_t stringIproductDescriptor[] = {
- 0x0a, /*bLength*/
- STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
- 'm',
- 0,
- 'b',
- 0,
- 'e',
- 0,
- 'd',
- 0 /*bString iProduct*/
- };
- return stringIproductDescriptor;
-}
-
-uint8_t *HIDKeyboard::stringIserialDesc() {
- static uint8_t stringIserialDescriptor[] = {
- 0x04, /*bLength*/
- STRING_DESCRIPTOR, /*bDescriptorType 0x03*/
- '0', 0 /*bString iSerial*/
- };
- return stringIserialDescriptor;
-}
-
-uint8_t *HIDKeyboard::reportDesc() {
- static uint8_t reportDescriptor[] = {
- USAGE_PAGE(1), 0x01, // Generic Desktop
- USAGE(1), 0x06, // Keyboard
- COLLECTION(1), 0x01, // Application
-
- USAGE_PAGE(1), 0x07, // Key Codes
- USAGE_MINIMUM(1), 0xE0, USAGE_MAXIMUM(1), 0xE7, LOGICAL_MINIMUM(1), 0x00, LOGICAL_MAXIMUM(1), 0x01, REPORT_SIZE(1), 0x01, REPORT_COUNT(1), 0x08, INPUT(1), 0x02, // Data, Variable, Absolute
-
- REPORT_COUNT(1), 0x01, REPORT_SIZE(1), 0x08, INPUT(1), 0x01, // Constant
-
- REPORT_COUNT(1), 0x05, REPORT_SIZE(1), 0x01, USAGE_PAGE(1), 0x08, // LEDs
- USAGE_MINIMUM(1), 0x01, USAGE_MAXIMUM(1), 0x05, OUTPUT(1), 0x02, // Data, Variable, Absolute
-
- REPORT_COUNT(1), 0x01, REPORT_SIZE(1), 0x03, OUTPUT(1), 0x01, // Constant
-
- REPORT_COUNT(1), 0x06, REPORT_SIZE(1), 0x08, LOGICAL_MINIMUM(1), 0x00, LOGICAL_MAXIMUM(1), 0xFF, USAGE_PAGE(1), 0x07, // Key Codes
- USAGE_MINIMUM(1), 0x00, USAGE_MAXIMUM(1), 0xFF, INPUT(1), 0x00, // Data, Array
- END_COLLECTION(0),
- };
- reportLength = sizeof(reportDescriptor);
- return reportDescriptor;
-}
-
-uint16_t HIDKeyboard::reportDescLength() {
- reportDesc();
- return reportLength;
-}
-
-#define TOTAL_DESCRIPTOR_LENGTH ((1 * CONFIGURATION_DESCRIPTOR_LENGTH) + (1 * INTERFACE_DESCRIPTOR_LENGTH) + (1 * HID_DESCRIPTOR_LENGTH) + (1 * ENDPOINT_DESCRIPTOR_LENGTH))
-uint8_t *HIDKeyboard::configurationDesc() {
- static uint8_t configurationDescriptor[] = {
- CONFIGURATION_DESCRIPTOR_LENGTH, // bLength
- CONFIGURATION_DESCRIPTOR, // bDescriptorType
- LSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (LSB)
- MSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (MSB)
- 0x01, // bNumInterfaces
- DEFAULT_CONFIGURATION, // bConfigurationValue
- 0x00, // iConfiguration
- C_RESERVED | C_REMOTE_WAKEUP, // bmAttributes
- C_POWER(100), // bMaxPowerHello World from Mbed
-
- INTERFACE_DESCRIPTOR_LENGTH, // bLength
- INTERFACE_DESCRIPTOR, // bDescriptorType
- 0x00, // bInterfaceNumber
- 0x00, // bAlternateSetting
- 0x01, // bNumEndpoints
- HID_CLASS, // bInterfaceClass
- 1, // bInterfaceSubClass (boot)
- 1, // bInterfaceProtocol (keyboard)
- 0x00, // iInterface
-
- HID_DESCRIPTOR_LENGTH, // bLength
- HID_DESCRIPTOR, // bDescriptorType
- LSB(HID_VERSION_1_11), // bcdHID (LSB)
- MSB(HID_VERSION_1_11), // bcdHID (MSB)
- 0x00, // bCountryCode
- 0x01, // bNumDescriptors
- REPORT_DESCRIPTOR, // bDescriptorType
- (uint8_t)(LSB(reportDescLength())), // wDescriptorLength (LSB)
- (uint8_t)(MSB(reportDescLength())), // wDescriptorLength (MSB)
-
- ENDPOINT_DESCRIPTOR_LENGTH, // bLength
- ENDPOINT_DESCRIPTOR, // bDescriptorType
- PHY_TO_DESC(EP1IN), // bEndpointAddress
- E_INTERRUPT, // bmAttributes
- LSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (LSB)
- MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB)
- 1, // bInterval (milliseconds)
- };
- return configurationDescriptor;
-}
-
-#if 0
-uint8_t * HIDKeyboard::deviceDesc() {
- static uint8_t deviceDescriptor[] = {
- DEVICE_DESCRIPTOR_LENGTH, /* bLength */
- DEVICE_DESCRIPTOR, /* bDescriptorType */
- LSB(USB_VERSION_2_0), /* bcdUSB (LSB) */
- MSB(USB_VERSION_2_0), /* bcdUSB (MSB) */
- 0x00, /* bDeviceClass */
- 0x00, /* bDeviceSubClass */
- 0x00, /* bDeviceprotocol */
- MAX_PACKET_SIZE_EP0, /* bMaxPacketSize0 */
- (uint8_t)(LSB(0xfeed)), /* idVendor (LSB) */
- (uint8_t)(MSB(0xfeed)), /* idVendor (MSB) */
- (uint8_t)(LSB(0x1bed)), /* idProduct (LSB) */
- (uint8_t)(MSB(0x1bed)), /* idProduct (MSB) */
- (uint8_t)(LSB(0x0002)), /* bcdDevice (LSB) */
- (uint8_t)(MSB(0x0002)), /* bcdDevice (MSB) */
- 0, /* iManufacturer */
- 0, /* iProduct */
- 0, /* iSerialNumber */
- 0x01 /* bNumConfigurations */
- };
- return deviceDescriptor;
-}
-#endif
-
-bool HIDKeyboard::USBCallback_request() {
- bool success = false;
- CONTROL_TRANSFER *transfer = getTransferPtr();
- uint8_t * hidDescriptor;
-
- // Process additional standard requests
-
- if ((transfer->setup.bmRequestType.Type == STANDARD_TYPE)) {
- switch (transfer->setup.bRequest) {
- case GET_DESCRIPTOR:
- switch (DESCRIPTOR_TYPE(transfer->setup.wValue)) {
- case REPORT_DESCRIPTOR:
- if ((reportDesc() != NULL) && (reportDescLength() != 0)) {
- transfer->remaining = reportDescLength();
- transfer->ptr = reportDesc();
- transfer->direction = DEVICE_TO_HOST;
- success = true;
- }
- break;
- case HID_DESCRIPTOR:
- // Find the HID descriptor, after the configuration descriptor
- hidDescriptor = findDescriptor(HID_DESCRIPTOR);
- if (hidDescriptor != NULL) {
- transfer->remaining = HID_DESCRIPTOR_LENGTH;
- transfer->ptr = hidDescriptor;
- transfer->direction = DEVICE_TO_HOST;
- success = true;
- }
- break;
-
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
-
- // Process class-specific requests
- if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
- switch (transfer->setup.bRequest) {
- case SET_REPORT:
- // LED indicator
- // TODO: check Interface and Report length?
- // if (transfer->setup.wIndex == INTERFACE_KEYBOAD) { }
- // if (transfer->setup.wLength == 1)
-
- transfer->remaining = 1;
- // transfer->ptr = ?? what ptr should be set when OUT(not used?)
- transfer->direction = HOST_TO_DEVICE;
- transfer->notify = true; /* notify with USBCallback_requestCompleted */
- success = true;
- default:
- break;
- }
- }
-
- return success;
-}
-
-void HIDKeyboard::USBCallback_requestCompleted(uint8_t *buf, uint32_t length) {
- if (length > 0) {
- CONTROL_TRANSFER *transfer = getTransferPtr();
- if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
- switch (transfer->setup.bRequest) {
- case SET_REPORT:
- led_state = buf[0];
- break;
- default:
- break;
- }
- }
- }
-}
diff --git a/tmk_core/protocol/mbed/HIDKeyboard.h b/tmk_core/protocol/mbed/HIDKeyboard.h
deleted file mode 100644
index e8ff108699..0000000000
--- a/tmk_core/protocol/mbed/HIDKeyboard.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef HIDKEYBOARD_H
-
-# include "stdint.h"
-# include "stdbool.h"
-# include "USBHID.h"
-# include "report.h"
-
-class HIDKeyboard : public USBDevice {
- public:
- HIDKeyboard(uint16_t vendor_id = 0xFEED, uint16_t product_id = 0xabed, uint16_t product_release = 0x0001);
-
- bool sendReport(report_keyboard_t report);
- uint8_t leds(void);
-
- protected:
- uint16_t reportLength;
- virtual bool USBCallback_setConfiguration(uint8_t configuration);
- virtual uint8_t* stringImanufacturerDesc();
- virtual uint8_t* stringIproductDesc();
- virtual uint8_t* stringIserialDesc();
- virtual uint16_t reportDescLength();
- virtual uint8_t* reportDesc();
- virtual uint8_t* configurationDesc();
- // virtual uint8_t * deviceDesc();
- virtual bool USBCallback_request();
- virtual void USBCallback_requestCompleted(uint8_t* buf, uint32_t length);
-
- private:
- uint8_t led_state;
-};
-
-#endif
diff --git a/tmk_core/protocol/mbed/mbed_driver.cpp b/tmk_core/protocol/mbed/mbed_driver.cpp
deleted file mode 100644
index 83086499c7..0000000000
--- a/tmk_core/protocol/mbed/mbed_driver.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "HIDKeyboard.h"
-#include "host.h"
-#include "host_driver.h"
-#include "mbed_driver.h"
-
-HIDKeyboard keyboard;
-
-/* Host driver */
-static uint8_t keyboard_leds(void);
-static void send_keyboard(report_keyboard_t *report);
-static void send_mouse(report_mouse_t *report);
-static void send_system(uint16_t data);
-static void send_consumer(uint16_t data);
-
-host_driver_t mbed_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
-
-static uint8_t keyboard_leds(void) { return keyboard.leds(); }
-static void send_keyboard(report_keyboard_t *report) { keyboard.sendReport(*report); }
-static void send_mouse(report_mouse_t *report) {}
-static void send_system(uint16_t data) {}
-static void send_consumer(uint16_t data) {}
diff --git a/tmk_core/protocol/mbed/mbed_driver.h b/tmk_core/protocol/mbed/mbed_driver.h
deleted file mode 100644
index dd1153b43a..0000000000
--- a/tmk_core/protocol/mbed/mbed_driver.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "host_driver.h"
-
-extern host_driver_t mbed_driver;
diff --git a/tmk_core/protocol/ps2_io_mbed.c b/tmk_core/protocol/ps2_io_mbed.c
deleted file mode 100644
index 9cec3dfbb4..0000000000
--- a/tmk_core/protocol/ps2_io_mbed.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <stdbool.h>
-#include "ps2_io.h"
-#include "gpio_api.h"
-
-static gpio_t clock;
-static gpio_t data;
-
-/*
- * Clock
- */
-void clock_init(void) {
- gpio_init(&clock, P0_9);
- gpio_mode(&clock, OpenDrain | PullNone);
-}
-
-void clock_lo(void) {
- gpio_dir(&clock, PIN_OUTPUT);
- gpio_write(&clock, 0);
-}
-void clock_hi(void) {
- gpio_dir(&clock, PIN_OUTPUT);
- gpio_write(&clock, 1);
-}
-
-bool clock_in(void) {
- gpio_dir(&clock, PIN_INPUT);
- return gpio_read(&clock);
-}
-
-/*
- * Data
- */
-void data_init(void) {
- gpio_init(&data, P0_8);
- gpio_mode(&data, OpenDrain | PullNone);
-}
-
-void data_lo(void) {
- gpio_dir(&data, PIN_OUTPUT);
- gpio_write(&data, 0);
-}
-
-void data_hi(void) {
- gpio_dir(&data, PIN_OUTPUT);
- gpio_write(&data, 1);
-}
-
-bool data_in(void) {
- gpio_dir(&data, PIN_INPUT);
- return gpio_read(&data);
-}
diff --git a/tmk_core/protocol/serial_soft.c b/tmk_core/protocol/serial_soft.c
index b409079954..8624ef733c 100644
--- a/tmk_core/protocol/serial_soft.c
+++ b/tmk_core/protocol/serial_soft.c
@@ -68,7 +68,6 @@ POSSIBILITY OF SUCH DAMAGE.
#endif
/* debug for signal timing, see debug pin with oscilloscope */
-#define SERIAL_SOFT_DEBUG
#ifdef SERIAL_SOFT_DEBUG
# define SERIAL_SOFT_DEBUG_INIT() (DDRD |= 1 << 7)
# define SERIAL_SOFT_DEBUG_TGL() (PORTD ^= 1 << 7)
@@ -169,7 +168,7 @@ void serial_send(uint8_t data) {
/* detect edge of start bit */
ISR(SERIAL_SOFT_RXD_VECT) {
SERIAL_SOFT_DEBUG_TGL();
- SERIAL_SOFT_RXD_INT_ENTER()
+ SERIAL_SOFT_RXD_INT_ENTER();
uint8_t data = 0;
diff --git a/tmk_core/protocol/vusb/main.c b/tmk_core/protocol/vusb/main.c
index e6291900e6..06dc8ae67f 100644
--- a/tmk_core/protocol/vusb/main.c
+++ b/tmk_core/protocol/vusb/main.c
@@ -99,10 +99,6 @@ int main(void) {
// To prevent failing to configure NOT scan keyboard during configuration
if (usbConfiguration && usbInterruptIsReady()) {
keyboard_task();
-
-#if defined(RGBLIGHT_ANIMATIONS) && defined(RGBLIGHT_ENABLE)
- rgblight_task();
-#endif
}
vusb_transfer_keyboard();
}
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index 72445e00bb..e669384455 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -26,7 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "host_driver.h"
#include "vusb.h"
-#include "bootloader.h"
#include <util/delay.h>
static uint8_t vusb_keyboard_leds = 0;
@@ -145,7 +144,7 @@ static void send_consumer(uint16_t data) {
*------------------------------------------------------------------*/
static struct {
uint16_t len;
- enum { NONE, BOOTLOADER, SET_LED } kind;
+ enum { NONE, SET_LED } kind;
} last_req;
usbMsgLen_t usbFunctionSetup(uchar data[8]) {
@@ -173,11 +172,6 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) {
debug("SET_LED: ");
last_req.kind = SET_LED;
last_req.len = rq->wLength.word;
-#ifdef BOOTLOADER_SIZE
- } else if (rq->wValue.word == 0x0301) {
- last_req.kind = BOOTLOADER;
- last_req.len = rq->wLength.word;
-#endif
}
return USB_NO_MSG; // to get data in usbFunctionWrite
} else {
@@ -204,11 +198,6 @@ uchar usbFunctionWrite(uchar *data, uchar len) {
last_req.len = 0;
return 1;
break;
- case BOOTLOADER:
- usbDeviceDisconnect();
- bootloader_jump();
- return 1;
- break;
case NONE:
default:
return -1;
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index 31bce33c39..334ff314be 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -397,7 +397,7 @@ ifeq ($(findstring avr-gcc,$(CC)),avr-gcc)
SIZE_MARGIN = 1024
check-size:
- $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) $(CFLAGS) $(OPT_DEFS) tmk_core/common/avr/bootloader_size.c 2> /dev/null | sed -ne '/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
+ $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) $(CFLAGS) $(OPT_DEFS) tmk_core/common/avr/bootloader_size.c 2> /dev/null | sed -ne 's/\r//;/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
$(eval CURRENT_SIZE=$(shell if [ -f $(BUILD_DIR)/$(TARGET).hex ]; then $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(AWK) 'NR==2 {print $$4}'; else printf 0; fi))
$(eval FREE_SIZE=$(shell expr $(MAX_SIZE) - $(CURRENT_SIZE)))
$(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE)))
diff --git a/users/bcat/config.h b/users/bcat/config.h
index f6be07bf6e..6b132a429c 100644
--- a/users/bcat/config.h
+++ b/users/bcat/config.h
@@ -22,6 +22,26 @@
*/
#define TAPPING_FORCE_HOLD
+#if defined(RGB_MATRIX_ENABLE)
+ /* Turn off per-key RGB when the host goes to sleep. */
+ #define RGB_DISABLE_WHEN_USB_SUSPENDED true
+
+ /* Keep per-key RGB increments consistent across keyboards. */
+ #undef RGB_MATRIX_HUE_STEP
+ #undef RGB_MATRIX_SAT_STEP
+ #undef RGB_MATRIX_VAL_STEP
+ #undef RGB_MATRIX_SPD_STEP
+
+ #define RGB_MATRIX_HUE_STEP 8
+ #define RGB_MATRIX_SAT_STEP 17
+ #define RGB_MATRIX_VAL_STEP 17
+ #define RGB_MATRIX_SPD_STEP 17
+
+ /* Turn on additional RGB animations. */
+ #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+ #define RGB_MATRIX_KEYPRESSES
+#endif
+
#if defined(RGBLIGHT_ENABLE)
/* Turn off RGB underglow when the host goes to sleep. */
#define RGBLIGHT_SLEEP
diff --git a/users/csc027/csc027.c b/users/csc027/csc027.c
new file mode 100644
index 0000000000..de1bad6f25
--- /dev/null
+++ b/users/csc027/csc027.c
@@ -0,0 +1,53 @@
+#include "csc027.h"
+
+// Declare the strings in PROGMEM using the convenience macro
+CUSTOM_MACROS(CUSTOM_DEF, CUSTOM_MACRO_STRING, SEMI_DELIM);
+
+static const char* const custom_macros[] PROGMEM = {
+ // Declare the pointer to the strings in PROGMEM
+ CUSTOM_MACROS(CUSTOM_VAR, DROP, COMMA_DELIM)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case LOWER:
+ if(record->event.pressed) {
+ layer_on(_LW);
+ } else {
+ layer_off(_LW);
+ }
+ update_tri_layer(_LW, _RS, _MS);
+ return false;
+ case RAISE:
+ if(record->event.pressed) {
+ layer_on(_RS);
+ } else {
+ layer_off(_RS);
+ }
+ update_tri_layer(_LW, _RS, _MS);
+ return false;
+ case (MC_first + 1)...(MC_last - 1):
+ if(record->event.pressed) {
+ send_string_P(
+#if defined(__AVR__)
+ // The accessor here first reads from the pointer array that is located
+ // in PROGMEM. The pointer is taken and passed to the send_string_P
+ // function, which is aware of the difference between RAM and PROGMEM
+ // pointers.
+ (char*)pgm_read_word(&custom_macros[keycode - MC_first - 1])
+#else
+ // For non-AVR MCUs, the PROGMEM macro is defined as nothing. So, the strings are
+ // declared in RAM instead of flash. The send_string_P function, when compiled for
+ // non-AVR targets, uses a different definition of pgm_read_byte internally. This
+ // definition uses RAM pointers instead. This is why the raw pointer is passed for
+ // non-AVR MCUs.
+ custom_macros[keycode - MC_first - 1]
+#endif
+ );
+ return true;
+ }
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/users/csc027/csc027.h b/users/csc027/csc027.h
new file mode 100644
index 0000000000..96bf7dc0eb
--- /dev/null
+++ b/users/csc027/csc027.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#include "quantum.h"
+#include "defines.h"
+
+enum custom_keycodes {
+ // Layer Keycodes
+ LOWER = SAFE_RANGE,
+ RAISE,
+
+
+ MC_first,
+
+ // Macro Keycodes
+ CUSTOM_MACROS(CUSTOM_ENUM, DROP, COMMA_DELIM),
+
+ MC_last
+};
+
+enum custom_layers {
+ _QW = 0, // Qwerty
+ _RS, // Raise
+ _LW, // Lower
+ _MS, // Mouse
+ _GT, // Git
+ _CN, // Convenience
+ _GW, // Guild Wars 2
+ _CS // Counter-Strike: Global Offensive
+};
diff --git a/users/csc027/custom_audio.c b/users/csc027/custom_audio.c
new file mode 100644
index 0000000000..96e0e66029
--- /dev/null
+++ b/users/csc027/custom_audio.c
@@ -0,0 +1,17 @@
+#include "csc027.h"
+#include "custom_audio.h"
+
+#if defined(AUDIO_ENABLE)
+
+float tone_on[][2] = SONG(E__NOTE(_G6));
+float tone_off[][2] = SONG(E__NOTE(_D5));
+
+void on_usb_led_off(void) {
+ PLAY_SONG(tone_off);
+}
+
+void on_usb_led_on(void) {
+ PLAY_SONG(tone_on);
+}
+
+#endif
diff --git a/users/csc027/custom_audio.h b/users/csc027/custom_audio.h
new file mode 100644
index 0000000000..daea1e652e
--- /dev/null
+++ b/users/csc027/custom_audio.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#if defined(AUDIO_ENABLE)
+
+void on_usb_led_off(void);
+void on_usb_led_on(void);
+
+#endif
diff --git a/users/csc027/custom_rgb.c b/users/csc027/custom_rgb.c
new file mode 100644
index 0000000000..000483b2ae
--- /dev/null
+++ b/users/csc027/custom_rgb.c
@@ -0,0 +1,25 @@
+#include "csc027.h"
+#include "custom_rgb.h"
+
+#if defined(RGBLIGHT_ENABLE)
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ uint16_t user_hue = rgblight_get_hue();
+ for (uint16_t i = 0; i < 256; ++i) {
+ rgblight_sethsv_noeeprom((i + user_hue) % 256, 255, 255);
+ wait_ms(5);
+ }
+ rgblight_sethsv_noeeprom(0, 0, 0);
+}
+
+void on_usb_led_off(void) {
+ rgblight_sethsv_noeeprom(0, 0, rgblight_get_val() - 85);
+}
+
+void on_usb_led_on(void) {
+ rgblight_sethsv_noeeprom(0, 0, rgblight_get_val() + 85);
+}
+
+#endif
diff --git a/users/csc027/custom_rgb.h b/users/csc027/custom_rgb.h
new file mode 100644
index 0000000000..47fdeb7b26
--- /dev/null
+++ b/users/csc027/custom_rgb.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#if defined(RGBLIGHT_ENABLE)
+
+void keyboard_post_init_user(void);
+void on_usb_led_off(void);
+void on_usb_led_on(void);
+
+#endif
diff --git a/users/csc027/defines.h b/users/csc027/defines.h
new file mode 100644
index 0000000000..4f52938f1f
--- /dev/null
+++ b/users/csc027/defines.h
@@ -0,0 +1,270 @@
+#pragma once
+#include "csc027.h"
+
+#define MC_RSFE RSFT_T(KC_ENT) // Right Shift on hold, Enter on tap
+#define MC_LSEC LSFT_T(KC_ESC) // Left Shift on hold, Escape on tap
+
+#define ________________ KC_TRNS
+
+/* QWERTY Layer
+ *
+ * The basic layer of this keymap is a QWERTY layer.
+ *
+ * - Modifier keys more closely resemble a standard keyboard's layout.
+ * - There is a "Nxt L" function that cycles through the QWERTY and
+ * game layers. This has been implemented by hard coding the jump to the
+ * next layer in each of the layers using the TO() macro. Currently, the
+ * "Nxt L" function skips over the momentary layers (i.e., Mouse, Git,
+ * Lower, Raise, and Convenience layers).
+ * - There is a "Rst L" function that resets the current layer to the
+ * QWERTY layer.
+ * - The "Git" one shot function goes to the macro layer which has Git
+ * commands implemented.
+ * - The "Convc" momentary function goes to the Convenience layer which has a
+ * tenkey. Note: The tenkey will operate using the secondary functions if
+ * the Number Lock is not enabled (e.g., Left and Right instead of 4 and
+ * 6).
+ * - The Right Shift key also doubles as an Enter key if it is tapped rather
+ * than held.
+ *
+ * ,-----------------------------------. ,-----------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P |BkSpc|
+ * |-----------------------------------| |-----------------------------------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |-----------------------------------| |-----------------------------------|
+ * |Shift| Z | X | C | V | B | | N | M | , | . | / |Sf/En|
+ * |-----------------------------------| |-----------------------------------|
+ * |Cntrl|Super| Alt |Convc|Lower|Space| |Space|Raise| \ | Git |Nxt L|Rst L|
+ * `-----------------------------------' `-----------------------------------'
+ */
+
+#define _____________________QWERTY_L1_____________________ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _____________________QWERTY_L2_____________________ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G
+#define _____________________QWERTY_L3_____________________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B
+#define _____________________QWERTY_L4_____________________ KC_LCTL, KC_LGUI, KC_LALT, MO(_CN), LOWER, KC_SPC
+
+#define _____________________QWERTY_R1_____________________ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC
+#define _____________________QWERTY_R2_____________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT
+#define _____________________QWERTY_R3_____________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MC_RSFE
+#define _____________________QWERTY_R4_____________________ KC_SPC, RAISE, KC_BSLS, OSL(_GT), TO(_GW), XXXXXXX
+
+/* Raise Layer
+ *
+ * The Raise layer accommodates the Home, End, Page Up, and Page Down keys
+ * in what would be the Vim arrow keys positions. This is done as opposed
+ * to using C-D, C-U, 0, $, and ^, because it would require a separate layer.
+ *
+ * - The top row has the shifted versions of the number row, rather than the
+ * numbers themselves. This is a change to have a mnemonic where shifted
+ * elements are on the Raise layer. This also makes it easy to use some of
+ * Vim style movement controls (e.g. $, %), but makes it harder for others
+ * (e.g. ^, (, )). Consider swapping the number row with the shifted number
+ * row if you do not care about the mnemonic.
+ * - The Left Brace, Right Brace, Underscore, and Plus keys have been moved
+ * from the right side to the left side. This will take some getting used
+ * to, as these keys are normally on the right side of the keyboard. An
+ * alternative would be to keep the keys on the right hand side just under
+ * the Parentheses. This would prevent the use of Vim arrow keys however.
+ * - The F keys have been laid across the bottom in the Raise layer, rather
+ * than the Lower layer to allow easy access to the Alt-F4 chord for
+ * Windows. When the F keys were put in the Lower layer, it made it hard
+ * to use this chord, as the Lower key, the Alt key, and the F4 key were
+ * all right next to each other.
+ * - A Delete key has been added in this layer to allow easy access to the
+ * Control-Alt-Delete login chord for Windows.
+ *
+ * ,-----------------------------------. ,-----------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
+ * |-----------------------------------| |-----------------------------------|
+ * | | _ | + | { | } | Caps| | Home| PgDn| PgUp| End | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------' `-----------------------------------'
+ */
+
+#define ______________________RAISE_L1_____________________ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
+#define ______________________RAISE_L2_____________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_CAPS
+#define ______________________RAISE_L3_____________________ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define ______________________RAISE_L4_____________________ _______, _______, _______, _______, _______, _______
+
+#define ______________________RAISE_R1_____________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT
+#define ______________________RAISE_R2_____________________ KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX
+#define ______________________RAISE_R3_____________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______
+#define ______________________RAISE_R4_____________________ _______, _______, _______, _______, XXXXXXX, XXXXXXX
+
+/* Lower Layer
+ *
+ * The lower layout scheme accommodates the Vim style arrow keys.
+ *
+ * - The arrow keys are in the normal Vim positions.
+ * - The Left Square Bracket, Right Square Bracket, Minus, and Equal keys
+ * have been moved from the right side to the left side. This will take
+ * some getting used to, as it is on the left rather than the right.
+ * - A Delete key has been added in this layer to allow easy access to the
+ * Control-Alt-Delete login chord for Windows.
+ * - The remaining F keys are in this layer.
+ *
+ * ,-----------------------------------. ,-----------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |-----------------------------------| |-----------------------------------|
+ * | | - | = | [ | ] | | | Left| Down| Up |Right| | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | F11 | F12 | | | | | | | | | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------' `-----------------------------------'
+ */
+
+#define ______________________LOWER_L1_____________________ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5
+#define ______________________LOWER_L2_____________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX
+#define ______________________LOWER_L3_____________________ _______, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX
+#define ______________________LOWER_L4_____________________ _______, _______, _______, _______, _______, _______
+
+#define ______________________LOWER_R1_____________________ KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT
+#define ______________________LOWER_R2_____________________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX
+#define ______________________LOWER_R3_____________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
+#define ______________________LOWER_R4_____________________ _______, _______, _______, _______, XXXXXXX, XXXXXXX
+
+
+/* MIT Layout (Mouse)
+ *
+ * The mouse layer adds keys to use the keyboard like a mouse.
+ *
+ * ,-----------------------------------. ,-----------------------------------.
+ * | | | | | | | | | | | | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | |Ms-Lc|Ms-Rc| | | Ms-L| Ms-D| Ms-U| Ms-R| | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------' `-----------------------------------'
+ */
+
+#define ______________________MOUSE_L1_____________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+#define ______________________MOUSE_L2_____________________ _______, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX
+#define ______________________MOUSE_L3_____________________ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+#define ______________________MOUSE_L4_____________________ _______, _______, _______, _______, _______, _______
+
+#define ______________________MOUSE_R1_____________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+#define ______________________MOUSE_R2_____________________ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX, XXXXXXX
+#define ______________________MOUSE_R3_____________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
+#define ______________________MOUSE_R4_____________________ _______, _______, _______, _______, XXXXXXX, XXXXXXX
+
+/* MIT Layout (Git)
+ *
+ * The macro layer that has common git commands.
+ *
+ * ,-----------------------------------. ,-----------------------------------.
+ * | |Chery| Show|Rebas|Reset| Tag | | | Pull| Init|Rmote| Push| |
+ * |-----------------------------------| |-----------------------------------|
+ * | | Add |Sttus| Diff|Fetch| Grep| |Stash| |ChkOt| Log | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | |Comit| Move|Brnch| | |Merge| | | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------' `-----------------------------------'
+ */
+
+#define _______________________GIT_L1______________________ XXXXXXX, MC_cherrypick, MC_show, MC_rebase, MC_reset, MC_tag
+#define _______________________GIT_L2______________________ _______, MC_add, MC_status, MC_diff, MC_fetch, MC_grep
+#define _______________________GIT_L3______________________ _______, XXXXXXX, XXXXXXX, MC_commit, MC_mv, MC_branch
+#define _______________________GIT_L4______________________ _______, _______, _______, _______, _______, _______
+
+#define _______________________GIT_R1______________________ XXXXXXX, MC_pull, MC_init, MC_remote, MC_push, XXXXXXX
+#define _______________________GIT_R2______________________ MC_stash, XXXXXXX, MC_checkout, MC_log, XXXXXXX, XXXXXXX
+#define _______________________GIT_R3______________________ XXXXXXX, MC_merge, XXXXXXX, XXXXXXX, XXXXXXX, _______
+#define _______________________GIT_R4______________________ _______, _______, _______, _______, XXXXXXX, XXXXXXX
+
+
+/* MIT Layout (Convenience)
+ *
+ * The Convenience layer adds miscellaneous chords to the keyboard.
+ *
+ * - The Number Lock key is physically in the same spot as the Caps Lock key
+ * in the raise layer.
+ * - There is also a Backspace Key for convenience.
+ * - There is a convenience macro to type the Control-Alt-Delete login chord for Windows.
+ * - There is a convenience macro to switch context from the Remote Desktop to the local
+ * machine in Windows.
+ * - There are convenience macros to switch between virtual desktops in Windows.
+ * - There are convenience macros to create and delete virtual desktops in Windows.
+ *
+ * ,-----------------------------------. ,-----------------------------------.
+ * | | |Insrt|ScrLk|PrtSc| | | | | | | |BkSpc|
+ * |-----------------------------------| |-----------------------------------|
+ * | | | App | LCAD|MRDCC|NmLck| |MVTDL|MVTDC|MVTDN|MVTDR| | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * |-----------------------------------| |-----------------------------------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------' `-----------------------------------'
+ */
+
+#define ___________________CONVENIENCE_L1__________________ XXXXXXX, XXXXXXX, KC_INS, KC_SLCK, KC_PSCR, XXXXXXX
+#define ___________________CONVENIENCE_L2__________________ _______, XXXXXXX, KC_APP, MC_lcad, MC_rdcc, KC_NLCK
+#define ___________________CONVENIENCE_L3__________________ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+#define ___________________CONVENIENCE_L4__________________ _______, _______, _______, _______, _______, _______
+
+#define ___________________CONVENIENCE_R1__________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC
+#define ___________________CONVENIENCE_R2__________________ MC_vtdl, MC_vtdc, MC_vtdn, MC_vtdr, XXXXXXX, XXXXXXX
+#define ___________________CONVENIENCE_R3__________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
+#define ___________________CONVENIENCE_R4__________________ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+
+/* Convenience macros
+ *
+ * These are accelerator macros for simplifying declaration of PROGMEM strings
+ */
+
+// Declare variable name
+#define CUSTOM_VAR(VAR) mc_##VAR
+
+// Declare PROGMEM string using the variable name
+#define CUSTOM_DEF(VAR) const char CUSTOM_VAR(VAR)[] PROGMEM =
+
+// Declare enum name
+#define CUSTOM_ENUM(VAR) MC_##VAR
+
+#define CUSTOM_MACRO_STRING(X) X
+
+#define COMMA_DELIM(...) ,
+#define SEMI_DELIM(...) ;
+
+#define DROP(...)
+
+/* Keycode synchronization macros
+ *
+ * These macros help synchronize the keycodes between the string declaration, string pointer declaration, and enum order.
+ */
+
+
+#define CUSTOM_MACROS(CUSTOM_NAME, CUSTOM_STRING, CUSTOM_DELIM) \
+ CUSTOM_NAME(add) CUSTOM_STRING("git add ") CUSTOM_DELIM() \
+ CUSTOM_NAME(branch) CUSTOM_STRING("git branch ") CUSTOM_DELIM() \
+ CUSTOM_NAME(checkout) CUSTOM_STRING("git checkout ") CUSTOM_DELIM() \
+ CUSTOM_NAME(cherrypick) CUSTOM_STRING("git cherry-pick ") CUSTOM_DELIM() \
+ CUSTOM_NAME(commit) CUSTOM_STRING("git commit -m \"\""SS_TAP(X_LEFT)) CUSTOM_DELIM() \
+ CUSTOM_NAME(diff) CUSTOM_STRING("git diff ") CUSTOM_DELIM() \
+ CUSTOM_NAME(fetch) CUSTOM_STRING("git fetch ") CUSTOM_DELIM() \
+ CUSTOM_NAME(grep) CUSTOM_STRING("git grep ") CUSTOM_DELIM() \
+ CUSTOM_NAME(log) CUSTOM_STRING("git log --decorate --oneline --graph ") CUSTOM_DELIM() \
+ CUSTOM_NAME(init) CUSTOM_STRING("git init ") CUSTOM_DELIM() \
+ CUSTOM_NAME(mv) CUSTOM_STRING("git mv ") CUSTOM_DELIM() \
+ CUSTOM_NAME(merge) CUSTOM_STRING("git merge ") CUSTOM_DELIM() \
+ CUSTOM_NAME(push) CUSTOM_STRING("git push ") CUSTOM_DELIM() \
+ CUSTOM_NAME(pull) CUSTOM_STRING("git pull ") CUSTOM_DELIM() \
+ CUSTOM_NAME(rebase) CUSTOM_STRING("git rebase ") CUSTOM_DELIM() \
+ CUSTOM_NAME(remote) CUSTOM_STRING("git remote ") CUSTOM_DELIM() \
+ CUSTOM_NAME(reset) CUSTOM_STRING("git reset ") CUSTOM_DELIM() \
+ CUSTOM_NAME(show) CUSTOM_STRING("git show ") CUSTOM_DELIM() \
+ CUSTOM_NAME(stash) CUSTOM_STRING("git stash ") CUSTOM_DELIM() \
+ CUSTOM_NAME(status) CUSTOM_STRING("git status ") CUSTOM_DELIM() \
+ CUSTOM_NAME(tag) CUSTOM_STRING("git tag ") CUSTOM_DELIM() \
+ CUSTOM_NAME(rdcc) CUSTOM_STRING(SS_LCTL(SS_LALT(SS_TAP(X_HOME)))) CUSTOM_DELIM() \
+ CUSTOM_NAME(lcad) CUSTOM_STRING(SS_LCTL(SS_LALT(SS_TAP(X_DELETE)))) CUSTOM_DELIM() \
+ CUSTOM_NAME(vtdl) CUSTOM_STRING(SS_LCTL(SS_LGUI(SS_TAP(X_LEFT)))) CUSTOM_DELIM() \
+ CUSTOM_NAME(vtdc) CUSTOM_STRING(SS_LCTL(SS_LGUI(SS_TAP(X_F4)))) CUSTOM_DELIM() \
+ CUSTOM_NAME(vtdn) CUSTOM_STRING(SS_LCTL(SS_LGUI("d"))) CUSTOM_DELIM() \
+ CUSTOM_NAME(vtdr) CUSTOM_STRING(SS_LCTL(SS_LGUI(SS_TAP(X_RIGHT))))
diff --git a/users/csc027/rules.mk b/users/csc027/rules.mk
new file mode 100644
index 0000000000..7e5d44e1c8
--- /dev/null
+++ b/users/csc027/rules.mk
@@ -0,0 +1,11 @@
+SRC += csc027.c
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ SRC += custom_rgb.c
+ SRC += usb_led.c
+endif
+
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+ SRC += custom_audio.c
+ SRC += usb_led.c
+endif
diff --git a/users/csc027/usb_led.c b/users/csc027/usb_led.c
new file mode 100644
index 0000000000..1418e32cad
--- /dev/null
+++ b/users/csc027/usb_led.c
@@ -0,0 +1,32 @@
+#include "csc027.h"
+#include "usb_led.h"
+#include "led.h"
+
+#if defined(RGBLIGHT_ENABLE)
+# include "custom_rgb.h"
+#elif defined(AUDIO_ENABLE)
+# include "custom_audio.h"
+#endif
+
+#if defined(AUDIO_ENABLE) || defined(RGBLIGHT_ENABLE)
+
+bool led_update_user(led_t usb_led) {
+ static led_t old_usb_led = {
+ .num_lock = false,
+ .caps_lock = false,
+ .scroll_lock = false
+ };
+
+ if(old_usb_led.caps_lock != usb_led.caps_lock) {
+ usb_led.caps_lock ? on_usb_led_on() : on_usb_led_off();
+ } else if(old_usb_led.num_lock != usb_led.num_lock) {
+ usb_led.num_lock ? on_usb_led_on() : on_usb_led_off();
+ } else if(old_usb_led.scroll_lock != usb_led.scroll_lock) {
+ usb_led.scroll_lock ? on_usb_led_on() : on_usb_led_off();
+ }
+ old_usb_led = usb_led;
+
+ return true;
+}
+
+#endif
diff --git a/users/csc027/usb_led.h b/users/csc027/usb_led.h
new file mode 100644
index 0000000000..7451b46950
--- /dev/null
+++ b/users/csc027/usb_led.h
@@ -0,0 +1,3 @@
+#pragma once
+
+bool led_update_user(led_t usb_led);
diff --git a/users/curry/.gitignore b/users/curry/.gitignore
new file mode 100644
index 0000000000..c6df8c0139
--- /dev/null
+++ b/users/curry/.gitignore
@@ -0,0 +1 @@
+secrets.c
diff --git a/keyboards/keebio/iris/keymaps/via/config.h b/users/curry/LICENSE
index f2498e5927..198ae45b2e 100644
--- a/keyboards/keebio/iris/keymaps/via/config.h
+++ b/users/curry/LICENSE
@@ -1,5 +1,4 @@
-/*
-Copyright 2017 Danny Nguyen <danny@keeb.io>
+Copyright 2020 Akaash Suresh casa.akaash@gmail.com @CurryFurious
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 +12,3 @@ 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 RGBLIGHT_ANIMATIONS
diff --git a/users/curry/README.md b/users/curry/README.md
new file mode 100644
index 0000000000..70d6262d73
--- /dev/null
+++ b/users/curry/README.md
@@ -0,0 +1,30 @@
+# Information
+
+These is my userspace files, heavily influenced by @drashna's userspace structure.
+
+# Keyboards
+
+Main uses are for corne & lily58, supporting dfu bootloader (elite-c)
+
+## Split Common
+Is compatible with split_common when the previous two keyboards update to them.
+
+If you want to use these keymaps with split common code, they are on my personal github fork: [CurryFurious/qmk_firmware](https://github.com/CurryFurious/qmk_firmware)
+
+Referenced PRs: #6260, #5998, #6001
+
+## Keymaps
+Keymap layout is similar between the two keyboards. Lily58 has a lot of open keys for custom keys as well. Keymap formatting is set up in the physical layout of the keyboard, so mapping keys should be easier.
+
+## Tap Dances
+
+Tap dances are enabled but none are defined, you can add them to [tapdances.c](tapdances.c). If not using tapdances, you can disable them in the keymaps.
+
+## RGB
+RGB is implemented pretty much the same as @drashna. Only change is that I added the RGB code from the drashna's corne [keymap.c](../../keyboards/crkbd/keymaps/drashna/keymap.c), lines 313-383 into rgb_stuff.c.
+
+## OLED
+Similarly to RGB, I moved all OLED code into [oled.c](oled.c) to better clear up the keymap.c file. I haven't experimented with the kyria's 128x64 pixel screen so it probably won't work as well with it yet.
+
+## Wrappers
+Have implemented QWERTY, COLEMAK Mod DH, and DVORAK. Other macros are defined, some modified from drashna's. Drashna's [wrappers.h](../drashna/wrappers.h) has other layouts that you can copy in as you see fit, make sure to add them to the userspace_layers enum in [curry.h](curry.h)
diff --git a/users/curry/config.h b/users/curry/config.h
new file mode 100644
index 0000000000..b982dab038
--- /dev/null
+++ b/users/curry/config.h
@@ -0,0 +1,111 @@
+#pragma once
+
+// Use custom magic number so that when switching branches, EEPROM always gets reset
+#define EECONFIG_MAGIC_NUMBER (uint16_t)0x420
+
+/* Set Polling rate to 1000Hz */
+#define USB_POLLING_INTERVAL_MS 1
+
+#if defined(RGBLIGHT_ENABLE)
+# undef RGBLIGHT_ANIMATIONS
+# define RGBLIGHT_SLEEP
+# define RGBLIGHT_EFFECT_BREATHING
+# define RGBLIGHT_EFFECT_SNAKE
+# define RGBLIGHT_EFFECT_KNIGHT
+#endif // RGBLIGHT_ENABLE
+
+#if defined(RGB_MATRIX_ENABLE)
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true
+
+# define DISABLE_RGB_MATRIX_ALPHAS_MODS
+# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BREATHING
+# define DISABLE_RGB_MATRIX_BAND_SAT
+# define DISABLE_RGB_MATRIX_BAND_VAL
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define DISABLE_RGB_MATRIX_CYCLE_ALL
+# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define DISABLE_RGB_MATRIX_DUAL_BEACON
+# define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define DISABLE_RGB_MATRIX_RAINDROPS
+# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+# define DISABLE_RGB_MATRIX_MULTISPLASH
+# define DISABLE_RGB_MATRIX_SOLID_SPLASH
+# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif // RGB_MATRIX_ENABLE
+
+#if !defined(ONESHOT_TAP_TOGGLE)
+# define ONESHOT_TAP_TOGGLE 2
+#endif // !ONESHOT_TAP_TOGGLE
+
+#if !defined(ONESHOT_TIMEOUT)
+# define ONESHOT_TIMEOUT 3000
+#endif // !ONESHOT_TIMEOUT
+
+#if !defined(QMK_KEYS_PER_SCAN)
+# define QMK_KEYS_PER_SCAN 4
+#endif // !QMK_KEYS_PER_SCAN
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#undef PERMISSIVE_HOLD
+
+#define FORCE_NKRO
+
+#if !defined(TAPPING_TOGGLE)
+# define TAPPING_TOGGLE 1
+#endif
+
+#if defined(TAPPING_TERM)
+# undef TAPPING_TERM
+#endif // TAPPING_TERM
+
+#if defined(KEYBOARD_ergodox_ez)
+# define TAPPING_TERM 185
+#elif defined(KEYBOARD_crkbd)
+# define TAPPING_TERM 200
+#else
+# define TAPPING_TERM 175
+#endif
+
+#define TAP_CODE_DELAY 5
+
+#define LEADER_TIMEOUT 250
+#define LEADER_PER_KEY_TIMING
+
+/* Disable unused and unneeded features to reduce on firmware size */
+#if defined(LOCKING_SUPPORT_ENABLE)
+# undef LOCKING_SUPPORT_ENABLE
+#endif
+
+#if defined(LOCKING_RESYNC_ENABLE)
+# undef LOCKING_RESYNC_ENABLE
+#endif
+
+#if defined(OLED_FONT_H)
+# undef OLED_FONT_H
+#endif
+
+#define OLED_FONT_H "users/curry/glcdfont.c"
diff --git a/users/curry/curry.c b/users/curry/curry.c
new file mode 100644
index 0000000000..0353553591
--- /dev/null
+++ b/users/curry/curry.c
@@ -0,0 +1,130 @@
+#include "curry.h"
+
+userspace_config_t userspace_config;
+
+#define CURRY_UNICODE_MODE 1
+
+void bootmagic_lite(void) {
+ matrix_scan();
+#if defined(DEBOUNCING_DELAY) && DEBOUNCING_DELAY > 0
+ wait_ms(DEBOUNCING_DELAY * 2);
+#elif defined(DEBOUNCE) && DEBOUNCE > 0
+ wait_ms(DEBOUNCE * 2);
+#else
+ wait_ms(30);
+#endif
+ matrix_scan();
+ if (matrix_get_row(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) {
+ bootloader_jump();
+ }
+}
+
+__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
+
+void keyboard_pre_init_user(void) {
+ userspace_config.raw = eeconfig_read_user();
+ keyboard_pre_init_keymap();
+}
+
+__attribute__((weak)) void matrix_init_keymap(void) {}
+
+// Call user matrix init, set default RGB colors and then
+// call the keymap's init function
+void matrix_init_user(void) {
+#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
+ set_unicode_input_mode(CURRY_UNICODE_MODE);
+ get_unicode_input_mode();
+#endif // UNICODE_ENABLE
+ matrix_init_keymap();
+}
+
+__attribute__((weak)) void keyboard_post_init_keymap(void) {}
+
+void keyboard_post_init_user(void) {
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ keyboard_post_init_rgb();
+#endif
+ keyboard_post_init_keymap();
+}
+
+__attribute__((weak)) void shutdown_keymap(void) {}
+
+void rgb_matrix_update_pwm_buffers(void);
+
+// On RESET, set all RGB to red, shutdown the keymap.
+void shutdown_user(void) {
+#if defined(RGBLIGHT_ENABLE)
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(1);
+ rgblight_setrgb_red();
+#endif
+
+#if defined(RGB_MATRIX_ENABLE)
+ rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
+ rgb_matrix_update_pwm_buffers();
+#endif
+ shutdown_keymap();
+}
+
+__attribute__((weak)) void suspend_power_down_keymap(void) {}
+
+void suspend_power_down_user(void) { suspend_power_down_keymap(); }
+
+__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
+
+void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); }
+
+__attribute__((weak)) void matrix_scan_keymap(void) {}
+
+// No global matrix scan code, so just run keymap's matrix
+// scan function
+__attribute__((weak)) void matrix_scan_user(void) {
+ static bool has_ran_yet;
+ if (!has_ran_yet) {
+ has_ran_yet = true;
+ startup_user();
+ }
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ matrix_scan_rgb();
+#endif // RGBLIGHT_ENABLE
+
+ matrix_scan_keymap();
+}
+
+__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
+
+// On Layer change, run keymap's layer change check
+layer_state_t layer_state_set_user(layer_state_t state) {
+ state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+#if defined(RGBLIGHT_ENABLE)
+ state = layer_state_set_rgb(state);
+#endif
+ return layer_state_set_keymap(state);
+}
+
+__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; }
+
+// Runs state check and changes underglow color and animation
+layer_state_t default_layer_state_set_user(layer_state_t state) { return default_layer_state_set_keymap(state); }
+
+__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
+
+// Any custom LED code goes here.
+void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); }
+
+__attribute__((weak)) void eeconfig_init_keymap(void) {}
+
+void eeconfig_init_user(void) {
+ userspace_config.raw = 0;
+ userspace_config.rgb_layer_change = true;
+ eeconfig_update_user(userspace_config.raw);
+#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
+ set_unicode_input_mode(CURRY_UNICODE_MODE);
+ get_unicode_input_mode();
+#else
+ eeprom_update_byte(EECONFIG_UNICODEMODE, CURRY_UNICODE_MODE);
+#endif
+ eeconfig_init_keymap();
+ keyboard_init();
+}
diff --git a/users/curry/curry.h b/users/curry/curry.h
new file mode 100644
index 0000000000..ee4a736835
--- /dev/null
+++ b/users/curry/curry.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "eeprom.h"
+#include "wrappers.h"
+#include "process_records.h"
+
+#if defined(TAP_DANCE_ENABLE)
+# include "tap_dances.h"
+#endif // TAP_DANCE_ENABLE
+
+#if defined(RGB_MATRIX_ENABLE)
+# include "rgb_matrix_user.h"
+#endif
+
+#if defined(RGBLIGHT_ENABLE)
+# include "rgb_lighting_user.h"
+#endif
+
+#if defined(KEYBOARD_lily58_rev1) & defined(PROTOCOL_LUFA)
+# include "lufa.h"
+# include "split_util.h"
+#endif
+
+/* Define layer names */
+enum userspace_layers {
+ _QWERTY = 0,
+ _COLEMAK,
+ _DVORAK,
+ _WORKMAN,
+ _MODS,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+void matrix_init_keymap(void);
+void shutdown_keymap(void);
+void suspend_power_down_keymap(void);
+void suspend_wakeup_init_keymap(void);
+void matrix_scan_keymap(void);
+layer_state_t layer_state_set_keymap(layer_state_t state);
+layer_state_t default_layer_state_set_keymap(layer_state_t state);
+void led_set_keymap(uint8_t usb_led);
+void eeconfig_init_keymap(void);
+
+// clang-format off
+typedef union {
+ uint32_t raw;
+ struct {
+ bool rgb_layer_change :1;
+ bool nuke_switch :1;
+ bool rgb_matrix_idle_anim :1;
+ };
+} userspace_config_t;
+// clang-format on
+
+extern userspace_config_t userspace_config;
diff --git a/users/curry/glcdfont.c b/users/curry/glcdfont.c
new file mode 100644
index 0000000000..10ce3b3457
--- /dev/null
+++ b/users/curry/glcdfont.c
@@ -0,0 +1,232 @@
+#include "progmem.h"
+
+// Corne 8x6 font with QMK Firmware Logo
+// Online editor: https://helixfonteditor.netlify.com/
+
+// clang-format off
+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, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0,
+0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0,
+0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
+0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0,
+0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
+0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
+0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE,
+0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
+0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF,
+0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
+0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 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,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F,
+0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
+0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F,
+0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C,
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x03, 0x07, 0x07,
+0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x03, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x07, 0x07, 0x07, 0x03, 0x01,
+0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x07, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
+0x07, 0x00, 0x00, 0x00, 0x01, 0x03,
+0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x07, 0x03, 0x01, 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, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/users/curry/leader.c b/users/curry/leader.c
new file mode 100644
index 0000000000..3fca6a2ec3
--- /dev/null
+++ b/users/curry/leader.c
@@ -0,0 +1,24 @@
+#include "curry.h"
+#include "leader.h"
+
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+ static bool has_ran_yet;
+ if (!has_ran_yet) {
+ has_ran_yet = true;
+ startup_user();
+ }
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ matrix_scan_rgb();
+#endif // RGBLIGHT_ENABLE
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+ SEQ_ONE_KEY(KC_F) { SEND_STRING(SS_LCTL("akf")); } // Select all and format
+ SEQ_ONE_KEY(KC_P) { SEND_STRING(SS_LCTL(SS_LSFT("4"))); } // Screenshot region
+ SEQ_TWO_KEYS(KC_D, KC_D) { SEND_STRING(SS_LCTL("ac")); } // Copy all
+ }
+ matrix_scan_keymap();
+}
diff --git a/users/curry/leader.h b/users/curry/leader.h
new file mode 100644
index 0000000000..f215893b9e
--- /dev/null
+++ b/users/curry/leader.h
@@ -0,0 +1,3 @@
+#pragma once
+
+void matrix_scan_user(void);
diff --git a/users/curry/oled.c b/users/curry/oled.c
new file mode 100644
index 0000000000..fc87a46e50
--- /dev/null
+++ b/users/curry/oled.c
@@ -0,0 +1,163 @@
+#include "curry.h"
+
+#define KEYLOGGER_LENGTH 5
+static uint32_t oled_timer = 0;
+static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};
+static uint16_t log_timer = 0;
+// clang-format off
+static const char PROGMEM code_to_name[0xFF] = {
+// 0 1 2 3 4 5 6 7 8 9 A B c D E F
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
+ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
+ '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
+ ']','\\', '#', ';','\'', '`', ',', '.', '/', 128, ' ', ' ', ' ', ' ', ' ', ' ', // 3x
+ ' ', ' ', ' ', ' ', ' ', ' ', 'P', 'S', ' ', ' ', ' ', ' ', 16, ' ', ' ', ' ', // 4x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 5x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Cx
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Dx
+ 'C', 'S', 'A', 'C', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ex
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' // Fx
+};
+
+// clang-format on
+void add_keylog(uint16_t keycode);
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
+
+void add_keylog(uint16_t keycode) {
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
+ keycode = keycode & 0xFF;
+ } else if (keycode > 0xFF) {
+ keycode = 0;
+ }
+
+ for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) {
+ keylog_str[i] = keylog_str[i - 1];
+ }
+
+ if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
+ }
+
+ log_timer = timer_read();
+}
+
+void render_keylogger_status(void) {
+ oled_write_P(PSTR("Keys:"), false);
+ oled_write(keylog_str, false);
+}
+
+void render_default_layer_state(void) {
+ oled_write_P(PSTR("Lyout"), false);
+ switch (get_highest_layer(default_layer_state)) {
+ case _QWERTY:
+ oled_write_P(PSTR(" QRTY"), false);
+ break;
+ case _COLEMAK:
+ oled_write_P(PSTR(" COLE"), false);
+ break;
+ case _DVORAK:
+ oled_write_P(PSTR(" DVRK"), false);
+ break;
+ case _WORKMAN:
+ oled_write_P(PSTR(" WRKM"), false);
+ break;
+ }
+}
+
+void render_layer_state(void) {
+ oled_write_P(PSTR("LAYER"), false);
+ oled_write_P(PSTR("Lower"), layer_state_is(_LOWER));
+ oled_write_P(PSTR("Raise"), layer_state_is(_RAISE));
+ oled_write_P(PSTR(" Mods"), layer_state_is(_MODS));
+}
+
+void render_keylock_status(uint8_t led_usb_state) {
+ oled_write_P(PSTR("Lock:"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("N"), led_usb_state & (1 << USB_LED_NUM_LOCK));
+ oled_write_P(PSTR("C"), led_usb_state & (1 << USB_LED_CAPS_LOCK));
+ oled_write_ln_P(PSTR("S"), led_usb_state & (1 << USB_LED_SCROLL_LOCK));
+}
+
+void render_mod_status(uint8_t modifiers) {
+ oled_write_P(PSTR("Mods:"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT));
+ oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL));
+ oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT));
+ oled_write_P(PSTR("G"), (modifiers & MOD_MASK_GUI));
+}
+
+void render_bootmagic_status(void) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][2][3] = {
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
+ };
+ oled_write_P(PSTR("BTMGK"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(logo[0][0], !keymap_config.swap_lctl_lgui);
+ oled_write_P(logo[1][0], keymap_config.swap_lctl_lgui);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(logo[0][1], !keymap_config.swap_lctl_lgui);
+ oled_write_P(logo[1][1], keymap_config.swap_lctl_lgui);
+ oled_write_P(PSTR(" NKRO"), keymap_config.nkro);
+}
+
+void render_user_status(void) {
+ oled_write_P(PSTR("USER:"), false);
+ oled_write_P(PSTR(" Anim"), userspace_config.rgb_matrix_idle_anim);
+ oled_write_P(PSTR(" Layr"), userspace_config.rgb_layer_change);
+ oled_write_P(PSTR(" Nuke"), userspace_config.nuke_switch);
+}
+
+void render_status_main(void) {
+ /* Show Keyboard Layout */
+ render_default_layer_state();
+ render_keylock_status(host_keyboard_leds());
+ render_bootmagic_status();
+ render_user_status();
+
+ render_keylogger_status();
+}
+
+void render_status_secondary(void) {
+ /* Show Keyboard Layout */
+ render_default_layer_state();
+ render_layer_state();
+ render_mod_status(get_mods() | get_oneshot_mods());
+
+ render_keylogger_status();
+}
+
+void oled_task_user(void) {
+ if (timer_elapsed32(oled_timer) > 30000) {
+ oled_off();
+ return;
+ }
+#if !defined(SPLIT_KEYBOARD)
+ else {
+ oled_on();
+ }
+#endif
+ if (is_keyboard_master()) {
+ render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+ render_status_secondary();
+ }
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ oled_timer = timer_read32();
+ add_keylog(keycode);
+ }
+ return true;
+}
diff --git a/users/curry/process_records.c b/users/curry/process_records.c
new file mode 100644
index 0000000000..fd58ea181b
--- /dev/null
+++ b/users/curry/process_records.c
@@ -0,0 +1,76 @@
+#include "curry.h"
+
+uint16_t copy_paste_timer;
+
+__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
+
+__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; }
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+ switch (keycode) {
+ case KC_QWERTY ... KC_WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(keycode - KC_QWERTY);
+ }
+ break;
+ case KC_MAKE:
+ if (!record->event.pressed) {
+ uint8_t temp_mod = mod_config(get_mods());
+ uint8_t temp_osm = mod_config(get_oneshot_mods());
+ clear_mods();
+ clear_oneshot_mods();
+ send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), TAP_CODE_DELAY);
+ if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) {
+ send_string_with_delay_P(PSTR(":flash"), TAP_CODE_DELAY);
+ }
+ send_string_with_delay_P(PSTR(" -j8 --output-sync\n"), TAP_CODE_DELAY);
+ }
+ break;
+
+ case VRSN: // Prints firmware version
+ if (record->event.pressed) {
+ send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
+ }
+ break;
+
+ case KC_CCCV: // One key copy/paste
+ if (record->event.pressed) {
+ copy_paste_timer = timer_read();
+ } else {
+ if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
+ tap_code16(LCTL(KC_C));
+ } else { // Tap, paste
+ tap_code16(LCTL(KC_V));
+ }
+ }
+ break;
+#if defined(UNICODE_ENABLE)
+ case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻â”â”»
+ if (record->event.pressed) {
+ send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
+ }
+ break;
+ case UC_TABL: // ┬─┬ノ( º _ ºノ)
+ if (record->event.pressed) {
+ send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029");
+ }
+ break;
+ case UC_SHRG: // ¯\_(ツ)_/¯
+ if (record->event.pressed) {
+ send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
+ }
+ break;
+ case UC_DISA: // ಠ_ಠ
+ if (record->event.pressed) {
+ send_unicode_hex_string("0CA0 005F 0CA0");
+ }
+ break;
+#endif
+ }
+ return process_record_keymap(keycode, record) &&
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ process_record_user_rgb(keycode, record) &&
+#endif // RGBLIGHT_ENABLE
+ process_record_secrets(keycode, record);
+}
diff --git a/users/curry/process_records.h b/users/curry/process_records.h
new file mode 100644
index 0000000000..49e7240c67
--- /dev/null
+++ b/users/curry/process_records.h
@@ -0,0 +1,86 @@
+#pragma once
+
+enum userspace_custom_keycodes {
+ VRSN = SAFE_RANGE, // Prints QMK Firmware and board info
+ KC_QWERTY, // Sets default layer to QWERTY
+ KC_COLEMAK, // Sets default layer to COLEMAK
+ KC_DVORAK, // Sets default layer to DVORAK
+ KC_WORKMAN, // Sets default layer to WORKMAN
+ KC_MAKE, // Run keyboard's customized make command
+ KC_RGB_T, // Toggles RGB Layer Indication mode
+ RGB_IDL, // RGB Idling animations
+ KC_SECRET_1, // test1
+ KC_SECRET_2, // test2
+ KC_SECRET_3, // test3
+ KC_SECRET_4, // test4
+ KC_SECRET_5, // test5
+ KC_CCCV, // Hold to copy, tap to paste
+ UC_FLIP, // (ಠ痊ಠ)â”»â”â”»
+ UC_TABL, // ┬─┬ノ( º _ ºノ)
+ UC_SHRG, // ¯\_(ツ)_/¯
+ UC_DISA, // ಠ_ಠ
+ KC_DT1,
+ KC_DT2,
+ KC_DT3,
+ KC_DT4,
+ NEW_SAFE_RANGE // use "NEWPLACEHOLDER for keymap specific codes
+};
+
+bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+#define TG_MODS TG(_MODS)
+#define OS_LWR OSL(_LOWER)
+#define OS_RSE OSL(_RAISE)
+
+#define KC_SEC1 KC_SECRET_1
+#define KC_SEC2 KC_SECRET_2
+#define KC_SEC3 KC_SECRET_3
+#define KC_SEC4 KC_SECRET_4
+#define KC_SEC5 KC_SECRET_5
+
+#define QWERTY KC_QWERTY
+#define DVORAK KC_DVORAK
+#define COLEMAK KC_COLEMAK
+#define WORKMAN KC_WORKMAN
+
+#define KC_RST RESET
+
+#if defined(SWAP_HANDS_ENABLE)
+# define KC_C1R3 SH_T(KC_TAB)
+#else // SWAP_HANDS_ENABLE
+# define KC_C1R3 KC_TAB
+#endif // SWAP_HANDS_ENABLE
+
+#define SP_LWER LT(_LOWER, KC_SPC)
+#define ET_RAIS LT(_RAISE, KC_ENTER)
+
+/* OSM keycodes, to keep things clean and easy to change */
+#define OS_LGUI OSM(MOD_LGUI)
+#define OS_RGUI OSM(MOD_RGUI)
+#define OS_LSFT OSM(MOD_LSFT)
+#define OS_RSFT OSM(MOD_RSFT)
+#define OS_LCTL OSM(MOD_LCTL)
+#define OS_RCTL OSM(MOD_RCTL)
+#define OS_LALT OSM(MOD_LALT)
+#define OS_RALT OSM(MOD_RALT)
+#define OS_MEH OSM(MOD_MEH)
+#define OS_HYPR OSM(MOD_HYPR)
+
+#define MT_ESC MT(MOD_LCTL, KC_ESC)
+
+#define ALT_APP ALT_T(KC_APP)
+
+#define MG_NKRO MAGIC_TOGGLE_NKRO
+
+#define UC_IRNY UC(0x2E2E)
+#define UC_CLUE UC(0x203D)
+
+// KWin Window Switching
+#define KC_DT1 LCTL(KC_F1)
+#define KC_DT2 LCTL(KC_F2)
+#define KC_DT3 LCTL(KC_F3)
+#define KC_DT4 LCTL(KC_F4)
diff --git a/users/curry/rgb_lighting_user.c b/users/curry/rgb_lighting_user.c
new file mode 100644
index 0000000000..25e1ce0104
--- /dev/null
+++ b/users/curry/rgb_lighting_user.c
@@ -0,0 +1,325 @@
+#include "curry.h"
+#include "rgb_lighting_user.h"
+
+extern rgblight_config_t rgblight_config;
+bool has_initialized;
+
+void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index); }
+
+/* Custom indicators for modifiers.
+ * This allows for certain lights to be lit up, based on what mods are active, giving some visual feedback.
+ * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up.
+ */
+#if defined(INDICATOR_LIGHTS)
+void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
+ if (userspace_config.rgb_layer_change && get_highest_layer(layer_state) == 0) {
+ if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) {
+# ifdef SHFT_LED1
+ rgblight_sethsv_at(120, 255, 255, SHFT_LED1);
+# endif // SHFT_LED1
+# ifdef SHFT_LED2
+ rgblight_sethsv_at(120, 255, 255, SHFT_LED2);
+# endif // SHFT_LED2
+ } else {
+# ifdef SHFT_LED1
+ rgblight_sethsv_default_helper(SHFT_LED1);
+# endif // SHFT_LED1
+# ifdef SHFT_LED2
+ rgblight_sethsv_default_helper(SHFT_LED2);
+# endif // SHFT_LED2
+ }
+ if ((this_mod | this_osm) & MOD_MASK_CTRL) {
+# ifdef CTRL_LED1
+ rgblight_sethsv_at(0, 255, 255, CTRL_LED1);
+# endif // CTRL_LED1
+# ifdef CTRL_LED2
+ rgblight_sethsv_at(0, 255, 255, CTRL_LED2);
+# endif // CTRL_LED2
+ } else {
+# ifdef CTRL_LED1
+ rgblight_sethsv_default_helper(CTRL_LED1);
+# endif // CTRL_LED1
+# ifdef CTRL_LED2
+ rgblight_sethsv_default_helper(CTRL_LED2);
+# endif // CTRL_LED2
+ }
+ if ((this_mod | this_osm) & MOD_MASK_GUI) {
+# ifdef GUI_LED1
+ rgblight_sethsv_at(51, 255, 255, GUI_LED1);
+# endif // GUI_LED1
+# ifdef GUI_LED2
+ rgblight_sethsv_at(51, 255, 255, GUI_LED2);
+# endif // GUI_LED2
+ } else {
+# ifdef GUI_LED1
+ rgblight_sethsv_default_helper(GUI_LED1);
+# endif // GUI_LED1
+# ifdef GUI_LED2
+ rgblight_sethsv_default_helper(GUI_LED2);
+# endif // GUI_LED2
+ }
+ if ((this_mod | this_osm) & MOD_MASK_ALT) {
+# ifdef ALT_LED1
+ rgblight_sethsv_at(240, 255, 255, ALT_LED1);
+# endif // ALT_LED1
+# ifdef GUI_LED2
+ rgblight_sethsv_at(240, 255, 255, ALT_LED2);
+# endif // GUI_LED2
+ } else {
+# ifdef GUI_LED1
+ rgblight_sethsv_default_helper(ALT_LED1);
+# endif // GUI_LED1
+# ifdef GUI_LED2
+ rgblight_sethsv_default_helper(ALT_LED2);
+# endif // GUI_LED2
+ }
+ }
+}
+
+/* Function for the indicators */
+void matrix_scan_indicator(void) {
+ if (has_initialized) {
+ set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
+ }
+}
+#endif // INDICATOR_LIGHTS
+
+#if defined(RGBLIGHT_TWINKLE)
+static rgblight_fadeout lights[RGBLED_NUM];
+
+__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; }
+
+/* This function checks for used LEDs. This way, collisions don't occur and cause weird rendering */
+bool rgblight_twinkle_is_led_used(uint8_t index) {
+ switch (index) {
+# ifdef INDICATOR_LIGHTS
+# ifdef SHFT_LED1
+ case SHFT_LED1:
+ return true;
+# endif // SHFT_LED1
+# ifdef SHFT_LED2
+ case SHFT_LED2:
+ return true;
+# endif // SHFT_LED2
+# ifdef CTRL_LED1
+ case CTRL_LED1:
+ return true;
+# endif // CTRL_LED1
+# ifdef CTRL_LED2
+ case CTRL_LED2:
+ return true;
+# endif // CTRL_LED2
+# ifdef GUI_LED1
+ case GUI_LED1:
+ return true;
+# endif // GUI_LED1
+# ifdef GUI_LED2
+ case GUI_LED2:
+ return true;
+# endif // GUI_LED2
+# ifdef ALT_LED1
+ case ALT_LED1:
+ return true;
+# endif // ALT_LED1
+# ifdef ALT_LED2
+ case ALT_LED2:
+ return true;
+# endif // ALT_LED2
+# endif // INDICATOR_LIGHTS
+ default:
+ return rgblight_twinkle_is_led_used_keymap(index);
+ }
+}
+
+/* Handler for fading/twinkling effect */
+void scan_rgblight_fadeout(void) { // Don't effing change this function .... rgblight_sethsv is supppppper intensive
+ bool litup = false;
+ for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) {
+ if (lights[light_index].enabled && timer_elapsed(lights[light_index].timer) > 10) {
+ rgblight_fadeout *light = &lights[light_index];
+ litup = true;
+
+ if (light->life) {
+ light->life -= 1;
+ if (get_highest_layer(layer_state) == 0) {
+ sethsv(light->hue + rand() % 0xF, 255, light->life, (LED_TYPE *)&led[light_index]);
+ }
+ light->timer = timer_read();
+ } else {
+ if (light->enabled && get_highest_layer(layer_state) == 0) {
+ rgblight_sethsv_default_helper(light_index);
+ }
+ litup = light->enabled = false;
+ }
+ }
+ }
+ if (litup && get_highest_layer(layer_state) == 0) {
+ rgblight_set();
+ }
+}
+
+/* Triggers a LED to fade/twinkle.
+ * This function handles the selection of the LED and prepres for it to be used.
+ */
+void start_rgb_light(void) {
+ uint8_t indices[RGBLED_NUM];
+ uint8_t indices_count = 0;
+ uint8_t min_life = 0xFF;
+ uint8_t min_life_index = -1;
+ for (uint8_t index = 0; index < RGBLED_NUM; ++index) {
+ if (rgblight_twinkle_is_led_used(index)) {
+ continue;
+ }
+ if (lights[index].enabled) {
+ if (min_life_index == -1 || lights[index].life < min_life) {
+ min_life = lights[index].life;
+ min_life_index = index;
+ }
+ continue;
+ }
+
+ indices[indices_count] = index;
+ ++indices_count;
+ }
+
+ uint8_t light_index;
+ if (!indices_count) {
+ light_index = min_life_index;
+ } else {
+ light_index = indices[rand() % indices_count];
+ }
+
+ rgblight_fadeout *light = &lights[light_index];
+ light->enabled = true;
+ light->timer = timer_read();
+ light->life = 0xC0 + rand() % 0x40;
+
+ light->hue = rgblight_config.hue + (rand() % 0xB4) - 0x54;
+
+ rgblight_sethsv_at(light->hue, 255, light->life, light_index);
+}
+#endif
+
+bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
+ uint16_t temp_keycode = keycode;
+ // Filter out the actual keycode from MT and LT keys.
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
+ temp_keycode &= 0xFF;
+ }
+
+ switch (temp_keycode) {
+#if defined(RGBLIGHT_TWINKLE)
+ case KC_A ... KC_SLASH:
+ case KC_F1 ... KC_F12:
+ case KC_INSERT ... KC_UP:
+ case KC_KP_SLASH ... KC_KP_DOT:
+ case KC_F13 ... KC_F24:
+ case KC_AUDIO_MUTE ... KC_MEDIA_REWIND:
+ if (record->event.pressed) {
+ start_rgb_light();
+ }
+ break;
+#endif // RGBLIGHT_TWINKLE
+ case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
+ if (record->event.pressed) {
+ userspace_config.rgb_layer_change ^= 1;
+ dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
+ eeconfig_update_user(userspace_config.raw);
+ if (userspace_config.rgb_layer_change) {
+ layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
+ }
+ }
+ break;
+ case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
+ if (record->event.pressed) {
+ bool is_eeprom_updated = false;
+ // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
+ if (userspace_config.rgb_layer_change) {
+ userspace_config.rgb_layer_change = false;
+ dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
+ is_eeprom_updated = true;
+ }
+ if (is_eeprom_updated) {
+ eeconfig_update_user(userspace_config.raw);
+ }
+ }
+ break;
+ }
+ return true;
+}
+
+void keyboard_post_init_rgb(void) {
+#if defined(RGBLIGHT_STARTUP_ANIMATION)
+ bool is_enabled = rgblight_config.enable;
+ if (userspace_config.rgb_layer_change) {
+ rgblight_enable_noeeprom();
+ }
+ if (rgblight_config.enable) {
+ layer_state_set_user(layer_state);
+ uint16_t old_hue = rgblight_config.hue;
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ for (uint16_t i = 255; i > 0; i--) {
+ rgblight_sethsv_noeeprom((i + old_hue) % 255, 255, 255);
+ matrix_scan();
+ wait_ms(10);
+ }
+ }
+ if (!is_enabled) {
+ rgblight_disable_noeeprom();
+ }
+
+#endif
+ layer_state_set_user(layer_state);
+}
+
+void matrix_scan_rgb(void) {
+#if defined(RGBLIGHT_TWINKLE)
+ scan_rgblight_fadeout();
+#endif // RGBLIGHT_ENABLE
+
+#if defined(INDICATOR_LIGHTS)
+ matrix_scan_indicator();
+#endif
+}
+
+void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
+ rgblight_sethsv_noeeprom(hue, sat, val);
+ wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
+ rgblight_mode_noeeprom(mode);
+}
+
+layer_state_t layer_state_set_rgb(layer_state_t state) {
+ if (userspace_config.rgb_layer_change) {
+ switch (get_highest_layer(state)) {
+ case _RAISE:
+ rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_BREATHING + 3);
+ break;
+ case _LOWER:
+ rgblight_set_hsv_and_mode(HSV_GREEN, RGBLIGHT_MODE_BREATHING + 3);
+ break;
+ case _ADJUST:
+ rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
+ break;
+ default: // for any other layers, or the default layer
+ {
+ uint8_t mode = get_highest_layer(state) == _MODS ? RGBLIGHT_MODE_BREATHING : RGBLIGHT_MODE_STATIC_LIGHT;
+ switch (get_highest_layer(default_layer_state)) {
+ case _COLEMAK:
+ rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
+ break;
+ case _DVORAK:
+ rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
+ break;
+ case _WORKMAN:
+ rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
+ break;
+ default:
+ rgblight_set_hsv_and_mode(HSV_CYAN, mode);
+ break;
+ }
+ break;
+ }
+ }
+ }
+ return state;
+}
diff --git a/users/curry/rgb_lighting_user.h b/users/curry/rgb_lighting_user.h
new file mode 100644
index 0000000000..91d7a7061e
--- /dev/null
+++ b/users/curry/rgb_lighting_user.h
@@ -0,0 +1,19 @@
+#pragma once
+
+typedef struct {
+ bool enabled;
+ uint8_t hue;
+ uint16_t timer;
+ uint8_t life;
+} rgblight_fadeout;
+
+bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
+void keyboard_post_init_rgb(void);
+void matrix_scan_rgb(void);
+layer_state_t layer_state_set_rgb(layer_state_t state);
+layer_state_t default_layer_state_set_rgb(layer_state_t state);
+void rgblight_sethsv_default_helper(uint8_t index);
+
+#if defined(RGBLIGHT_TWINKLE)
+void scan_rgblight_fadeout(void);
+#endif
diff --git a/users/curry/rgb_matrix_user.c b/users/curry/rgb_matrix_user.c
new file mode 100644
index 0000000000..d1698b087c
--- /dev/null
+++ b/users/curry/rgb_matrix_user.c
@@ -0,0 +1,144 @@
+#include "curry.h"
+#include "rgb_matrix_user.h"
+#include "lib/lib8tion/lib8tion.h"
+
+static uint32_t hypno_timer;
+extern led_config_t g_led_config;
+
+#define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
+
+void suspend_power_down_keymap(void) { rgb_matrix_set_suspend_state(true); }
+
+void suspend_wakeup_init_keymap(void) { rgb_matrix_set_suspend_state(false); }
+
+void check_default_layer(uint8_t mode, uint8_t type) {
+ switch (get_highest_layer(default_layer_state)) {
+ case _QWERTY:
+ rgb_matrix_layer_helper(HSV_CYAN, mode, rgb_matrix_config.speed, type);
+ break;
+ case _COLEMAK:
+ rgb_matrix_layer_helper(HSV_MAGENTA, mode, rgb_matrix_config.speed, type);
+ break;
+ case _DVORAK:
+ rgb_matrix_layer_helper(HSV_SPRINGGREEN, mode, rgb_matrix_config.speed, type);
+ break;
+ case _WORKMAN:
+ rgb_matrix_layer_helper(HSV_GOLDENROD, mode, rgb_matrix_config.speed, type);
+ break;
+ }
+}
+
+void rgb_matrix_indicators_user(void) {
+ if (userspace_config.rgb_layer_change && !g_suspend_state && rgb_matrix_config.enable) {
+ switch (get_highest_layer(layer_state)) {
+ case _RAISE:
+ rgb_matrix_layer_helper(HSV_YELLOW, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
+ break;
+ case _LOWER:
+ rgb_matrix_layer_helper(HSV_GREEN, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
+ break;
+ case _ADJUST:
+ rgb_matrix_layer_helper(HSV_RED, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
+ break;
+ default: {
+ check_default_layer(IS_LAYER_ON(_MODS), LED_FLAG_UNDERGLOW);
+ break;
+ }
+ }
+ check_default_layer(0, LED_FLAG_MODIFIER);
+ }
+}
+
+bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
+ uint16_t temp_keycode = keycode;
+ // Filter out the actual keycode from MT and LT keys.
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
+ temp_keycode &= 0xFF;
+ }
+
+ hypno_timer = timer_read32();
+ if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
+ }
+
+ switch (temp_keycode) {
+ case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
+ if (record->event.pressed) {
+ userspace_config.rgb_layer_change ^= 1;
+ dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
+ eeconfig_update_user(userspace_config.raw);
+ if (userspace_config.rgb_layer_change) {
+ layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
+ }
+ }
+ break;
+ case RGB_IDL: // This allows me to use underglow as layer indication, or as normal
+ if (record->event.pressed) {
+ userspace_config.rgb_matrix_idle_anim ^= 1;
+ dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
+ eeconfig_update_user(userspace_config.raw);
+ if (userspace_config.rgb_matrix_idle_anim) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
+ }
+ }
+ break;
+ case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
+ if (record->event.pressed) {
+ bool is_eeprom_updated = false;
+ if (userspace_config.rgb_matrix_idle_anim) {
+ userspace_config.rgb_matrix_idle_anim = false;
+ dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
+ is_eeprom_updated = true;
+ }
+ if (is_eeprom_updated) {
+ eeconfig_update_user(userspace_config.raw);
+ }
+ }
+ break;
+ }
+ return true;
+}
+
+void keyboard_post_init_rgb(void) {
+ if (userspace_config.rgb_matrix_idle_anim) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
+ }
+}
+
+void matrix_scan_rgb(void) {
+ if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
+ }
+}
+
+void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
+ HSV hsv = {hue, sat, val};
+ if (hsv.v > rgb_matrix_config.hsv.v) {
+ hsv.v = rgb_matrix_config.hsv.v;
+ }
+
+ switch (mode) {
+ case 1: // breathing
+ {
+ uint16_t time = scale16by8(g_rgb_counters.tick, speed / 8);
+ hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
+ RGB rgb = hsv_to_rgb(hsv);
+ for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
+ if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ }
+ break;
+ }
+ default: // Solid Color
+ {
+ RGB rgb = hsv_to_rgb(hsv);
+ for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
+ if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ }
+ break;
+ }
+ }
+}
diff --git a/users/curry/rgb_matrix_user.h b/users/curry/rgb_matrix_user.h
new file mode 100644
index 0000000000..d7db29bff9
--- /dev/null
+++ b/users/curry/rgb_matrix_user.h
@@ -0,0 +1,7 @@
+#pragma once
+
+bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record);
+void keyboard_post_init_rgb(void);
+void matrix_scan_rgb(void);
+void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type);
diff --git a/users/curry/rgblight_breathe_table.h b/users/curry/rgblight_breathe_table.h
new file mode 100644
index 0000000000..4c6ae38faa
--- /dev/null
+++ b/users/curry/rgblight_breathe_table.h
@@ -0,0 +1,118 @@
+#ifndef RGBLIGHT_EFFECT_BREATHE_TABLE
+#define RGBLIGHT_EFFECT_BREATHE_TABLE
+
+// clang-format off
+const uint8_t rgblight_effect_breathe_table[] PROGMEM = {
+/* #define RGBLIGHT_EFFECT_BREATHE_CENTER 0.00 */
+/* #define RGBLIGHT_EFFECT_BREATHE_MAX 255 */
+
+ #if RGBLIGHT_BREATHE_TABLE_SIZE == 256
+ 0x44, 0x45, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x4e,
+ 0x4f, 0x51, 0x52, 0x54, 0x55, 0x57, 0x58, 0x5a,
+ 0x5c, 0x5d, 0x5f, 0x60, 0x62, 0x64, 0x65, 0x67,
+ 0x69, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x73, 0x75,
+ 0x77, 0x79, 0x7b, 0x7c, 0x7e, 0x80, 0x82, 0x84,
+ 0x86, 0x88, 0x8a, 0x8b, 0x8d, 0x8f, 0x91, 0x93,
+ 0x95, 0x97, 0x99, 0x9b, 0x9d, 0x9f, 0xa1, 0xa3,
+ 0xa5, 0xa7, 0xa9, 0xaa, 0xac, 0xae, 0xb0, 0xb2,
+ 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xbf, 0xc1,
+ 0xc3, 0xc5, 0xc7, 0xc9, 0xca, 0xcc, 0xce, 0xd0,
+ 0xd1, 0xd3, 0xd5, 0xd6, 0xd8, 0xda, 0xdb, 0xdd,
+ 0xde, 0xe0, 0xe1, 0xe3, 0xe4, 0xe5, 0xe7, 0xe8,
+ 0xe9, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
+ 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf8,
+ 0xf9, 0xfa, 0xfa, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd,
+ 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd,
+ 0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0xfa, 0xfa, 0xf9,
+ 0xf8, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
+ 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xe9,
+ 0xe8, 0xe7, 0xe5, 0xe4, 0xe3, 0xe1, 0xe0, 0xde,
+ 0xdd, 0xdb, 0xda, 0xd8, 0xd6, 0xd5, 0xd3, 0xd1,
+ 0xd0, 0xce, 0xcc, 0xca, 0xc9, 0xc7, 0xc5, 0xc3,
+ 0xc1, 0xbf, 0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4,
+ 0xb2, 0xb0, 0xae, 0xac, 0xaa, 0xa9, 0xa7, 0xa5,
+ 0xa3, 0xa1, 0x9f, 0x9d, 0x9b, 0x99, 0x97, 0x95,
+ 0x93, 0x91, 0x8f, 0x8d, 0x8b, 0x8a, 0x88, 0x86,
+ 0x84, 0x82, 0x80, 0x7e, 0x7c, 0x7b, 0x79, 0x77,
+ 0x75, 0x73, 0x72, 0x70, 0x6e, 0x6c, 0x6a, 0x69,
+ 0x67, 0x65, 0x64, 0x62, 0x60, 0x5f, 0x5d, 0x5c,
+ 0x5a, 0x58, 0x57, 0x55, 0x54, 0x52, 0x51, 0x4f,
+ 0x4e, 0x4c, 0x4b, 0x4a, 0x48, 0x47, 0x45, 0x44
+ #endif /* 256 bytes table */
+
+ #if RGBLIGHT_BREATHE_TABLE_SIZE == 128
+ 0x44, 0x47, 0x4a, 0x4c,
+ 0x4f, 0x52, 0x55, 0x58,
+ 0x5c, 0x5f, 0x62, 0x65,
+ 0x69, 0x6c, 0x70, 0x73,
+ 0x77, 0x7b, 0x7e, 0x82,
+ 0x86, 0x8a, 0x8d, 0x91,
+ 0x95, 0x99, 0x9d, 0xa1,
+ 0xa5, 0xa9, 0xac, 0xb0,
+ 0xb4, 0xb8, 0xbc, 0xbf,
+ 0xc3, 0xc7, 0xca, 0xce,
+ 0xd1, 0xd5, 0xd8, 0xdb,
+ 0xde, 0xe1, 0xe4, 0xe7,
+ 0xe9, 0xec, 0xee, 0xf0,
+ 0xf2, 0xf4, 0xf6, 0xf8,
+ 0xf9, 0xfa, 0xfc, 0xfc,
+ 0xfd, 0xfe, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xfe,
+ 0xfd, 0xfc, 0xfb, 0xfa,
+ 0xf8, 0xf7, 0xf5, 0xf3,
+ 0xf1, 0xef, 0xed, 0xeb,
+ 0xe8, 0xe5, 0xe3, 0xe0,
+ 0xdd, 0xda, 0xd6, 0xd3,
+ 0xd0, 0xcc, 0xc9, 0xc5,
+ 0xc1, 0xbe, 0xba, 0xb6,
+ 0xb2, 0xae, 0xaa, 0xa7,
+ 0xa3, 0x9f, 0x9b, 0x97,
+ 0x93, 0x8f, 0x8b, 0x88,
+ 0x84, 0x80, 0x7c, 0x79,
+ 0x75, 0x72, 0x6e, 0x6a,
+ 0x67, 0x64, 0x60, 0x5d,
+ 0x5a, 0x57, 0x54, 0x51,
+ 0x4e, 0x4b, 0x48, 0x45
+ #endif /* 128 bytes table */
+
+ #if RGBLIGHT_BREATHE_TABLE_SIZE == 64
+ 0x44, 0x4a,
+ 0x4f, 0x55,
+ 0x5c, 0x62,
+ 0x69, 0x70,
+ 0x77, 0x7e,
+ 0x86, 0x8d,
+ 0x95, 0x9d,
+ 0xa5, 0xac,
+ 0xb4, 0xbc,
+ 0xc3, 0xca,
+ 0xd1, 0xd8,
+ 0xde, 0xe4,
+ 0xe9, 0xee,
+ 0xf2, 0xf6,
+ 0xf9, 0xfc,
+ 0xfd, 0xfe,
+ 0xfe, 0xfe,
+ 0xfd, 0xfb,
+ 0xf8, 0xf5,
+ 0xf1, 0xed,
+ 0xe8, 0xe3,
+ 0xdd, 0xd6,
+ 0xd0, 0xc9,
+ 0xc1, 0xba,
+ 0xb2, 0xaa,
+ 0xa3, 0x9b,
+ 0x93, 0x8b,
+ 0x84, 0x7c,
+ 0x75, 0x6e,
+ 0x67, 0x60,
+ 0x5a, 0x54,
+ 0x4e, 0x48
+ #endif /* 64 bytes table */
+};
+// clang-format on
+
+static const int table_scale = 256 / sizeof(rgblight_effect_breathe_table);
+
+#endif /* RGBLIGHT_EFFECT_BREATHE_TABLE */
diff --git a/users/curry/rules.mk b/users/curry/rules.mk
new file mode 100644
index 0000000000..87d3b38ead
--- /dev/null
+++ b/users/curry/rules.mk
@@ -0,0 +1,71 @@
+SRC += curry.c \
+ process_records.c
+
+# Common flags
+SPACE_CADET_ENABLE = no
+LTO_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+UNICODE_ENABLE = yes
+NKRO_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+LEADER_ENABLE = yes
+TAP_DANCE_ENABLE = no
+
+ifneq ($(strip $(NO_SECRETS)), yes)
+ ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
+ SRC += secrets.c
+ endif
+ ifeq ($(strip $(NO_SECRETS)), lite)
+ OPT_DEFS += -DNO_SECRETS
+ endif
+endif
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tap_dances.c
+endif
+
+ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
+ SRC += oled.c
+endif
+
+ifeq ($(strip $(LEADER_ENABLE)), yes)
+ SRC += leader.c
+endif
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ SRC += rgb_lighting_user.c
+ ifeq ($(strip $(INDICATOR_LIGHTS)), yes)
+ OPT_DEFS += -DINDICATOR_LIGHTS
+ endif
+ ifeq ($(strip $(RGBLIGHT_TWINKLE)), yes)
+ OPT_DEFS += -DRGBLIGHT_TWINKLE
+ endif
+ ifeq ($(strip $(RGBLIGHT_NOEEPROM)), yes)
+ OPT_DEFS += -DRGBLIGHT_NOEEPROM
+ endif
+ ifeq ($(strip $(RGBLIGHT_STARTUP_ANIMATION)), yes)
+ OPT_DEFS += -DRGBLIGHT_STARTUP_ANIMATION
+ endif
+endif
+
+RGB_MATRIX_ENABLE ?= no
+ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
+ SRC += rgb_matrix_user.c
+endif
+
+ifdef CONSOLE_ENABLE
+ ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
+ OPT_DEFS += -DKEYLOGGER_ENABLE
+ endif
+endif
+
+ifeq ($(strip $(MAKE_BOOTLOADER)), yes)
+ OPT_DEFS += -DMAKE_BOOTLOADER
+endif
+
+# At least until build.mk or the like drops, this is here to prevent
+# VUSB boards from enabling NKRO, as they do not support it. Ideally
+# this should be handled per keyboard, but until that happens ...
+ifeq ($(strip $(PROTOCOL)), VUSB)
+ NKRO_ENABLE = no
+endif
diff --git a/users/curry/tap_dances.c b/users/curry/tap_dances.c
new file mode 100644
index 0000000000..166ea2c686
--- /dev/null
+++ b/users/curry/tap_dances.c
@@ -0,0 +1,4 @@
+#include "tap_dances.h"
+#include "curry.h"
+
+qk_tap_dance_action_t tap_dance_actions[] = {};
diff --git a/users/curry/tap_dances.h b/users/curry/tap_dances.h
new file mode 100644
index 0000000000..6f70f09bee
--- /dev/null
+++ b/users/curry/tap_dances.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/users/curry/wrappers.h b/users/curry/wrappers.h
new file mode 100644
index 0000000000..62e89a7175
--- /dev/null
+++ b/users/curry/wrappers.h
@@ -0,0 +1,88 @@
+#pragma once
+#include "curry.h"
+/*
+Since our quirky block definitions are basically a list of comma separated
+arguments, we need a wrapper in order for these definitions to be
+expanded before being used as arguments to the LAYOUT_xxx macro.
+*/
+#if (!defined(LAYOUT) && defined(KEYMAP))
+# define LAYOUT KEYMAP
+#endif
+
+// clang-format off
+#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+#define LAYOUT_ortho_5x12_wrapper(...) LAYOUT_ortho_5x12(__VA_ARGS__)
+
+#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
+
+#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
+#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
+
+#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_B
+#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_G
+#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_D, KC_V
+
+#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
+#define _________________COLEMAK_R2________________ KC_M, KC_N, KC_E, KC_I, KC_O
+#define _________________COLEMAK_R3________________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
+
+#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
+#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
+#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
+
+#define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
+#define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
+#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
+
+#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
+#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
+#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
+
+#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
+#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
+#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
+
+
+#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
+
+#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+#define _________________SYM_LEFT__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
+#define _________________SYM_RIGHT_________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
+
+
+#define ___________________BLANK___________________ _______, _______, _______, _______, _______
+
+
+#define _________________LOWER_L1__________________ _________________FUNC_LEFT_________________
+#define _________________LOWER_L2__________________ _________________SYM_LEFT__________________
+#define _________________LOWER_L3__________________ KC_DT1, KC_DT2, KC_DT3, KC_DT4, KC_CCCV
+
+#define _________________LOWER_R1__________________ _________________FUNC_RIGHT________________
+#define _________________LOWER_R2__________________ _________________SYM_RIGHT_________________
+#define _________________LOWER_R3__________________ KC_DQUO, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
+
+#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
+#define _________________RAISE_L2__________________ KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______
+#define _________________RAISE_L3__________________ UC_FLIP, UC_TABL, UC_SHRG, UC_DISA, _______
+
+#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
+#define _________________RAISE_R2__________________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______
+#define _________________RAISE_R3__________________ KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
+
+#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
+#define _________________ADJUST_L2_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, CG_NORM
+#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
+
+#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
+#define _________________ADJUST_R2_________________ CG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
+#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
+
+// clang-format on
diff --git a/users/d4mation/config.h b/users/d4mation/config.h
new file mode 100644
index 0000000000..3140a036f7
--- /dev/null
+++ b/users/d4mation/config.h
@@ -0,0 +1 @@
+#define FORCE_NKRO \ No newline at end of file
diff --git a/users/d4mation/d4mation.c b/users/d4mation/d4mation.c
new file mode 100644
index 0000000000..5aa58a9f0d
--- /dev/null
+++ b/users/d4mation/d4mation.c
@@ -0,0 +1,37 @@
+#include "d4mation.h"
+
+__attribute__ ((weak))
+bool process_record_keymap( uint16_t keycode, keyrecord_t *record ) {
+ /* If you want macros specific to your keymap, you need to define this function in your keymap */
+ return true;
+}
+
+__attribute__ ((weak))
+void matrix_init_keymap() {
+ /* If you want a matrix init specific to your keymap, you need to define this function in your keymap */
+}
+
+__attribute__ ((weak))
+void matrix_scan_keymap() {
+ /* If you want a matrix scan specific to your keymap, you need to define this function in your keymap */
+}
+
+__attribute__((weak))
+void eeconfig_init_keymap( void ) {}
+
+/* process_record_user() is called in macros.c */
+
+void matrix_init_user( void ) {
+ matrix_init_keymap();
+}
+
+void matrix_scan_user( void ) {
+ matrix_scan_keymap();
+}
+
+void eeconfig_init_user( void ) {
+
+ eeconfig_init_keymap();
+ keyboard_init();
+
+} \ No newline at end of file
diff --git a/users/d4mation/d4mation.h b/users/d4mation/d4mation.h
new file mode 100644
index 0000000000..94c63526db
--- /dev/null
+++ b/users/d4mation/d4mation.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef UNICODE_ENABLE
+#include "macros.h"
+#endif
+
+#ifdef TAP_DANCE_ENABLE
+#include "tap-dance.h"
+#endif
+
+bool process_record_keymap( uint16_t keycode, keyrecord_t *record );
+
+void matrix_init_keymap( void );
+
+void matrix_scan_keymap( void ); \ No newline at end of file
diff --git a/users/d4mation/macros.c b/users/d4mation/macros.c
new file mode 100644
index 0000000000..3c115d7ead
--- /dev/null
+++ b/users/d4mation/macros.c
@@ -0,0 +1,160 @@
+#include "d4mation.h"
+#include "tap-hold.h"
+#include "zalgo.h"
+#include "macros.h"
+
+bool zalgo_enabled = false;
+
+bool process_record_user( uint16_t keycode, keyrecord_t *record ) {
+
+ switch ( keycode ) {
+
+ case _GRAVE_ESC:
+
+ /* Send ` on Tap, Esc on Hold */
+ tap_or_hold( record, KC_GRAVE, KC_ESC );
+
+ return false;
+ break;
+
+ case PHPOPEN:
+
+ if ( record->event.pressed ) {
+
+ tap_code16( S( KC_COMMA ) );
+ tap_code16( S( KC_SLASH ) );
+
+ tap_code( KC_P );
+ tap_code( KC_H );
+ tap_code( KC_P );
+
+ }
+
+ return false;
+ break;
+
+ case PHPCLSE:
+
+ if ( record->event.pressed ) {
+ tap_code16( S( KC_SLASH ) );
+ tap_code16( S( KC_DOT ) );
+ }
+
+ return false;
+ break;
+
+ #ifdef UNICODE_ENABLE
+
+ case AMENO: /* ༼ 㤠◕_◕ ༽㤠*/
+
+ if ( record->event.pressed ) {
+
+ send_unicode_hex_string( "0F3C 0020 3064 0020 25D5 005F 25D5 0020 0F3D 3064" );
+
+ }
+
+ return false;
+ break;
+
+ case MAGIC: /* (∩ ͡° ͜ʖ ͡°)⊃â”☆゚. * */
+
+ if ( record->event.pressed ) {
+
+ send_unicode_hex_string( "0028 2229 0020 0361 00B0 0020 035C 0296 0020 0361 00B0 0029 2283 2501 2606 FF9F 002E 0020 002A" );
+
+ }
+
+ return false;
+ break;
+
+ case LENNY: /* ( ͡° ͜ʖ ͡°) */
+
+ if ( record->event.pressed ) {
+
+ send_unicode_hex_string( "0028 0020 0361 00B0 0020 035C 0296 0020 0361 00b0 0029" );
+
+ }
+
+ return false;
+ break;
+
+ case DISFACE: /* ಠ_ಠ */
+
+ if ( record->event.pressed ) {
+ send_unicode_hex_string( "0CA0 005F 0CA0" );
+ }
+
+ return false;
+ break;
+
+ case TFLIP: /* (╯°□°)╯ ︵ â”»â”â”» */
+
+ if ( record->event.pressed ) {
+
+ send_unicode_hex_string( "0028 256F 00b0 25A1 00B0 0029 256F FE35 253B 2501 253B" );
+
+ }
+
+ return false;
+ break;
+
+ case TPUT: /* ┬──┬ ノ( ゜-゜ノ) */
+
+ if ( record->event.pressed ) {
+
+ send_unicode_hex_string( "252C 2500 2500 252C 0020 30CE 0028 0020 309C 002D 309C 30CE 0029" );
+
+ }
+
+ return false;
+ break;
+
+ case SHRUG: /* ¯\_(ツ)_/¯ */
+
+ if ( record->event.pressed ) {
+
+ send_unicode_hex_string( "00AF 005C 005F 0028 30C4 0029 005F 002F 00AF" );
+
+ }
+
+ return false;
+ break;
+
+ case ZALGO: /* Toggles Zalgo Text mode */
+
+ if ( record->event.pressed ) {
+ zalgo_enabled = ! zalgo_enabled;
+ }
+
+ return false;
+ break;
+
+ #endif
+
+ default:
+
+ #ifdef UNICODE_ENABLE
+
+ if ( zalgo_enabled ) {
+
+ if ( keycode < KC_A || ( keycode > KC_0 && keycode < KC_MINUS ) || keycode > KC_SLASH ) {
+ process_record_keymap( keycode, record );
+ return true;
+ }
+
+ if ( record->event.pressed ) {
+ zalgo_text( keycode );
+ }
+
+ return false;
+ }
+
+ #endif
+
+ break;
+ }
+
+ process_record_keymap( keycode, record );
+ return true;
+
+}; \ No newline at end of file
diff --git a/users/d4mation/macros.h b/users/d4mation/macros.h
new file mode 100644
index 0000000000..e69d30dec2
--- /dev/null
+++ b/users/d4mation/macros.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "quantum.h"
+#include "tap-hold.h"
+#include "zalgo.h"
+
+#define SCRGB LCTL( LSFT( LGUI( KC_4 ) ) ) /* Mac Screen Area Grab shortcut (Puts into Clipboard) */
+#define SLEEP LALT( LGUI( KC_SYSTEM_POWER ) ) /* Instant sleep on Mac, rather than having to hold down the button */
+
+enum custom_keycodes {
+ _GRAVE_ESC = SAFE_RANGE, /* Prefixed with underscore to prevent conflicts */
+ PHPOPEN, /* <?php */
+ PHPCLSE, /* ?> */
+ AMENO,
+ MAGIC,
+ LENNY,
+ DISFACE,
+ TFLIP,
+ TPUT,
+ SHRUG,
+ ZALGO,
+ NEW_SAFE_RANGE
+}; \ No newline at end of file
diff --git a/users/d4mation/rules.mk b/users/d4mation/rules.mk
new file mode 100644
index 0000000000..3d65a2242b
--- /dev/null
+++ b/users/d4mation/rules.mk
@@ -0,0 +1,15 @@
+SRC += d4mation.c \
+ tap-hold.c \
+ macros.c
+
+BOOTMAGIC_ENABLE = no
+LTO_ENABLE = yes
+MOUSEKEY_ENABLE = no
+
+ifeq ($(strip $(UNICODE_ENABLE)), yes)
+ SRC += zalgo.c
+endif
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tap-dance.c
+endif \ No newline at end of file
diff --git a/users/d4mation/tap-dance.c b/users/d4mation/tap-dance.c
new file mode 100644
index 0000000000..46f2274f5f
--- /dev/null
+++ b/users/d4mation/tap-dance.c
@@ -0,0 +1,6 @@
+#include "tap-dance.h"
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once/hold for Shift, tap twice for Caps Lock */
+ [SHIFT_CAPS] = ACTION_TAP_DANCE_DOUBLE( KC_LSHIFT, KC_CAPS )
+}; \ No newline at end of file
diff --git a/users/d4mation/tap-dance.h b/users/d4mation/tap-dance.h
new file mode 100644
index 0000000000..0087c4a6e7
--- /dev/null
+++ b/users/d4mation/tap-dance.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+enum tap_dance {
+ SHIFT_CAPS = 0
+}; \ No newline at end of file
diff --git a/users/d4mation/tap-hold.c b/users/d4mation/tap-hold.c
new file mode 100644
index 0000000000..0c5119f995
--- /dev/null
+++ b/users/d4mation/tap-hold.c
@@ -0,0 +1,28 @@
+#include "tap-hold.h"
+
+#ifndef TAP_HOLD_TIME
+#define TAP_HOLD_TIME 200
+#endif
+
+uint16_t tap_hold_timer;
+
+void tap_or_hold( keyrecord_t *record, uint16_t tap, uint16_t hold ) {
+
+ if ( record->event.pressed ) {
+ tap_hold_timer = timer_read();
+ } else {
+
+ if ( tap_hold_timer &&
+ timer_elapsed( tap_hold_timer ) > TAP_HOLD_TIME ) {
+ /* Held down then released */
+ tap_code( hold );
+ } else {
+ /* Quickly Tapped */
+ tap_code( tap );
+ }
+
+ tap_hold_timer = 0;
+
+ }
+
+} \ No newline at end of file
diff --git a/users/d4mation/tap-hold.h b/users/d4mation/tap-hold.h
new file mode 100644
index 0000000000..52dc0830f8
--- /dev/null
+++ b/users/d4mation/tap-hold.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "quantum.h"
+
+void tap_or_hold( keyrecord_t *record, uint16_t tap, uint16_t hold ); \ No newline at end of file
diff --git a/users/d4mation/zalgo.c b/users/d4mation/zalgo.c
new file mode 100644
index 0000000000..3a1688e053
--- /dev/null
+++ b/users/d4mation/zalgo.c
@@ -0,0 +1,21 @@
+#include "zalgo.h"
+
+void zalgo_text( uint16_t keycode ) {
+
+ tap_code( keycode );
+
+ int number = ( rand() % ( 8 + 1 - 2 ) ) + 2;
+ unsigned int index;
+
+ unicode_input_start();
+
+ for ( index = 0; index < number; index++ ) {
+
+ uint16_t hex = ( rand() % ( 0x036F + 1 - 0x0300 ) ) + 0x0300;
+ register_hex( hex );
+
+ }
+
+ unicode_input_finish();
+
+} \ No newline at end of file
diff --git a/users/d4mation/zalgo.h b/users/d4mation/zalgo.h
new file mode 100644
index 0000000000..f59fc035b9
--- /dev/null
+++ b/users/d4mation/zalgo.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "quantum.h"
+
+void zalgo_text( uint16_t keycode ); \ No newline at end of file
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index 71779a6215..1a4ee9b414 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -121,9 +121,13 @@ void shutdown_user(void) {
rgblight_setrgb_red();
#endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE
+# ifdef __AVR__
rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
rgb_matrix_update_pwm_buffers();
-
+# else
+ rgb_matrix_sethsv_noeeprom(0, 255, 255);
+ rgb_matrix_mode_noeeprom(1);
+# endif
#endif // RGB_MATRIX_ENABLE
shutdown_keymap();
}
diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c
index 2f79ad11cc..af3ee9cf05 100644
--- a/users/drashna/process_records.c
+++ b/users/drashna/process_records.c
@@ -80,13 +80,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
copy_paste_timer = timer_read();
} else {
if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
- register_code(KC_LCTL);
- tap_code(KC_C);
- unregister_code(KC_LCTL);
+ tap_code16(LCTL(KC_C));
} else { // Tap, paste
- register_code(KC_LCTL);
- tap_code(KC_V);
- unregister_code(KC_LCTL);
+ tap_code16(LCTL(KC_V));
}
}
break;
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
index 52ec61c22d..e7247f754f 100644
--- a/users/drashna/rgb_stuff.c
+++ b/users/drashna/rgb_stuff.c
@@ -147,6 +147,7 @@ bool rgblight_twinkle_is_led_used(uint8_t index) {
/* Handler for fading/twinkling effect */
void scan_rgblight_fadeout(void) { // Don't effing change this function .... rgblight_sethsv is supppppper intensive
bool litup = false;
+
for (uint8_t light_index = 0; light_index < RGBLED_NUM; ++light_index) {
if (lights[light_index].enabled && timer_elapsed(lights[light_index].timer) > 10) {
rgblight_fadeout *light = &lights[light_index];
@@ -179,6 +180,7 @@ void start_rgb_light(void) {
uint8_t indices_count = 0;
uint8_t min_life = 0xFF;
uint8_t min_life_index = -1;
+
for (uint8_t index = 0; index < RGBLED_NUM; ++index) {
if (rgblight_twinkle_is_led_used(index)) {
continue;
@@ -248,7 +250,14 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
eeconfig_update_user(userspace_config.raw);
if (userspace_config.rgb_layer_change) {
+# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
+ rgblight_enable_noeeprom();
+# endif
layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
+# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
+ } else {
+ rgblight_disable_noeeprom();
+# endif
}
}
#endif // RGBLIGHT_ENABLE
@@ -265,28 +274,182 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
}
#endif
break;
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ case RGB_TOG:
+ // Split keyboards need to trigger on key-up for edge-case issue
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_toggle();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_toggle();
+# endif
+ }
+ return false;
+ break;
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
if (record->event.pressed) {
- bool is_eeprom_updated = false;
-#ifdef RGBLIGHT_ENABLE
+ bool is_eeprom_updated;
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
// This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
if (userspace_config.rgb_layer_change) {
userspace_config.rgb_layer_change = false;
dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
is_eeprom_updated = true;
}
-#endif
-#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
+# endif
+# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
if (userspace_config.rgb_matrix_idle_anim) {
userspace_config.rgb_matrix_idle_anim = false;
dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
is_eeprom_updated = true;
}
-#endif
+# endif
if (is_eeprom_updated) {
eeconfig_update_user(userspace_config.raw);
}
}
+
+# if defined(RGBLIGHT_DISABLE_KEYCODES) || defined(RGB_MATRIX_DISABLE_KEYCODES)
+ if (keycode == RGB_MODE_FORWARD && record->event.pressed) {
+ uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
+ if (shifted) {
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_step_reverse();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_step_reverse();
+# endif
+ } else {
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_step();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_step();
+# endif
+ }
+ } else if (keycode == RGB_MODE_REVERSE && record->event.pressed) {
+ uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
+ if (shifted) {
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_step();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_step();
+# endif
+ } else {
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_step_reverse();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_step_reverse();
+# endif
+ }
+ } else if (keycode == RGB_HUI) {
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_increase_hue();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_increase_hue();
+# endif
+ }
+ } else if (keycode == RGB_HUD) {
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_decrease_hue();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_decrease_hue();
+# endif
+ }
+ } else if (keycode == RGB_SAI) {
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_increase_sat();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_increase_sat();
+# endif
+ }
+ } else if (keycode == RGB_SAD) {
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_decrease_sat();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_decrease_sat();
+# endif
+ }
+ } else if (keycode == RGB_VAI) {
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_increase_val();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_increase_val();
+# endif
+ }
+ } else if (keycode == RGB_VAD) {
+# ifndef SPLIT_KEYBOARD
+ if (record->event.pressed) {
+# else
+ if (!record->event.pressed) {
+# endif
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_decrease_val();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_decrease_val();
+# endif
+ }
+ } else if (keycode == RGB_SPI) {
+ if (record->event.pressed) {
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_increase_speed();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_increase_speed();
+# endif
+ }
+ } else if (keycode == RGB_SPD) {
+ if (record->event.pressed) {
+# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
+ rgblight_decrease_speed();
+# endif
+# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
+ rgb_matrix_decrease_speed();
+# endif
+ }
+ }
+ return false;
+# endif
+#endif
+
break;
}
return true;
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 882857fc86..4d55da803f 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -1,7 +1,9 @@
SRC += drashna.c \
process_records.c
-LTO_ENABLE = yes
+ifneq ($(PLATFORM),CHIBIOS)
+ LTO_ENABLE = yes
+endif
SPACE_CADET_ENABLE = no
ifneq ($(strip $(NO_SECRETS)), yes)
@@ -58,4 +60,4 @@ endif
# this should be handled per keyboard, but until that happens ...
ifeq ($(strip $(PROTOCOL)), VUSB)
NKRO_ENABLE = no
-endif \ No newline at end of file
+endif
diff --git a/users/hvp/hvp.h b/users/hvp/hvp.h
index 2b2210f873..99da258aaf 100644
--- a/users/hvp/hvp.h
+++ b/users/hvp/hvp.h
@@ -4,3 +4,9 @@
# include "tap_dances.h"
#endif
#include "quantum.h"
+
+#define TAPPING_TERM 150
+
+// Keys
+
+#define D_NAVI MT(MOD_LCTL | MOD_LSFT, KC_D) \ No newline at end of file
diff --git a/users/hvp/tap_dances.c b/users/hvp/tap_dances.c
index bb102b30ab..1269d5f272 100644
--- a/users/hvp/tap_dances.c
+++ b/users/hvp/tap_dances.c
@@ -6,10 +6,7 @@ void dance_1_finished(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
tap_code(KC_SCLN);
} else {
- register_code(KC_RALT);
- register_code(KC_O);
- unregister_code(KC_RALT);
- unregister_code(KC_O);
+ tap_code16(ALGR(KC_A));
}
}
@@ -17,8 +14,7 @@ void dance_1_reset(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
unregister_code(KC_SCLN);
} else {
- unregister_code(KC_RALT);
- unregister_code(KC_O);
+ unregister_code16(ALGR(KC_A));
}
}
@@ -27,10 +23,7 @@ void dance_2_finished(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
tap_code(KC_QUOT);
} else {
- register_code(KC_RALT);
- register_code(KC_A);
- unregister_code(KC_RALT);
- unregister_code(KC_A);
+ tap_code16(ALGR(KC_W));
}
}
@@ -38,8 +31,7 @@ void dance_2_reset(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
unregister_code(KC_QUOT);
} else {
- unregister_code(KC_RALT);
- unregister_code(KC_A);
+ unregister_code16(ALGR(KC_W));
}
}
@@ -49,10 +41,7 @@ void dance_3_finished(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
tap_code(KC_SLSH);
} else {
- register_code(KC_RALT);
- register_code(KC_W);
- unregister_code(KC_RALT);
- unregister_code(KC_W);
+ tap_code16(ALGR(KC_O));
}
}
@@ -60,8 +49,43 @@ void dance_3_reset(qk_tap_dance_state_t *state, void *user_data) {
if (state->count == 2) {
unregister_code(KC_SLSH);
} else {
- unregister_code(KC_RALT);
- unregister_code(KC_W);
+ unregister_code16(ALGR(KC_O));
+ }
+}
+
+// Tap dance 4
+void dance_4_finished(qk_tap_dance_state_t *state, void *user_data) {
+ // if (state->count == 2)
+ if (state->count == 2) {
+ tap_code(KC_DOT);
+ } else {
+ tap_code16(ALGR(KC_W));
+ }
+}
+
+void dance_4_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 2) {
+ unregister_code(KC_DOT);
+ } else {
+ unregister_code16(ALGR(KC_W));
+ }
+}
+
+// Tap dance 5
+void dance_5_finished(qk_tap_dance_state_t *state, void *user_data) {
+ // if (state->count == 2)
+ if (state->count == 2) {
+ tap_code(KC_DOT);
+ } else {
+ tap_code16(ALGR(KC_O));
+ }
+}
+
+void dance_5_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 2) {
+ unregister_code(KC_DOT);
+ } else {
+ unregister_code16(ALGR(KC_O));
}
}
@@ -72,4 +96,8 @@ qk_tap_dance_action_t tap_dance_actions[] = {
[TD2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_2_finished, dance_2_reset),
- [TD3] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_3_finished, dance_3_reset)}; \ No newline at end of file
+ [TD3] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_3_finished, dance_3_reset),
+
+ [TD4] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_4_finished, dance_4_reset),
+
+ [TD5] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_5_finished, dance_5_reset)}; \ No newline at end of file
diff --git a/users/hvp/tap_dances.h b/users/hvp/tap_dances.h
index 705985faac..cad9bd90ec 100644
--- a/users/hvp/tap_dances.h
+++ b/users/hvp/tap_dances.h
@@ -6,5 +6,7 @@ enum tapdance_id
{
TD1 = 0,
TD2,
- TD3
+ TD3,
+ TD4,
+ TD5
};
diff --git a/users/manna-harbour_miryoku/config.h b/users/manna-harbour_miryoku/config.h
index c3c513d063..5ac3208c90 100644
--- a/users/manna-harbour_miryoku/config.h
+++ b/users/manna-harbour_miryoku/config.h
@@ -1,5 +1,4 @@
-
-// generated from users/manna-harbour_miryoku/miryoku.org
+// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
#pragma once
diff --git a/users/manna-harbour_miryoku/manna-harbour_miryoku.c b/users/manna-harbour_miryoku/manna-harbour_miryoku.c
index a50677008a..8ae38c25c8 100644
--- a/users/manna-harbour_miryoku/manna-harbour_miryoku.c
+++ b/users/manna-harbour_miryoku/manna-harbour_miryoku.c
@@ -1,12 +1,18 @@
-
-// generated from users/manna-harbour_miryoku/miryoku.org
+// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
#include QMK_KEYBOARD_H
#define KC_NP KC_NO // key is not present
#define KC_NA KC_NO // present but not available for use
#define KC_NU KC_NO // available but not used
+
+// non-KC_ keycodes
#define KC_RST RESET
+#define KC_TOG RGB_TOG
+#define KC_MOD RGB_MOD
+#define KC_HUI RGB_HUI
+#define KC_SAI RGB_SAI
+#define KC_VAI RGB_VAI
enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
@@ -30,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_BTN3, KC_BTN1, KC_BTN2, KC_NP, KC_NP
),
[MEDR] = LAYOUT_miryoku(
- KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
+ KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_TOG, KC_MOD, KC_HUI, KC_SAI, KC_VAI,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
KC_NA, KC_ALGR, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_MSTP, KC_MPLY, KC_MUTE, KC_NP, KC_NP
diff --git a/users/manna-harbour_miryoku/miryoku.org b/users/manna-harbour_miryoku/miryoku.org
index c352df8fdd..692321d01e 100644
--- a/users/manna-harbour_miryoku/miryoku.org
+++ b/users/manna-harbour_miryoku/miryoku.org
@@ -134,11 +134,12 @@ the home position. Unused keys are available for other related functions.
*** Media (MEDR)
Tertiary RH layer is media control, with volume up / down and next / prev
-mirroring the navigation keys. Pause, stop and mute are on thumbs. Unused keys
-are available for other related functions.
+mirroring the navigation keys. Pause, stop and mute are on thumbs. RGB control
+is on the top row (combine with shift to invert). Unused keys are available for
+other related functions.
#+NAME: medr
-| | | | | |
+| TOG | MOD | HUI | SAI | VAI |
| | MPRV | VOLD | VOLU | MNXT |
| | | | | |
| MSTP | MPLY | MUTE | NP | NP |
@@ -383,7 +384,7 @@ Header for tangled src files.
#+NAME: header
#+BEGIN_SRC C :tangle no
-generated from users/manna-harbour_miryoku/miryoku.org
+generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
#+END_SRC
@@ -404,8 +405,7 @@ bottom row unused and the rest of the bottom row are the thumb keys.
Contains the keymap. Included from keymap.c
[[./manna-harbour_miryoku.c][users/manna-harbour_miryoku/manna-harbour_miryoku.c]]
-#+BEGIN_SRC C :noweb yes :tangle manna-harbour_miryoku.c
-
+#+BEGIN_SRC C :noweb yes :padline no :tangle manna-harbour_miryoku.c
// <<header>>
#include QMK_KEYBOARD_H
@@ -413,7 +413,14 @@ Contains the keymap. Included from keymap.c
#define KC_NP KC_NO // key is not present
#define KC_NA KC_NO // present but not available for use
#define KC_NU KC_NO // available but not used
+
+// non-KC_ keycodes
#define KC_RST RESET
+#define KC_TOG RGB_TOG
+#define KC_MOD RGB_MOD
+#define KC_HUI RGB_HUI
+#define KC_SAI RGB_SAI
+#define KC_VAI RGB_VAI
<<table-enums()>>
@@ -434,8 +441,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
Config options. Automatically included.
[[./config.h][users/manna-harbour_miryoku/config.h]]
-#+BEGIN_SRC C :noweb yes :tangle config.h
-
+#+BEGIN_SRC C :noweb yes :padline no :tangle config.h
// <<header>>
#pragma once
@@ -457,12 +463,12 @@ Config options. Automatically included.
Build options. Automatically included.
[[./rules.mk][users/manna-harbour_miryoku/rules.mk]]
-#+BEGIN_SRC makefile :noweb yes :tangle rules.mk
-
+#+BEGIN_SRC makefile :noweb yes :padline no :tangle rules.mk
# <<header>>
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+EXTRAFLAGS += -flto # Link Time Optimization to reduce code size, 31358->28034/28672
#+END_SRC
@@ -481,8 +487,7 @@ thumb key is the innermost key of the partial bottom row. The remaining keys
are unused.
[[../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c][layouts/community/ergodox/manna-harbour_miryoku/keymap.c]]
-#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c
-
+#+BEGIN_SRC C :noweb yes :padline no :tangle ../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c
// <<header>>
#define LAYOUT_miryoku(\
@@ -524,8 +529,7 @@ provide some column stagger on ortho keyboards. The bottom row left 3 columns
are the thumb keys. The remaining keys are unused.
[[../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c][layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c]]
-#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
-
+#+BEGIN_SRC C :noweb yes :padline no :tangle ../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
// <<header>>
#define LAYOUT_miryoku(\
@@ -561,14 +565,14 @@ To use the keymap on a keyboard which does not support the layouts feature,
LAYOUT_miryoku is defined as a macro mapping onto the keyboard's own LAYOUT
macro, leaving the unused keys as KC_NO. The userspace keymap is then included.
-
*** crkbd
The outer columns are unused.
-[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c][keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c]]
-#+BEGIN_SRC C :noweb yes :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
+**** keymap.c
+[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c][keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c]]
+#+BEGIN_SRC C :noweb yes :padline no :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
// <<header>>
#define LAYOUT_miryoku( \
@@ -586,12 +590,92 @@ KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_
#include "manna-harbour_miryoku.c"
+
+#ifdef SSD1306OLED
+
+#include "ssd1306.h"
+
+void matrix_init_user(void) {
+ iota_gfx_init(!has_usb()); // turns on the display
+}
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_logo(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+ 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
+
#+END_SRC
+
+**** config.h
+
+[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h][keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h]]
+#+BEGIN_SRC C :noweb yes :padline no :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h
+// <<header>>
+
+#pragma once
+
+#define EE_HANDS
+
+#ifdef RGB_MATRIX_ENABLE
+#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+#define RGB_MATRIX_HUE_STEP 8
+#define RGB_MATRIX_SAT_STEP 8
+#define RGB_MATRIX_VAL_STEP 8
+#define RGB_MATRIX_SPD_STEP 10
+#endif
+
+#define SSD1306OLED // old oled driver
+
+#+END_SRC
+
+
+**** rules.mk
+
+[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk][keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk]]
+#+BEGIN_SRC C :noweb yes :padline no :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk
+# <<header>>
+
+RGB_MATRIX_ENABLE = WS2812
+
+# old oled driver
+SRC += ./lib/glcdfont.c \
+ ./lib/logo_reader.c
+
+#+END_SRC
+
+
To build for this keyboard,
#+BEGIN_SRC sh :tangle no
-cd ../.. && make crkbd:manna-harbour_miryoku:avrdude
+cd ../.. && make crkbd:manna-harbour_miryoku:flash
#+END_SRC
diff --git a/users/manna-harbour_miryoku/rules.mk b/users/manna-harbour_miryoku/rules.mk
index baff1431f0..a54616b47a 100644
--- a/users/manna-harbour_miryoku/rules.mk
+++ b/users/manna-harbour_miryoku/rules.mk
@@ -1,5 +1,5 @@
-
-# generated from users/manna-harbour_miryoku/miryoku.org
+# generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+LTO_ENABLE = yes
diff --git a/users/mverteuil/.gitignore b/users/mverteuil/.gitignore
new file mode 100644
index 0000000000..785f649dc6
--- /dev/null
+++ b/users/mverteuil/.gitignore
@@ -0,0 +1 @@
+copyright.h
diff --git a/layouts/community/ergodox/drashna_glow/keymap.c b/users/mverteuil/mverteuil.c
index 7d4bdbec50..a3afc417fa 100644
--- a/layouts/community/ergodox/drashna_glow/keymap.c
+++ b/users/mverteuil/mverteuil.c
@@ -1,2 +1,2 @@
-/* placeholder file */
#include QMK_KEYBOARD_H
+#include "mverteuil.h"
diff --git a/users/mverteuil/mverteuil.h b/users/mverteuil/mverteuil.h
new file mode 100644
index 0000000000..1119b75adf
--- /dev/null
+++ b/users/mverteuil/mverteuil.h
@@ -0,0 +1,21 @@
+#if AUDIO_ENABLE
+# if __has_include("copyright.h")
+# include "copyright.h"
+# endif
+
+# define LOWER_SOUND S__NOTE(_EF5), W__NOTE(_REST), Q__NOTE(_E4)
+# define NUMPAD_SOUND S__NOTE(_DF5), S__NOTE(_REST), S__NOTE(_C6)
+# define RAISE_SOUND S__NOTE(_E4), W__NOTE(_REST), Q__NOTE(_EF5)
+
+# define AUDIO_ON_SONG SONG(ZELDA_PUZZLE)
+# define LAYER_FUNCROW_ON_SONG SONG(COLEMAK_SOUND)
+# define LAYER_FUNCROW_OFF_SONG SONG(QWERTY_SOUND)
+# define LAYER_NMPAD_SONG SONG(NUMPAD_SOUND)
+# define LAYER_LOWER_SONG SONG(LOWER_SOUND)
+# define LAYER_RAISE_SONG SONG(RAISE_SOUND)
+#else
+// No-op version of PLAY_SONG instead of many checks for AUDIO_ENABLED
+# ifndef PLAY_SONG
+# define PLAY_SONG(ARG) // ARG
+# endif
+#endif
diff --git a/users/mverteuil/rules.mk b/users/mverteuil/rules.mk
new file mode 100644
index 0000000000..bfc4b1ed14
--- /dev/null
+++ b/users/mverteuil/rules.mk
@@ -0,0 +1 @@
+SRC += mverteuil.c
diff --git a/users/rossman360/readme.md b/users/rossman360/readme.md
new file mode 100644
index 0000000000..ebb17d16cf
--- /dev/null
+++ b/users/rossman360/readme.md
@@ -0,0 +1,14 @@
+Copyright 2020 Ross Montsinger rmontsinger@gmail.com @Rossman360
+
+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/>. \ No newline at end of file
diff --git a/users/rossman360/rossman360.c b/users/rossman360/rossman360.c
new file mode 100644
index 0000000000..a1c4ad8f9f
--- /dev/null
+++ b/users/rossman360/rossman360.c
@@ -0,0 +1,80 @@
+#include "rossman360.h"
+
+void my_custom_function(void) {
+
+}
+
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+switch (keycode) {
+ case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
+ if (!record->event.pressed) {
+ uint8_t temp_mod = get_mods();
+ uint8_t temp_osm = get_oneshot_mods();
+ clear_mods(); clear_oneshot_mods();
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
+ #ifndef FLASH_BOOTLOADER
+ if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
+ #endif
+ {
+ SEND_STRING(":flash");
+ }
+ if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
+ SEND_STRING(" -j8 --output-sync");
+ }
+ tap_code(KC_ENT);
+ set_mods(temp_mod);
+ }
+ break;
+ case CSPEAK:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
+ }
+ break;
+ case SPEAK1:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_1)));
+ }
+ break;
+ case SPEAK2:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_2)));
+ }
+ break;
+ case SPEAK3:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_3)));
+ }
+ break;
+ case SPEAK4:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_4)));
+ }
+ break;
+ case PARADOWN:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
+ }
+ break;
+ case PMERGE:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_HOME) SS_TAP(X_BSPACE) SS_TAP(X_SPACE) SS_LCTRL(SS_TAP(X_BSPACE)) SS_TAP(X_SPACE));
+ }
+ break;
+ case WREFRESH:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_SPACE) SS_TAP(X_BSPACE));
+ }
+ break;
+ case REMCAPS:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_LCTRL(SS_TAP(X_LEFT)) SS_TAP(X_DELETE));
+ }
+ break;
+};
+return true;
+};
diff --git a/users/rossman360/rossman360.h b/users/rossman360/rossman360.h
new file mode 100644
index 0000000000..9d6ee5981b
--- /dev/null
+++ b/users/rossman360/rossman360.h
@@ -0,0 +1,28 @@
+#pragma once
+#include "quantum.h"
+
+#define BWORD LCTL(KC_BSPC)
+#define LWORD LCTL(KC_LEFT)
+#define RWORD LCTL(KC_RIGHT)
+#define JUMPBACK LSFT(KC_TAB)
+#define UNDO LCTL(KC_Z)
+#define XPANDR LCTL(LSFT(KC_X))
+#define NTAB LCTL(KC_T)
+#define CTAB LCTL(KC_W)
+#define XPANDR LCTL(LSFT(KC_X))
+#define CMDBSP MT(MOD_LGUI, KC_BSPC)
+#define ALTDEL MT(MOD_LALT, KC_DEL)
+
+// Define all of
+enum custom_keycodes {
+ KC_MAKE = SAFE_RANGE,
+ CSPEAK,
+ SPEAK1,
+ SPEAK2,
+ SPEAK3,
+ SPEAK4,
+ PARADOWN,
+ WREFRESH,
+ PMERGE,
+ REMCAPS,
+};
diff --git a/users/rossman360/rules.mk b/users/rossman360/rules.mk
new file mode 100644
index 0000000000..8aaa74316f
--- /dev/null
+++ b/users/rossman360/rules.mk
@@ -0,0 +1,5 @@
+SRC += rossman360.c
+
+ifeq ($(strip $(MACROS_ENABLED)), yes)
+ OPT_DEFS += -DMACROS_ENABLED
+endif \ No newline at end of file
diff --git a/users/stanrc85/stanrc85.c b/users/stanrc85/stanrc85.c
index e3da6d6466..6ea0e33bc1 100644
--- a/users/stanrc85/stanrc85.c
+++ b/users/stanrc85/stanrc85.c
@@ -56,26 +56,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!record->event.pressed) {
uint8_t mods = get_mods();
clear_mods();
- send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
+ send_string_with_delay_P(PSTR("qmk compile -kb " QMK_KEYBOARD " -km " QMK_KEYMAP "\n"), 10); //New way
if (mods & MOD_MASK_SHIFT) {
- //RESET board for flashing if SHIFT held or tapped with KC_MAKE
- #if defined(__arm__)
- send_string_with_delay_P(PSTR(":dfu-util"), 10);
- #elif defined(BOOTLOADER_DFU)
- send_string_with_delay_P(PSTR(":dfu"), 10);
- #elif defined(BOOTLOADER_HALFKAY)
- send_string_with_delay_P(PSTR(":teensy"), 10);
- #elif defined(BOOTLOADER_CATERINA)
- send_string_with_delay_P(PSTR(":avrdude"), 10);
- #endif // bootloader options
- send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
+ send_string(SS_LGUI());
+ send_string("qmk toolbox\n");
reset_keyboard();
}
- if (mods & MOD_MASK_CTRL) {
- send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10);
- }
- send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
- set_mods(mods);
+ set_mods(mods);
}
break;
case KC_RDP: //Opens Windows RDP
diff --git a/users/twschum/config.h b/users/twschum/config.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/users/twschum/config.h
diff --git a/users/twschum/readme.md b/users/twschum/readme.md
new file mode 100644
index 0000000000..b354e4b79c
--- /dev/null
+++ b/users/twschum/readme.md
@@ -0,0 +1,14 @@
+Copyright 2019 Tim Schumacher <twschum@gmail.com> @twschum
+
+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/>.
diff --git a/users/twschum/rules.mk b/users/twschum/rules.mk
new file mode 100644
index 0000000000..9878e6f690
--- /dev/null
+++ b/users/twschum/rules.mk
@@ -0,0 +1,5 @@
+SRC += twschum.c
+SRC += xtonhasvim.c
+ifeq ($(strip $(FLASH_BOOTLOADER)), yes)
+ OPT_DEFS += -DFLASH_BOOTLOADER
+endif
diff --git a/users/twschum/twschum.c b/users/twschum/twschum.c
new file mode 100644
index 0000000000..2d34f95718
--- /dev/null
+++ b/users/twschum/twschum.c
@@ -0,0 +1,257 @@
+#include "twschum.h"
+
+#ifdef TWSCHUM_TAPPING_CTRL_PREFIX
+// state for the great state machine of custom actions!
+#define TIMEOUT_DELAY 200 // ms
+static uint16_t idle_timer;
+static bool timeout_is_active = false;
+
+static bool ctrl_shortcuts_enabled_g = false;
+//static bool B_down = 0; // TODO just use top bit from count
+//static int8_t B_count = 0;
+
+#define N_TAPPING_CTRL_KEYS 2
+static struct Tapping_ctrl_key_t special_keys_g[N_TAPPING_CTRL_KEYS] = {
+ {false, 0, KC_B}, {false, 0, KC_A}
+};
+
+static inline void start_idle_timer(void) {
+ idle_timer = timer_read();
+ timeout_is_active = true;
+}
+static inline void clear_state_after_idle_timeout(void) {
+ idle_timer = 0;
+ timeout_is_active = false;
+
+ // send timed out plain keys from tapping ctrl mod
+ for (int i = 0; i < N_TAPPING_CTRL_KEYS; ++i) {
+ struct Tapping_ctrl_key_t* key = special_keys_g + i;
+ repeat_send_keys(key->count, key->keycode);
+ key->count = 0;
+ }
+}
+
+inline void matrix_scan_user(void) {
+ if (timeout_is_active && timer_elapsed(idle_timer) > TIMEOUT_DELAY) {
+ clear_state_after_idle_timeout();
+ }
+}
+
+static inline bool tap_ctrl_event(struct Tapping_ctrl_key_t* key, keyrecord_t* record) {
+ if (!ctrl_shortcuts_enabled_g) {
+ // normal operation, just send the plain keycode
+ if (record->event.pressed) {
+ register_code(key->keycode);
+ }
+ else {
+ unregister_code(key->keycode);
+ }
+ return false;
+ }
+ key->down = record->event.pressed;
+ // increment count and reset timer when key pressed
+ // start the timeout when released
+ if (key->down) {
+ ++(key->count);
+ timeout_is_active = false;
+ idle_timer = 0;
+ }
+ else {
+ if (key->count) {
+ start_idle_timer();
+ }
+ }
+ return false;
+}
+
+static inline bool tap_ctrl_other_pressed(void) {
+ for (int i = 0; i < N_TAPPING_CTRL_KEYS; ++i) {
+ struct Tapping_ctrl_key_t* key = special_keys_g + i;
+ if (key->count) {
+ if (key->down) {
+ // another key has been pressed while the leader key is down,
+ // so send number of ctrl-KEY combos before the other key
+ repeat_send_keys(key->count, KC_LCTL, key->keycode);
+ key->count = 0;
+ }
+ else {
+ // another key pressed after leader key released,
+ // need to send the plain keycode plus potential mods
+ if (get_mods() & MOD_MASK_CTRL) {
+ // make sure to send a shift if prssed
+ repeat_send_keys(key->count, KC_RSHIFT, key->keycode);
+ }
+ else {
+ repeat_send_keys(key->count, key->keycode);
+ }
+ key->count = 0;
+ }
+ return true; // will send the other keycode
+ }
+ }
+ return true; // safe default
+}
+#endif /* TWSCHUM_TAPPING_CTRL_PREFIX */
+
+
+/* Use RGB underglow to indicate layer
+ * https://docs.qmk.fm/reference/customizing-functionality
+ */
+// add to quantum/rgblight_list.h
+#ifdef RGBLIGHT_ENABLE
+static bool rgb_layers_enabled = true;
+static bool rgb_L0_enabled = false;
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ if (!rgb_layers_enabled) {
+ return state;
+ }
+ switch (get_highest_layer(state)) {
+ case _Base:
+ if (rgb_L0_enabled) {
+ rgblight_sethsv_noeeprom(_Base_HSV_ON);
+ }
+ else {
+ rgblight_sethsv_noeeprom(_Base_HSV_OFF);
+ }
+ break;
+ case _Vim:
+ rgblight_sethsv_noeeprom(_Vim_HSV);
+ break;
+ case _Fn:
+ rgblight_sethsv_noeeprom(_Fn_HSV);
+ break;
+ case _Nav:
+ rgblight_sethsv_noeeprom(_Nav_HSV);
+ break;
+ case _Num:
+ rgblight_sethsv_noeeprom(_Num_HSV);
+ break;
+ case _Cfg:
+ rgblight_sethsv_noeeprom(_Cfg_HSV);
+ break;
+ case _None:
+ rgblight_sethsv_noeeprom(_None_HSV);
+ break;
+ }
+ return state;
+}
+#endif /* RGBLIGHT_ENABLE */
+
+/* process_record_vimlayer: handles the VIM_ keycodes from xtonhasvim's vim
+ * emulation layer
+ * add process_record_keymap to allow specific keymap to still add keys
+ * Makes the callstack look like:
+ * process_record_
+ * _quantum
+ * _kb
+ * _user
+ * _keymap
+ * _vimlayer
+ */
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+/* Return True to continue processing keycode, false to stop further processing
+ * process_record_keymap to be call by process_record_user in the vim addon */
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ /* keymap gets first whack, then vimlayer */
+ if(!process_record_keymap(keycode, record)) return false;
+ if(!process_record_vimlayer(keycode, record)) return false;
+
+ switch (keycode) {
+ /* KC_MAKE is a keycode to be used with any keymap
+ * Outputs `make <keyboard>:<keymap>`
+ * Holding shift will add the appropriate flashing command (:dfu,
+ * :teensy, :avrdude, :dfu-util) for a majority of keyboards.
+ * Holding control will add some commands that will speed up compiling
+ * time by processing multiple files at once
+ * For the boards that lack a shift key, or that you want to always
+ * attempt the flashing part, you can add FLASH_BOOTLOADER = yes to the
+ * rules.mk of that keymap.
+ */
+ case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
+ if (!record->event.pressed) {
+ uint8_t temp_mod = get_mods();
+ uint8_t temp_osm = get_oneshot_mods();
+ clear_mods(); clear_oneshot_mods();
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
+ #ifndef FLASH_BOOTLOADER
+ if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT ) {
+ SEND_STRING(":flash");
+ }
+ #endif
+ if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) {
+ SEND_STRING(" -j8 --output-sync");
+ }
+ SEND_STRING(SS_TAP(X_ENTER));
+ set_mods(temp_mod);
+ }
+ break;
+
+ #ifdef RGBLIGHT_ENABLE
+ case TG_LAYER_RGB:
+ if (record->event.pressed) {
+ rgb_layers_enabled = !rgb_layers_enabled;
+ }
+ return false;
+ case TG_L0_RGB:
+ if (record->event.pressed) {
+ rgb_L0_enabled = !rgb_L0_enabled;
+ }
+ return false;
+ #endif
+
+ case SALT_CMD:
+ if (!record->event.pressed) {
+ SEND_STRING(SALT_CMD_MACRO);
+ }
+ return false;
+ case LESS_PD:
+ if (!record->event.pressed) {
+ SEND_STRING(LESS_PD_MACRO);
+ }
+ return false;
+ case CODE_PASTE:
+ if (!record->event.pressed) {
+ SEND_STRING(CODE_PASTE_MACRO);
+ }
+ return false;
+
+ #ifdef TWSCHUM_TAPPING_CTRL_PREFIX
+ case EN_CTRL_SHORTCUTS:
+ if (record->event.pressed) {
+ ctrl_shortcuts_enabled_g = !ctrl_shortcuts_enabled_g;
+ start_idle_timer(); // need to clear out state in some cases
+ }
+ return false;
+ case CTRL_A:
+ return tap_ctrl_event(&special_keys_g[1], record);
+ case CTRL_B:
+ return tap_ctrl_event(&special_keys_g[0], record);
+ default:
+ if (record->event.pressed) {
+ return tap_ctrl_other_pressed();
+ }
+ #endif
+ }
+ return true;
+}
+
+#ifdef RGBLIGHT_ENABLE
+void matrix_init_user(void) {
+ // called once on board init
+ rgblight_enable();
+}
+#endif
+
+void suspend_power_down_user(void) {
+ // TODO shut off backlighting
+}
+
+void suspend_wakeup_init_user(void) {
+ // TODO turn on backlighting
+}
diff --git a/users/twschum/twschum.h b/users/twschum/twschum.h
new file mode 100644
index 0000000000..e8c9aeffcd
--- /dev/null
+++ b/users/twschum/twschum.h
@@ -0,0 +1,131 @@
+#pragma once
+#include <stdarg.h>
+#include "quantum.h"
+#include "xtonhasvim.h"
+
+/**************************
+ * QMK Features Used
+ **************************
+ * RGBLIGHT_ENABLE
+ * - Adds layer indication via RGB underglow
+ * - see the `layer_definitions` enum and following _*_HSV #defines
+ *
+ *
+ *
+ **************************
+ * Custom Feature Flags
+ **************************
+ *
+ * TWSCHUM_TAPPING_CTRL_PREFIX
+ * - Adds feature that makes sending nested sequences of C-a, C-b[, C-b, ...]
+ * as simple as C-a b [b ...]
+ * - Not necessarily super useful outside specialized nested tmux sessions,
+ * but it was a fun state-machine to build
+ *
+ * TWSCHUM_VIM_LAYER
+ * - Fork of xtonhasvim, adding vim-emulation
+ *
+ * TWSCHUM_IS_MAC
+ * - Flag for handling media keys and other settings between OSX and Win/Unix
+ * without having to include bootmagic
+ *
+ **************************
+ * Features Wishlist
+ **************************
+ * use VIM_Q as macro recorder!
+ * Dynamic macros
+ * Leader functions
+ * Uniicode leader commands??? (symbolic unicode)
+ * Mac mode vs not: -probably bootmagic or use default with dynamic swap out here
+ * KC_MFFD(KC_MEDIA_FAST_FORWARD) and KC_MRWD(KC_MEDIA_REWIND) instead of KC_MNXT and KC_MPRV
+ */
+
+/* Each layer gets a color, overwritable per keyboard */
+enum layers_definitions {
+ _Base,
+ _Vim,
+ _Fn,
+ _Nav,
+ _Num,
+ _Cfg,
+ _None,
+};
+#ifdef RGBLIGHT_ENABLE
+#define _Base_HSV_ON HSV_WHITE
+#define _Base_HSV_OFF 0, 0, 0
+#define _Vim_HSV HSV_ORANGE
+#define _Fn_HSV HSV_GREEN
+#define _Nav_HSV HSV_AZURE
+#define _Num_HSV HSV_GOLD
+#define _Cfg_HSV HSV_RED
+#define _None_HSV HSV_WHITE
+#endif
+
+enum extra_keycodes {
+ TWSCHUM_START = VIM_SAFE_RANGE,
+ KC_MAKE, // types the make command for this keyboard
+#ifdef TWSCHUM_TAPPING_CTRL_PREFIX
+ CTRL_A,
+ CTRL_B,
+ EN_CTRL_SHORTCUTS,
+#endif
+#ifdef RGBLIGHT_ENABLE
+ TG_LAYER_RGB, // Toggle between standard RGB underglow, and RGB underglow to do layer indication
+ TG_L0_RGB, // Toggle color on or off of layer0
+#endif
+ SALT_CMD, // macro
+ LESS_PD, // macro
+ CODE_PASTE, // macro
+ KEYMAP_SAFE_RANGE, // range to start for the keymap
+};
+#define SALT_CMD_MACRO "sudo salt \\* cmd.run ''"SS_TAP(X_LEFT)
+#define LESS_PD_MACRO "sudo less /pipedream/cache/"
+// TODO mac vs linux
+#define CODE_PASTE_MACRO SS_LSFT("\n")"```"SS_LSFT("\n")SS_LALT("v")SS_LSFT("\n")"```"
+
+
+/* PP_NARG macro returns the number of arguments passed to it.
+ * https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s
+ */
+#define PP_NARG(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N())
+#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__)
+#define PP_MAX_ARGS 64
+#define PP_ARG_N( \
+ _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,N,...) N
+#define PP_RSEQ_N() 63,62,61,60, \
+ 59,58,57,56,55,54,53,52,51,50, \
+ 49,48,47,46,45,44,43,42,41,40, \
+ 39,38,37,36,35,34,33,32,31,30, \
+ 29,28,27,26,25,24,23,22,21,20, \
+ 19,18,17,16,15,14,13,12,11,10, \
+ 9,8,7,6,5,4,3,2,1,0
+
+#define send_keys(...) send_n_keys(PP_NARG(__VA_ARGS__), __VA_ARGS__)
+static inline void send_n_keys(int n, ...) {
+ uint8_t i = 0;
+ uint16_t keycodes[PP_MAX_ARGS];
+ va_list keys;
+ va_start(keys, n);
+ for (; i < n; ++i) {
+ keycodes[i] = (uint16_t)va_arg(keys, int); // cast suppresses warning
+ register_code(keycodes[i]);
+ }
+ for (; n > 0; --n) {
+ unregister_code(keycodes[n-1]);
+ }
+ va_end(keys);
+}
+#define repeat_send_keys(n, ...) {for (int i=0; i < n; ++i) {send_keys(__VA_ARGS__);}}
+
+/* State functions for nested c-a & c-b leader keystrokes */
+struct Tapping_ctrl_key_t {
+ bool down;
+ int8_t count;
+ const uint16_t keycode;
+};
diff --git a/users/twschum/xtonhasvim.c b/users/twschum/xtonhasvim.c
new file mode 100644
index 0000000000..a1adf39f04
--- /dev/null
+++ b/users/twschum/xtonhasvim.c
@@ -0,0 +1,593 @@
+ /* Copyright 2015-2017 Christon DeWan *
+ * 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 "xtonhasvim.h"
+
+
+uint16_t vstate = VIM_START;
+static bool yank_was_lines = false;
+static bool SHIFTED = false;
+static uint32_t mod_override_layer_state = 0;
+static uint16_t mod_override_triggering_key = 0;
+
+static void edit(void) { vstate = VIM_START; layer_clear(); }
+#define EDIT edit()
+
+
+static void simple_movement(uint16_t keycode) {
+ switch(keycode) {
+ case VIM_B:
+ register_code(KC_LALT);
+ tap_code16(LSFT(KC_LEFT)); // select to start of this word
+ unregister_code(KC_LALT);
+ break;
+ case VIM_E:
+ register_code(KC_LALT);
+ tap_code16(LSFT(KC_RIGHT)); // select to end of this word
+ unregister_code(KC_LALT);
+ break;
+ case VIM_H:
+ tap_code16(LSFT(KC_LEFT));
+ break;
+ case VIM_J:
+ tap_code16(LGUI(KC_LEFT));
+ tap_code16(LSFT(KC_DOWN));
+ tap_code16(LSFT(KC_DOWN));
+ break;
+ case VIM_K:
+ tap_code16(LGUI(KC_LEFT));
+ tap_code(KC_DOWN);
+ tap_code16(LSFT(KC_UP));
+ tap_code16(LSFT(KC_UP));
+ break;
+ case VIM_L:
+ tap_code16(LSFT(KC_RIGHT));
+ break;
+ case VIM_W:
+ register_code(KC_LALT);
+ tap_code16(LSFT(KC_RIGHT)); // select to end of this word
+ tap_code16(LSFT(KC_RIGHT)); // select to end of next word
+ tap_code16(LSFT(KC_LEFT)); // select to start of next word
+ unregister_code(KC_LALT);
+ break;
+ }
+}
+
+static void comma_period(uint16_t keycode) {
+ switch (keycode) {
+ case VIM_COMMA:
+ if (SHIFTED) {
+ // indent
+ tap_code16(LGUI(KC_LBRACKET));
+ } else {
+ // toggle comment
+ tap_code16(LGUI(KC_SLASH));
+ }
+ break;
+ case VIM_PERIOD:
+ if (SHIFTED) {
+ // outdent
+ tap_code16(LGUI(KC_RBRACKET));
+ }
+ break;
+ }
+}
+
+
+bool process_record_vimlayer(uint16_t keycode, keyrecord_t *record) {
+
+ /****** mod passthru *****/
+ if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MOD(keycode) || keycode == LSFT(KC_LALT))) {
+ mod_override_layer_state = layer_state;
+ mod_override_triggering_key = keycode;
+ // TODO: change this to track key location instead
+ layer_clear();
+ return true; // let the event fall through...
+ }
+ if(mod_override_layer_state && !record->event.pressed && keycode == mod_override_triggering_key) {
+ layer_state_set(mod_override_layer_state);
+ mod_override_layer_state = 0;
+ mod_override_triggering_key = 0;
+ return true;
+ }
+
+ if (VIM_START <= keycode && keycode <= VIM_ESC) {
+ if(keycode == VIM_SHIFT) {
+ SHIFTED = record->event.pressed;
+ return false;
+ }
+
+ if (record->event.pressed) {
+ if(keycode == VIM_START) {
+ // entry from anywhere
+ layer_on(vim_cmd_layer());
+ vstate = VIM_START;
+
+ // reset state
+ yank_was_lines = false;
+ SHIFTED = false;
+ mod_override_layer_state = 0;
+ mod_override_triggering_key = 0;
+
+ return false;
+ }
+ switch(vstate) {
+ case VIM_START:
+ switch(keycode){
+ /*****************************
+ * ground state
+ *****************************/
+ case VIM_A:
+ if(SHIFTED) {
+ // tap_code16(LGUI(KC_RIGHT));
+ tap_code16(LCTL(KC_E));
+ } else {
+ tap_code(KC_RIGHT);
+ }
+ EDIT;
+ break;
+ case VIM_B:
+ register_code(KC_LALT);
+ register_code(KC_LEFT);
+ break;
+ case VIM_C:
+ if(SHIFTED) {
+ register_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_RIGHT));
+ unregister_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ EDIT;
+ } else {
+ vstate = VIM_C;
+ }
+ break;
+ case VIM_D:
+ if(SHIFTED) {
+ tap_code16(LCTL(KC_K));
+ } else {
+ vstate = VIM_D;
+ }
+ break;
+ case VIM_E:
+ register_code(KC_LALT);
+ register_code(KC_RIGHT);
+ break;
+ case VIM_G:
+ if(SHIFTED) {
+ tap_code(KC_END);
+ } else {
+ vstate = VIM_G;
+ }
+ break;
+ case VIM_H:
+ register_code(KC_LEFT);
+ break;
+ case VIM_I:
+ if(SHIFTED){
+ tap_code16(LCTL(KC_A));
+ }
+ EDIT;
+ break;
+ case VIM_J:
+ if(SHIFTED) {
+ tap_code16(LGUI(KC_RIGHT));
+ tap_code(KC_DEL);
+ } else {
+ register_code(KC_DOWN);
+ }
+ break;
+ case VIM_K:
+ register_code(KC_UP);
+ break;
+ case VIM_L:
+ register_code(KC_RIGHT);
+ break;
+ case VIM_O:
+ if(SHIFTED) {
+ tap_code16(LGUI(KC_LEFT));
+ tap_code(KC_ENTER);
+ tap_code(KC_UP);
+ EDIT;
+ } else {
+ tap_code16(LGUI(KC_RIGHT));
+ tap_code(KC_ENTER);
+ EDIT;
+ }
+ break;
+ case VIM_P:
+ if(SHIFTED) {
+ tap_code16(LGUI(KC_LEFT));
+ tap_code16(LGUI(KC_V));
+ } else {
+ if(yank_was_lines) {
+ tap_code16(LGUI(KC_RIGHT));
+ tap_code(KC_RIGHT);
+ tap_code16(LGUI(KC_V));
+ } else {
+ tap_code16(LGUI(KC_V));
+ }
+ }
+ break;
+ case VIM_S:
+ // s for substitute?
+ if(SHIFTED) {
+ tap_code16(LGUI(KC_LEFT));
+ register_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_RIGHT));
+ unregister_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ EDIT;
+ } else {
+ tap_code16(LSFT(KC_RIGHT));
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ EDIT;
+ }
+ break;
+ case VIM_U:
+ if(SHIFTED) {
+ register_code(KC_LSFT);
+ tap_code16(LGUI(KC_Z));
+ unregister_code(KC_LSHIFT);
+ } else {
+ tap_code16(LGUI(KC_Z));
+ }
+ break;
+ case VIM_V:
+ if(SHIFTED) {
+ tap_code16(LGUI(KC_LEFT));
+ tap_code16(LSFT(KC_DOWN));
+ vstate = VIM_VS;
+ } else {
+ vstate = VIM_V;
+ }
+ break;
+ case VIM_W:
+ register_code(KC_LALT);
+ tap_code(KC_RIGHT);
+ tap_code(KC_RIGHT);
+ tap_code(KC_LEFT);
+ unregister_code(KC_LALT);
+ break;
+ case VIM_X:
+ // tap_code16(LSFT(KC_RIGHT));
+ // tap_code16(LGUI(KC_X));
+ register_code(KC_DEL);
+ break;
+ case VIM_Y:
+ if(SHIFTED) {
+ tap_code16(LGUI(KC_LEFT));
+ tap_code16(LSFT(KC_DOWN));
+ tap_code16(LGUI(KC_C));
+ tap_code(KC_RIGHT);
+ yank_was_lines = true;
+ } else {
+ vstate = VIM_Y;
+ }
+ break;
+ case VIM_COMMA:
+ case VIM_PERIOD:
+ comma_period(keycode);
+ break;
+ }
+ break;
+ case VIM_C:
+ /*****************************
+ * c- ...for change. I never use this...
+ *****************************/
+ switch(keycode) {
+ case VIM_B:
+ case VIM_E:
+ case VIM_H:
+ case VIM_J:
+ case VIM_K:
+ case VIM_L:
+ case VIM_W:
+ simple_movement(keycode);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ EDIT;
+ break;
+
+ case VIM_C:
+ tap_code16(LGUI(KC_LEFT));
+ register_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_RIGHT));
+ unregister_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ EDIT;
+ break;
+ case VIM_I:
+ vstate = VIM_CI;
+ break;
+ default:
+ vstate = VIM_START;
+ break;
+ }
+ break;
+ case VIM_CI:
+ /*****************************
+ * ci- ...change inner word
+ *****************************/
+ switch(keycode) {
+ case VIM_W:
+ tap_code16(LALT(KC_LEFT));
+ register_code(KC_LSHIFT);
+ tap_code16(LALT(KC_RIGHT));
+ unregister_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ EDIT;
+ default:
+ vstate = VIM_START;
+ break;
+ }
+ break;
+ case VIM_D:
+ /*****************************
+ * d- ...delete stuff
+ *****************************/
+ switch(keycode) {
+ case VIM_B:
+ case VIM_E:
+ case VIM_H:
+ case VIM_J:
+ case VIM_K:
+ case VIM_L:
+ case VIM_W:
+ simple_movement(keycode);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ vstate = VIM_START;
+ break;
+ case VIM_D:
+ tap_code16(LGUI(KC_LEFT));
+ tap_code16(LSFT(KC_DOWN));
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = true;
+ vstate = VIM_START;
+ break;
+ case VIM_I:
+ vstate = VIM_DI;
+ break;
+ default:
+ vstate = VIM_START;
+ break;
+ }
+ break;
+ case VIM_DI:
+ /*****************************
+ * ci- ...delete a word... FROM THE INSIDE!
+ *****************************/
+ switch(keycode) {
+ case VIM_W:
+ tap_code16(LALT(KC_LEFT));
+ register_code(KC_LSHIFT);
+ tap_code16(LALT(KC_RIGHT));
+ unregister_code(KC_LSHIFT);
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ vstate = VIM_START;
+ default:
+ vstate = VIM_START;
+ break;
+ }
+ break;
+ case VIM_V:
+ /*****************************
+ * visual!
+ *****************************/
+ switch(keycode) {
+ case VIM_D:
+ case VIM_X:
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = false;
+ vstate = VIM_START;
+ break;
+ case VIM_B:
+ register_code(KC_LALT);
+ register_code(KC_LSHIFT);
+ register_code(KC_LEFT);
+ // leave open for key repeat
+ break;
+ case VIM_E:
+ register_code(KC_LALT);
+ register_code(KC_LSHIFT);
+ register_code(KC_RIGHT);
+ // leave open for key repeat
+ break;
+ case VIM_H:
+ register_code(KC_LSHIFT);
+ register_code(KC_LEFT);
+ break;
+ case VIM_I:
+ vstate = VIM_VI;
+ break;
+ case VIM_J:
+ register_code(KC_LSHIFT);
+ register_code(KC_DOWN);
+ break;
+ case VIM_K:
+ register_code(KC_LSHIFT);
+ register_code(KC_UP);
+ break;
+ case VIM_L:
+ register_code(KC_LSHIFT);
+ register_code(KC_RIGHT);
+ break;
+ case VIM_W:
+ register_code(KC_LALT);
+ tap_code16(LSFT(KC_RIGHT)); // select to end of this word
+ tap_code16(LSFT(KC_RIGHT)); // select to end of next word
+ tap_code16(LSFT(KC_LEFT)); // select to start of next word
+ unregister_code(KC_LALT);
+ break;
+ case VIM_P:
+ tap_code16(LGUI(KC_V));
+ vstate = VIM_START;
+ break;
+ case VIM_Y:
+ tap_code16(LGUI(KC_C));
+ tap_code(KC_RIGHT);
+ yank_was_lines = false;
+ vstate = VIM_START;
+ break;
+ case VIM_V:
+ case VIM_ESC:
+ tap_code(KC_RIGHT);
+ vstate = VIM_START;
+ break;
+ case VIM_COMMA:
+ case VIM_PERIOD:
+ comma_period(keycode);
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ break;
+ case VIM_VI:
+ /*****************************
+ * vi- ...select a word... FROM THE INSIDE!
+ *****************************/
+ switch(keycode) {
+ case VIM_W:
+ tap_code16(LALT(KC_LEFT));
+ register_code(KC_LSHIFT);
+ tap_code16(LALT(KC_RIGHT));
+ unregister_code(KC_LSHIFT);
+ vstate = VIM_V;
+ default:
+ // ignore
+ vstate = VIM_V;
+ break;
+ }
+ break;
+ case VIM_VS:
+ /*****************************
+ * visual line
+ *****************************/
+ switch(keycode) {
+ case VIM_D:
+ case VIM_X:
+ tap_code16(LGUI(KC_X));
+ yank_was_lines = true;
+ vstate = VIM_START;
+ break;
+ case VIM_J:
+ register_code(KC_LSHIFT);
+ register_code(KC_DOWN);
+ break;
+ case VIM_K:
+ register_code(KC_LSHIFT);
+ register_code(KC_UP);
+ break;
+ case VIM_Y:
+ tap_code16(LGUI(KC_C));
+ yank_was_lines = true;
+ tap_code(KC_RIGHT);
+ vstate = VIM_START;
+ break;
+ case VIM_P:
+ tap_code16(LGUI(KC_V));
+ vstate = VIM_START;
+ break;
+ case VIM_V:
+ case VIM_ESC:
+ tap_code(KC_RIGHT);
+ vstate = VIM_START;
+ break;
+ case VIM_COMMA:
+ case VIM_PERIOD:
+ comma_period(keycode);
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ break;
+ case VIM_G:
+ /*****************************
+ * gg, and a grab-bag of other macros i find useful
+ *****************************/
+ switch(keycode) {
+ case VIM_G:
+ tap_code(KC_HOME);
+ break;
+ // codes b
+ case VIM_H:
+ tap_code16(LCTL(KC_A));
+ break;
+ case VIM_J:
+ register_code(KC_PGDN);
+ break;
+ case VIM_K:
+ register_code(KC_PGUP);
+ break;
+ case VIM_L:
+ tap_code16(LCTL(KC_E));
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ vstate = VIM_START;
+ break;
+ case VIM_Y:
+ /*****************************
+ * yoink!
+ *****************************/
+ switch(keycode) {
+ case VIM_B:
+ case VIM_E:
+ case VIM_H:
+ case VIM_J:
+ case VIM_K:
+ case VIM_L:
+ case VIM_W:
+ simple_movement(keycode);
+ tap_code16(LGUI(KC_C));
+ tap_code(KC_RIGHT);
+ yank_was_lines = false;
+ break;
+ case VIM_Y:
+ tap_code16(LGUI(KC_LEFT));
+ tap_code16(LSFT(KC_DOWN));
+ tap_code16(LGUI(KC_C));
+ tap_code(KC_RIGHT);
+ yank_was_lines = true;
+ break;
+ default:
+ // NOTHING
+ break;
+ }
+ vstate = VIM_START;
+ break;
+ }
+ } else {
+ /************************
+ * key unregister_code events
+ ************************/
+ clear_keyboard();
+ }
+ return false;
+ } else {
+ return true;
+ }
+}
+
diff --git a/users/twschum/xtonhasvim.h b/users/twschum/xtonhasvim.h
new file mode 100644
index 0000000000..fd9ebd4f03
--- /dev/null
+++ b/users/twschum/xtonhasvim.h
@@ -0,0 +1,62 @@
+ /* Copyright 2015-2017 Christon DeWan
+ *
+ * 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 USERSPACE
+#define USERSPACE
+
+#include QMK_KEYBOARD_H
+
+enum xtonhasvim_keycodes {
+ VIM_START = SAFE_RANGE, // bookend for vim states
+ VIM_A,
+ VIM_B,
+ VIM_C,
+ VIM_CI,
+ VIM_D,
+ VIM_DI,
+ VIM_E,
+ VIM_H,
+ VIM_G,
+ VIM_I,
+ VIM_J,
+ VIM_K,
+ VIM_L,
+ VIM_O,
+ VIM_P,
+ VIM_S,
+ VIM_U,
+ VIM_V,
+ VIM_VS, // visual-line
+ VIM_VI,
+ VIM_W,
+ VIM_X,
+ VIM_Y,
+ VIM_PERIOD, // to support indent/outdent
+ VIM_COMMA, // and toggle comments
+ VIM_SHIFT, // avoid side-effect of supporting real shift.
+ VIM_ESC, // bookend
+ VIM_SAFE_RANGE // start other keycodes here.
+};
+
+bool process_record_vimlayer(uint16_t keycode, keyrecord_t *record);
+
+// NOTE: Define this in keymap.c to return vim layer
+extern uint8_t vim_cmd_layer(void);
+
+extern uint16_t vstate;
+
+
+#endif
diff --git a/util/activate_msys2.sh b/util/activate_msys2.sh
index 1ddffbaad7..85d645e6d0 100755
--- a/util/activate_msys2.sh
+++ b/util/activate_msys2.sh
@@ -5,6 +5,7 @@ function export_variables {
export PATH=$PATH:$util_dir
export PATH=$PATH:$util_dir/dfu-programmer
export PATH=$PATH:$util_dir/dfu-util-0.9-win64
+ export PATH=$PATH:$util_dir/bootloadHID.2012-12-08/commandline
export PATH=$PATH:$util_dir/flip/bin
export PATH=$PATH:$util_dir/avr8-gnu-toolchain/bin
export PATH=$PATH:$util_dir/gcc-arm-none-eabi/bin
diff --git a/util/activate_wsl.sh b/util/activate_wsl.sh
index e2312b56d4..cd88d2b655 100755
--- a/util/activate_wsl.sh
+++ b/util/activate_wsl.sh
@@ -7,6 +7,7 @@ function export_variables {
export DFU_PROGRAMMER=$download_dir/dfu-programmer/dfu-programmer.exe
export DFU_UTIL=$download_dir/dfu-util-0.9-win64/dfu-util.exe
export TEENSY_LOADER_CLI=$download_dir/teensy_loader_cli.exe
+ export BOOTLOADHID_PROGRAMMER=$download_dir/bootloadHID.2012-12-08/commandline/bootloadHID.exe
export BATCHISP=batchisp.exe
}
diff --git a/util/atmega32a_program.py b/util/atmega32a_program.py
deleted file mode 100755
index 9438c7e779..0000000000
--- a/util/atmega32a_program.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/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 argparse
-import usb
-
-
-def check_keyboard_normal_mode(vendor, product):
- """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=vendor, idProduct=product)
-
-def check_keyboard_bootloader_mode():
- """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 flash_keyboard(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 print_device_info(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 send_device_to_bootloader_mode(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
-
-def auto_int(value):
- """Helper for argparse to enable auto base detection"""
- return int(value, 0)
-
-parser = argparse.ArgumentParser(description='Flash bootloadHID device')
-parser.add_argument('--vendor', type=auto_int, default=0x20A0, help='Non bootloader idVendor to search for (default: 0x%(default)04x)')
-parser.add_argument('--product', type=auto_int, default=0x422D, help='Non bootloader idProduct to search for (default: 0x%(default)04x)')
-parser.add_argument('firmware_hex', type=argparse.FileType('r'), help='Firmware hex file to flash')
-args = parser.parse_args()
-
-kb = check_keyboard_normal_mode(args.vendor, args.product)
-
-if kb is not None:
- print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='')
- send_device_to_bootloader_mode(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 check_keyboard_bootloader_mode():
- print('Found', end='\n\n')
- flash_keyboard(args.firmware_hex.name)
- 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/util/docker_build.sh b/util/docker_build.sh
index 99d59d1696..bf13f50975 100755
--- a/util/docker_build.sh
+++ b/util/docker_build.sh
@@ -37,6 +37,9 @@ else
exit 1
fi
fi
+if [ -z "$keyboard" ]; then
+ keyboard=all
+fi
if [ -n "$target" ]; then
if [ "$(uname)" = "Linux" ] || docker-machine active >/dev/null 2>&1; then
usb_args="--privileged -v /dev:/dev"
@@ -51,6 +54,7 @@ dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows
# Run container and build firmware
docker run --rm -it $usb_args \
+ --user $(id -u):$(id -g) \
-w /qmk_firmware \
-v "$dir":/qmk_firmware \
-e ALT_GET_KEYBOARDS=true \
diff --git a/util/linux_install.sh b/util/linux_install.sh
index c54a806234..9229814182 100755
--- a/util/linux_install.sh
+++ b/util/linux_install.sh
@@ -10,6 +10,16 @@ SOLUS_INFO="Your tools are now installed. To start using them, open new terminal
util_dir=$(dirname "$0")
+# For those distros that do not package bootloadHID
+install_bootloadhid() {
+ wget https://www.obdev.at/downloads/vusb/bootloadHID.2012-12-08.tar.gz -O - | tar -xz -C /tmp
+ cd /tmp/bootloadHID.2012-12-08/commandline/
+ if make; then
+ sudo cp bootloadHID /usr/local/bin
+ fi
+ cd -
+}
+
if grep ID /etc/os-release | grep -qE "fedora"; then
sudo dnf install \
arm-none-eabi-binutils-cs \
@@ -28,6 +38,7 @@ if grep ID /etc/os-release | grep -qE "fedora"; then
glibc-headers \
kernel-devel \
kernel-headers \
+ libusb-devel \
make \
perl \
python3 \
@@ -54,7 +65,9 @@ elif grep ID /etc/os-release | grep -qE 'debian|ubuntu'; then
gcc-avr \
git \
libnewlib-arm-none-eabi \
+ libusb-dev \
python3 \
+ python3-pip \
unzip \
wget \
zip
@@ -70,12 +83,14 @@ elif grep ID /etc/os-release | grep -q 'arch\|manjaro'; then
avr-libc \
avr-gcc \
base-devel \
+ bootloadhid \
clang \
dfu-programmer \
dfu-util \
diffutils \
gcc \
git \
+ libusb-compat \
python \
python-pip \
unzip \
@@ -138,6 +153,7 @@ elif grep ID /etc/os-release | grep -qE "opensuse|tumbleweed"; then
dfu-tool \
dfu-programmer \
gcc \
+ libusb-devel \
python3 \
unzip \
wget \
@@ -177,6 +193,7 @@ elif grep ID /etc/os-release | grep -q solus; then
avrdude \
dfu-util \
dfu-programmer \
+ libusb-devel \
python3 \
git \
wget \
@@ -214,4 +231,5 @@ else
fi
# Global install tasks
+install_bootloadhid
pip3 install --user -r ${util_dir}/../requirements.txt
diff --git a/util/macos_install.sh b/util/macos_install.sh
index f993003f09..a4037cce9e 100755
--- a/util/macos_install.sh
+++ b/util/macos_install.sh
@@ -24,6 +24,9 @@ fi
brew tap osx-cross/avr
brew tap osx-cross/arm
brew update
-brew install avr-gcc@8 arm-gcc-bin dfu-programmer avrdude clang-format dfu-util python3
+brew install avr-gcc@8 arm-gcc-bin@8 dfu-programmer avrdude clang-format dfu-util python3
+brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
brew link --force avr-gcc@8
+brew link --force arm-gcc-bin@8
+
pip3 install -r "${util_dir}/../requirements.txt"
diff --git a/util/msys2_install.sh b/util/msys2_install.sh
index 58397c7a3f..d1e24ca6d0 100755
--- a/util/msys2_install.sh
+++ b/util/msys2_install.sh
@@ -8,25 +8,27 @@ installflip=false
util_dir=$(dirname "$0")
echo "Installing dependencies needed for the installation (quazip)"
-pacman --needed -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-clang msys/git msys/p7zip msys/python3 msys/unzip
+pacman --needed --noconfirm --disable-download-timeout -Sy base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-clang msys/git msys/p7zip mingw-w64-x86_64-python3-pip msys/unzip
source "$dir/win_shared_install.sh"
function install_avr {
rm -f -r "$avrtools"
- wget "http://ww1.microchip.com/downloads/en/DeviceDoc/avr8-gnu-toolchain-3.6.1.1752-win32.any.x86.zip"
+ wget "https://blog.zakkemble.net/download/avr-gcc-8.3.0-x86-mingw.zip"
echo "Extracting AVR toolchain..."
- unzip -q avr8-gnu-toolchain-3.6.1.1752-win32.any.x86.zip
- mv avr8-gnu-toolchain-win32_x86/ avr8-gnu-toolchain
- rm __MACOSX -R
- rm avr8-gnu-toolchain-3.6.1.1752-win32.any.x86.zip
- pacman --needed -S mingw-w64-x86_64-avrdude
+ unzip -q -d . avr-gcc-8.3.0-x86-mingw.zip
+ mv avr-gcc-8.3.0-x86-mingw avr8-gnu-toolchain
+ rm avr8-gnu-toolchain/bin/make.exe
+ rm avr-gcc-8.3.0-x86-mingw.zip
+ pacman --needed --disable-download-timeout -S mingw-w64-x86_64-avrdude
}
function install_arm {
- wget -O gcc-arm-none-eabi.zip "https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-win32.zip?product=GNU%20ARM%20Embedded%20Toolchain,ZIP,,Windows,6-2017-q2-update"
- unzip -d gcc-arm-none-eabi gcc-arm-none-eabi.zip
- rm gcc-arm-none-eabi.zip
+ rm -f -r "$armtools"
+ wget -O gcc-arm-none-eabi-8-2019-q3-update-win32.zip "https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-win32.zip"
+ echo "Extracting ARM toolchain..."
+ unzip -q -d gcc-arm-none-eabi gcc-arm-none-eabi-8-2019-q3-update-win32.zip
+ rm gcc-arm-none-eabi-8-2019-q3-update-win32.zip
}
function extract_flip {
@@ -43,17 +45,10 @@ if [ -f "FlipInstaller.exe" ]; then
fi
if [ ! -d "$avrtools" ]; then
- while true; do
- echo
- echo "The AVR toolchain is not installed."
- echo "This is needed for building AVR based keboards."
- read -p "Do you want to install it? (Y/N) " res
- case $res in
- [Yy]* ) install_avr; break;;
- [Nn]* ) break;;
- * ) echo "Invalid answer";;
- esac
- done
+ echo
+ echo "The AVR toolchain is not installed."
+ echo "This is needed for building AVR based keyboards."
+ install_avr
else
while true; do
echo
@@ -68,17 +63,10 @@ else
fi
if [ ! -d "$armtools" ]; then
- while true; do
- echo
- echo "The ARM toolchain is not installed."
- echo "This is needed for building ARM based keyboards."
- read -p "Do you want to install it? (Y/N) " res
- case $res in
- [Yy]* ) install_arm; break;;
- [Nn]* ) break;;
- * ) echo "Invalid answer";;
- esac
- done
+ echo
+ echo "The ARM toolchain is not installed."
+ echo "This is needed for building ARM based keyboards."
+ install_arm
else
while true; do
echo
@@ -103,18 +91,10 @@ then
echo "The line source ~/qmk_utils/activate_msys2.sh is already added to your /.bashrc"
echo "Not adding it twice!"
else
- while true; do
echo
- echo "Do you want to add 'source ~/qmk_utils/activate_msys2.sh' to the end of your"
- echo ".bashrc file? Without this make won't find the needed utils, so if you don't"
- echo "want to do it automatically, then you have to do it manually later."
- read -p "(Y/N)? " res
- case $res in
- [Yy]* ) echo "source ~/qmk_utils/activate_msys2.sh" >> ~/.bashrc; break;;
- [Nn]* ) break;;
- * ) echo "Invalid answer";;
- esac
- done
+ echo "Adding 'source ~/qmk_utils/activate_msys2.sh' to the end of your"
+ echo ".bashrc file. Without this make won't find the needed utils."
+ echo "source ~/qmk_utils/activate_msys2.sh" >> ~/.bashrc;
fi
echo
diff --git a/util/new_keyboard.sh b/util/new_keyboard.sh
index 11c6497e23..1f08790ad4 100755
--- a/util/new_keyboard.sh
+++ b/util/new_keyboard.sh
@@ -32,8 +32,10 @@ set_git_username() {
# Copy the template files to the new keyboard directory.
copy_templates() {
+ mkdir -p "$keyboard_dir"
+
echo -n "Copying base template files..."
- cp -r "quantum/template/base" "${keyboard_dir}"
+ cp -r "quantum/template/base/." "${keyboard_dir}"
echo " done"
echo -n "Copying $keyboard_type template files..."
@@ -41,8 +43,8 @@ copy_templates() {
echo " done"
echo -n "Renaming keyboard files..."
- mv "${keyboard_dir}/keyboard.c" "${keyboard_dir}/${keyboard_name}.c"
- mv "${keyboard_dir}/keyboard.h" "${keyboard_dir}/${keyboard_name}.h"
+ mv "${keyboard_dir}/keyboard.c" "${keyboard_dir}/${keyboard_base_name}.c"
+ mv "${keyboard_dir}/keyboard.h" "${keyboard_dir}/${keyboard_base_name}.h"
echo " done"
}
@@ -74,8 +76,8 @@ replace_placeholders() {
replace_year_placeholders() {
local replace_year_filenames=(
"${keyboard_dir}/config.h"
- "${keyboard_dir}/${keyboard_name}.c"
- "${keyboard_dir}/${keyboard_name}.h"
+ "${keyboard_dir}/${keyboard_base_name}.c"
+ "${keyboard_dir}/${keyboard_base_name}.h"
"${keyboard_dir}/keymaps/default/config.h"
"${keyboard_dir}/keymaps/default/keymap.c"
)
@@ -88,10 +90,10 @@ replace_keyboard_placeholders() {
"${keyboard_dir}/config.h"
"${keyboard_dir}/info.json"
"${keyboard_dir}/readme.md"
- "${keyboard_dir}/${keyboard_name}.c"
+ "${keyboard_dir}/${keyboard_base_name}.c"
"${keyboard_dir}/keymaps/default/readme.md"
)
- replace_placeholders "%KEYBOARD%" "$keyboard_name" "${replace_keyboard_filenames[@]}"
+ replace_placeholders "%KEYBOARD%" "$keyboard_base_name" "${replace_keyboard_filenames[@]}"
}
# Replace %YOUR_NAME% with the username.
@@ -100,8 +102,8 @@ replace_name_placeholders() {
"${keyboard_dir}/config.h"
"${keyboard_dir}/info.json"
"${keyboard_dir}/readme.md"
- "${keyboard_dir}/${keyboard_name}.c"
- "${keyboard_dir}/${keyboard_name}.h"
+ "${keyboard_dir}/${keyboard_base_name}.c"
+ "${keyboard_dir}/${keyboard_base_name}.h"
"${keyboard_dir}/keymaps/default/config.h"
"${keyboard_dir}/keymaps/default/keymap.c"
)
@@ -136,6 +138,7 @@ echo
while [ -z "$keyboard_name" ]; do
prompt "Keyboard Name" ""
keyboard_name=$prompt_return
+ keyboard_base_name=$(basename $keyboard_name)
done
keyboard_dir="keyboards/$keyboard_name"
diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh
index e0490cd702..c18e42a293 100755
--- a/util/travis_compiled_push.sh
+++ b/util/travis_compiled_push.sh
@@ -13,7 +13,7 @@ if [[ "$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "false" ]] ; the
# fix formatting
git checkout master
git diff --diff-filter=AM --name-only -n 1 -z ${TRAVIS_COMMIT_RANGE} | xargs -0 dos2unix
-git diff --diff-filter=AM --name-only -n 1 -z ${TRAVIS_COMMIT_RANGE} | grep -e '^drivers' -e '^quantum' -e '^tests' -e '^tmk_core' | grep -v 'quantum/template' | xargs -0 clang-format
+git diff --diff-filter=AM --name-only -n 1 -z ${TRAVIS_COMMIT_RANGE} '*.c' '*.h' '*.cpp' | grep -z -e '^drivers' -e '^quantum' -e '^tests' -e '^tmk_core' | grep -zv -e 'quantum/template' -e 'tmk_core/protocol/usb_hid' | xargs -0 clang-format -i
git diff --diff-filter=AM --name-only -n 1 -z ${TRAVIS_COMMIT_RANGE} | xargs -0 git add
git commit -m "format code according to conventions [skip ci]" && git push git@github.com:qmk/qmk_firmware.git master
diff --git a/util/win_shared_install.sh b/util/win_shared_install.sh
index f8fc9308f4..7ad000bfc4 100755
--- a/util/win_shared_install.sh
+++ b/util/win_shared_install.sh
@@ -18,6 +18,10 @@ function install_utils {
wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip'
unzip teensy_loader_cli_windows.zip
+ echo "Installing bootloadHID"
+ wget 'https://www.obdev.at/downloads/vusb/bootloadHID.2012-12-08.zip'
+ unzip bootloadHID.2012-12-08.zip
+
echo "Installing Atmel Flip"
wget 'http://ww1.microchip.com/downloads/en/DeviceDoc/Flip%20Installer%20-%203.4.7.112.exe'
mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe