summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/blank.md8
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md7
-rw-r--r--.github/ISSUE_TEMPLATE/config.yml8
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md7
-rw-r--r--.github/ISSUE_TEMPLATE/other_issues.md7
-rw-r--r--.github/stale.yml58
-rw-r--r--.travis.yml1
-rw-r--r--Makefile13
-rwxr-xr-xbin/qmk9
-rw-r--r--build_json.mk5
-rw-r--r--common_features.mk10
-rw-r--r--docs/README.md2
-rw-r--r--docs/_langs.md2
-rw-r--r--docs/_summary.md9
-rw-r--r--docs/adc_driver.md50
-rw-r--r--docs/cli.md46
-rw-r--r--docs/cli_development.md32
-rw-r--r--docs/coding_conventions_c.md2
-rw-r--r--docs/coding_conventions_python.md2
-rw-r--r--docs/compatible_microcontrollers.md47
-rw-r--r--docs/config_options.md7
-rw-r--r--docs/contributing.md12
-rw-r--r--docs/custom_quantum_functions.md129
-rw-r--r--docs/de/README.md33
-rw-r--r--docs/de/_summary.md121
-rw-r--r--docs/de/driver_installation_zadig.md47
-rw-r--r--docs/de/newbs.md22
-rw-r--r--docs/de/newbs_building_firmware.md78
-rw-r--r--docs/de/newbs_flashing.md369
-rw-r--r--docs/de/newbs_getting_started.md101
-rw-r--r--docs/de/newbs_learn_more_resources.md14
-rw-r--r--docs/de/newbs_testing_debugging.md100
-rw-r--r--docs/documentation_templates.md8
-rw-r--r--docs/es/README.md4
-rw-r--r--docs/es/_summary.md208
-rw-r--r--docs/faq_build.md35
-rw-r--r--docs/faq_debug.md70
-rw-r--r--docs/faq_keymap.md63
-rw-r--r--docs/feature_advanced_keycodes.md4
-rw-r--r--docs/feature_bootmagic.md62
-rw-r--r--docs/feature_debounce_type.md10
-rw-r--r--docs/feature_dynamic_macros.md75
-rw-r--r--docs/feature_haptic_feedback.md16
-rw-r--r--docs/feature_leader_key.md8
-rw-r--r--docs/feature_macros.md19
-rw-r--r--docs/feature_rgb_matrix.md28
-rw-r--r--docs/feature_rgblight.md18
-rw-r--r--docs/feature_tap_dance.md2
-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/getting_started_build_tools.md15
-rw-r--r--docs/getting_started_github.md2
-rw-r--r--docs/getting_started_introduction.md2
-rw-r--r--docs/getting_started_make_guide.md2
-rw-r--r--docs/hardware_drivers.md2
-rw-r--r--docs/he-il/README.md4
-rw-r--r--docs/he-il/_summary.md211
-rw-r--r--docs/index.html28
-rw-r--r--docs/ja/README.md37
-rw-r--r--docs/ja/_summary.md121
-rw-r--r--docs/ja/arm_debugging.md92
-rw-r--r--docs/ja/config_options.md376
-rw-r--r--docs/ja/newbs.md41
-rw-r--r--docs/ja/newbs_best_practices.md263
-rw-r--r--docs/ja/newbs_building_firmware.md99
-rw-r--r--docs/ja/newbs_building_firmware_configurator.md113
-rw-r--r--docs/ja/newbs_flashing.md400
-rw-r--r--docs/ja/newbs_getting_started.md122
-rw-r--r--docs/ja/newbs_learn_more_resources.md32
-rw-r--r--docs/ja/newbs_testing_debugging.md107
-rw-r--r--docs/keycodes.md110
-rw-r--r--docs/newbs.md2
-rw-r--r--docs/newbs_best_practices.md163
-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/ru-ru/_summary.md123
-rw-r--r--docs/ru-ru/becoming_a_qmk_collaborator.md9
-rw-r--r--docs/ru-ru/getting_started_build_tools.md15
-rw-r--r--docs/ru-ru/getting_started_getting_help.md15
-rw-r--r--docs/ru-ru/getting_started_github.md58
-rw-r--r--docs/ru-ru/getting_started_introduction.md58
-rw-r--r--docs/translating.md50
-rw-r--r--docs/ws2812_driver.md13
-rw-r--r--docs/zh-cn/README.md4
-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--doxygen-todo1
-rw-r--r--drivers/arm/i2c_master.c2
-rw-r--r--drivers/arm/i2c_master.h28
-rw-r--r--drivers/arm/ws2812.c96
-rw-r--r--drivers/arm/ws2812.h16
-rw-r--r--drivers/avr/analog.c110
-rw-r--r--drivers/avr/analog.h37
-rw-r--r--drivers/avr/ws2812.c141
-rw-r--r--drivers/avr/ws2812.h3
-rw-r--r--drivers/avr/ws2812_i2c.c12
-rw-r--r--drivers/gpio/pca9555.c17
-rw-r--r--drivers/gpio/pca9555.h2
-rw-r--r--drivers/haptic/DRV2605L.c12
-rw-r--r--drivers/haptic/haptic.c85
-rw-r--r--drivers/haptic/haptic.h16
-rw-r--r--drivers/haptic/solenoid.h6
-rw-r--r--drivers/issi/is31fl3733.c50
-rw-r--r--drivers/issi/is31fl3733.h4
-rw-r--r--keyboards/1upkeyboards/sweet16/v1/rules.mk16
-rw-r--r--keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk13
-rw-r--r--keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk1
-rw-r--r--keyboards/30wer/config.h3
-rw-r--r--keyboards/40percentclub/nano/keymaps/drashna/keymap.c10
-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/mechmini/v1/i2c.h)15
-rw-r--r--keyboards/7skb/info.json76
-rw-r--r--keyboards/7skb/keymaps/default/config.h22
-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.h84
-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/kudox/keymaps/jis/rules.mk)0
-rw-r--r--keyboards/7skb/rules.mk35
-rw-r--r--keyboards/adkb96/keymaps/default/keymap.c1
-rw-r--r--keyboards/aeboards/ext65/keymaps/default/keymap.c4
-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/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/kudox/keymaps/x1/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.h19
-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.mk0
-rw-r--r--keyboards/angel64/rules.mk3
-rw-r--r--keyboards/ares/ares.c72
-rw-r--r--keyboards/ares/config.h1
-rw-r--r--keyboards/ares/readme.md41
-rw-r--r--keyboards/ares/rules.mk19
-rw-r--r--keyboards/ares/usbconfig.h12
-rw-r--r--keyboards/ash1800/ash1800.c25
-rw-r--r--keyboards/ash1800/ash1800.h51
-rw-r--r--keyboards/ash1800/config.h253
-rw-r--r--keyboards/ash1800/info.json539
-rw-r--r--keyboards/ash1800/keymaps/default/keymap.c37
-rw-r--r--keyboards/ash1800/keymaps/default/readme.md1
-rw-r--r--keyboards/ash1800/readme.md15
-rw-r--r--keyboards/ash1800/rules.mk33
-rw-r--r--keyboards/ashpil/modelm_usbc/README.md14
-rw-r--r--keyboards/ashpil/modelm_usbc/config.h128
-rw-r--r--keyboards/ashpil/modelm_usbc/info.json15
-rw-r--r--keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h24
-rw-r--r--keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c47
-rw-r--r--keyboards/ashpil/modelm_usbc/keymaps/ashpil/rules.mk1
-rw-r--r--keyboards/ashpil/modelm_usbc/keymaps/default/keymap.c27
-rw-r--r--keyboards/ashpil/modelm_usbc/modelm_usbc.c35
-rw-r--r--keyboards/ashpil/modelm_usbc/modelm_usbc.h64
-rw-r--r--keyboards/ashpil/modelm_usbc/rules.mk33
-rw-r--r--keyboards/atreus62/keymaps/xyverz/keymap.c6
-rw-r--r--keyboards/bfake/bfake.c53
-rw-r--r--keyboards/bfake/config.h1
-rw-r--r--keyboards/bfake/i2c.c106
-rw-r--r--keyboards/bfake/readme.md43
-rw-r--r--keyboards/bfake/rules.mk19
-rw-r--r--keyboards/bfake/usbconfig.h12
-rw-r--r--keyboards/boston_meetup/2019/keymaps/default/keymap.c3
-rw-r--r--keyboards/boston_meetup/2019/rules.mk6
-rw-r--r--[-rwxr-xr-x]keyboards/c39/keymaps/drashna/config.h9
-rwxr-xr-xkeyboards/c39/keymaps/drashna/keymap.c132
-rw-r--r--keyboards/c39/keymaps/drashna/rules.mk4
-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/cannonkeys/instant60/keymaps/default/keymap.c1
-rw-r--r--keyboards/cannonkeys/instant60/rules.mk2
-rw-r--r--keyboards/cannonkeys/ortho48/keymaps/default/keymap.c1
-rw-r--r--keyboards/cannonkeys/ortho60/keymaps/default/keymap.c1
-rw-r--r--keyboards/cannonkeys/practice60/keymaps/default/keymap.c1
-rw-r--r--keyboards/cannonkeys/practice65/keymaps/default/keymap.c1
-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.mk4
-rw-r--r--keyboards/christmas_tree/keymaps/default/keymap.c1
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/keymap.c1
-rw-r--r--keyboards/ckeys/obelus/keymaps/default/keymap.c1
-rw-r--r--keyboards/ckeys/readme.md1
-rwxr-xr-xkeyboards/ckeys/thedora/rules.mk1
-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/claw44/keymaps/default/keymap.c1
-rw-r--r--keyboards/clueboard/60/rules.mk44
-rw-r--r--keyboards/clueboard/66/rev4/rules.mk20
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/rules.mk46
-rw-r--r--keyboards/clueboard/california/rules.mk1
-rw-r--r--keyboards/comet46/keymaps/default/keymap.c2
-rw-r--r--keyboards/contra/keymaps/alper/config.h38
-rw-r--r--keyboards/contra/keymaps/alper/keymap.c191
-rw-r--r--keyboards/contra/keymaps/alper/readme.md22
-rw-r--r--keyboards/contra/keymaps/default/keymap.c1
-rw-r--r--keyboards/contra/readme.md2
-rw-r--r--keyboards/converter/xt_usb/config.h2
-rw-r--r--keyboards/converter/xt_usb/matrix.c42
-rw-r--r--keyboards/coseyfannitutti/discipad/config.h1
-rw-r--r--keyboards/coseyfannitutti/discipad/rules.mk5
-rw-r--r--keyboards/coseyfannitutti/discipad/usbconfig.h13
-rw-r--r--keyboards/coseyfannitutti/discipline/config.h1
-rw-r--r--keyboards/coseyfannitutti/discipline/readme.md10
-rw-r--r--keyboards/coseyfannitutti/discipline/rules.mk4
-rw-r--r--keyboards/coseyfannitutti/discipline/usbconfig.h13
-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/default/keymap.c1
-rw-r--r--keyboards/crkbd/keymaps/drashna/glcdfont.c9
-rw-r--r--keyboards/crkbd/keymaps/drashna/keymap.c49
-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/matrix.c5
-rw-r--r--keyboards/crkbd/rev1/rules.mk6
-rw-r--r--keyboards/crkbd/rev1/split_util.c81
-rw-r--r--keyboards/cutie_club/wraith/info.json189
-rw-r--r--keyboards/daisy/keymaps/default/keymap.c1
-rw-r--r--keyboards/deltasplit75/keymaps/default/keymap.c1
-rw-r--r--keyboards/diverge3/keymaps/default/keymap.c1
-rw-r--r--keyboards/divergetm2/keymaps/default/keymap.c3
-rw-r--r--keyboards/donutcables/budget96/budget96.c71
-rw-r--r--keyboards/donutcables/budget96/config.h1
-rw-r--r--keyboards/donutcables/budget96/readme.md42
-rw-r--r--keyboards/donutcables/budget96/rules.mk20
-rw-r--r--keyboards/donutcables/budget96/usbconfig.h12
-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.h19
-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.mk36
-rw-r--r--keyboards/dp60/rules.mk19
-rw-r--r--keyboards/dz60/config.h8
-rw-r--r--keyboards/dz60/dz60.h27
-rw-r--r--keyboards/dz60/info.json6
-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/calbatr0ss/keymap.c60
-rw-r--r--keyboards/dz60/keymaps/danbee/keymap.c67
-rw-r--r--keyboards/dz60/keymaps/danbee/rules.mk2
-rw-r--r--keyboards/dz60/keymaps/default_abnt2/keymap.c67
-rw-r--r--keyboards/dz60/keymaps/default_abnt2/readme.md15
-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/tarnjotsingh/keymap.c7
-rw-r--r--keyboards/dz60/keymaps/tarnjotsingh/layers.json1
-rw-r--r--keyboards/dz60/keymaps/tarnjotsingh/readme.md24
-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.mk8
-rw-r--r--keyboards/dztech/dz40rgb/dz40rgb.c203
-rw-r--r--keyboards/dztech/dz40rgb/dz40rgb.h27
-rw-r--r--keyboards/dztech/dz40rgb/keymaps/default/config.h3
-rw-r--r--keyboards/dztech/dz40rgb/keymaps/default/keymap.c71
-rw-r--r--keyboards/dztech/dz40rgb/keymaps/split_space/config.h5
-rw-r--r--keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c96
-rw-r--r--keyboards/dztech/dz60rgb/config.h42
-rw-r--r--keyboards/dztech/dz60rgb/dz60rgb.c354
-rw-r--r--keyboards/dztech/dz60rgb/dz60rgb.h56
-rw-r--r--keyboards/dztech/dz60rgb/info.json16
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/ansi/config.h2
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c78
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/default/keymap.c87
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/hhkb/config.h2
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c79
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h2
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c79
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/iso/config.h2
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/iso/keymap.c78
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h2
-rw-r--r--keyboards/dztech/dz60rgb/v1/config.h36
-rw-r--r--keyboards/dztech/dz60rgb/v1/rules.mk (renamed from keyboards/dztech/dz40rgb/rules.mk)10
-rw-r--r--keyboards/dztech/dz60rgb/v2/config.h44
-rw-r--r--keyboards/dztech/dz60rgb/v2/rules.mk23
-rw-r--r--keyboards/dztech/dz60rgb_ansi/config.h2
-rw-r--r--keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c118
-rw-r--r--keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h16
-rw-r--r--keyboards/dztech/dz60rgb_ansi/info.json13
-rw-r--r--keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c36
-rw-r--r--keyboards/dztech/dz60rgb_ansi/readme.md15
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v1/config.h (renamed from keyboards/dztech/dz40rgb/config.h)24
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v1/rules.mk (renamed from keyboards/dztech/dz60rgb/rules.mk)12
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v2/config.h44
-rw-r--r--keyboards/dztech/dz60rgb_ansi/v2/rules.mk23
-rw-r--r--keyboards/dztech/dz60rgb_wkl/config.h2
-rw-r--r--keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c116
-rw-r--r--keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h18
-rw-r--r--keyboards/dztech/dz60rgb_wkl/info.json12
-rw-r--r--keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c37
-rw-r--r--keyboards/dztech/dz60rgb_wkl/readme.md15
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v1/config.h36
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v1/rules.mk16
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v2/config.h44
-rw-r--r--keyboards/dztech/dz60rgb_wkl/v2/rules.mk25
-rw-r--r--keyboards/dztech/dz65rgb/config.h29
-rw-r--r--keyboards/dztech/dz65rgb/dz65rgb.c126
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/default/keymap.c2
-rw-r--r--keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h2
-rw-r--r--keyboards/dztech/dz65rgb/v1/config.h45
-rw-r--r--keyboards/dztech/dz65rgb/v1/rules.mk (renamed from keyboards/dztech/dz65rgb/rules.mk)6
-rw-r--r--keyboards/dztech/dz65rgb/v2/config.h45
-rw-r--r--keyboards/dztech/dz65rgb/v2/rules.mk35
-rw-r--r--keyboards/eco/keymaps/default/keymap.c1
-rw-r--r--keyboards/ep/96/info.json533
-rw-r--r--keyboards/ep/comsn/tf_longeboye/info.json2
-rw-r--r--keyboards/ergo42/keymaps/default/keymap.c2
-rw-r--r--keyboards/ergodash/mini/keymaps/default/keymap.c1
-rw-r--r--keyboards/ergodash/rev1/keymaps/default/keymap.c1
-rw-r--r--keyboards/ergodox_ez/config.h12
-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.c86
-rw-r--r--keyboards/ergodox_ez/post_config.h20
-rw-r--r--keyboards/ergodox_ez/rules.mk5
-rwxr-xr-x[-rw-r--r--]keyboards/ergodox_ez/util/compile_keymap.py0
-rw-r--r--keyboards/ergodox_ez/util/keymap_beautifier/Dockerfile8
-rwxr-xr-xkeyboards/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py399
-rw-r--r--keyboards/ergodox_ez/util/keymap_beautifier/README.md139
-rwxr-xr-xkeyboards/ergodox_ez/util/keymap_beautifier/docker_run.sh3
-rw-r--r--keyboards/ergodox_ez/util/keymap_beautifier/requirements.txt1
-rw-r--r--keyboards/ergodox_ez/util/readme.md8
-rw-r--r--keyboards/ergodox_stm32/keymaps/default/keymap.c4
-rw-r--r--keyboards/ergotravel/keymaps/default/keymap.c1
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/config.h2
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/rules.mk6
-rw-r--r--keyboards/eve/meteor/config.h1
-rw-r--r--keyboards/eve/meteor/meteor.c50
-rw-r--r--keyboards/eve/meteor/readme.md40
-rw-r--r--keyboards/eve/meteor/rules.mk19
-rw-r--r--keyboards/eve/meteor/usbconfig.h14
-rw-r--r--keyboards/exclusive/e65/e65.c20
-rw-r--r--keyboards/exclusive/e65/keymaps/madhatter/keymap.c26
-rw-r--r--keyboards/exclusive/e6v2/le_bmc/le_bmc.c51
-rw-r--r--keyboards/exclusive/e6v2/le_bmc/readme.md41
-rw-r--r--keyboards/exclusive/e6v2/le_bmc/rules.mk3
-rw-r--r--keyboards/exclusive/e6v2/le_bmc/usbconfig.h12
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c63
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/readme.md41
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/rules.mk3
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/usbconfig.h12
-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/exent.c73
-rw-r--r--keyboards/exent/readme.md8
-rw-r--r--keyboards/exent/rules.mk4
-rw-r--r--keyboards/exent/usbconfig.h12
-rw-r--r--keyboards/facew/config.h1
-rw-r--r--keyboards/facew/facew.c54
-rw-r--r--keyboards/facew/readme.md40
-rw-r--r--keyboards/facew/rules.mk20
-rw-r--r--keyboards/facew/usbconfig.h12
-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/flx/virgo/config.h76
-rw-r--r--keyboards/flx/virgo/info.json106
-rw-r--r--keyboards/flx/virgo/keymaps/default/config.h19
-rw-r--r--keyboards/flx/virgo/keymaps/default/keymap.c36
-rw-r--r--keyboards/flx/virgo/keymaps/default/readme.md1
-rw-r--r--keyboards/flx/virgo/readme.md15
-rw-r--r--keyboards/flx/virgo/rules.mk36
-rw-r--r--keyboards/flx/virgo/virgo.c47
-rw-r--r--keyboards/flx/virgo/virgo.h43
-rw-r--r--keyboards/fortitude60/keymaps/default/keymap.c3
-rw-r--r--keyboards/ft/mars80/mars80.c52
-rw-r--r--keyboards/ft/mars80/readme.md35
-rw-r--r--keyboards/ft/mars80/rules.mk19
-rw-r--r--keyboards/ft/mars80/usbconfig.h12
-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/geekboards/tester/config.h3
-rw-r--r--keyboards/gergo/keymaps/drashna/keymap.c18
-rw-r--r--keyboards/gh60/revc/info.json411
-rw-r--r--keyboards/gh60/revc/keymaps/danbee/keymap.c67
-rw-r--r--keyboards/gh60/revc/keymaps/danbee/rules.mk2
-rw-r--r--keyboards/gh60/revc/keymaps/default_abnt2/keymap.c83
-rw-r--r--keyboards/gh60/revc/keymaps/default_abnt2/readme.md15
-rw-r--r--keyboards/gh60/revc/revc.h27
-rw-r--r--keyboards/gh60/satan/keymaps/smt/keymap.c40
-rw-r--r--keyboards/gingham/config.h1
-rw-r--r--keyboards/gingham/readme.md7
-rw-r--r--keyboards/gingham/rules.mk4
-rw-r--r--keyboards/gingham/usbconfig.h13
-rw-r--r--keyboards/gray_studio/cod67/cod67.h4
-rw-r--r--keyboards/gray_studio/cod67/config.h147
-rw-r--r--keyboards/gray_studio/cod67/keymaps/default/keymap.c8
-rw-r--r--keyboards/gray_studio/cod67/keymaps/default/readme.md6
-rw-r--r--keyboards/gray_studio/cod67/keymaps/rys/keymap.c23
-rw-r--r--keyboards/gray_studio/cod67/keymaps/rys/readme.md5
-rw-r--r--keyboards/gray_studio/cod67/readme.md35
-rw-r--r--keyboards/gray_studio/cod67/rules.mk10
-rw-r--r--keyboards/gray_studio/hb85/config.h1
-rw-r--r--keyboards/gray_studio/hb85/hb85.c40
-rw-r--r--keyboards/gray_studio/hb85/readme.md37
-rw-r--r--keyboards/gray_studio/hb85/rules.mk19
-rw-r--r--keyboards/gray_studio/hb85/usbconfig.h12
-rw-r--r--keyboards/gray_studio/space65/keymaps/default/keymap.c28
-rw-r--r--keyboards/gray_studio/space65/space65.h20
-rw-r--r--keyboards/gray_studio/think65/hotswap/keymaps/default/keymap.c20
-rw-r--r--keyboards/gray_studio/think65/solder/keymaps/default/keymap.c20
-rw-r--r--keyboards/hadron/rules.mk1
-rw-r--r--keyboards/hadron/ver2/keymaps/default/keymap.c1
-rw-r--r--keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c126
-rw-r--r--keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/hadron/ver3/bootloader_defs.h7
-rw-r--r--keyboards/hadron/ver3/keymaps/default/keymap.c3
-rw-r--r--keyboards/hadron/ver3/rules.mk6
-rw-r--r--keyboards/handwired/2x5keypad/config.h6
-rw-r--r--keyboards/handwired/2x5keypad/keymaps/default/keymap.c125
-rw-r--r--keyboards/handwired/2x5keypad/rules.mk16
-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/bluepill/keymaps/default/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/co60/rev6/rules.mk39
-rw-r--r--keyboards/handwired/co60/rev7/rules.mk39
-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/4x5/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c3
-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/5x7/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/dactyl_manuform/dmote/62key/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c1
-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/hexon38/config.h3
-rw-r--r--keyboards/handwired/hnah40/config.h2
-rw-r--r--keyboards/handwired/hnah40/readme.md6
-rw-r--r--keyboards/handwired/hnah40/rules.mk6
-rw-r--r--keyboards/handwired/hnah40/usbconfig.h13
-rw-r--r--keyboards/handwired/jot50/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/jotanck/jotanck.c10
-rw-r--r--keyboards/handwired/jotanck/keymaps/default/keymap.c6
-rw-r--r--keyboards/handwired/jotpad16/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/magicforce61/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/minorca/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/not_so_minidox/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/onekey/bluepill/config.h2
-rw-r--r--keyboards/handwired/onekey/keymaps/rgb/config.h4
-rw-r--r--keyboards/handwired/onekey/keymaps/rgb/keymap.c11
-rw-r--r--keyboards/handwired/onekey/keymaps/rgb/rules.mk1
-rw-r--r--keyboards/handwired/onekey/proton_c/config.h2
-rw-r--r--keyboards/handwired/onekey/stm32f0_disco/config.h2
-rw-r--r--keyboards/handwired/postageboard/config.h (renamed from keyboards/percent/skog/i2c.h)8
-rw-r--r--keyboards/handwired/postageboard/keymaps/default/keymap.c51
-rw-r--r--keyboards/handwired/postageboard/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/postageboard/mini/config.h61
-rw-r--r--keyboards/handwired/postageboard/mini/mini.c18
-rw-r--r--keyboards/handwired/postageboard/mini/mini.h34
-rw-r--r--keyboards/handwired/postageboard/mini/rules.mk29
-rw-r--r--keyboards/handwired/postageboard/postageboard.c1
-rw-r--r--keyboards/handwired/postageboard/postageboard.h26
-rw-r--r--keyboards/handwired/postageboard/r1/config.h61
-rw-r--r--keyboards/handwired/postageboard/r1/r1.c18
-rw-r--r--keyboards/handwired/postageboard/r1/r1.h34
-rw-r--r--keyboards/handwired/postageboard/r1/rules.mk29
-rw-r--r--keyboards/handwired/postageboard/readme.md25
-rw-r--r--keyboards/handwired/postageboard/rules.mk1
-rw-r--r--keyboards/handwired/prime_exl/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c3
-rw-r--r--keyboards/handwired/pteron/config.h3
-rw-r--r--keyboards/handwired/pteron/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/qc60/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/steamvan/rev1/rules.mk39
-rw-r--r--keyboards/handwired/symmetry60/config.h71
-rw-r--r--keyboards/handwired/symmetry60/info.json83
-rw-r--r--keyboards/handwired/symmetry60/keymaps/default/config.h19
-rw-r--r--keyboards/handwired/symmetry60/keymaps/default/keymap.c26
-rw-r--r--keyboards/handwired/symmetry60/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/symmetry60/readme.md13
-rw-r--r--keyboards/handwired/symmetry60/rules.mk36
-rw-r--r--keyboards/handwired/symmetry60/symmetry60.c16
-rw-r--r--keyboards/handwired/symmetry60/symmetry60.h42
-rw-r--r--keyboards/handwired/terminus_mini/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/wulkan/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/wulkan/rules.mk1
-rw-r--r--keyboards/handwired/xealous/keymaps/default/keymap.c3
-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.c5
-rw-r--r--keyboards/helix/pico/rules.mk5
-rw-r--r--keyboards/helix/readme.md2
-rw-r--r--keyboards/helix/rev1/keymaps/default/keymap.c1
-rw-r--r--keyboards/helix/rev2/keymaps/default/keymap.c90
-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/hineybush/h87a/keymaps/default/keymap.c2
-rw-r--r--keyboards/hineybush/h88/keymaps/default/keymap.c2
-rw-r--r--keyboards/hineybush/hbcp/hbcp.h14
-rw-r--r--keyboards/hineybush/hbcp/info.json212
-rw-r--r--keyboards/hineybush/hbcp/keymaps/default/keymap.c42
-rw-r--r--keyboards/hineybush/hbcp/keymaps/default/readme.md3
-rw-r--r--keyboards/hineybush/hbcp/keymaps/hiney/config.h16
-rw-r--r--keyboards/hineybush/hbcp/keymaps/hiney/keymap.c6
-rw-r--r--keyboards/hineybush/hbcp/keymaps/wkl/config.h19
-rw-r--r--keyboards/hineybush/hbcp/keymaps/wkl/keymap.c82
-rw-r--r--keyboards/hineybush/hbcp/keymaps/wkl/readme.md1
-rw-r--r--keyboards/hineybush/sm68/config.h241
-rw-r--r--keyboards/hineybush/sm68/info.json15
-rw-r--r--keyboards/hineybush/sm68/keymaps/default/config.h19
-rw-r--r--keyboards/hineybush/sm68/keymaps/default/keymap.c45
-rw-r--r--keyboards/hineybush/sm68/keymaps/default/readme.md1
-rw-r--r--keyboards/hineybush/sm68/readme.md15
-rw-r--r--keyboards/hineybush/sm68/rules.mk32
-rw-r--r--keyboards/hineybush/sm68/sm68.c50
-rw-r--r--keyboards/hineybush/sm68/sm68.h59
-rw-r--r--keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c126
-rw-r--r--keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/hs60/v2/bootloader_defs.h7
-rw-r--r--keyboards/hs60/v2/keymaps/stanrc85/config.h4
-rw-r--r--keyboards/hs60/v2/rules.mk52
-rw-r--r--keyboards/ivy/keymaps/default/keymap.c1
-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.h1
-rw-r--r--keyboards/jc65/v32a/i2c.c106
-rw-r--r--keyboards/jc65/v32a/i2c.h27
-rw-r--r--keyboards/jc65/v32a/readme.md25
-rw-r--r--keyboards/jc65/v32a/rules.mk19
-rw-r--r--keyboards/jc65/v32a/usbconfig.h12
-rw-r--r--keyboards/jc65/v32a/v32a.c56
-rw-r--r--keyboards/jj40/README.md79
-rw-r--r--keyboards/jj40/config.h2
-rw-r--r--keyboards/jj40/keymaps/default/keymap.c2
-rw-r--r--keyboards/jj40/usbconfig.h13
-rw-r--r--keyboards/jj4x4/README.md68
-rw-r--r--keyboards/jj4x4/config.h2
-rw-r--r--keyboards/jj4x4/jj4x4.c37
-rw-r--r--keyboards/jj4x4/rules.mk19
-rw-r--r--keyboards/jj4x4/usbconfig.h13
-rw-r--r--keyboards/jj50/README.md84
-rw-r--r--keyboards/jj50/config.h1
-rw-r--r--keyboards/jj50/i2c.c104
-rw-r--r--keyboards/jj50/jj50.c67
-rw-r--r--keyboards/jj50/rules.mk24
-rw-r--r--keyboards/jj50/usbconfig.h12
-rw-r--r--keyboards/kbdfans/kbd19x/config.h6
-rw-r--r--keyboards/kbdfans/kbd19x/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd4x/config.h5
-rw-r--r--keyboards/kbdfans/kbd4x/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd66/config.h4
-rw-r--r--keyboards/kbdfans/kbd66/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd67/hotswap/config.h4
-rw-r--r--keyboards/kbdfans/kbd67/hotswap/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd67/mkii_soldered/config.h3
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/keymaps/default/keymap.c9
-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/mkiirgb.c12
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v1/config.h (renamed from keyboards/kbdfans/kbd67/mkiirgb/config.h)22
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v1/rules.mk (renamed from keyboards/kbdfans/kbd67/mkiirgb/rules.mk)8
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v2/config.h48
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/v2/rules.mk33
-rw-r--r--keyboards/kbdfans/kbd67/rev1/config.h4
-rw-r--r--keyboards/kbdfans/kbd67/rev1/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd67/rev2/config.h1
-rw-r--r--keyboards/kbdfans/kbd67/rev2/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd6x/config.h5
-rw-r--r--keyboards/kbdfans/kbd6x/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd75/config.h1
-rw-r--r--keyboards/kbdfans/kbd8x/config.h5
-rw-r--r--keyboards/kbdfans/kbd8x/rules.mk2
-rw-r--r--keyboards/kbdfans/kbd8x_mk2/config.h4
-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/kbdmini/config.h47
-rw-r--r--keyboards/kbdfans/kbdmini/kbdmini.c96
-rw-r--r--keyboards/kbdfans/kbdmini/kbdmini.h15
-rw-r--r--keyboards/kbdfans/kbdmini/keymaps/default/keymap.c9
-rw-r--r--keyboards/kbdfans/kbdmini/readme.md13
-rw-r--r--keyboards/kbdfans/kbdmini/rules.mk33
-rw-r--r--keyboards/kbdfans/kbdpad/mk1/config.h1
-rw-r--r--keyboards/kbdfans/kbdpad/mk1/mk1.c2
-rw-r--r--keyboards/kbdfans/kbdpad/mk1/readme.md40
-rw-r--r--keyboards/kbdfans/kbdpad/mk1/rules.mk15
-rw-r--r--keyboards/kbdfans/kbdpad/mk1/usbconfig.h12
-rw-r--r--keyboards/kbdfans/kbdpad_mk2/config.h3
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/config.h9
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/keymap.c70
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme.md14
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch1.md31
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch2.md2
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch3.md10
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch4.md8
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch5.md39
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_git.md11
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/rules.mk8
-rw-r--r--keyboards/keebio/bdn9/config.h2
-rw-r--r--keyboards/keebio/bdn9/keymaps/codecoffeecode/config.h12
-rw-r--r--keyboards/keebio/bdn9/keymaps/codecoffeecode/keymap.c57
-rw-r--r--keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk2
-rw-r--r--keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c85
-rw-r--r--keyboards/keebio/bdn9/rules.mk2
-rw-r--r--keyboards/keebio/dilly/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/ergodicity/ergodicity.h2
-rw-r--r--keyboards/keebio/iris/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/iris/keymaps/drashna/config.h3
-rw-r--r--keyboards/keebio/iris/keymaps/drashna/keymap.c14
-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/jerryhcooke/config.h35
-rw-r--r--keyboards/keebio/iris/keymaps/jerryhcooke/keymap.c39
-rw-r--r--keyboards/keebio/iris/keymaps/jerryhcooke/readme.md3
-rw-r--r--keyboards/keebio/iris/keymaps/jerryhcooke/rules.mk3
-rw-r--r--keyboards/keebio/iris/keymaps/jhelvy/README.md7
-rw-r--r--keyboards/keebio/iris/keymaps/jhelvy/config.h (renamed from keyboards/mehkee96/i2c.h)22
-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/levinson/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/README.md15
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/asci-keymap.txt55
-rwxr-xr-xkeyboards/keebio/levinson/keymaps/issmirnov/build.sh2
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/config.h34
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/keymap.c124
-rwxr-xr-xkeyboards/keebio/levinson/keymaps/issmirnov/push.sh2
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/rgb.c61
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/rgb.h15
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/rules.mk14
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/sounds.h9
-rw-r--r--keyboards/keebio/levinson/keymaps/issmirnov/template.txt9
-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/nyquist/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/quefrency/keymaps/bcat/config.h8
-rw-r--r--keyboards/keebio/quefrency/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/rorschach/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/tragicforce68/info.json2
-rw-r--r--keyboards/keebio/tragicforce68/keymaps/default/keymap.c4
-rw-r--r--keyboards/keebio/tragicforce68/rules.mk2
-rw-r--r--keyboards/keebio/tragicforce68/tragicforce68.h4
-rw-r--r--keyboards/keebio/viterbi/keymaps/default/keymap.c1
-rw-r--r--keyboards/keebio/viterbi/keymaps/drashna/config.h31
-rw-r--r--keyboards/keebio/viterbi/keymaps/drashna/keymap.c50
-rw-r--r--keyboards/keebio/wavelet/keymaps/default/keymap.c1
-rw-r--r--keyboards/kingly_keys/romac/readme.md2
-rw-r--r--keyboards/kingly_keys/romac_plus/readme.md2
-rw-r--r--keyboards/kingly_keys/ropro/readme.md2
-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/kudox/columner/columner.c0
-rw-r--r--keyboards/kudox/columner/columner.h23
-rw-r--r--keyboards/kudox/columner/config.h91
-rw-r--r--keyboards/kudox/columner/info.json77
-rw-r--r--keyboards/kudox/columner/keymaps/default/config.h (renamed from keyboards/kudox/keymaps/default/config.h)0
-rw-r--r--keyboards/kudox/columner/keymaps/default/keymap.c63
-rw-r--r--keyboards/kudox/columner/keymaps/default/readme.md1
-rw-r--r--keyboards/kudox/columner/readme.md32
-rw-r--r--keyboards/kudox/columner/rules.mk0
-rw-r--r--keyboards/kudox/kudox.h6
-rw-r--r--keyboards/kudox/readme.md11
-rw-r--r--keyboards/kudox/rev1/info.json (renamed from keyboards/kudox/info.json)6
-rw-r--r--keyboards/kudox/rev1/keymaps/default/config.h (renamed from keyboards/kudox/keymaps/jis/config.h)0
-rw-r--r--keyboards/kudox/rev1/keymaps/default/keymap.c (renamed from keyboards/kudox/keymaps/default/keymap.c)0
-rw-r--r--keyboards/kudox/rev1/keymaps/default/readme.md (renamed from keyboards/kudox/keymaps/default/readme.md)0
-rw-r--r--keyboards/kudox/rev1/keymaps/jis/config.h (renamed from keyboards/kudox/keymaps/x1/config.h)0
-rw-r--r--keyboards/kudox/rev1/keymaps/jis/keymap.c (renamed from keyboards/kudox/keymaps/jis/keymap.c)0
-rw-r--r--keyboards/kudox/rev1/keymaps/jis/readme.md (renamed from keyboards/kudox/keymaps/jis/readme.md)0
-rw-r--r--keyboards/kudox/rev1/keymaps/jis/rules.mk0
-rw-r--r--keyboards/kudox/rev1/keymaps/x1/config.h17
-rw-r--r--keyboards/kudox/rev1/keymaps/x1/keymap.c (renamed from keyboards/kudox/keymaps/x1/keymap.c)0
-rw-r--r--keyboards/kudox/rev1/keymaps/x1/readme.md (renamed from keyboards/kudox/keymaps/x1/readme.md)0
-rw-r--r--keyboards/kudox/rev1/keymaps/x1/rules.mk0
-rw-r--r--keyboards/kudox/rev2/config.h91
-rw-r--r--keyboards/kudox/rev2/info.json77
-rw-r--r--keyboards/kudox/rev2/keymaps/default/config.h17
-rw-r--r--keyboards/kudox/rev2/keymaps/default/keymap.c49
-rw-r--r--keyboards/kudox/rev2/keymaps/default/readme.md3
-rw-r--r--keyboards/kudox/rev2/keymaps/jis/config.h17
-rw-r--r--keyboards/kudox/rev2/keymaps/jis/keymap.c48
-rw-r--r--keyboards/kudox/rev2/keymaps/jis/readme.md3
-rw-r--r--keyboards/kudox/rev2/keymaps/jis/rules.mk0
-rw-r--r--keyboards/kudox/rev2/rev2.c0
-rw-r--r--keyboards/kudox/rev2/rev2.h23
-rw-r--r--keyboards/kudox/rev2/rules.mk0
-rw-r--r--keyboards/kudox/rules.mk2
-rw-r--r--keyboards/kyria/config.h18
-rw-r--r--keyboards/kyria/info.json23
-rw-r--r--keyboards/kyria/keymaps/default/config.h32
-rw-r--r--keyboards/kyria/keymaps/default/keymap.c219
-rw-r--r--keyboards/kyria/keymaps/default/rules.mk3
-rw-r--r--keyboards/kyria/keymaps/drashna/config.h38
-rw-r--r--keyboards/kyria/keymaps/drashna/keymap.c372
-rw-r--r--keyboards/kyria/keymaps/drashna/rules.mk22
-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/keymaps/thomasbaart/config.h47
-rw-r--r--keyboards/kyria/keymaps/thomasbaart/keymap.c333
-rw-r--r--keyboards/kyria/keymaps/thomasbaart/rules.mk5
-rw-r--r--keyboards/kyria/kyria.c16
-rw-r--r--keyboards/kyria/kyria.h43
-rw-r--r--keyboards/kyria/readme.md21
-rw-r--r--keyboards/kyria/rev1/config.h65
-rw-r--r--keyboards/kyria/rev1/rev1.c1
-rw-r--r--keyboards/kyria/rev1/rev1.h43
-rw-r--r--keyboards/kyria/rev1/rules.mk3
-rw-r--r--keyboards/kyria/rules.mk36
-rw-r--r--keyboards/launchpad/keymaps/default/keymap.c1
-rw-r--r--keyboards/lazydesigners/dimple/keymaps/default/keymap.c4
-rw-r--r--keyboards/lazydesigners/the30/config.h42
-rw-r--r--keyboards/lazydesigners/the30/info.json44
-rw-r--r--keyboards/lazydesigners/the30/keymaps/default/keymap.c56
-rw-r--r--keyboards/lazydesigners/the30/keymaps/default/readme.md25
-rw-r--r--keyboards/lazydesigners/the30/readme.md21
-rw-r--r--keyboards/lazydesigners/the30/rules.mk35
-rw-r--r--keyboards/lazydesigners/the30/the30.c16
-rw-r--r--keyboards/lazydesigners/the30/the30.h38
-rw-r--r--keyboards/leeku/finger65/config.h45
-rw-r--r--keyboards/leeku/finger65/finger65.h61
-rw-r--r--keyboards/leeku/finger65/info.json1095
-rw-r--r--keyboards/leeku/finger65/keymaps/default/keymap.c36
-rw-r--r--keyboards/leeku/finger65/keymaps/madhatter/keymap.c54
-rw-r--r--keyboards/leeku/finger65/keymaps/madhatter/rules.mk1
-rw-r--r--keyboards/leeku/finger65/readme.md16
-rw-r--r--keyboards/leeku/finger65/rules.mk25
-rw-r--r--keyboards/leeku/finger65/usbconfig.h364
-rw-r--r--keyboards/lets_split/keymaps/default/keymap.c2
-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/default/keymap.c1
-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/m10a/keymaps/default/keymap.c1
-rw-r--r--keyboards/maartenwut/plain60/keymaps/default/keymap.c16
-rw-r--r--keyboards/maartenwut/plain60/rules.mk12
-rw-r--r--keyboards/maartenwut/wasdat/wasdat.c29
-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/alt/keymaps/xulkal/config.h (renamed from keyboards/winkeyless/bminiex/i2c.h)12
-rw-r--r--keyboards/massdrop/alt/keymaps/xulkal/keymap.c79
-rw-r--r--keyboards/massdrop/alt/keymaps/xulkal/rules.mk1
-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.md75
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/config.h74
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/config_led.c82
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/keymap.c421
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/rules.mk12
-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--[-rwxr-xr-x]keyboards/matrix/noah/boards/noah_bd/board.c (renamed from keyboards/nk65/boards/GENERIC_STM32_F303XC/board.c)5
-rw-r--r--keyboards/matrix/noah/boards/noah_bd/board.h (renamed from keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h)1441
-rw-r--r--keyboards/matrix/noah/boards/noah_bd/board.mk5
-rw-r--r--[-rwxr-xr-x]keyboards/matrix/noah/bootloader_defs.h (renamed from keyboards/nk65/bootloader_defs.h)2
-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/i2c.c104
-rw-r--r--keyboards/mechmini/v1/rules.mk19
-rw-r--r--keyboards/mechmini/v1/usbconfig.h12
-rw-r--r--keyboards/mechmini/v1/v1.c60
-rw-r--r--keyboards/mehkee96/config.h1
-rw-r--r--keyboards/mehkee96/i2c.c106
-rw-r--r--keyboards/mehkee96/mehkee96.c65
-rw-r--r--keyboards/mehkee96/readme.md37
-rw-r--r--keyboards/mehkee96/rules.mk4
-rw-r--r--keyboards/mehkee96/usbconfig.h12
-rw-r--r--keyboards/minidox/keymaps/default/keymap.c1
-rw-r--r--keyboards/mint60/keymaps/default/keymap.c1
-rw-r--r--keyboards/model01/keymaps/default/keymap.c2
-rw-r--r--keyboards/model01/keymaps/dshields/keymap.c9
-rw-r--r--keyboards/mt40/i2c.c104
-rw-r--r--keyboards/mt40/mt40.c29
-rw-r--r--keyboards/mt40/readme.md21
-rw-r--r--keyboards/mt40/rules.mk4
-rw-r--r--keyboards/mt40/usbconfig.h12
-rw-r--r--keyboards/nafuda/config.h69
-rw-r--r--keyboards/nafuda/info.json20
-rw-r--r--keyboards/nafuda/keymaps/default/config.h23
-rw-r--r--keyboards/nafuda/keymaps/default/keymap.c61
-rw-r--r--keyboards/nafuda/keymaps/default/readme.md34
-rw-r--r--keyboards/nafuda/nafuda.c5
-rw-r--r--keyboards/nafuda/nafuda.h24
-rw-r--r--keyboards/nafuda/readme.md17
-rw-r--r--keyboards/nafuda/rules.mk33
-rw-r--r--keyboards/naked48/keymaps/default/keymap.c2
-rw-r--r--keyboards/naked60/keymaps/default/keymap.c1
-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/newgame40/keymaps/default/keymap.c5
-rw-r--r--keyboards/niu_mini/keymaps/codecoffeecode/keymap.c103
-rw-r--r--keyboards/niu_mini/keymaps/codecoffeecode/readme.md5
-rwxr-xr-xkeyboards/nk65/boards/GENERIC_STM32_F303XC/board.h1187
-rwxr-xr-xkeyboards/nk65/boards/GENERIC_STM32_F303XC/board.mk5
-rwxr-xr-xkeyboards/nk65/rules.mk52
-rw-r--r--keyboards/orthodox/keymaps/default/keymap.c2
-rw-r--r--keyboards/orthodox/keymaps/drashna/config.h45
-rw-r--r--keyboards/orthodox/keymaps/drashna/keymap.c39
-rw-r--r--keyboards/panc60/config.h1
-rw-r--r--keyboards/panc60/panc60.c55
-rw-r--r--keyboards/panc60/readme.md43
-rw-r--r--keyboards/panc60/rules.mk22
-rw-r--r--keyboards/panc60/usbconfig.h12
-rw-r--r--keyboards/pearl/config.h1
-rw-r--r--keyboards/pearl/pearl.c52
-rw-r--r--keyboards/pearl/readme.md43
-rw-r--r--keyboards/pearl/rules.mk20
-rw-r--r--keyboards/pearl/usbconfig.h12
-rw-r--r--keyboards/percent/canoe/canoe.c92
-rw-r--r--keyboards/percent/canoe/canoe.h3
-rw-r--r--keyboards/percent/canoe/config.h1
-rw-r--r--keyboards/percent/canoe/i2c.c106
-rw-r--r--keyboards/percent/canoe/i2c.h27
-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/readme.md37
-rw-r--r--keyboards/percent/canoe/rules.mk21
-rw-r--r--keyboards/percent/canoe/usbconfig.h12
-rw-r--r--keyboards/percent/skog/README.md42
-rw-r--r--keyboards/percent/skog/config.h1
-rw-r--r--keyboards/percent/skog/i2c.c106
-rw-r--r--keyboards/percent/skog/rules.mk19
-rw-r--r--keyboards/percent/skog/skog.c66
-rw-r--r--keyboards/percent/skog/usbconfig.h12
-rw-r--r--keyboards/percent/skog_lite/config.h1
-rw-r--r--keyboards/percent/skog_lite/readme.md43
-rw-r--r--keyboards/percent/skog_lite/rules.mk19
-rw-r--r--keyboards/percent/skog_lite/skog_lite.c49
-rw-r--r--keyboards/percent/skog_lite/usbconfig.h12
-rw-r--r--keyboards/pico/config.h27
-rw-r--r--keyboards/pico/info.json76
-rw-r--r--keyboards/pico/keymaps/default/config.h18
-rw-r--r--keyboards/pico/keymaps/default/keymap.c46
-rw-r--r--keyboards/pico/keymaps/default/readme.md3
-rw-r--r--keyboards/pico/keymaps/jis/config.h18
-rw-r--r--keyboards/pico/keymaps/jis/keymap.c47
-rw-r--r--keyboards/pico/keymaps/jis/readme.md3
-rw-r--r--keyboards/pico/pico.c16
-rw-r--r--keyboards/pico/pico.h23
-rw-r--r--keyboards/pico/readme.md17
-rw-r--r--keyboards/pico/rev1/config.h91
-rw-r--r--keyboards/pico/rev1/rev1.c0
-rw-r--r--keyboards/pico/rev1/rev1.h24
-rw-r--r--keyboards/pico/rev1/rules.mk0
-rw-r--r--keyboards/pico/rules.mk36
-rw-r--r--keyboards/plaid/config.h1
-rw-r--r--keyboards/plaid/keymaps/default/keymap.c3
-rw-r--r--keyboards/plaid/readme.md6
-rw-r--r--keyboards/plaid/rules.mk6
-rw-r--r--keyboards/plaid/usbconfig.h13
-rw-r--r--keyboards/planck/ez/rules.mk4
-rw-r--r--keyboards/planck/keymaps/callum/keymap.c12
-rw-r--r--keyboards/planck/keymaps/callum/readme.md2
-rw-r--r--keyboards/planck/keymaps/default/keymap.c1
-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.c5
-rw-r--r--keyboards/planck/rev6/config.h17
-rw-r--r--keyboards/planck/rev6/rules.mk12
-rw-r--r--keyboards/preonic/keymaps/kjwon15/keymap.c18
-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/config.h18
-rw-r--r--keyboards/preonic/rev3/rev3.c16
-rw-r--r--keyboards/preonic/rev3/rules.mk7
-rw-r--r--keyboards/primekb/prime_e/keymaps/default/keymap.c4
-rw-r--r--keyboards/projectkb/alice/alice.c24
-rw-r--r--keyboards/projectkb/alice/keymaps/default/keymap.c2
-rw-r--r--keyboards/projectkb/alice/keymaps/madhatter/keymap.c48
-rw-r--r--keyboards/projectkb/alice/keymaps/madhatter/rules.mk1
-rw-r--r--keyboards/qwertyydox/keymaps/default/keymap.c1
-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/redox/keymaps/tw1t611/config.h17
-rw-r--r--keyboards/redox/keymaps/tw1t611/keymap.c36
-rw-r--r--keyboards/redox/keymaps/tw1t611/readme.md1
-rw-r--r--keyboards/redscarf_iiplus/verd/config.h251
-rw-r--r--keyboards/redscarf_iiplus/verd/info.json190
-rw-r--r--keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c81
-rw-r--r--keyboards/redscarf_iiplus/verd/keymaps/default/keymap.c37
-rw-r--r--keyboards/redscarf_iiplus/verd/keymaps/default/readme.md1
-rw-r--r--keyboards/redscarf_iiplus/verd/matrix.c391
-rw-r--r--keyboards/redscarf_iiplus/verd/readme.md24
-rw-r--r--keyboards/redscarf_iiplus/verd/rules.mk36
-rw-r--r--keyboards/redscarf_iiplus/verd/verd.c42
-rw-r--r--keyboards/redscarf_iiplus/verd/verd.h55
-rw-r--r--keyboards/retro_75/chconf.h524
-rw-r--r--keyboards/retro_75/config.h249
-rw-r--r--keyboards/retro_75/halconf.h353
-rw-r--r--keyboards/retro_75/info.json15
-rw-r--r--keyboards/retro_75/keymaps/default/keymap.c22
-rw-r--r--keyboards/retro_75/keymaps/split_backspace/keymap.c22
-rw-r--r--keyboards/retro_75/mcuconf.h171
-rw-r--r--keyboards/retro_75/readme.md15
-rw-r--r--keyboards/retro_75/retro_75.c1
-rw-r--r--keyboards/retro_75/retro_75.h61
-rw-r--r--keyboards/retro_75/rules.mk54
-rwxr-xr-xkeyboards/reviung34/keymaps/default/keymap.c3
-rw-r--r--keyboards/reviung39/keymaps/default/keymap.c2
-rw-r--r--keyboards/rgbkb/sol/keymaps/xyverz/keymap.c411
-rw-r--r--keyboards/rgbkb/sol/keymaps/xyverz/rules.mk5
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c11
-rw-r--r--keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h (renamed from keyboards/bfake/i2c.h)27
-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/rgbkb/zen/rev2/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/3x6/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/3x7/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/3x8/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/4x6/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/4x7/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/4x8/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/5x6/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/5x7/keymaps/default/keymap.c1
-rw-r--r--keyboards/runner3680/5x8/keymaps/default/keymap.c1
-rw-r--r--keyboards/setta21/config.h (renamed from keyboards/mt40/i2c.h)12
-rw-r--r--keyboards/setta21/info.json34
-rw-r--r--keyboards/setta21/keymaps/default/config.h23
-rw-r--r--keyboards/setta21/keymaps/default/keymap.c69
-rw-r--r--keyboards/setta21/keymaps/default/readme.md38
-rw-r--r--keyboards/setta21/keymaps/salicylic/config.h40
-rw-r--r--keyboards/setta21/keymaps/salicylic/keymap.c197
-rw-r--r--keyboards/setta21/keymaps/salicylic/readme.md49
-rw-r--r--keyboards/setta21/keymaps/salicylic/rules.mk3
-rw-r--r--keyboards/setta21/readme.md17
-rw-r--r--keyboards/setta21/rev1/config.h67
-rw-r--r--keyboards/setta21/rev1/rev1.c25
-rw-r--r--keyboards/setta21/rev1/rev1.h18
-rw-r--r--keyboards/setta21/rev1/rules.mk0
-rw-r--r--keyboards/setta21/rules.mk37
-rw-r--r--keyboards/setta21/setta21.c1
-rw-r--r--keyboards/setta21/setta21.h7
-rw-r--r--keyboards/shiro/keymaps/default_mac/config.h19
-rw-r--r--keyboards/shiro/keymaps/default_mac/keymap.c50
-rw-r--r--keyboards/shiro/keymaps/default_mac/readme.md1
-rw-r--r--keyboards/singa/config.h1
-rw-r--r--keyboards/singa/readme.md44
-rw-r--r--keyboards/singa/rules.mk19
-rw-r--r--keyboards/singa/singa.c49
-rw-r--r--keyboards/singa/usbconfig.h12
-rw-r--r--keyboards/spacetime/keymaps/default/keymap.c2
-rwxr-xr-xkeyboards/staryu/keymaps/default/keymap.c4
-rw-r--r--keyboards/tanuki/keymaps/default/keymap.c4
-rw-r--r--keyboards/tg4x/config.h251
-rw-r--r--keyboards/tg4x/info.json12
-rw-r--r--keyboards/tg4x/keymaps/default/config.h19
-rw-r--r--keyboards/tg4x/keymaps/default/keymap.c28
-rw-r--r--keyboards/tg4x/keymaps/default/readme.md1
-rw-r--r--keyboards/tg4x/readme.md17
-rw-r--r--keyboards/tg4x/rules.mk34
-rw-r--r--keyboards/tg4x/tg4x.c51
-rw-r--r--keyboards/tg4x/tg4x.h21
-rw-r--r--keyboards/tgr/alice/alice.c39
-rw-r--r--keyboards/tgr/alice/config.h1
-rw-r--r--keyboards/tgr/alice/readme.md41
-rw-r--r--keyboards/tgr/alice/rules.mk19
-rw-r--r--keyboards/tgr/alice/usbconfig.h12
-rw-r--r--keyboards/tgr/jane/config.h1
-rw-r--r--keyboards/tgr/jane/jane.c51
-rw-r--r--keyboards/tgr/jane/readme.md42
-rw-r--r--keyboards/tgr/jane/rules.mk19
-rw-r--r--keyboards/tgr/jane/usbconfig.h12
-rw-r--r--keyboards/the_ruler/keymaps/default/keymap.c1
-rw-r--r--keyboards/thedogkeyboard/config.h246
-rw-r--r--keyboards/thedogkeyboard/info.json12
-rw-r--r--keyboards/thedogkeyboard/keymaps/default/keymap.c28
-rw-r--r--keyboards/thedogkeyboard/keymaps/default/readme.md1
-rw-r--r--keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c43
-rw-r--r--keyboards/thedogkeyboard/keymaps/kakunpc/readme.md1
-rw-r--r--keyboards/thedogkeyboard/matrix.c287
-rw-r--r--keyboards/thedogkeyboard/readme.md15
-rw-r--r--keyboards/thedogkeyboard/rules.mk35
-rw-r--r--keyboards/thedogkeyboard/thedogkeyboard.c16
-rw-r--r--keyboards/thedogkeyboard/thedogkeyboard.h59
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/danbee/keymap.c62
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/danbee/rules.mk2
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/keymap.c1
-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/roadkit/keymaps/default/keymap.c1
-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/treadstone32/keymaps/default/keymap.c1
-rw-r--r--keyboards/treadstone48/keymaps/default/config.h1
-rw-r--r--keyboards/treadstone48/keymaps/default/keymap.c1
-rw-r--r--keyboards/treadstone48/rev1/config.h1
-rw-r--r--keyboards/ua62/config.h250
-rw-r--r--keyboards/ua62/info.json12
-rw-r--r--keyboards/ua62/keymaps/default/keymap.c43
-rw-r--r--keyboards/ua62/readme.md14
-rw-r--r--keyboards/ua62/rules.mk32
-rw-r--r--keyboards/ua62/ua62.c17
-rw-r--r--keyboards/ua62/ua62.h41
-rw-r--r--keyboards/unikorn/config.h1
-rw-r--r--keyboards/unikorn/readme.md59
-rw-r--r--keyboards/unikorn/rules.mk19
-rw-r--r--keyboards/unikorn/unikorn.c50
-rw-r--r--keyboards/unikorn/usbconfig.h12
-rw-r--r--keyboards/ut472/keymaps/hvp/config.h22
-rw-r--r--keyboards/ut472/keymaps/hvp/keymap.c99
-rw-r--r--keyboards/ut472/keymaps/hvp/readme.md5
-rw-r--r--keyboards/ut472/keymaps/hvp/rules.mk1
-rw-r--r--keyboards/uzu42/info.json55
-rw-r--r--keyboards/uzu42/keymaps/default/keymap.c1
-rw-r--r--keyboards/v60_type_r/config.h8
-rw-r--r--keyboards/v60_type_r/rules.mk9
-rw-r--r--keyboards/v60_type_r/v60_type_r.c10
-rw-r--r--keyboards/v60_type_r/v60_type_r.h2
-rw-r--r--keyboards/vision_division/keymaps/default/keymap.c1
-rw-r--r--keyboards/vitamins_included/keymaps/default/keymap.c1
-rw-r--r--keyboards/waldo/keymaps/default/keymap.c1
-rw-r--r--keyboards/winkeyless/bface/README.md41
-rw-r--r--keyboards/winkeyless/bface/bface.c49
-rw-r--r--keyboards/winkeyless/bface/bface.h4
-rw-r--r--keyboards/winkeyless/bface/config.h1
-rw-r--r--keyboards/winkeyless/bface/rules.mk20
-rw-r--r--keyboards/winkeyless/bface/usbconfig.h12
-rw-r--r--keyboards/winkeyless/bmini/bmini.c26
-rw-r--r--keyboards/winkeyless/bmini/config.h1
-rw-r--r--keyboards/winkeyless/bmini/i2c.c106
-rw-r--r--keyboards/winkeyless/bmini/i2c.h27
-rw-r--r--keyboards/winkeyless/bmini/readme.md38
-rw-r--r--keyboards/winkeyless/bmini/rules.mk19
-rw-r--r--keyboards/winkeyless/bmini/usbconfig.h12
-rw-r--r--keyboards/winkeyless/bminiex/bminiex.c61
-rw-r--r--keyboards/winkeyless/bminiex/config.h1
-rw-r--r--keyboards/winkeyless/bminiex/i2c.c106
-rw-r--r--keyboards/winkeyless/bminiex/readme.md10
-rw-r--r--keyboards/winkeyless/bminiex/rules.mk19
-rw-r--r--keyboards/winkeyless/bminiex/usbconfig.h12
-rw-r--r--keyboards/xbows/knight/config.h4
-rw-r--r--keyboards/xbows/knight/keymaps/default/keymap.c12
-rw-r--r--keyboards/xbows/knight/knight.c32
-rw-r--r--keyboards/xbows/knight/knight.h4
-rw-r--r--keyboards/xbows/woody/config.h3
-rw-r--r--keyboards/xbows/woody/keymaps/default/keymap.c10
-rw-r--r--keyboards/xd60/info.json4
-rw-r--r--keyboards/xd60/keymaps/default/readme.md6
-rw-r--r--keyboards/xd60/keymaps/iso/keymap.c39
-rw-r--r--keyboards/xd60/keymaps/iso/readme.md19
-rw-r--r--keyboards/xd60/readme.md19
-rw-r--r--keyboards/xd60/rev2/config.h5
-rw-r--r--keyboards/xd60/rev2/rules.mk2
-rw-r--r--keyboards/xd60/rev3/rules.mk2
-rw-r--r--keyboards/xd60/xd60.h18
-rw-r--r--keyboards/xd68/config.h110
-rw-r--r--keyboards/xd68/keymaps/default/config.h5
-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/config.h4
-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.mk32
-rwxr-xr-xkeyboards/xd68/xd68.c22
-rwxr-xr-xkeyboards/xd68/xd68.h69
-rw-r--r--keyboards/xd84/matrix.c80
-rw-r--r--keyboards/ymd75/README.md84
-rw-r--r--keyboards/ymd75/config.h1
-rw-r--r--keyboards/ymd75/i2c.c104
-rw-r--r--keyboards/ymd75/i2c.h25
-rw-r--r--keyboards/ymd75/rules.mk20
-rw-r--r--keyboards/ymd75/usbconfig.h12
-rw-r--r--keyboards/ymd75/ymd75.c67
-rw-r--r--keyboards/ymd96/config.h2
-rw-r--r--keyboards/ymd96/i2c.c104
-rw-r--r--keyboards/ymd96/i2c.h25
-rw-r--r--keyboards/ymd96/readme.md66
-rw-r--r--keyboards/ymd96/rules.mk19
-rw-r--r--keyboards/ymd96/usbconfig.h13
-rw-r--r--keyboards/ymd96/ymd96.c66
-rw-r--r--keyboards/ymdk/bface/README.md46
-rw-r--r--keyboards/ymdk/bface/config.h1
-rw-r--r--keyboards/ymdk/bface/usbconfig.h12
-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.h3
-rw-r--r--keyboards/ymdk_np21/i2c.c104
-rw-r--r--keyboards/ymdk_np21/i2c.h25
-rw-r--r--keyboards/ymdk_np21/rules.mk20
-rw-r--r--keyboards/ymdk_np21/usbconfig.h13
-rw-r--r--keyboards/ymdk_np21/ymdk_np21.c45
-rw-r--r--keyboards/yosino58/keymaps/default/keymap.c6
-rw-r--r--keyboards/zinc/keymaps/default/keymap.c3
-rw-r--r--keyboards/zinc/rev1/config.h1
-rw-r--r--keyboards/zinc/reva/config.h1
-rw-r--r--layouts/community/ergodox/drashna/config.h15
-rw-r--r--layouts/community/ergodox/drashna/keymap.c33
-rw-r--r--layouts/community/ergodox/drashna/rules.mk4
-rw-r--r--layouts/community/ergodox/issmirnov/README.md49
-rw-r--r--layouts/community/ergodox/issmirnov/asci-keymap.txt95
-rwxr-xr-xlayouts/community/ergodox/issmirnov/build.sh2
-rw-r--r--layouts/community/ergodox/issmirnov/config.h3
-rw-r--r--layouts/community/ergodox/issmirnov/keymap.c250
-rwxr-xr-xlayouts/community/ergodox/issmirnov/push.sh2
-rw-r--r--layouts/community/ergodox/issmirnov/template.txt17
-rw-r--r--layouts/community/ergodox/manna-harbour_miryoku/keymap.c3
-rw-r--r--layouts/community/ergodox/qwerty_code_friendly/keymap.c74
-rw-r--r--layouts/community/ergodox/qwerty_code_friendly/readme.md28
-rw-r--r--layouts/community/numpad_5x6/drashna/config.h20
-rw-r--r--layouts/community/numpad_5x6/drashna/keymap.c1
-rw-r--r--layouts/community/ortho_4x12/drashna/config.h37
-rw-r--r--layouts/community/ortho_4x12/drashna/keymap.c81
-rw-r--r--layouts/community/ortho_4x12/drashna/rules.mk60
-rw-r--r--layouts/community/ortho_4x12/jotix/keymap.c71
-rw-r--r--layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c3
-rw-r--r--layouts/community/ortho_5x12/drashna/keymap.c32
-rw-r--r--layouts/community/ortho_5x12/drashna/rules.mk18
-rw-r--r--layouts/default/60_abnt2/default_60_abnt2/keymap.c47
-rw-r--r--layouts/default/60_abnt2/info.json80
-rw-r--r--layouts/default/60_abnt2/layout.json5
-rw-r--r--layouts/default/60_abnt2/readme.md3
-rw-r--r--layouts/default/60_ansi/default_60_ansi/keymap.c27
-rw-r--r--layouts/default/60_ansi/info.json78
-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/info.json80
-rw-r--r--layouts/default/60_ansi_split_bs_rshift/layout.json2
-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_ansi_tsangan/info.json77
-rw-r--r--layouts/default/60_ansi_tsangan/layout.json2
-rw-r--r--layouts/default/60_hhkb/default_60_hhkb/keymap.c100
-rw-r--r--layouts/default/60_hhkb/info.json77
-rw-r--r--layouts/default/60_hhkb/layout.json10
-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/info.json79
-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_iso_tsangan/info.json78
-rw-r--r--layouts/default/60_iso_tsangan/layout.json2
-rw-r--r--layouts/default/60_tsangan_hhkb/default_60_tsangan_hhkb/keymap.c35
-rw-r--r--layouts/default/60_tsangan_hhkb/info.json79
-rw-r--r--layouts/default/60_tsangan_hhkb/layout.json4
-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/info.json85
-rw-r--r--layouts/default/65_ansi/layout.json2
-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/info.json84
-rw-r--r--layouts/default/65_ansi_blocker/layout.json1
-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/info.json86
-rw-r--r--layouts/default/65_iso/layout.json2
-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_ansi/info.json83
-rw-r--r--layouts/default/66_ansi/layout.json10
-rw-r--r--layouts/default/66_iso/default_66_iso/keymap.c23
-rw-r--r--layouts/default/66_iso/info.json84
-rw-r--r--layouts/default/66_iso/layout.json10
-rw-r--r--layouts/default/68_ansi/default_68_ansi/keymap.c29
-rw-r--r--layouts/default/68_ansi/info.json85
-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/info.json102
-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/info.json103
-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/info.json104
-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/info.json122
-rw-r--r--layouts/default/fullsize_ansi/layout.json12
-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/info.json123
-rw-r--r--layouts/default/fullsize_iso/layout.json12
-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/info.json29
-rw-r--r--layouts/default/numpad_4x4/layout.json2
-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/info.json34
-rw-r--r--layouts/default/numpad_5x4/layout.json2
-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_5x6/info.json44
-rw-r--r--layouts/default/numpad_5x6/layout.json11
-rw-r--r--layouts/default/numpad_6x4/default_numpad_6x4/keymap.c62
-rw-r--r--layouts/default/numpad_6x4/info.json39
-rw-r--r--layouts/default/numpad_6x4/layout.json2
-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_3x10/info.json45
-rw-r--r--layouts/default/ortho_3x10/layout.json2
-rw-r--r--layouts/default/ortho_4x10/default_ortho_4x10/keymap.c21
-rw-r--r--layouts/default/ortho_4x10/info.json56
-rw-r--r--layouts/default/ortho_4x10/layout.json2
-rw-r--r--layouts/default/ortho_4x12/default_ortho_4x12/keymap.c23
-rw-r--r--layouts/default/ortho_4x12/info.json64
-rw-r--r--layouts/default/ortho_4x12/layout.json4
-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/info.json32
-rw-r--r--layouts/default/ortho_4x4/layout.json2
-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/info.json77
-rw-r--r--layouts/default/ortho_5x12/layout.json2
-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_5x14/info.json87
-rw-r--r--layouts/default/ortho_5x14/layout.json10
-rw-r--r--layouts/default/ortho_5x15/default_ortho_5x15/keymap.c25
-rw-r--r--layouts/default/ortho_5x15/info.json92
-rw-r--r--layouts/default/ortho_5x15/layout.json2
-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/info.json37
-rw-r--r--layouts/default/ortho_5x4/layout.json2
-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/info.json42
-rw-r--r--layouts/default/ortho_6x4/layout.json4
-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/info.json63
-rw-r--r--layouts/default/planck_mit/layout.json2
-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/info.json105
-rw-r--r--layouts/default/tkl_ansi/layout.json12
-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/info.json106
-rw-r--r--layouts/default/tkl_iso/layout.json12
-rw-r--r--layouts/default/tkl_iso/readme.md2
-rw-r--r--lib/python/kle2xy.py146
-rw-r--r--lib/python/milc.py179
-rw-r--r--lib/python/qmk/cli/__init__.py2
-rw-r--r--lib/python/qmk/cli/cformat.py11
-rwxr-xr-xlib/python/qmk/cli/compile.py16
-rw-r--r--lib/python/qmk/cli/config.py96
-rw-r--r--lib/python/qmk/cli/docs.py10
-rwxr-xr-xlib/python/qmk/cli/doctor.py13
-rw-r--r--lib/python/qmk/cli/flash.py83
-rwxr-xr-xlib/python/qmk/cli/json/keymap.py5
-rwxr-xr-xlib/python/qmk/cli/kle2json.py75
-rw-r--r--lib/python/qmk/cli/list/keyboards.py27
-rw-r--r--lib/python/qmk/cli/pytest.py16
-rw-r--r--lib/python/qmk/commands.py54
-rw-r--r--lib/python/qmk/converter.py33
-rw-r--r--lib/python/qmk/errors.py1
-rw-r--r--lib/python/qmk/keymap.py4
-rw-r--r--lib/python/qmk/path.py1
-rw-r--r--lib/python/qmk/tests/attrdict.py1
-rw-r--r--lib/python/qmk/tests/kle.txt5
-rw-r--r--lib/python/qmk/tests/test_cli_commands.py11
-rw-r--r--lib/python/qmk/tests/test_qmk_errors.py2
-rw-r--r--lib/python/qmk/tests/test_qmk_path.py2
-rw-r--r--quantum/backlight/backlight_avr.c2
-rw-r--r--quantum/config_common.h39
-rw-r--r--quantum/dip_switch.c37
-rw-r--r--quantum/dynamic_macro.h20
-rw-r--r--quantum/encoder.c46
-rw-r--r--quantum/keymap_common.c14
-rw-r--r--quantum/keymap_extras/keymap_italian.h54
-rw-r--r--quantum/keymap_extras/keymap_italian_osx_ansi.h60
-rw-r--r--quantum/keymap_extras/keymap_italian_osx_iso.h60
-rw-r--r--quantum/mcu_selection.mk17
-rw-r--r--quantum/process_keycode/process_dynamic_macro.c257
-rw-r--r--quantum/process_keycode/process_dynamic_macro.h41
-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_tap_dance.h6
-rw-r--r--quantum/process_keycode/process_terminal.c2
-rw-r--r--quantum/quantum.c504
-rw-r--r--quantum/quantum.h35
-rw-r--r--quantum/quantum_keycodes.h49
-rw-r--r--quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h6
-rw-r--r--quantum/rgb_matrix_drivers.c3
-rw-r--r--quantum/rgblight.c29
-rw-r--r--quantum/send_string_keycodes.h575
-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/chconf.h39
-rw-r--r--quantum/stm32/proton_c.mk2
-rw-r--r--quantum/template/avr/config.h7
-rw-r--r--quantum/template/base/keyboard.c4
-rw-r--r--quantum/template/base/keymaps/default/keymap.c6
-rw-r--r--quantum/template/ps2avrgb/config.h8
-rw-r--r--quantum/template/ps2avrgb/usbconfig.h12
-rw-r--r--readme.md4
-rw-r--r--requirements.txt4
-rw-r--r--setup.cfg9
-rw-r--r--shell.nix46
-rw-r--r--tmk_core/avr.mk4
-rw-r--r--tmk_core/common.mk3
-rw-r--r--tmk_core/common/action_layer.c2
-rw-r--r--tmk_core/common/action_layer.h2
-rw-r--r--tmk_core/common/arm_atsam/suspend.c3
-rw-r--r--tmk_core/common/chibios/suspend.c26
-rw-r--r--tmk_core/common/eeconfig.c6
-rw-r--r--tmk_core/common/host.c6
-rw-r--r--tmk_core/common/host.h2
-rw-r--r--tmk_core/common/keyboard.c10
-rw-r--r--tmk_core/common/keycode.h1
-rw-r--r--tmk_core/common/led.h13
-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/protocol.mk27
-rw-r--r--tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h7
-rw-r--r--tmk_core/protocol/chibios/main.c8
-rw-r--r--tmk_core/protocol/chibios/usb_main.c152
-rw-r--r--tmk_core/protocol/iwrap/iwrap.c3
-rw-r--r--tmk_core/protocol/iwrap/main.c2
-rw-r--r--tmk_core/protocol/lufa/adafruit_ble.cpp6
-rw-r--r--tmk_core/protocol/lufa/lufa.c7
-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/usb_descriptor.c1048
-rw-r--r--tmk_core/protocol/vusb/vusb.c28
-rw-r--r--tmk_core/rules.mk2
-rw-r--r--users/drashna/config.h14
-rw-r--r--users/drashna/drashna.c60
-rw-r--r--users/drashna/drashna.h5
-rw-r--r--users/drashna/font_gmk_bad.h241
-rw-r--r--users/drashna/hue_manitee_font.h241
-rw-r--r--users/drashna/process_records.c8
-rw-r--r--users/drashna/rgb_stuff.c194
-rw-r--r--users/drashna/rgb_stuff.h6
-rw-r--r--users/drashna/rgblight_breathe_table.h8
-rw-r--r--users/drashna/rules.mk23
-rw-r--r--users/drashna/template.c130
-rw-r--r--users/drashna/template.h15
-rw-r--r--users/dshields/config.h1
-rw-r--r--users/dshields/dshields.c5
-rw-r--r--users/dshields/dshields.h13
-rw-r--r--users/dshields/rules.mk1
-rw-r--r--users/issmirnov/config.h45
-rw-r--r--users/issmirnov/issmirnov.c43
-rw-r--r--users/issmirnov/issmirnov.h35
-rw-r--r--users/issmirnov/rows.h55
-rw-r--r--users/issmirnov/rules.mk25
-rw-r--r--users/issmirnov/tap_tog.c52
-rw-r--r--users/issmirnov/tap_tog.h10
-rw-r--r--users/manna-harbour_miryoku/config.h3
-rw-r--r--users/manna-harbour_miryoku/manna-harbour_miryoku.c26
-rw-r--r--users/manna-harbour_miryoku/miryoku.org148
-rw-r--r--users/manna-harbour_miryoku/rules.mk4
-rw-r--r--users/stanrc85/stanrc85.c21
-rw-r--r--users/twschum/config.h0
-rw-r--r--users/twschum/readme.md (renamed from keyboards/jj50/i2c.h)13
-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
-rw-r--r--users/xulkal/custom_rgb.h7
-rwxr-xr-xutil/activate_msys2.sh1
-rwxr-xr-xutil/activate_wsl.sh1
-rwxr-xr-xutil/atmega32a_program.py110
-rwxr-xr-xutil/docker_build.sh1
-rwxr-xr-xutil/linux_install.sh18
-rwxr-xr-xutil/macos_install.sh7
-rwxr-xr-xutil/msys2_install.sh66
-rwxr-xr-xutil/travis_build.sh79
-rwxr-xr-xutil/travis_compiled_push.sh3
-rwxr-xr-xutil/travis_docs.sh1
-rwxr-xr-xutil/travis_push.sh5
-rw-r--r--util/travis_test.sh27
-rwxr-xr-xutil/travis_utils.sh24
-rwxr-xr-xutil/win_shared_install.sh4
1585 files changed, 55923 insertions, 17892 deletions
diff --git a/.github/ISSUE_TEMPLATE/blank.md b/.github/ISSUE_TEMPLATE/blank.md
index 50a32034d6..5644802ef5 100644
--- a/.github/ISSUE_TEMPLATE/blank.md
+++ b/.github/ISSUE_TEMPLATE/blank.md
@@ -1,5 +1,11 @@
---
name: Blank issue
-about: If you're 100% sure that you don't need one of the other issue templates, use this one instead.
+about: If you're 100% sure that you don't need one of the other issue templates, use
+ this one instead.
+title: ''
+labels: help wanted, question
+assignees: ''
---
+
+
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 3c35416e04..57b415f7b3 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,7 +1,12 @@
---
name: Bug report
-about: Create a report to help us improve the QMK Firmware
+about: Create a report to help us improve QMK Firmware.
+title: "[Bug] "
+labels: bug, help wanted
+assignees: ''
+
---
+
<!-- Provide a general summary of the bug in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000000..0d4ca035c8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: false
+contact_links:
+ - name: QMK Discord
+ url: https://discord.gg/Uq7gcHh
+ about: Ask questions, discuss issues and features. Chill.
+ - name: OLKB Subreddit
+ url: https://www.reddit.com/r/olkb
+ about: All things OLKB and QMK.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 01aeb26cec..1876834247 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,7 +1,12 @@
---
name: Feature request
-about: Suggest a new feature or changes to existing features
+about: Suggest a new feature or changes to existing features.
+title: "[Feature Request] "
+labels: enhancement, help wanted
+assignees: ''
+
---
+
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
diff --git a/.github/ISSUE_TEMPLATE/other_issues.md b/.github/ISSUE_TEMPLATE/other_issues.md
index 7c4891ac31..befeeb165a 100644
--- a/.github/ISSUE_TEMPLATE/other_issues.md
+++ b/.github/ISSUE_TEMPLATE/other_issues.md
@@ -1,7 +1,12 @@
---
name: Other issues
-about: Anything else that doesn't fall into the above categories.
+about: Anything else that doesn't fall into the above categories.
+title: ''
+labels: help wanted, question
+assignees: ''
+
---
+
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
diff --git a/.github/stale.yml b/.github/stale.yml
new file mode 100644
index 0000000000..eb49888191
--- /dev/null
+++ b/.github/stale.yml
@@ -0,0 +1,58 @@
+# Configuration for probot-stale - https://github.com/probot/stale
+
+# General configuration
+
+# Pull request specific configuration
+pulls:
+ staleLabel: awaiting changes
+ # Number of days of inactivity before an Issue or Pull Request becomes stale
+ daysUntilStale: 45
+ # Number of days of inactivity before a stale Issue or Pull Request is closed.
+ # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
+ daysUntilClose: 30
+ # Comment to post when marking as stale. Set to `false` to disable
+ markComment: >
+ Thank you for your contribution!
+
+ 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!
+
+ This pull request has been automatically closed because it has not had activity in the last 30 days.
+ Please feel free to give a status update now, ping for review, or re-open when it's ready.
+ # Limit the number of actions per hour, from 1-30. Default is 30
+ limitPerRun: 30
+ exemptLabels:
+ - awaiting review
+ - breaking_change
+ - in progress
+ - on hold
+
+# Issue specific configuration
+issues:
+ staleLabel: stale
+ limitPerRun: 10
+ daysUntilStale: 90
+ daysUntilClose: 30
+ markComment: >
+ 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.
+ exemptLabels:
+ - bug
+ - in progress
+ - on hold
+ - discussion
+ - to do
diff --git a/.travis.yml b/.travis.yml
index 84fa63faf3..bfac998c11 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,6 +16,7 @@ install:
- npm install -g moxygen
script:
- git rev-parse --short HEAD
+ - git diff --name-only HEAD $TRAVIS_BRANCH
- bash util/travis_test.sh
- bash util/travis_build.sh
- bash util/travis_docs.sh
diff --git a/Makefile b/Makefile
index 508691f45f..8f02eea049 100644
--- a/Makefile
+++ b/Makefile
@@ -272,12 +272,14 @@ define PARSE_RULE
# If the rule starts with all, then continue the parsing from
# PARSE_ALL_KEYBOARDS
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all),true)
+ KEYBOARD_RULE=all
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
$$(eval $$(call PARSE_TEST))
# If the rule starts with the name of a known keyboard, then continue
# the parsing from PARSE_KEYBOARD
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
+ KEYBOARD_RULE=$$(MATCHED_ITEM)
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
# Otherwise use the KEYBOARD variable, which is determined either by
# the current directory you run make from, or passed in as an argument
@@ -380,6 +382,9 @@ define PARSE_KEYBOARD
# Otherwise try to match the keymap from the current folder, or arguments to the make command
else ifneq ($$(KEYMAP),)
$$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
+ # Otherwise if we are running make all:<user> just skip
+ else ifeq ($$(KEYBOARD_RULE),all)
+ # $$(info Skipping: No user keymap for $$(CURRENT_KB))
# Otherwise, make all keymaps, again this is consistent with how it works without
# any arguments
else
@@ -558,10 +563,10 @@ endef
if ! python3 --version 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
# Check if the submodules are dirty, and display a warning if they are
ifndef SKIP_GIT
- if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 1 --init lib/chibios; fi
- if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 1 --init lib/chibios-contrib; fi
- if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 1 --init lib/ugfx; fi
- if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 1 --init lib/lufa; fi
+ if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi
+ if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 50 --init lib/chibios-contrib; fi
+ if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 50 --init lib/ugfx; fi
+ if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \
case "$$x" in \
diff --git a/bin/qmk b/bin/qmk
index 5da8673ba0..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.')
@@ -41,7 +46,7 @@ else:
os.environ['QMK_VERSION'] = 'nogit-' + strftime('%Y-%m-%d-%H:%M:%S') + '-dirty'
# Setup the CLI
-import milc
+import milc # noqa
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}Ψ{style_reset_all}'
@@ -61,7 +66,7 @@ def main():
os.chdir(qmk_dir)
# Import the subcommands
- import qmk.cli
+ import qmk.cli # noqa
# Execute
return_code = milc.cli()
diff --git a/build_json.mk b/build_json.mk
index e2a33e3b6a..e04786144c 100644
--- a/build_json.mk
+++ b/build_json.mk
@@ -22,6 +22,5 @@ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
endif
# Generate the keymap.c
-ifneq ("$(KEYMAP_JSON)","")
- _ = $(shell test -e $(KEYMAP_C) || bin/qmk json-keymap $(KEYMAP_JSON) -o $(KEYMAP_C))
-endif
+$(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 a1f95955a6..1c814286c7 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -407,6 +407,16 @@ ifeq ($(strip $(SPACE_CADET_ENABLE)), yes)
OPT_DEFS += -DSPACE_CADET_ENABLE
endif
+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
diff --git a/docs/README.md b/docs/README.md
index 22ab243cd2..9f9ca166bd 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -15,7 +15,7 @@ QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains Q
If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork.
-Otherwise, you can either download it directly ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), or clone it via git (`git@github.com:qmk/qmk_firmware.git`), or https (`https://github.com/qmk/qmk_firmware.git`).
+Otherwise, you can clone it directly with `git clone https://github.com/qmk/qmk_firmware`. Do not download the zip or tar files; a git repository is required to download the submodules in order to compile.
## How to Compile
diff --git a/docs/_langs.md b/docs/_langs.md
index 7a7f127a97..f7b375fb94 100644
--- a/docs/_langs.md
+++ b/docs/_langs.md
@@ -4,4 +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 dc6e88f958..f6b03867fc 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)
@@ -33,6 +36,7 @@
* [Keymap Overview](keymap.md)
* [Hardware](hardware.md)
+ * [Compatible Microcontrollers](compatible_microcontrollers.md)
* [AVR Processors](hardware_avr.md)
* [Drivers](hardware_drivers.md)
@@ -97,6 +101,7 @@
* [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)
@@ -110,7 +115,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/cli.md b/docs/cli.md
index e655b0ee89..1c09527221 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -95,6 +95,30 @@ qmk compile <configuratorExport.json>
qmk compile -kb <keyboard_name> -km <keymap_name>
```
+## `qmk flash`
+
+This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
+To specify a different bootloader, use `-bl <bootloader>`. Visit <https://docs.qmk.fm/#/flashing>
+for more details of the available bootloaders.
+
+**Usage for Configurator Exports**:
+
+```
+qmk flash <configuratorExport.json> -bl <bootloader>
+```
+
+**Usage for Keymaps**:
+
+```
+qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
+```
+
+**Listing the Bootloaders**
+
+```
+qmk flash -b
+```
+
## `qmk config`
This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md).
@@ -135,6 +159,28 @@ Creates a keymap.c from a QMK Configurator export.
qmk json-keymap [-o OUTPUT] filename
```
+## `qmk kle2json`
+
+This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
+
+**Usage**:
+
+```
+qmk kle2json [-f] <filename>
+```
+
+**Examples**:
+
+```
+$ 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`
This command lists all the keyboards currently defined in `qmk_firmware`
diff --git a/docs/cli_development.md b/docs/cli_development.md
index f5c7ad139a..cc8c59d067 100644
--- a/docs/cli_development.md
+++ b/docs/cli_development.md
@@ -173,3 +173,35 @@ You will only be able to access these arguments using `cli.args`. For example:
```
cli.log.info('Reading from %s and writing to %s', cli.args.filename, cli.args.output)
```
+
+# Testing, and Linting, and Formatting (oh my!)
+
+We use nose2, flake8, and yapf to test, lint, and format code. You can use the `pytest` and `pyformat` subcommands to run these tests:
+
+### Testing and Linting
+
+ qmk pytest
+
+### Formatting
+
+ qmk pyformat
+
+## Formatting Details
+
+We use [yapf](https://github.com/google/yapf) to automatically format code. Our configuration is in the `[yapf]` section of `setup.cfg`.
+
+?> Tip- Many editors can use yapf as a plugin to automatically format code as you type.
+
+## Testing Details
+
+Our tests can be found in `lib/python/qmk/tests/`. You will find both unit and integration tests in this directory. We hope you will write both unit and integration tests for your code, but if you do not please favor integration tests.
+
+If your PR does not include a comprehensive set of tests please add comments like this to your code so that other people know where they can help:
+
+ # TODO(unassigned/<yourGithubUsername>): Write <unit|integration> tests
+
+We use [nose2](https://nose2.readthedocs.io/en/latest/getting_started.html) to run our tests. You can refer to the nose2 documentation for more details on what you can do in your test functions.
+
+## Linting Details
+
+We use flake8 to lint our code. Your code should pass flake8 before you open a PR. This will be checked when you run `qmk pytest` and by CI when you submit a PR.
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..9dd95e4b73 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.
diff --git a/docs/compatible_microcontrollers.md b/docs/compatible_microcontrollers.md
index 6e3f8372c9..85dd440d37 100644
--- a/docs/compatible_microcontrollers.md
+++ b/docs/compatible_microcontrollers.md
@@ -1,25 +1,36 @@
-# Atmel AVR
+# Compatible Microcontrollers
-QMK should run on any Atmel AVR processor with enough Flash. It has been tested on the following:
+QMK runs on any USB-capable AVR or ARM microcontroller with enough flash space - generally 32kB or more, though it will *just* squeeze into 16kB with most features disabled.
-* ATmega32U4 ([PJRC Teensy 2.0](http://www.pjrc.com/teensy/))
-* AT90USB1286 ([PJRC Teensy++ 2.0](http://www.pjrc.com/teensy/))
-* AT90USB1287 ([Atmel USBKEY](http://www.atmel.com/tools/AT90USBKEY.aspx))
-* ATmega168P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
-* ATmega328P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
-* ATmega32U2
-* AT90USB1286, 646, 647 should work
-* AT90USB162 testing...
+## Atmel AVR
-NOTE: To enable full features of firmware you'll need 32KB flash size.
+The following use [LUFA](https://www.fourwalledcubicle.com/LUFA.php) as the USB stack:
-Please add any tested microcontrollers to this list.
+* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
+* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
+* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
-# ARM
+Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/products/vusb/index.html) instead:
-You can also use any ARM processor that [ChibiOS](http://www.chibios.org) supports. The following processors have been tested:
+* [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A)
+* [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P)
-* [Kinetis MKL26Z64](http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/l-series-ultra-low-power-m0-plus/kinetis-kl2x-48-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x)
-* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf)
-* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf)
-* [Kinetis MK20DX256](http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/k-series-performance-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)
+## ARM
+
+You can also use any ARM chip with USB that [ChibiOS](http://www.chibios.org) supports. Most have plenty of flash. Known to work are:
+
+### STMicroelectronics (STM32)
+
+ * [STM32F0x2](https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html)
+ * [STM32F103](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html)
+ * [STM32F303](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
+
+### NXP (Kinetis)
+
+ * [MKL26Z64](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/kl-series-cortex-m0-plus/kinetis-kl2x-72-96-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x)
+ * [MK20DX128](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-50-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-based-on-arm-cortex-m4-core:K20_50)
+ * [MK20DX256](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)
+
+## Atmel ATSAM
+
+There is limited support for one of Atmel's ATSAM microcontrollers, that being the [ATSAMD51J18A](https://www.microchip.com/wwwproducts/en/ATSAMD51J18A) used by the [Massdrop keyboards](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop).
diff --git a/docs/config_options.md b/docs/config_options.md
index abd98ec8a8..0cf3fb78a6 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -196,8 +196,8 @@ If you define these options you will enable the associated feature, which may in
* units to step when in/decreasing saturation
* `#define RGBLIGHT_VAL_STEP 12`
* units to step when in/decreasing value (brightness)
-* `#define RGBW_BB_TWI`
- * bit-bangs TWI to EZ RGBW LEDs (only required for Ergodox EZ)
+* `#define RGBW`
+ * Enables RGBW LED support
## Mouse Key Options
@@ -348,7 +348,8 @@ Use these to enable or disable building certain features. The more you have enab
* `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 noticable). 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`
+ * 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..7c365b4186 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -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_quantum_functions.md b/docs/custom_quantum_functions.md
index 839d49ca05..71a30bc7c6 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -90,68 +90,93 @@ keyrecord_t record {
# LED Control
-QMK provides methods to read the 5 LEDs defined as part of the HID spec:
+QMK provides methods to read 5 of the LEDs defined in the HID spec:
-* `USB_LED_NUM_LOCK`
-* `USB_LED_CAPS_LOCK`
-* `USB_LED_SCROLL_LOCK`
-* `USB_LED_COMPOSE`
-* `USB_LED_KANA`
+* Num Lock
+* Caps Lock
+* Scroll Lock
+* Compose
+* Kana
-These five constants correspond to the positional bits of the host LED state.
-There are two ways to get the host LED state:
+There are two ways to get the lock LED state:
-* by implementing `led_set_user()`
-* by calling `host_keyboard_leds()`
+* by implementing `bool led_update_kb(led_t led_state)` or `_user(led_t led_state)`; or
+* by calling `led_t host_keyboard_led_state()`
-## `led_set_user()`
+!> `host_keyboard_led_state()` may already reflect a new value before `led_update_user()` is called.
-This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a parameter.
-Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macros to check the LED status.
+Two more deprecated functions exist that provide the LED state as a `uint8_t`:
-!> `host_keyboard_leds()` may already reflect a new value before `led_set_user()` is called.
+* `uint8_t led_set_kb(uint8_t usb_led)` and `_user(uint8_t usb_led)`
+* `uint8_t host_keyboard_leds()`
-### Example `led_set_user()` Implementation
+## `led_update_user()`
+
+This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter.
+
+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.
+
+### Example `led_update_kb()` Implementation
```c
-void led_set_user(uint8_t usb_led) {
- if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- writePinLow(B0);
- } else {
- writePinHigh(B0);
- }
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinLow(B1);
- } else {
- writePinHigh(B1);
- }
- if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
- writePinLow(B2);
- } else {
- writePinHigh(B2);
+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(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);
}
- if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
- writePinLow(B3);
- } else {
- writePinHigh(B3);
- }
- if (IS_LED_ON(usb_led, USB_LED_KANA)) {
- writePinLow(B4);
- } else {
- writePinHigh(B4);
+ 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) {
+ #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;
}
```
-### `led_set_*` Function Documentation
+### `led_update_*` Function Documentation
-* Keyboard/Revision: `void led_set_kb(uint8_t usb_led)`
-* Keymap: `void led_set_user(uint8_t usb_led)`
+* Keyboard/Revision: `bool led_update_kb(led_t led_state)`
+* Keymap: `bool led_update_user(led_t led_state)`
-## `host_keyboard_leds()`
+## `host_keyboard_led_state()`
-Call this function to get the last received LED state. This is useful for reading the LED state outside `led_set_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
-For convenience, you can use the `IS_HOST_LED_ON(led_name)` and `IS_HOST_LED_OFF(led_name)` macros instead of calling and checking `host_keyboard_leds()` directly.
+Call this function to get the last received LED state as a `led_t`. This is useful for reading the LED state outside `led_update_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
## Setting Physical LED State
@@ -369,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);
}
}
@@ -417,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
}
}
@@ -441,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
@@ -466,7 +491,7 @@ The `val` is the value of the data that you want to write to EEPROM. And the `e
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`.
-To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
+To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
## Example `get_tapping_term` Implementation
diff --git a/docs/de/README.md b/docs/de/README.md
new file mode 100644
index 0000000000..88239d45d4
--- /dev/null
+++ b/docs/de/README.md
@@ -0,0 +1,33 @@
+# Quantum Mechanical Keyboard Firmware
+
+[![Aktuelle 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/)
+
+## Was ist QMK Firmware?
+
+QMK (*Quantum Mechanical Keyboard*) ist eine Open-Source-Community, welche die QMK-Firmware, die QMK-Toolbox, [qmk.fm](https://qmk.fm) und diese Dokumententation betreut. QMK-Firmware ist eine Weiterentwicklung der [tmk\_keyboard](http://github.com/tmk/tmk_keyboard)-Tastatur-Firmware mit vielen nützlichen Zusatzfunktionen für Atmel AVR-Prozessoren. Ursprünglich wurde sie für Produkte von [OLKB](http://olkb.com), das [ErgoDox EZ](http://www.ergodox-ez.com) und das [Clueboard](http://clueboard.co/) entwickelt. Im Laufe der Zeit wurde sie mit Hilfe von [ChibiOS](http://chibios.org) auch für die ARM-Architektur angepasst. Außerdem ist es inzwischen möglich, auch handverdrahtete Tastaturen und selbst geätzte PCBs mit QMK zu verwenden.
+
+## Bezugsquelle für QMK
+
+Wenn Du vorhast, deine Tastatur, Tastaturbelegung oder Features zu QMK beizusteuern, geht das am einfachsten, indem Du das [Repository auf Github](https://github.com/qmk/qmk_firmware#fork-destination-box) forkst, die Änderungen in deinem lokalen Repo vornimmst und anschließend einen [Pull Request](https://github.com/qmk/qmk_firmware/pulls) einreichst.
+
+Ansonsten kannst Du es als [zip](https://github.com/qmk/qmk_firmware/zipball/master) oder [tar](https://github.com/qmk/qmk_firmware/tarball/master) herunterladen, oder es direkt via git klonen (`git clone git@github.com:qmk/qmk_firmware.git` bzw. `git clone https://github.com/qmk/qmk_firmware.git`).
+
+
+## Anleitung fürs Kompilieren
+
+Bevor Du in der Lage bist, die Firmware zu kompilieren, musst Du eine [Entwicklungsumgebung](de/getting_started_build_tools.md) für AVR und/oder ARM aufsetzen. Danach kannst Du mit dem `make` Befehl eine Keymap für deine Tastatur erzeugen. Die Notation dafür ist:
+
+ make planck/rev4:default
+
+Dies generiert die Revision `rev4` für eine Tastatur vom Type `planck` mit der `default` Tastaturbelegung. Nicht alle Tastaturen haben Revisionen (auch bekannt als Subprojekt oder Unterordner) weswegen dies auch ausgelassen werden kann:
+
+ make preonic:default
+
+## Möglichkeiten der Anpassung
+
+QMK hat viele [Features](de/features.md), die es zu entdecken gibt. In der [Dokumentation](https://docs.qmk.fmk) kannst Du Dir einen Überblick verschaffen. Die meisten Features basieren darauf, die [Tastaturbelegung](de/keymap.md) anzupassen und das Verhalten der [Keycodes](de/keycodes.md) zu verändern.
diff --git a/docs/de/_summary.md b/docs/de/_summary.md
new file mode 100644
index 0000000000..f3ce806baa
--- /dev/null
+++ b/docs/de/_summary.md
@@ -0,0 +1,121 @@
+* [Anleitung für Anfänger](de/newbs.md)
+ * [Erste Schritte](de/newbs_getting_started.md)
+ * [Die erste Firmware](de/newbs_building_firmware.md)
+ * [Firmware flashen](de/newbs_flashing.md)
+ * [Testen und Debuggen](de/newbs_testing_debugging.md)
+ * [Git Tips und Tricks](de/newbs_best_practices.md)
+ * [Hilfreiche Ressourcen](de/newbs_learn_more_resources.md)
+
+* [QMK Basics](de/README.md)
+ * [QMK Einführung](de/getting_started_introduction.md)
+ * [QMK CLI](de/cli.md)
+ * [QMK CLI Konfiguration](de/cli_configuration.md)
+ * [Zu QMK beitragen](de/contributing.md)
+ * [Anleitung für Github](de/getting_started_github.md)
+ * [Nach Hilfe fragen](de/getting_started_getting_help.md)
+
+* [Breaking Changes](de/breaking_changes.md)
+ * [2019 Aug 30](de/ChangeLog/20190830.md)
+
+* [FAQ](de/faq.md)
+ * [Häufige Fragen](de/faq_general.md)
+ * [Build/Kompilieren](de/faq_build.md)
+ * [Debugging/Troubleshooting](de/faq_debug.md)
+ * [Keymap](de/faq_keymap.md)
+ * [Treiber Installation mit Zadig](de/driver_installation_zadig.md)
+
+* Detailierte Guides
+ * [Build Tools installieren](de/getting_started_build_tools.md)
+ * [Vagrant Guide](de/getting_started_vagrant.md)
+ * [Build/Compile Anleitung](de/getting_started_make_guide.md)
+ * [Firmware flashen](de/flashing.md)
+ * [Funktionalität anpassen](de/custom_quantum_functions.md)
+ * [Keymap Überblick](de/keymap.md)
+
+* [Hardware](de/hardware.md)
+ * [AVR Prozessoren](de/hardware_avr.md)
+ * [Treiber](de/hardware_drivers.md)
+
+* Referenz
+ * [Tastatur Richtlinien](de/hardware_keyboard_guidelines.md)
+ * [Konfigurations Optionen](de/config_options.md)
+ * [Keycodes](de/keycodes.md)
+ * [Coding Konventionen - C](de/coding_conventions_c.md)
+ * [Coding Konventionen - Python](de/coding_conventions_python.md)
+ * [Dokumentations Best Practices](de/documentation_best_practices.md)
+ * [Dokumentations Templates](de/documentation_templates.md)
+ * [Glossar](de/reference_glossary.md)
+ * [Unit Testing](de/unit_testing.md)
+ * [Nützliche Funktionen](de/ref_functions.md)
+ * [Configurator Support](de/reference_configurator_support.md)
+ * [info.json Format](de/reference_info_json.md)
+ * [Python CLI Development](de/cli_development.md)
+
+* [Features](de/features.md)
+ * [Basic Keycodes](de/keycodes_basic.md)
+ * [US ANSI Shifted Keys](de/keycodes_us_ansi_shifted.md)
+ * [Quantum Keycodes](de/quantum_keycodes.md)
+ * [Advanced Keycodes](de/feature_advanced_keycodes.md)
+ * [Audio](de/feature_audio.md)
+ * [Auto Shift](de/feature_auto_shift.md)
+ * [Backlight](de/feature_backlight.md)
+ * [Bluetooth](de/feature_bluetooth.md)
+ * [Bootmagic](de/feature_bootmagic.md)
+ * [Combos](de/feature_combo.md)
+ * [Command](de/feature_command.md)
+ * [Debounce API](de/feature_debounce_type.md)
+ * [DIP Switch](de/feature_dip_switch.md)
+ * [Dynamic Macros](de/feature_dynamic_macros.md)
+ * [Encoders](de/feature_encoders.md)
+ * [Grave Escape](de/feature_grave_esc.md)
+ * [Haptic Feedback](de/feature_haptic_feedback.md)
+ * [HD44780 LCD Controller](de/feature_hd44780.md)
+ * [Key Lock](de/feature_key_lock.md)
+ * [Layouts](de/feature_layouts.md)
+ * [Leader Key](de/feature_leader_key.md)
+ * [LED Matrix](de/feature_led_matrix.md)
+ * [Macros](de/feature_macros.md)
+ * [Mouse Keys](de/feature_mouse_keys.md)
+ * [OLED Driver](de/feature_oled_driver.md)
+ * [One Shot Keys](de/feature_advanced_keycodes.md#one-shot-keys)
+ * [Pointing Device](de/feature_pointing_device.md)
+ * [PS/2 Mouse](de/feature_ps2_mouse.md)
+ * [RGB Lighting](de/feature_rgblight.md)
+ * [RGB Matrix](de/feature_rgb_matrix.md)
+ * [Space Cadet](de/feature_space_cadet.md)
+ * [Split Keyboard](de/feature_split_keyboard.md)
+ * [Stenography](de/feature_stenography.md)
+ * [Swap Hands](de/feature_swap_hands.md)
+ * [Tap Dance](de/feature_tap_dance.md)
+ * [Terminal](de/feature_terminal.md)
+ * [Thermal Printer](de/feature_thermal_printer.md)
+ * [Unicode](de/feature_unicode.md)
+ * [Userspace](de/feature_userspace.md)
+ * [Velocikey](de/feature_velocikey.md)
+
+* Für Maker und Modder
+ * [Hand Wiring Guide](de/hand_wire.md)
+ * [ISP Flashing Guide](de/isp_flashing_guide.md)
+ * [ARM Debugging Guide](de/arm_debugging.md)
+ * [I2C Driver](de/i2c_driver.md)
+ * [GPIO Controls](de/internals_gpio_control.md)
+ * [Proton C Conversion](de/proton_c_conversion.md)
+
+* Für ein tieferes Verständnis
+ * [Wie Tastaturen funktionieren](de/how_keyboards_work.md)
+ * [QMK verstehen](de/understanding_qmk.md)
+
+* Andere Themen
+ * [Eclipse mit QMK](de/other_eclipse.md)
+ * [VSCode mit QMK](de/other_vscode.md)
+ * [Support](de/support.md)
+ * [Übersetzungen](de/translating.md)
+
+* 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)
+ * [Midi Device Setup Process](de/internals_midi_device_setup_process.md)
+ * [Midi Util](de/internals_midi_util.md)
+ * [Send Functions](de/internals_send_functions.md)
+ * [Sysex Tools](de/internals_sysex_tools.md)
diff --git a/docs/de/driver_installation_zadig.md b/docs/de/driver_installation_zadig.md
new file mode 100644
index 0000000000..bd04e05430
--- /dev/null
+++ b/docs/de/driver_installation_zadig.md
@@ -0,0 +1,47 @@
+# Bootloader Treiber Installation mit Zadig
+
+QMK erscheint für den Host als normales HID Eingabegerät und benötigt deshalb keine zusätzlichen Treiber. Der Bootloader, den Du für das Flashen der Firmware benötigst, jedoch meistens schon.
+
+Hierzu gibt es zwei Ausnahmen: den Caterina Bootloader, meistens auf Pro Micros, sowie den HalfKay Bootloader auf PJRC Teensys. Diese erscheinen als serieller Port und als generisches HID Gerät und benötigen keine Treiber.
+
+Wir empfehlen deshalb [Zadig](https://zadig.akeo.ie/). Wenn Du die Entwicklungsumgebung mit MSYS2 oder WSL installiert hast, wird dich dass `qmk_install.sh` Skript gefragt haben, ob es die Treiber für dich installieren sollte.
+
+## Installation
+
+Versetze deine Tastatur in den Bootloader-Modus, entweder durch Betätigung des physischen `RESET` Schalters - meist auf der Unterseite der Platine - oder durch das Auslösen des Key-Codes `RESET` bzw. `KC_RESET` (sollte in der zur Tastatur gehörigen `keycode.c` zu entnehmen sein). Sollte deine Tastatur weder noch besitzen, versuche es damit die `Escape`-Taste oder `Leertaste + B` zu halten während Du die Tastatur mit dem PC verbindest (Siehe auch [Bootmagic](de/feature_bootmagic.md) für weitere Details). Ein paar Tastaturen benutzen das [Command](de/feature_command.md)-Feature an Stelle von Bootmagic; in diesem Fall kannst du mit den Tastenkombinationen `linkes Shift + rechtes Shift + B` oder `linkes Shift + rechtes Shift + Escape` zu jeder Zeit in den Bootloader wechseln solange die Tastatur verbunden ist.
+
+Eingie Tastaturen haben u.U. spezielle Anweisungen um in den Bootloader-Modus zu gelangen. Zum Beispiel kann die [Bootmagic-Lite](de/feature_bootmagic.md#bootmagic-lite)-Taste (default: Escape) auf eine andere Taste gemappt sein; oder die magische Kombination (default: linkes Shift+rechtes Shift) verwendet anstatt Shift die STRG-Tasten. Die zur Tastatur gehörige README sollte dir Aufschluss darüber geben wie der Bootloader-Modus ausgelöst werden kann wenn Du unsicher bist.
+
+Um ein Gerät mit USBaspLoader in den Bootloader-Modus zu versetzen, halte `BOOT` gedrückt während Du den `RESET`-Knopf drückst.
+Alternativ, halte `BOOT` gedrückt während Du das USB-Kabel einsteckst.
+
+Zadig sollte das Bootloader-Gerät automatisch erkennen. Manchmal musst Du zusätzlich noch **Options → List All Devices** auswählen.
+
+ - Tastaturen mit Atmel AVR MCUs sollten als `ATm32U4DFU` (oder ähnlich) angezeigt werden, mit der Vendor ID `03EB`.
+ - USBasp werden als `USBasp` angezeigt, mit VID/PID `16C0:05DC`.
+ - Tastaturen AVR controller und dem QMK-DFU Bootloader haben den namen `<Tastatur Name> Bootloader` und die VID `03EB`.
+ - Die meisten ARM Tastaturen werden als `STM32 BOOTLOADER` angezeigt, mit VID/PID `0483:DF11`.
+
+!> Sollte Zadig ein oder mehrere Geräte mit `HidUsb`-Treiber anzeigen, dann ist deine Tastatur wahrscheinlich nicht im Bootloader-Modus. Der Pfeil wird orange eingefärbt sein und Du wirst nach einer Bestätigung gefragt um Veränderungen am System vorzunehmen. In diesem Fall **fahre nicht fort**!
+
+Wenn der Pfeil grün angezeigt wird, wähle den Treiber aus und klicke auf **Treiber installieren**. Der `libusb-win32`-Treiber sollte gewöhnlich für AVR verwendet werden und `WinUSB` für ARM. Sollte es danach noch nicht möglich sein die Tastatur zu flashen, versuche es mit einem anderen Treiber. Für USBaspLoader Geräte, die über die Befehlszeile mit MSYS2 geflasht werden, wird der `libusbk`-Treiber empfohlen. Ansonsten sollte `libusb-win32` funktionieren wenn die QMK Toolbox verwendet wird.
+
+![Zadig mit Bootloader-Treiber korrekt installiert](https://i.imgur.com/b8VgXzx.png)
+
+Entferne nun deine Tastatur und verbinde sie erneut um sicherzugehen dass der neue Treiber erfolgreich installiert wurde. Wenn Du QMK Toolbox benutzt, starte die Anwendung zur Sicherheit einmal neu, da Veränderungen am Treiber manchmal nicht richtig erkannt werden. Wenn dies immer noch nicht erfolgreich war hilft es an dieser Stelle manchmal ein Neustart des Computers.
+
+## Wiederherstellung einer Installation für ein falsches Gerät
+
+Wenn Du feststellst dass Du anschließend auf deiner Tastatur nicht mehr tippen kannst, ist etwas bei der Installation schief gelaufen. Ein häufiger Fehler ist es dass die Tastatur nicht im Bootloader-Modus war und stattdessen der Treiber für das HID-Gerät ersetzt wurde. Dies kannst Du einfach mit Zadig überprüfen, eine funktionierende Tastatur verwendet als Treiber `HidUsb` auf allen Interfaces .
+
+![Eine funktionierende Tastatur aus Zadigs Sicht](https://i.imgur.com/Hx0E5kC.png)
+
+Öffne den Geräte-Manager und suche nach einem Gerät das wie deine Tastatur aussieht.
+
+![Die Tastatur mit dem falschen Treiber installiert, im Geräte-Manager](https://i.imgur.com/L3wvX8f.png)
+
+Rechtsklick und **Gerät deinstallieren** anklicken. Bitte gehe sicher dass in diesem Schritt auch **Treibersoftware für dieses Gerät löschen** markiert ist.
+
+![Der "Gerät deinstallieren"-Dialog, mit "Treibersoftware für dieses Gerät entfernen" markiert](https://i.imgur.com/aEs2RuA.png)
+
+Klick **Aktion → Suche nach veränderter Hardware**. Nun solltest Du wieder in der Lage sein normal zu tippen. Vergewissere dich mit Hilfe von Zadig dass die Tastatur nun `HidUsb` als Treiber verwendet. Wenn dies der Fall ist sollte wieder alles funktionieren.
diff --git a/docs/de/newbs.md b/docs/de/newbs.md
new file mode 100644
index 0000000000..61139a99e1
--- /dev/null
+++ b/docs/de/newbs.md
@@ -0,0 +1,22 @@
+# Anleitung für absolute Beginner
+QMK ist eine mächtige Open Source Firmware für mechanische Tastaturen. Mit QMK kannst Du deine Tastatur sowohl sehr einfach als auch sehr umfangreich anpassen. Menschen unterschiedlichen Wissensstandes - vom kompletten Anfänger bis zum erfahrenen Programmierer - haben ihre Tastaturen mit QMK erfolgreich auf ihre persönlichen Bedürfnisse angepasst. Diese Anleitung soll Dir unabhängig von deinen Vorkenntnissen dabei helfen dies ebenfalls zu bewältigen.
+
+Bist Du unsicher ob deine Tastatur QMK unterstützt? Wenn es eine mechanische Tastatur ist, die Du selbst gebaut hast, stehen deine Chancen gut. Wir unterstützen eine [Vielzahl](https://qmk.fm/keyboards/) selbst gebauter Tastaturen, sodass selbst wenn deine jetzige Tastatur nicht unterstützt wird Du keine Probleme haben solltest eine für deine Anforderungen zu finden.
+
+## Übersicht
+
+Diese Anleitung ist in 7 Abschnitte unterteilt:
+
+* [Die ersten Schritte](newbs_getting_started.md)
+* [Die erste Firmware auf der Kommandozeile erzeugen](newbs_building_firmware.md)
+* [Die erste Firmware mit der Online GUI erzeugen](newbs_building_firmware_configurator.md)
+* [Firmware flashen](newbs_flashing.md)
+* [Testen und Debuggen](newbs_testing_debugging.md)
+* [Git Leitfaden](newbs_best_practices.md)
+* [Weitere hilfreiche Ressourcen für Anfänger](newbs_learn_more_resources.md)
+
+Diese Anleitung richtet sich an Personen, die vorher noch nie Software kompiliert haben. Die Entscheidungen und Empfehlungen basieren auf dieser Grundannahme. Es gibt unterschiedliche Herangehensweisen für viele der Prozeduren und wir unterstützen die meisten Alternativen. Wenn Du mal nicht weiter weißt oder Dir nicht sicher bist, wie Du an ein Problem herangehen sollst, kannst Du uns gerne [um Hilfe bitten](getting_started_getting_help.md).
+
+## Weitere Ressourcen
+
+* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – Ein äußerst hilfreicher Blog eines Community-Mitglieds, der einige Grundlagen der QMK-Firmware aus der Sicht des Benutzers erklärt (auf Englisch).
diff --git a/docs/de/newbs_building_firmware.md b/docs/de/newbs_building_firmware.md
new file mode 100644
index 0000000000..b6d4840249
--- /dev/null
+++ b/docs/de/newbs_building_firmware.md
@@ -0,0 +1,78 @@
+# Eine eigene Firmware erstellen
+
+Nachdem Du nun eine funktionierende Entwicklungsumgebung aufgesetzt hast, bist Du nun bereit, deine eigene Firmware zu erstellen. Dieses Sektion des Guides wird zwischen drei Programmen hin- und herwechseln: deinem Dateimanager, deinem Texteditor und der Befehlszeile. Lasse diese drei Fenster geöffnet, bis Du fertig und zufrieden mit deiner Tastatur-Firmware bist.
+
+Solltest Du die Befehlszeile zwischenzeitlich geschlossen haben, vergiss nicht wieder in das richtige Verzeichnis zu navigieren, benutze dazu den Befehl `cd qmk_firmware`.
+
+## Navigiere in deinen Keymap Ordner
+
+Beginne damit, in das `keymaps` Verzeichnis für deine Tastatur zu navigieren.
+
+Wenn Du macOS oder Windows benutzt, kannst Du einfach in das keymaps Verzeichnis wechseln.
+
+?> macOS:<br>
+ open keyboards/<keyboard_folder>/keymaps
+
+?> Windows:<br>
+ start .\\keyboards\\<keyboard_folder>\\keymaps
+
+## Eine Kopie der `default` Tastaturbelegung erstellen
+
+Wenn Du den `keymaps` Ordner geöffnet hast, solltest Du zuerst eine Kopie des `default` Verzeichnisses erstellen. Wir empfehlen dafür deinen GitHub Benutzernamen zu verweden, aber Du kannst auch jeden anderen Namen verwenden solange er nur aus Kleinbuchstaben, Zahlen und Unterstrichen besteht.
+
+Um den Prozess zu automatisieren kannst Du dazu auch das Skript `new_keymap.sh` verwenden.
+
+Navigiere dazu in das `qmk_firmware/util` Verzeichnis und gib folgenden Befehl ein:
+
+```
+./new_keymap.sh <keyboard path> <username>
+```
+
+Um zum Beispiel den Benutzernamen John für die Tastaturbelegung eines 1up60hse zu verwenden, würdest Du Folgendes eingeben:
+
+```
+./new_keymap.sh 1upkeyboards/1up60hse john
+```
+
+## Öffne `keymap.c` in deinem bevorzugtem Text Editor
+
+Öffne deine `keymap.c`. In dieser Datei findest Du die Strukturen, die das Verhalten deiner Tastatur bestimmen. Oben in der `keymap.c` befinden sich Definitionen (defines) und Aufzählungen (enums), die die Tastaturbelegung leserlicher machen sollen. Weiter unten wirst Du eine Zeile finden, die wie folgt aussieht:
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+Diese Zeile markiert den Anfang der Liste der Ebenen (Layers). Darunter befinden sich Zeilen die entweder `LAYOUT` oder `KEYMAP` enthalten, das deutet auf den Start einer Ebene hin. Danach folgt eine Liste von Tasten, die dieser Ebene zugewiesen sind.
+
+!> Beim Bearbeiten einer Tastaturbelegung solltest Du darauf achten, keine Kommata hinzuzufügen oder zu entfernen. Ansonsten kann dies dazu führen, dass deine Firmware nicht mehr kompiliert und es ist nicht immer einfach festzustellen, wo genau ein Komma zuviel oder zu wenig ist. Die letzte Zeile hat am Ende kein Komma, die Zeilen davor jedoch schon.
+
+## Personalisiere die Tastaturbelegung nach deinen Wünschen
+
+Wie Du diesen Schritt abschließt ist vollkommen Dir überlassen. Ändere die eine Sache die Dich stört oder verändere alles von Grund auf. Du kannst Ebenen entfernen die Du nicht brauchst oder Neue hinzufügen, bis zu 32 Stück. Die folgende Dokumentation verrät Dir was Du hier alles definieren kannst:
+
+* [Keycodes](de/keycodes.md)
+* [Features](de/features.md)
+* [FAQ](de/faq.md)
+
+?> Während Du langsam ein Gefühl dafür kriegst wie Keymaps funktionieren, solltest Du darauf achten nicht zuviel auf einmal zu verändern. Größere Änderungen machen es schwieriger, Probleme zu debuggen.
+
+## Deine Firmware erzeugen
+
+Wenn Du damit fertig bist, deine Tastaturbelegung anzupassen, musst Du noch die Firmware erzeugen. Öffne dazu wieder die Befehlszeile und führe folgenden Befehl aus:
+
+ make <my_keyboard>:<my_keymap>
+
+Wenn deine Tastaturbelegung z.B. "xyverz" heißt und Du die Belegung für ein rev5 planck erzeugen möchtest, lautet der Befehl:
+
+ make planck/rev5:xyverz
+
+Während des Kompiliervorgangs wird viel Text auf dem Bildschirm ausgegeben. Es sollte am Ende mit etwas enden das ungefähr so aussieht:
+
+```
+Linking: .build/planck_rev5_xyverz.elf [OK]
+Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
+Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
+Checking file size of planck_rev5_xyverz.hex [OK]
+ * File size is fine - 18392/28672
+```
+
+## Deine Firmware flashen
+Bitte fahre mit [Firmware flashen](de/newbs_flashing.md) fort, um zu erfahren, wie Du deine neue Firmware auf deine Tastatur flashen kannst.
diff --git a/docs/de/newbs_flashing.md b/docs/de/newbs_flashing.md
new file mode 100644
index 0000000000..940438669e
--- /dev/null
+++ b/docs/de/newbs_flashing.md
@@ -0,0 +1,369 @@
+# Deine Tastatur flashen
+
+Nachdem deine Firmware nun fertig ist musst Du Sie noch auf deine Tastatur flashen.
+
+## Flash-Vorgang mit QMK Toolbox
+
+Der einfachste Weg deine Tastatur zu flashen ist mit Hilfe der [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases)
+
+Leider ist die QMK Toolbox derzeit nur für Windows und macOS verfügbar. Wenn Du Linux benutzt (oder es vorziehst die Firmware mit der Kommandozeile zu flashen) solltest Du die Methode benutzen die [hier](de/newbs_flashing.md#tastatur-mit-der-befehlszeile-flashen) beschrieben wird.
+
+### Lade die Datei in QMK Toolbox
+
+Beginne damit die Datei in der QMK Toolbox Anwendung zu laden. Versichere dich dass Du die Firmware-Datei im Finder oder Explorer findest. Deine Tastatur-Firmware sollte entweder vom Typ `.hex` oder `.bin` sein sein. QMK sollte die für deine Tastatur entsprechende Datei automatisch in das Root-Verzeichnis (normalerweise `qmk_firmware`) kopieren.
+
+?> Wenn Du Windows oder macOS benutzt kannst Du mit folgenden Befehlen ganz einfach das aktuelle Firmware-Verzeichnis im Explorer oder Finder öffnen.
+
+#### Windows:
+
+``` start . ```
+
+#### macOS:
+
+``` open . ```
+
+Die Firmware-Dateien folgen dabei immer folgendem Schema:
+
+ <meine_Tastatur>_<meine_Tastaturbelegung>.{bin,hex}
+
+Zum Beispiel würde ein `planck/rev5` mit der `default` Tastaturbelegung folgenden Dateinamen haben:
+
+ planck_rev5_default.hex
+
+Wenn Du die Firmware-Datei gefunden hast kannst Du sie in das "Local file" ("Lokale Datei") Feld in der QMK Toolbox ziehen, alternativ kannst Du auf "Öffnen" klicken und in das Verzeichnis navigieren indem sich die Firmware-Datei befindet.
+
+### Die Tastatur in den DFU (Bootloader) Modus versetzen
+
+Um deine angepasste Firmware auf deine Tastatur zu flashen musst Du diese erst in einen speziellen "flashing"-Modus versetzen. Während die Tastatur in diesem Modus ist kannst Du nicht auf ihr tippen oder sie wie gewohnt als Tastatur benutzen. Es ist wichtig dass der flashing-Prozesses nicht unterbrochen oder die Tastatur ausstöpselst wird, da der Vorgang ansonst wiederholt werden muss.
+
+Verschiedene Tastaturen verwenden unterschiedliche Methoden um in den Bootloader-Modus zu gelangen. Wenn dein PCB im Moment QMK oder TMK verwendet und Du keine spezifischen Anweisungen erhalten hast probiere die folgenden Methoden in dieser Reihenfolge:
+
+* Halte beide Shift-Tasten und drücke `Pause`
+* Halte beide Shift-Tasten und drücke `B`
+* Entferne deine Tastatur vom Computer, drücke gleichzeitig `Leertaste` und `B`, verbinde die Tastatur wieder mit dem Computer und warte eine Sekunde bevor Du die Tasten wieder loslässt.
+* Drücke den physischen `RESET`-Knopf auf der Unterseite des PCBs
+* Suche auf dem PCB den Pin mit dem Label `RESET`, verbinde diesen mit deinem GND-Pin
+* Suche auf dem PCB den Pin mit dem Label `BOOT0`, verbinde diesen mit GND und schließe die Tastatur wieder an den PC an TODO: DIS IS DANGEROUS!!
+
+Wenn Du damit erfolgreich warst solltest Du in der QMK Toolbox eine Nachricht sehen die ungefähr so aussieht:
+
+```
+*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
+*** DFU device connected
+```
+
+### Tastatur flashen
+
+Klicke auf den `Flash`-Knopf in der QMK Toolbox. Die Ausgabe wird ungefähr so aussehen:
+
+```
+*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
+*** DFU device connected
+*** Attempting to flash, please don't remove device
+>>> dfu-programmer atmega32u4 erase --force
+ Erasing flash... Success
+ Checking memory from 0x0 to 0x6FFF... Empty.
+>>> dfu-programmer atmega32u4 flash qmk_firmware/clueboard_66_hotswap_skully.hex
+ Checking memory from 0x0 to 0x55FF... Empty.
+ 0% 100% Programming 0x5600 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ 0% 100% Reading 0x7000 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ Validating... Success
+ 0x5600 bytes written into 0x7000 bytes memory (76.79%).
+>>> dfu-programmer atmega32u4 reset
+
+*** DFU device disconnected
+*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
+```
+
+## Tastatur mit der Befehlszeile flashen
+
+Zunächst solltest Du versuchen herauszufinden welchen Bootlader deine Tastatur benutzt. Diese vier Bootloader sind am Weitesten verbreitet:
+
+| MCU | Bootloader |
+| --- | --- |
+| Pro-Micro und Klone | CATERINA |
+| Teensy | Halfkay |
+| OLKB Boards | QMK-DFU |
+| sonstige atmega32u4 | DFU |
+
+Auf der Seite [Flash Anleitung und Bootloader Informationen](de/flashing.md) kannst Du mehr über das Thema erfahren.
+
+Wenn Du weißt welchen Bootloader deine Tastaur verwendet, kannst Du diese Information bei der Kompilation hinzufügen um den Flash-Vorgang mit dem `make`-Befehl zu automatisieren.
+```rules.mk
+...
+BOOTLOADER = caterina
+...
+```
+
+### DFU
+
+Wenn Du den DFU-Bootloader verwendest und Du bereit bist deine Firmware zu kompilieren und zu flashen, öffne ein Befehlszeile und führe folgenden Befehl aus:
+
+ make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu
+
+Wenn deine Tastaturbelegung z.B den Namen "xzverz" trägt und Du ein rev5 planck flashen möchtest sähe der Befehl wie folgt aus:
+
+ make planck/rev5:xyverz:dfu
+
+
+Nachdem der Vorgang abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+```
+Linking: .build/planck_rev5_xyverz.elf [OK]
+Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
+Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
+Checking file size of planck_rev5_xyverz.hex
+ * File size is fine - 18574/28672
+ ```
+
+Wenn dieser Punkt erreicht ist wird das Build-Skript alle 5 Sekunden nach einem DFU Bootloader suchen. Dieser Vorgang wird wiederholt bis er erfolgreich ist oder abgebrochen wird.
+
+ dfu-programmer: no device present.
+ Error: Bootloader not found. Trying again in 5s.
+
+Wenn diese Nachricht erscheint konnte das Build-Skript den Controller nicht eigenständig in den DFU Modus versetzen (z.B. weil der Modus in rules.mk falsch gesetzt wurde oder ein Problem mit der Hardware besteht), wenn dies eintritt musst Du die oben beschrieben Schritte benutzen um den Controller in den DFU Modus zu versetzen. Danach sollte die Ausgabe ungefähr so aussehen:
+
+```
+*** Attempting to flash, please don't remove device
+>>> dfu-programmer atmega32u4 erase --force
+ Erasing flash... Success
+ Checking memory from 0x0 to 0x6FFF... Empty.
+>>> dfu-programmer atmega32u4 flash qmk_firmware/clueboard_66_hotswap_skully.hex
+ Checking memory from 0x0 to 0x55FF... Empty.
+ 0% 100% Programming 0x5600 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ 0% 100% Reading 0x7000 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ Validating... Success
+ 0x5600 bytes written into 0x7000 bytes memory (76.79%).
+>>> dfu-programmer atmega32u4 reset
+```
+
+?> Wenn Du mit diesem Schritt Probleme hast (z.B. `dfu-programmer: no device present`) hilft dir hoffentlich der Abschnitt [Häufig gestellte Fragen (Build/Kompilieren)](de/faq_build.md).
+
+#### DFU Befehle
+
+Es gibt verschiedene DFU Befehle um die Firmware auf ein DFU Gerät zu flashen:
+
+* `:dfu` - Dies ist die default Option. Es wird gecheckt ob ein DFU Gerät verfügbar ist, ist dies der Fall wird die Firmware geflasht. Dieser Check wird alle 5 Sekunden ausgeführt bis ein DFU Gerät erkannt wird.
+* `:dfu-ee` - Der Flash-Vorgang benutzt eine `.eep` Datei anstatt einer `.hex` Datei. Dies ist eher unüblich.
+* `:dfu-split-left` - Dies flasht die Firmware wie gewohnt (`:dfu`). Allerdings nur die "linke Seite" der EEPROM für geteilte Tastaturen. _Dies ist ideal für auf Elite C basierenden geteilten Tastaturen._
+* `:dfu-split-right` - Dies flasht die Firmware wie gewohnt (`:dfu`). Allerdings nur die "rechte Seite" der EEPROM für geteilte Tastaturen. _Dies ist ideal für auf Elite C basierenden geteilten Tastaturen._
+
+
+### Caterina
+Für Arduinos und andere ProMicro Klone (z.B. SparkFun ProMicro), wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
+
+ make <meine_Tastatur>:<meine_Tastaturbelegung>:avrdude
+
+Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein "rev2 Lets Split" erzeugen möchtest, lautet der Befehl dafür:
+
+ make lets_split/rev2:xyverz:avrdude
+
+Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+```
+Linking: .build/lets_split_rev2_xyverz.elf [OK]
+Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
+Checking file size of lets_split_rev2_xyverz.hex [OK]
+ * File size is fine - 27938/28672
+Detecting USB port, reset your controller now..............
+```
+
+Nun wird die Tastatur automatisch zurückgesetzt und das Skript wird die Firmware flashen sobald es den Bootloader erkennt. Die Ausgabe sollte ungefähr so aussehen:
+
+```
+Detected controller on USB port at /dev/ttyS15
+
+Connecting to programmer: .
+Found programmer: Id = "CATERIN"; type = S
+ Software Version = 1.0; No Hardware Version given.
+Programmer supports auto addr increment.
+Programmer supports buffered memory access with buffersize=128 bytes.
+
+Programmer supports the following devices:
+ Device code: 0x44
+
+avrdude.exe: AVR device initialized and ready to accept instructions
+
+Reading | ################################################## | 100% 0.00s
+
+avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
+avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
+ To disable this feature, specify the -D option.
+avrdude.exe: erasing chip
+avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
+avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
+avrdude.exe: writing flash (27938 bytes):
+
+Writing | ################################################## | 100% 2.40s
+
+avrdude.exe: 27938 bytes of flash written
+avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
+avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
+avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
+avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
+avrdude.exe: reading on-chip flash data:
+
+Reading | ################################################## | 100% 0.43s
+
+avrdude.exe: verifying ...
+avrdude.exe: 27938 bytes of flash verified
+
+avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
+
+avrdude.exe done. Thank you.
+```
+Sollten dabei Probleme auftreten (z.B. "Zugriff verweigert" / "Permission denied") muss der Make-Befehl mit privilegierten Berechtigungen ausgeführt werden:
+
+ sudo make <meine_Tastatur>:<meine_Tastaturbelegung>:avrdude
+
+Zusätzlich ist es möglich mehrere Tastaturen in einem Vorgang zu flashen:
+
+ make <keyboard>:<keymap>:avrdude-loop
+
+Du kannst den Loop mit STRG + C unterbrechen sobald der Vorgang abgeschlossen ist. Die korrekte Tastenkombination kann abweichen und hängt vom Betriebssystem ab.
+
+
+### HalfKay
+
+Für Tastaturen mit PJRC Controllern (Teensy's), wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
+
+ make <meine_Tastatur>:<meine_Tastaturbelegung>:teensy
+
+Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein Ergodox oder Ergodox EZ erzeugen möchtest, lautet der Befehl dafür:
+
+ make ergodox_ez:xyverz:teensy
+
+Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+```
+Linking: .build/ergodox_ez_xyverz.elf [OK]
+Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
+Checking file size of ergodox_ez_xyverz.hex [OK]
+ * File size is fine - 25584/32256
+ Teensy Loader, Command Line, Version 2.1
+Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
+Waiting for Teensy device...
+ (hint: press the reset button)
+ ```
+
+An diesem Punkt solltest Du die Tastatur zurücksetzen um den Flash-Vorgang auszulösen. Wenn dies abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+ ```
+Found HalfKay Bootloader
+Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
+Programming.............................................................
+...................................................
+Booting
+```
+
+### BootloadHID
+
+Für auf Bootmapper Client(BMC)/bootloaderHID/ATmega32A basierende Tastaturen, wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
+
+ make <meine_Tastatur>:<meine_Tastaturbelegung>:bootloaderHID
+
+Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein jj40 erzeugen möchtest, lautet der Befehl dafür:
+
+ make jj40:xyverz:bootloaderHID
+
+Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+```
+Linking: .build/jj40_default.elf [OK]
+Creating load file for flashing: .build/jj40_default.hex [OK]
+Copying jj40_default.hex to qmk_firmware folder [OK]
+Checking file size of jj40_default.hex [OK]
+ * The firmware size is fine - 21920/28672 (6752 bytes free)
+```
+
+Wenn dieser Punkt erreicht ist wird das Build-Skript alle 5 Sekunden nach einem DFU Bootloader suchen. Dieser Vorgang wird wiederholt bis er erfolgreich ist oder abgebrochen wird.
+
+```
+Error opening HIDBoot device: The specified device was not found
+Trying again in 5s.
+```
+
+An diesem Punkt solltest Du die Tastatur zurücksetzen um den Flash-Vorgang auszulösen. Wenn dies abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+```
+Page size = 128 (0x80)
+Device size = 32768 (0x8000); 30720 bytes remaining
+Uploading 22016 (0x5600) bytes starting at 0 (0x0)
+0x05580 ... 0x05600
+```
+
+### STM32 (ARM)
+
+Für die meisten ARM Tastaturen (inkl. Proton C, Planck Rev 6 und Preonic Rev 3), wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
+
+ make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu-util
+
+Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein Planck Revision 6 erzeugen möchtest, benutze dafür den folgenden Befehl und reboote die Tastatur in den Bootloader (kurz bevor der Kompiliervorgang abgeschlossen ist):
+
+ make planck/rev6:xyverz:dfu-util
+
+Nachdem der Kompiliervorgang abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
+
+Für auf Bootmapper Client(BMC)/bootloaderHID/ATmega32A basierende Tastaturen, wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
+
+ make <meine_Tastatur>:<meine_Tastaturbelegung>:bootloaderHID
+
+Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein jj40 erzeugen möchtest, lautet der Befehl dafür:
+```
+Linking: .build/planck_rev6_xyverz.elf [OK]
+Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
+Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
+
+Size after:
+ text data bss dec hex filename
+ 0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
+
+Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
+dfu-util 0.9
+
+Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
+Copyright 2010-2016 Tormod Volden and Stefan Schmidt
+This program is Free Software and has ABSOLUTELY NO WARRANTY
+Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
+
+Invalid DFU suffix signature
+A valid DFU suffix will be required in a future dfu-util release!!!
+Opening DFU capable USB device...
+ID 0483:df11
+Run-time device DFU version 011a
+Claiming USB DFU Interface...
+Setting Alternate Setting #0 ...
+Determining device status: state = dfuERROR, status = 10
+dfuERROR, clearing status
+Determining device status: state = dfuIDLE, status = 0
+dfuIDLE, continuing
+DFU mode device DFU version 011a
+Device returned transfer size 2048
+DfuSe interface name: "Internal Flash "
+Downloading to address = 0x08000000, size = 41824
+Download [=========================] 100% 41824 bytes
+Download done.
+File downloaded successfully
+Transitioning to dfuMANIFEST state
+```
+
+#### STM32 Befehle
+
+Für Tastaturen mit STM32 Controller sind die DFU Befehle wie folgt:
+
+* `:dfu-util` - The default command for flashing to STM32 devices.
+* `:dfu-util` - Der Standard-Befehl für STM32 Geräte.
+* `:dfu-util-wait` - Funktioniert wie der Standard-Befehl, aber mit einem 10 Sekunden Timeout bevor erneut versucht wird die Firmware zu flashen. Mit dem Parameter `TIME_DELAY=20` auf der Befehlszeile kann der Timeout beeinflusst werden.
+ * z.B.: `make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu-util TIME_DELAY=5`
+* `:dfu-util-split-left` - Gleiche Funktionsweise wie `dfu-util`, jedoch wird zusätzlich das EEPROM Setting "linke Seite" für geteilte Tastaturen gesetzt.
+* `:dfu-util-split-right` - Gleiche Funktionsweise wie `dfu-util`, jedoch wird zusätzlich das EEPROM Setting "rechte Seite" für geteilte Tastaturen gesetzt.
+
+## Probier's aus!
+
+Herzlichen Glückwunsch! Deine individuell angepasst Firmware wurde auf deine Tastatur übertragen!
+
+ Probiere deine neue Tastatur aus und gehe sicher dass alles wie gewünscht funktioniert. Wir haben einen weiteren Artikel zum Thema [Testen und Debuggen](de/newbs_testing_debugging.md) verfasst der sich mit Problembeseitigung beschäftigt um den Beginnger-Guide abzuschließen.
diff --git a/docs/de/newbs_getting_started.md b/docs/de/newbs_getting_started.md
new file mode 100644
index 0000000000..8240f2bafa
--- /dev/null
+++ b/docs/de/newbs_getting_started.md
@@ -0,0 +1,101 @@
+# Einleitung
+Genau wie in einem Computer befindet sich auch in einer Tastatur ein Prozessor.
+
+Dieser Prozessor führt Software aus, die registriert wenn Tasten gedrückt bzw. wieder losgelassen werden und leitet die entsprechenden Signale an den Computer weiter.
+
+QMK übernimmt die Rolle dieser Software und teilt dem Host-Computer den aktuellen Zustand der Tastatur mit. Wenn Du eine Tastaturbelegung definierst, ist dies äquivalent zu einem ausführbarem Programm, das auf deiner Tastatur läuft.
+
+QMK möchte seine BenutzerInnen in die Lage versetzen, simple Aufgaben möglichst einfach zu gestalten und gleichzeitig komplexe Dinge zu ermöglichen, die mit normalen Tastaturen ohne zusätzliche Software undenkbar wären. Du musst nicht programmieren können, um abgefahrene Tastaturbelegungen zu gestalten - es reicht wenn Du eine Idee hast und ein paar einfache syntaktische Regeln verstehen kannst.
+
+# Los geht's!
+Bevor Du damit loslegen kannst, deine Tastaturbelegung zu erstellen, musst Du ein wenig Software installieren und Dir eine Entwicklungsumgebung aufsetzen. Die gute Nachricht ist, dass das nur einmal erledigt werden muss, egal für wie viele verschiedene Tastaturen Du hinterher Firmware entwickeln willst.
+
+Wenn Du es vorziehst mit einer grafischen Oberfläche zu entwickeln kannst Du auch dazu gerne direkt mit dem online [QMK Konfigurator](https://config.qmk.fm) loslegen. Siehe auch: [Firmware mit der Online GUI erzeugen](de/newbs_building_firmware_configurator.md)
+
+## Software herunterladen
+
+### Text Editor
+
+Du wirst ein Programm benötigen, mit dem Du **plain text** (= reiner Text) Dateien bearbeiten und speichern kannst. Wenn Du Windows benutzt, reicht dafür schon das normale `Notepad` und für Linux z.B. `gedit` oder `leafpad`. Beide sind sehr rudimentäre Editoren deren Funktionsumfang aber vollkommen ausreicht. Für macOS' standard `TextEdit` muss man ein bisschen vorsichtig sein und darauf achten, beim Speichern explizit unter _Format_ die Option _Reiner Text_ auszuwählen.
+
+Ansonsten ist es empfehlenswert, einen Editor herunterzuladen der für die Programmierung und das Bearbeiten von Code ausgelegt ist wie z.b [Notepad++](http://notepad-plus-plus.org/), [Sublime Text](https://www.sublimetext.com/) oder [VS Code](https://code.visualstudio.com/).
+
+?> Immer noch unsicher, welcher Text Editor der Richtige für Dich ist? Laurence Bradford hat eine hervorragende [Einleitung](https://learntocodewith.me/programming/basics/text-editors/) zu dem Thema geschrieben (auf Englisch).
+
+### QMK Toolbox
+
+QMK Toolbox ist ein optionales grafisches Programm für Windows und macOS, das es erleichtern soll, deine Tastatur zu programmieren und zu debuggen. Du wirst es höchstwahrscheinlich früher oder später als unverzichtbar ansehen, wenn es darum geht eine Tastatur einfach zu flashen oder zu debuggen, da es ermöglicht, sich debug-Nachrichten direkt anzeigen zu lassen.
+
+[Hier kannst Du die aktuelle Version herunterladen.](https://github.com/qmk/qmk_toolbox/releases/latest)
+
+* Für Windows: `qmk_toolbox.exe` (portable) oder `qmk_toolbox_install.exe` (installer)
+* Für macOS: `QMK.Toolbox.app.zip` (portable) oder `QMK.Toolbox.pkg` (installer)
+
+## Die Entwicklungsumgebung aufsetzen
+
+
+Wir haben versucht, die Installation der Entwicklungsumgebung für QMK so einfach wie möglich zu gestalten. Alles, was Du tun musst, ist eine Linux oder Unix Umgebung aufzusetzen, danach macht QMK den Rest.
+
+?> Wenn Du das erste Mal mit der Linux/Unix Befehlszeile arbeitest, schadet es nicht, sich mit ein paar Grundlagen und Befehlen vertraut zu machen. Diese Ressourcen sollten ausreichen, um sich das Nötigste anzueignen um mit QMK arbeiten zu können:<br>
+[Erforderliche Linux Grundlagen](https://www.guru99.com/must-know-linux-commands.html)<br>
+[Noch ein paar Linux Befehle](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
+
+### Windows
+
+Du wirst MSYS2 (o.Ä.) und Git benötigen.
+
+* Befolge die Installationsanleitung auf der [MSYS2 Homepage](http://www.msys2.org)
+* Schließe alle offenen MSYS2 Fenster und öffne ein neues MSYS2 MinGW 64-bit Terminal
+* Installiere Git mit dem Kommando: `pacman -S git`
+
+### macOS
+
+Du wirst Homebrew benötigen. Folge dafür den Anweisungen auf der [Homebrew homepage](https://brew.sh).
+
+Nachdem Homebrew erfolgreich installiert ist, kannst Du mit _QMK aufsetzen_ fortfahren.
+
+### Linux
+
+Du benötigst Git, aber es ist ziemlich wahrscheinlich, dass es bereits installiert ist. Sollte dies nicht der Fall sein, kannst Du es mit dem folgenden Aufruf installieren:
+
+* Debian / Ubuntu / Devuan: `apt-get install git`
+* Fedora / Red Hat / CentOS: `yum install git`
+* Arch Linux: `pacman -S git`
+
+?> Docker ist ebenfalls eine Option für alle Plattformen. [Hier](de/getting_started_build_tools.md#docker) kannst Du dazu weitere Informationen finden.
+
+## QMK aufsetzen
+Wenn Du damit fertig bist, deine Linux/Unix Umgebung zu installieren, kannst Du damit fortfahren QMK herunterzuladen. Dafür werden wir mit Git das QMK Repository "klonen". Öffne ein Terminal oder ein MSYS2 MinGW Fenster, dies wirst Du für den Rest der Anleitung benötigen. In diesem Fenster rufst Du nun die beiden folgenden Kommandos auf:
+
+```shell
+git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
+cd qmk_firmware
+```
+?> Wenn Du bereits weißt, [wie man GitHub benutzt](de/getting_started_github.md), empfehlen wir, dass Du Dir ein eigenen Fork erstellst. Wenn Du nicht weißt, was das bedeuten soll, kannst Du diesen Ratschlag getrost ignorieren.
+
+QMK liefert ein Script mit, das helfen soll, Dir alles Weitere abzunehmen. Du kannst es mit dem folgenden Befehl aufrufen:
+
+ util/qmk_install.sh
+
+## Die Build-Umgebung testen
+
+Nun sollte hoffentlich alles Nötige für eine funktionierende QMK Build-Umgebung installiert sein und Du solltest in der Lage sein, die QMK-Firmware zu kompilieren. Um dies mit einer `default` Tastaturbelegung zu testen, kannst Du den folgenden Befehl ausprobieren:
+
+ make <keyboard>:default
+
+Der Befehl um z.B. die Firmware für ein _Clueboard 66%_ zu erzeugen lautet:
+
+ make clueboard/66/rev3:default
+
+Wenn es fertig ist, sollte der Output ungefähr so ähnlich wie das Folgende aussehen:
+
+```
+Linking: .build/clueboard_66_rev3_default.elf [OK]
+Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
+Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
+Checking file size of clueboard_66_rev3_default.hex [OK]
+ * The firmware size is fine - 26356/28672 (2316 bytes free)
+```
+
+# Eine eigene Tastaturbelegung erstellen
+Du bist nun fertig mit dem Setup der Entwicklungsumgebung und solltest somit in der Lage sein, deine eigenen Tastaturbelegungen zu erstellen. Um fortzufahren, folge bitte der nächsten Anleitung unter [Die erste Firmware](de/newbs_building_firmware.md).
diff --git a/docs/de/newbs_learn_more_resources.md b/docs/de/newbs_learn_more_resources.md
new file mode 100644
index 0000000000..59b72152dd
--- /dev/null
+++ b/docs/de/newbs_learn_more_resources.md
@@ -0,0 +1,14 @@
+# Lernmaterial
+
+Diese weiterführenden Ressourcen sind darauf ausgerichtet, Neulingen der QMK Commmunity mehr Informationen und ein besseres Verständnis zu einzelnen Themen zu bieten.
+
+Git Ressourcen:
+
+* [Gutes allgemeines Tutorial](https://www.codecademy.com/learn/learn-git) (auf Englisch)
+* [Git spielerisch anhand von Beispielen lernen](https://learngitbranching.js.org/) (auf Englisch)
+* [Mehr über den allgemeinen Umgang mit Github](getting_started_github.md)
+* [Mehr über Git im Bezug zu QMK](contributing.md)
+
+Mehr über die Arbeit mit der Befehlszeile:
+
+* [Gutes allgemeines Tutorial über die Arbeit mit der Befehlszeile](https://www.codecademy.com/learn/learn-the-command-line) (auf Englisch)
diff --git a/docs/de/newbs_testing_debugging.md b/docs/de/newbs_testing_debugging.md
new file mode 100644
index 0000000000..acc067e10f
--- /dev/null
+++ b/docs/de/newbs_testing_debugging.md
@@ -0,0 +1,100 @@
+# Testen und Debuggen
+
+Nachdem Du deine Tastatur mit deiner angepassten Firmware geflasht hast, ist es nun an der Zeit sie auszuprobieren. Mit ein bisschen Glück sollte alles ohne Probleme funktionieren, wenn dies nicht der Fall ist, soll dieses Dokument dir dabei helfen, herauszufinden wo das Problem liegt.
+
+## Testen
+
+Die Tastatur zu testen ist relativ selbsterklärend. Drücke jede der Tasten um dich zu versichern, dass der gesendete Keyode der ist, den du erwarten würdest. Dafür gibt es sogar ein paar Programme die helfen sollen, dass keine Taste ausgelassen wurde.
+
+Anmerkung: Diese Programme werden weder von QMK bereitgestellt oder gutgeheißen.
+
+* [Switch Hitter](https://elitekeyboards.com/switchhitter.php) (Nur für Windows)
+* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Nur für Mac)
+* [Keyboard Tester](http://www.keyboardtester.com) (Web basiert)
+* [Keyboard Checker](http://keyboardchecker.com) (Web basiert)
+
+## Debuggen
+
+Deine Tastatur wird Debug Informationen liefern wenn Du `CONSOLE_ENABLE = yes` in deiner `rules.mk` gesetzt hast. Die default-Ausgabe ist sehr beschränkt und kann wenn nötig durch die Aktivierung des Debug-Modes erhöht werden. Benutze dafür entweder den `DEBUG` Keycode in deiner Tastaturbelegung, das [Command](de/feature_command.md)-Feature oder füge den folgenden Code zu deiner Tastaturbelegung hinzu.
+
+```c
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+ debug_enable=true;
+ debug_matrix=true;
+ //debug_keyboard=true;
+ //debug_mouse=true;
+}
+```
+
+### Debuggen mit der QMK Toolbox
+
+Für kompatible Plattformen kann die [QMK Toolbox](https://github.com/qmk/qmk_toolbox) benutzt werden um Debug-Nachrichten deiner Tastatur anzuzeigen.
+
+### Debuggen mit hid_listen
+
+Bevorzugst Du es lieber auf der Befehlszeile zu debuggen? Dafür eignet sich das Programm [hid_listen](https://www.pjrc.com/teensy/hid_listen.html) von PJRC. Binaries sind für Windows, Linux und MacOS verfügbar.
+
+<!-- FIXME: Describe the debugging messages here. -->
+
+## Eigene Debug-Nachrichten senden
+
+Manchmal ist es hilfreich Debug-Nachrichten innerhalb deines eigenen [Custom Codes](de/custom_quantum_functions.md) zu drucken. Das ist ziemlich einfach. Beginne damit `print.h` am Anfang deiner Datei zu inkludieren:
+
+ #include <print.h>
+
+Danach stehen dir verschiedene Druck-Funktionen zur Verfügung:
+
+* `print("string")`: Druckt einen simplen String
+* `uprintf("%s string", var)`: Druckt einen formatierten String
+* `dprint("string")` Druckt einen simplen String, aber nur wenn der Debug-Mode aktiviert ist
+* `dprintf("%s string", var)`: Druckt einen formatierten String, aber nur wenn der Debug-Mode aktiviert ist
+
+## Debug Beispiele
+
+Anbei findest Du eine Sammlung von hilfreichen Beispielen. Für weitere Informationen Informationen sei an dieser Stelle auf [Debugging/Troubleshooting QMK](de/faq_debug.md) verwiesen.
+
+### Which matrix position is this keypress?
+### Welche Matrix Position hat dieser Tastenanschlag
+
+Beim Portieren, oder bei der Fehlerdiagnose von PCB Problemen, ist es nützlich sich anzeigen zu lassen ob ein Tastenanschlag richtig erkannt wurde. Um die Protokollierung für diesen Fall zu aktivieren, füge bitte folgenden Code zu deiner Tastaturbelegung `keymap.c` hinzu.
+
+```c
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // Wenn 'console' aktiviert ist wird die Matrix-Position und der Status jedes Tastenanschlags ausgegeben
+#ifdef CONSOLE_ENABLE
+ uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+#endif
+ return true;
+}
+```
+
+Beispiel Ausgabe:
+```text
+Waiting for device:.......
+Listening:
+KL: kc: 169, col: 0, row: 0, pressed: 1
+KL: kc: 169, col: 0, row: 0, pressed: 0
+KL: kc: 174, col: 1, row: 0, pressed: 1
+KL: kc: 174, col: 1, row: 0, pressed: 0
+KL: kc: 172, col: 2, row: 0, pressed: 1
+KL: kc: 172, col: 2, row: 0, pressed: 0
+```
+
+### Wieviel Zeit wurde benötigt um einen Tastenanschlag zu detektieren?
+
+Wenn Performance-Probleme auftreten ist es hilfreich die Frequenz, mit der die Matrix gescannt wird, zu wissen. Um dies in diesem Fall zu aktiveren füge, den folgenden Code zu deiner Tastaturbelegung in `config.h` hinzu.
+
+```c
+#define DEBUG_MATRIX_SCAN_RATE
+```
+
+Beispiel Ausgabe
+```text
+ > matrix scan frequency: 315
+ > matrix scan frequency: 313
+ > matrix scan frequency: 316
+ > matrix scan frequency: 316
+ > matrix scan frequency: 316
+ > matrix scan frequency: 316
+```
diff --git a/docs/documentation_templates.md b/docs/documentation_templates.md
index ba3830b64c..85d3893b71 100644
--- a/docs/documentation_templates.md
+++ b/docs/documentation_templates.md
@@ -28,9 +28,9 @@ the Ctrl, Alt, or GUI modifiers are held down.
A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
-Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
-Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
-Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+* Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
+* Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
+* Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
Make example for this keyboard (after setting up your build environment):
@@ -38,5 +38,3 @@ Make example for this keyboard (after setting up your build environment):
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).
```
-
-There needs to be two spaces at the end of the `Keyboard Maintainer` and `Hardware Supported` lines for it to render correctly with Markdown.
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..618ae40f3b 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.
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 5cc20251d3..6c66defbd4 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -27,7 +27,7 @@ You may need privilege to access the device on OS like Linux.
Check:
- *hid_listen* finds your device. See above.
- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
-- set `debug_enable=true` usually in `matrix_init()` in **matrix.c**.
+- set `debug_enable=true`. See [Testing and Debugging](newbs_testing_debugging.md#debugging)
- try using 'print' function instead of debug print. See **common/print.h**.
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
@@ -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 f748ccd70c..ec3807f400 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -15,7 +15,7 @@ This will allow you to use `FN_CAPS` and `ALT_TAB` in your keymap, keeping it mo
## Caveats
-Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
+Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
@@ -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.
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_debounce_type.md b/docs/feature_debounce_type.md
index 38eca3f37c..b5e5b61bb3 100644
--- a/docs/feature_debounce_type.md
+++ b/docs/feature_debounce_type.md
@@ -17,14 +17,14 @@ endif
| DEBOUNCE_TYPE | Description | What else is needed |
| ------------- | --------------------------------------------------- | ----------------------------- |
| Not defined | Use the default algorithm, currently sym_g | Nothing |
-| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
+| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
**Regarding split keyboards**:
The debounce code is compatible with split keyboards.
# Use your own debouncing code
-* Set ```DEBOUNCE_TYPE = custom ```.
+* Set ```DEBOUNCE_TYPE = custom```.
* Add ```SRC += debounce.c```
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
* Debouncing occurs after every raw matrix scan.
@@ -33,10 +33,10 @@ The debounce code is compatible with split keyboards.
# Changing between included debouncing methods
You can either use your own code, by including your own debounce.c, or switch to another included one.
Included debounce methods are:
-* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE_DELAY``` milliseconds of no further input for that row.
+* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
-* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` milliseconds of no further input for that key
-* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.
+* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
+* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occured, all input changes are pushed.
diff --git a/docs/feature_dynamic_macros.md b/docs/feature_dynamic_macros.md
index 0d11a28641..b86df6c60f 100644
--- a/docs/feature_dynamic_macros.md
+++ b/docs/feature_dynamic_macros.md
@@ -4,51 +4,45 @@ QMK supports temporary macros created on the fly. We call these Dynamic Macros.
You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
-To enable them, first add a new element to the end of your `keycodes` enum — `DYNAMIC_MACRO_RANGE`:
+To enable them, first include `DYNAMIC_MACRO_ENABLE = yes` in your `rules.mk`. Then, add the following keys to your keymap:
-```c
-enum keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- PLOVER,
- LOWER,
- RAISE,
- BACKLIT,
- EXT_PLV,
- DYNAMIC_MACRO_RANGE,
-};
-```
+|Key |Alias |Description |
+|------------------|----------|---------------------------------------------------|
+|`DYN_REC_START1` |`DM_REC1` |Start recording Macro 1 |
+|`DYN_REC_START2` |`DM_REC2` |Start recording Macro 2 |
+|`DYN_MACRO_PLAY1` |`DM_PLY1` |Replay Macro 1 |
+|`DYN_MACRO_PLAY2` |`DM_PLY2` |Replay Macro 2 |
+|`DYN_REC_STOP` |`DM_RSTP` |Finish the macro that is currently being recorded. |
-Your `keycodes` enum may have a slightly different name. You must add `DYNAMIC_MACRO_RANGE` as the last element because `dynamic_macros.h` will add some more keycodes after it.
+That should be everything necessary.
-Below it, include the `dynamic_macro.h` header:
+To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`.
-```c
- #include "dynamic_macro.h"`
-```
+To finish the recording, press the `DYN_REC_STOP` layer button.
-Add the following keys to your keymap:
+To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
-* `DYN_REC_START1` — start recording the macro 1,
-* `DYN_REC_START2` — start recording the macro 2,
-* `DYN_MACRO_PLAY1` — replay the macro 1,
-* `DYN_MACRO_PLAY2` — replay the macro 2,
-* `DYN_REC_STOP` — finish the macro that is currently being recorded.
+It is possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again. You can disable this completly by defining `DYNAMIC_MACRO_NO_NESTING` in your `config.h` file.
-Add the following code to the very beginning of your `process_record_user()` function:
+?> For the details about the internals of the dynamic macros, please read the comments in the `process_dynamic_macro.h` and `process_dynamic_macro.c` files.
-```c
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
-```
+## Customization
-That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
+There are a number of options added that should allow some additional degree of customization
-Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again.
+|Define |Default |Description |
+|----------------------------|----------------|-----------------------------------------------------------------------------------------------------------------|
+|`DYNAMIC_MACRO_SIZE` |128 |Sets the amount of memory that Dynamic Macros can use. This is a limited resource, dependent on the controller. |
+|`DYNAMIC_MACRO_USER_CALL` |*Not defined* |Defining this falls back to using the user `keymap.c` file to trigger the macro behavior. |
+|`DYNAMIC_MACRO_NO_NESTING` |*Not Defined* |Defining this disables the ability to call a macro from another macro (nested macros). |
-For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above:
+
+If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by adding the `DYNAMIC_MACRO_SIZE` define in your `config.h` (default value: 128; please read the comments for it in the header).
+
+
+### DYNAMIC_MACRO_USER_CALL
+
+For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, add `#define DYNAMIC_MACRO_USER_CALL` to your `config.h` and insert the following snippet at the beginning of your `process_record_user()` function:
```c
uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
@@ -58,6 +52,15 @@ For users of the earlier versions of dynamic macros: It is still possible to fin
}
```
-If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header).
+### User Hooks
+
+There are a number of hooks that you can use to add custom functionality and feedback options to Dynamic Macro feature. This allows for some additional degree of customization.
+
+Note, that direction indicates which macro it is, with `1` being Macro 1, `-1` being Macro 2, and 0 being no macro.
+
+* `dynamic_macro_record_start_user(void)` - Triggered when you start recording a macro.
+* `dynamic_macro_play_user(int8_t direction)` - Triggered when you play back a macro.
+* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record)` - Triggered on each keypress while recording a macro.
+* `dynamic_macro_record_end_user(int8_t direction)` - Triggered when the macro recording is stopped.
-For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
+Additionally, you can call `dynamic_macro_led_blink()` to flash the backlights if that feature is enabled.
diff --git a/docs/feature_haptic_feedback.md b/docs/feature_haptic_feedback.md
index d9e445de86..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`
@@ -41,11 +41,15 @@ First you will need a build a circuit to drive the solenoid through a mosfet as
[Wiring diagram provided by Adafruit](https://playground.arduino.cc/uploads/Learning/solenoid_driver.pdf)
-Select a pin that has PWM for the signal pin
-```
-#define SOLENOID_PIN *pin*
-```
+| Settings | Default | Description |
+|--------------------------|---------------|-------------------------------------------------------|
+|`SOLENOID_PIN` | *Not defined* |Configures the pin that the Solenoid is connected to. |
+|`SOLENOID_DEFAULT_DWELL` | `12` ms |Configures the default dwell time for the solenoid. |
+|`SOLENOID_MIN_DWELL` | `4` ms |Sets the lower limit for the dwell. |
+|`SOLENOID_MAX_DWELL` | `100` ms |Sets the upper limit for the dwell. |
+
+?> Dwell time is how long the "plunger" stays activated. The dwell time changes how the solenoid sounds.
Beware that some pins may be powered during bootloader (ie. A13 on the STM32F303 chip) and will result in the solenoid kept in the on state through the whole flashing process. This may overheat and damage the solenoid. If you find that the pin the solenoid is connected to is triggering the solenoid during bootloader/DFU, select another pin.
@@ -151,4 +155,4 @@ This will set what sequence HPT_RST will set as the active mode. If not defined,
### DRV2605L Continuous Haptic Mode
-This mode sets continuous haptic feedback with the option to increase or decrease strength. \ No newline at end of file
+This mode sets continuous haptic feedback with the option to increase or decrease strength.
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 b2850c3cff..5695acc508 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -107,7 +107,7 @@ Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](
---
-### WS2812 (AVR only)
+### WS2812
There is basic support for addressable RGB matrix lighting with a WS2811/WS2812{a,b,c} addressable LED strand. To enable it, add this to your `rules.mk`:
@@ -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
@@ -282,7 +286,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:
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index be4ddfa729..69a6aaaed6 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -6,7 +6,7 @@ QMK has the ability to control RGB LEDs attached to your keyboard. This is commo
Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
-Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
+Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
* WS2811, WS2812, WS2812B, WS2812C, etc.
* SK6812, SK6812MINI, SK6805
@@ -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 |
@@ -363,8 +363,8 @@ Using the `rgblight_set_clipping_range()` function, you can prepare more buffers
You can set the Clipping Range by executing the following code.
```c
-// some soruce
- rgblight_set_clipping_range(3, 4);
+// some source
+rgblight_set_clipping_range(3, 4);
```
<img src="https://user-images.githubusercontent.com/2170248/55743785-2bd82a00-5a6e-11e9-9d4b-1b4ffaf4932b.JPG" alt="clip direct" width="70%"/>
diff --git a/docs/feature_tap_dance.md b/docs/feature_tap_dance.md
index 7427a77146..f48f11b1cb 100644
--- a/docs/feature_tap_dance.md
+++ b/docs/feature_tap_dance.md
@@ -333,6 +333,8 @@ And then simply use `TD(X_CTL)` anywhere in your keymap.
If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
+> In this configuration "hold" takes place **after** tap dance timeout (see `ACTION_TAP_DANCE_FN_ADVANCED_TIME`). To achieve instant hold, remove `state->interrupted` checks in conditions. As a result you may use comfortable longer tapping periods to have more time for taps and not to wait too long for holds (try starting with doubled `TAPPING_TERM`).
+
### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`.
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/getting_started_build_tools.md b/docs/getting_started_build_tools.md
index a55e903a6f..2721a9a031 100644
--- a/docs/getting_started_build_tools.md
+++ b/docs/getting_started_build_tools.md
@@ -112,21 +112,6 @@ The Toolchain setup is done through the Windows Subsystem for Linux, and the pro
* The WSL Git is **not** compatible with the Windows Git, so use the Windows Git Bash or a windows Git GUI for all Git operations
* You can edit files either inside WSL or normally using Windows, but note that if you edit makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work.
-## Windows (Vista and Later) (Deprecated)
-
-These are the old instructions for Windows Vista and later. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
-
-1. If you have ever installed WinAVR, uninstall it.
-2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
-3. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware).
-4. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
-5. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
-6. Open the `\util` folder.
-7. Double-click on the `1-setup-path-win` batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
-8. Right-click on the `2-setup-environment-win` batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
-
-If you have trouble and want to ask for help, it is useful to generate a *Win_Check_Output.txt* file by running `Win_Check.bat` in the `\util` folder.
-
## Docker
If this is a bit complex for you, Docker might be the turnkey solution you need. After installing [Docker CE](https://docs.docker.com/install/#supported-platforms), run the following command from the `qmk_firmware` directory to build a keyboard/keymap:
diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md
index aeb8738b77..629f4ece26 100644
--- a/docs/getting_started_github.md
+++ b/docs/getting_started_github.md
@@ -19,7 +19,7 @@ And be sure to select "HTTPS", and select the link and copy it:
From here, enter `git clone ` 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.
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..bf8d472d0e 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.
diff --git a/docs/hardware_drivers.md b/docs/hardware_drivers.md
index 321ba2a4bc..1651877957 100644
--- a/docs/hardware_drivers.md
+++ b/docs/hardware_drivers.md
@@ -22,7 +22,7 @@ Support for SSD1306 based OLED displays. For more information see the [OLED Driv
You can make use of uGFX within QMK to drive character and graphic LCDs, LED arrays, OLED, TFT, and other display technologies. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process.
-## WS2812 (AVR Only)
+## WS2812
Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
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/index.html b/docs/index.html
index 0cee19ecd6..8d03c6edef 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,23 +29,47 @@
},
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',
placeholder: {
'/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
diff --git a/docs/ja/README.md b/docs/ja/README.md
new file mode 100644
index 0000000000..9b715ec0fb
--- /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..22db3a7fe1
--- /dev/null
+++ b/docs/ja/_summary.md
@@ -0,0 +1,121 @@
+* [完全ãªåˆå¿ƒè€…ã®ã‚¬ã‚¤ãƒ‰](ja/newbs.md)
+ * [ã¯ã˜ã‚ã«](ja/newbs_getting_started.md)
+ * [åˆã‚ã¦ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ§‹ç¯‰](ja/newbs_building_firmware.md)
+ * [ファームウェアã®ãƒ•ラッシュ](ja/newbs_flashing.md)
+ * [テストã¨ãƒ‡ãƒãƒƒã‚°](ja/newbs_testing_debugging.md)
+ * [Gitã®ãƒ™ã‚¹ãƒˆãƒ—ラクティス](ja/newbs_best_practices.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..5b7b89a678
--- /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 @gnu-mcu-eclipse/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 @gnu-mcu-eclipse/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 Toolchain Paths ã‚’é¸æŠžã—ã¾ã™ã€‚xPack を押ã—㦠OK を押ã—ã¾ã™ã€‚OpenOCD Path ã§åŒã˜ã“ã¨ã‚’繰り返ã—ã€Windows ã®å ´åˆã¯ã€Build Tool Path ã§ã‚‚åŒã˜ã“ã¨ã‚’繰り返ã—ã¾ã™ã€‚Apply and Close ã‚’é¸æŠžã—ã¾ã™ã€‚
+
+ã“ã“ã§ã€å¿…è¦ãª MCU パッケージをインストールã—ã¾ã™ã€‚Window -> Open Perspective -> Others -> Packs ã‚’é¸æŠžã—ã¦ã€Packs perspective ã«ç§»å‹•ã—ã¾ã™ã€‚Packs ã‚¿ãƒ–ã®æ¨ªã«ã‚る黄色ã®ãƒªãƒ•レッシュ記å·ã‚’é¸æŠžã—ã¾ã™ã€‚ã“ã‚Œã¯æ§˜ã€…ãªå ´æ‰€ã‹ã‚‰ MCU ã®å®šç¾©ã‚’è¦æ±‚ã™ã‚‹ãŸã‚ã€æ™‚é–“ãŒæŽ›ã‹ã‚Šã¾ã™ã€‚一部ã®ãƒªãƒ³ã‚¯ãŒå¤±æ•—ã—ãŸå ´åˆã¯ã€ãŠãらã Ignore ã‚’é¸æŠžã§ãã¾ã™ã€‚
+
+ã“れãŒçµ‚了ã™ã‚‹ã¨ã€ãƒ“ルドやデãƒãƒƒã‚°ã™ã‚‹ MCU を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹ã¯ãšã§ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€STM32F3 シリーズ㮠MCU を使ã„ã¾ã™ã€‚å·¦å´ã§ã€STMicroelectronics -> STM32F3 Series ã‚’é¸æŠžã—ã¾ã™ã€‚中央ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã€pack ãŒè¡¨ç¤ºã•れã¾ã™ã€‚å³ã‚¯ãƒªãƒƒã‚¯ã—ã€Install ã‚’é¸æŠžã—ã¾ã™ã€‚ãれãŒçµ‚了ã—ãŸã‚‰ã€Window -> Open Perspective -> Others -> 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 Configuration ã‚’é¸æŠžã—ã¾ã™ã€‚ã“ã“ã§ã€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/config_options.md b/docs/ja/config_options.md
new file mode 100644
index 0000000000..d7457798c8
--- /dev/null
+++ b/docs/ja/config_options.md
@@ -0,0 +1,376 @@
+# QMK ã®è¨­å®š
+
+<!---
+ original document: eae21eed7:docs/config_options.md
+ git diff eae21eed7 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 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`
+ * コンパイル・リンクリストã«ãƒ•ァイルを追加ã™ã‚‹ãŸã‚ã«ä½¿ã‚れã¾ã™ã€‚
+* `LAYOUTS`
+ * ã“ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹[レイアウト](ja/feature_layouts.md)ã®ãƒªã‚¹ãƒˆ
+
+## 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 サスペンドãƒã‚§ãƒƒã‚¯ã‚’無効ã«ã—ã¾ã™ã€‚通常ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œã•れるå‰ã«ãƒ›ã‚¹ãƒˆãŒã‚¦ã‚§ã‚¤ã‚¯ アップã™ã‚‹ã®ã‚’å¾…ã¡ã¾ã™ã€‚分割キーボードã¯åŠåˆ†ã¯ã‚¦ã‚§ã‚¤ã‚¯ã‚¢ãƒƒãƒ—コールをå–å¾—ã§ãã¾ã›ã‚“ãŒã€ãƒžã‚¹ã‚¿ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’é€ä¿¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€å½¹ã«ç«‹ã¡ã¾ã™ã€‚
+* `LINK_TIME_OPTIMIZATION_ENABLE`
+ * キーボードをコンパイルã™ã‚‹æ™‚ã«ã€Link Time Optimization (`LTO`) を有効ã«ã—ã¾ã™ã€‚ã“れã¯å‡¦ç†ã«æ™‚é–“ãŒæŽ›ã‹ã‚Šã¾ã™ãŒã€ã‚³ãƒ³ãƒ‘イルã•れãŸã‚µã‚¤ã‚ºã‚’å¤§å¹…ã«æ¸›ã‚‰ã—ã¾ã™ (ãã—ã¦ã€ãƒ•ァームウェアãŒå°ã•ã„ãŸã‚ã€è¿½åŠ ã®æ™‚é–“ã¯åˆ†ã‹ã‚‰ãªã„ãらã„ã§ã™)。ãŸã ã—ã€`LTO` ãŒæœ‰åйãªå ´åˆã€å¤ã„マクロã¨é–¢æ•°ã®æ©Ÿèƒ½ãŒå£Šã‚Œã‚‹ãŸã‚ã€è‡ªå‹•çš„ã«ã“ã‚Œã‚‰ã®æ©Ÿèƒ½ã‚’無効ã«ã—ã¾ã™ã€‚ã“れ㯠`NO_ACTION_MACRO` 㨠`NO_ACTION_FUNCTION` を自動的ã«å®šç¾©ã™ã‚‹ã“ã¨ã§è¡Œã‚れã¾ã™ã€‚
+ * `LINK_TIME_OPTIMIZATION_ENABLE` ã®ä»£ã‚り㫠`LTO_ENABLE` を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+## 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/newbs.md b/docs/ja/newbs.md
new file mode 100644
index 0000000000..54189cce48
--- /dev/null
+++ b/docs/ja/newbs.md
@@ -0,0 +1,41 @@
+# QMK åˆå¿ƒè€…ガイド
+
+<!---
+ grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
+ original document: ed0575fc8:docs/newbs.md
+ git diff ed0575fc8 HEAD docs/newbs.md | cat
+-->
+
+QMK ã¯ã€ãƒ¡ã‚«ãƒ‹ã‚«ãƒ«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ç”¨ã®å¼·åŠ›ãªã‚ªãƒ¼ãƒ—ンソースファームウェアã§ã™ã€‚
+QMK を使用ã—ã¦ã€ã‚·ãƒ³ãƒ—ルã‹ã¤å¼·åŠ›ãªæ–¹æ³•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’カスタマイズã§ãã¾ã™ã€‚
+完全ãªåˆå¿ƒè€…ã‹ã‚‰ãƒ—ログラマーã«è‡³ã‚‹ã¾ã§ã€ã‚らゆるスキルレベルã®äººã€…㌠QMK を使用ã—ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’カスタマイズã—ã¦ã„ã¾ã™ã€‚
+ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€ã‚ãªãŸã®ã‚¹ã‚­ãƒ«ã«ã‹ã‹ã‚らãšã€åŒã˜ã“ã¨ã‚’è¡Œã†æ‰‹åŠ©ã‘ã‚’ã—ã¾ã™ã€‚
+
+ãŠä½¿ã„ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã§ QMK を実行ã§ãã‚‹ã‹ã©ã†ã‹ä¸æ˜Žã§ã™ã‹ï¼Ÿ
+ã‚‚ã—作æˆã—ãŸã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒãƒ¡ã‚«ãƒ‹ã‚«ãƒ«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å ´åˆã€å®Ÿè¡Œã§ãã‚‹å¯èƒ½æ€§ãŒé«˜ã„ã§ã™ã€‚
+QMK ã¯[多ãã®è¶£å‘³ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰](http://qmk.fm/keyboards/)をサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ãŸã‚ã€ã‚‚ã—ç¾åœ¨ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã§ QMK を実行ã§ããªã„å ´åˆã§ã‚‚ã€ãƒ‹ãƒ¼ã‚ºã«åˆã£ãŸã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’見ã¤ã‘ã‚‹ã®ã«å•題ã¯ãªã„ã¯ãšã§ã™ã€‚
+
+## 概è¦
+
+ã“ã®ã‚¬ã‚¤ãƒ‰ã«ã¯7ã¤ã®ä¸»è¦ãªã‚»ã‚¯ã‚·ãƒ§ãƒ³ãŒã‚りã¾ã™ã€‚
+
+* [ã¯ã˜ã‚ã«](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_best_practices.md)
+* [ã•らã«å­¦ã¶ãŸã‚ã®å­¦ç¿’リソース](ja/newbs_learn_more_resources.md)
+
+ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€ã“れã¾ã§ã‚½ãƒ•トウェアをコンパイルã—ãŸã“ã¨ãŒãªã„人を支æ´ã™ã‚‹ã“ã¨ã«ç‰¹åŒ–ã—ã¦ã„ã¾ã™ã€‚
+ãã®è¦³ç‚¹ã‹ã‚‰é¸æŠžã¨æŽ¨å¥¨ã‚’行ã„ã¾ã™ã€‚
+ã“ã‚Œã‚‰ã®æ‰‹é †ã®å¤šãã«ã¯ä»£æ›¿æ–¹æ³•ãŒã‚りã€ã“れらã®ä»£æ›¿æ–¹æ³•ã®ã»ã¨ã‚“ã©ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚
+ã‚¿ã‚¹ã‚¯ã‚’é”æˆã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦ç–‘å•ãŒã‚ã‚‹å ´åˆã¯ã€[案内を求ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™](ja/getting_started_getting_help.md)。
+
+## 追加ã®ãƒªã‚½ãƒ¼ã‚¹(英語)
+
+* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – æ–°è¦ãƒ¦ãƒ¼ã‚¶è¦–点ã‹ã‚‰è¦‹ãŸ QMK ファームウェアã®åŸºæœ¬çš„ãªä½¿ç”¨æ–¹æ³•ã‚’ã‚«ãƒãƒ¼ã—ãŸãƒ¦ãƒ¼ã‚¶ä½œæˆã®ãƒ–ログ。
+
+## 追加ã®ãƒªã‚½ãƒ¼ã‚¹(日本語)
+
+_日本語ã®ãƒªã‚½ãƒ¼ã‚¹æƒ…報を募集中ã§ã™ã€‚_
diff --git a/docs/ja/newbs_best_practices.md b/docs/ja/newbs_best_practices.md
new file mode 100644
index 0000000000..3c87d53d46
--- /dev/null
+++ b/docs/ja/newbs_best_practices.md
@@ -0,0 +1,263 @@
+<!-- # 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 リãƒã‚¸ãƒˆãƒªã‚’フォーク](ja/getting_started_github.md) ã—ã¦ã„る。
+2. ã‚ãªãŸã¯ã€[環境構築](ja/newbs_getting_started.md#set-up-your-environment) 㨠[QMK ã®è¨­å®š](ja/newbs_getting_started.md#set-up-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
new file mode 100644
index 0000000000..f9a847f4d2
--- /dev/null
+++ b/docs/ja/newbs_building_firmware.md
@@ -0,0 +1,99 @@
+# åˆã‚ã¦ã®ãƒ•ァームウェアを構築ã™ã‚‹(コマンドライン版)
+
+<!---
+ 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
+-->
+
+ビルド環境をセットアップã—ãŸã®ã§ã€ã‚«ã‚¹ã‚¿ãƒ ãƒ•ァームウェアã®ãƒ“ルドを開始ã™ã‚‹æº–å‚™ãŒã§ãã¾ã—ãŸã€‚
+ガイドã®ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ãƒ•ァイルマãƒãƒ¼ã‚¸ãƒ£ã€ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®3ã¤ã®ãƒ—ãƒ­ã‚°ãƒ©ãƒ é–“ã‚’è¡Œãæ¥ã—ã¾ã™ã€‚
+キーボードファームウェアãŒå®Œæˆã—ã¦æº€è¶³ã™ã‚‹ã¾ã§ã€ã“ã®3ã¤ã™ã¹ã¦ã‚’é–‹ã„ãŸã¾ã¾ã«ã—ã¾ã™ã€‚
+
+ã‚¬ã‚¤ãƒ‰ã®æœ€åˆã®éƒ¨åˆ†ã‚’読んã å¾Œã§ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã¦å†åº¦é–‹ã„ã¦ã„ãŸå ´åˆã¯ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ãŒæ­£ã—ã„ディレクトリã«ã‚るよã†ã« `cd qmk_firmware` を忘れãªã„ã§ãã ã•ã„。
+
+## キーマップフォルダã«ç§»å‹•ã™ã‚‹
+
+ã‚ãªãŸã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã® `keymaps`フォルダã«ç§»å‹•ã™ã‚‹ã“ã¨ã‹ã‚‰å§‹ã‚ã¾ã™ã€‚
+
+macOS ã¾ãŸã¯ Windows を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—フォルダを簡å˜ã«é–‹ããŸã‚ã«ä½¿ç”¨ã§ãるコマンドãŒã‚りã¾ã™ã€‚
+
+### macOS:
+
+``` open keyboards/<keyboard_folder>/keymaps ```
+
+### Windows:
+
+``` start .\\keyboards\\<keyboard_folder>\\keymaps ```
+
+## `default` キーマップã®ã‚³ãƒ”ーを作æˆã™ã‚‹
+
+`keymaps` フォルダを開ã„ãŸã‚‰ã€`default`フォルダã®ã‚³ãƒ”ーを作æˆã—ã¾ã™ã€‚
+フォルダã«ã¯ã€ã‚ãªãŸã® GitHub ã§ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨åŒã˜åå‰ã‚’付ã‘ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ãŒã€å°æ–‡å­—ã€æ•°å­—ã€ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢ã®ã¿ãŒå«ã¾ã‚Œã¦ã„ã‚‹é™ã‚Šã€ä»»æ„ã®åå‰ã‚’使用ã§ãã¾ã™ã€‚
+
+ã“ã®æ‰‹é †ã‚’自動化ã™ã‚‹ãŸã‚ã«ã€`new_keymap.sh`スクリプトを実行ã™ã‚‹æ–¹æ³•ã‚‚ã‚りã¾ã™ã€‚
+
+`qmk_firmware/util` ディレクトリã«ç§»å‹•ã—ã¦ã€æ¬¡ã‚’入力ã—ã¾ã™ã€‚
+
+```
+./new_keymap.sh <keyboard path> <username>
+```
+
+ãŸã¨ãˆã°ã€John ã¨ã„ã†åå‰ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ 1up60hse ã®æ–°ã—ã„キーマップを作æˆã—よã†ã¨ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«å…¥åŠ›ã—ã¾ã™ã€‚
+
+```
+./new_keymap.sh 1upkeyboards/1up60hse john
+```
+
+## ã‚ãªãŸã®å¥½ã¿ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã§ `keymap.c` ã‚’é–‹ã
+
+`keymap.c`ã‚’é–‹ãã¾ã™ã€‚
+ã“ã®ãƒ•ァイル内ã«ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å‹•作を制御ã™ã‚‹æ§‹é€ ãŒã‚りã¾ã™ã€‚
+`keymap.c`ã®ä¸Šéƒ¨ã«ã¯ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—を読ã¿ã‚„ã™ãã™ã‚‹ `define` 㨠`enum` ãŒã‚りã¾ã™ã€‚
+ã•らã«ä¸‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ãªè¡ŒãŒã‚りã¾ã™ã€‚
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ã“ã®è¡Œã¯ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®ãƒªã‚¹ãƒˆã®é–‹å§‹ã‚’表ã‚ã—ã¦ã„ã¾ã™ã€‚
+ãã®ä¸‹ã«ã¯ã€`LAYOUT` ã¾ãŸã¯ `KEYMAP` ã®ã„ãšã‚Œã‹ã‚’å«ã‚€è¡ŒãŒã‚りã€ã“れらã®è¡Œã¯ãƒ¬ã‚¤ãƒ¤ãƒ¼ã®é–‹å§‹ã‚’表ã‚ã—ã¦ã„ã¾ã™ã€‚
+ãã®è¡Œã®ä¸‹ã«ã¯ã€ãã®ç‰¹å®šã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’æ§‹æˆã™ã‚‹ã‚­ãƒ¼ã®ãƒªã‚¹ãƒˆãŒã‚りã¾ã™ã€‚
+
+!> キーマップファイルを編集ã™ã‚‹ã¨ãã¯ã€ã‚«ãƒ³ãƒžã‚’追加ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã—ãªã„よã†ã«æ³¨æ„ã—ã¦ãã ã•ã„。ãã†ã™ã‚‹ã¨ãƒ•ァームウェアã®ã‚³ãƒ³ãƒ‘イルãŒã§ããªããªã‚Šã€ä½™åˆ†ã§ã‚ã£ãŸã‚Šæ¬ è½ã—ã¦ã„ãŸã‚Šã™ã‚‹ã‚«ãƒ³ãƒžãŒã©ã“ã«ã‚ã‚‹ã®ã‹ã‚’å®¹æ˜“ã«æŠŠæ¡ã§ããªã„å ´åˆãŒã‚りã¾ã™ã€‚
+
+## 好ã¿ã«åˆã‚ã›ã¦ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’カスタマイズ
+
+ç´å¾—ã®ã„ãã¾ã§ã“ã®ã‚¹ãƒ†ãƒƒãƒ—を繰り返ã—ã¾ã™ã€‚
+æ°—ã«ãªã‚‹ç‚¹ã‚’ã²ã¨ã¤ã¥ã¤å¤‰æ›´ã—ã¦è©¦ã™ã®ã‚‚よã—ã€å…¨éƒ¨ä½œã‚ŠãªãŠã™ã®ã‚‚よã—。
+ã‚るレイヤー全体ãŒå¿…è¦ãªã„å ´åˆã¯ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’削除ã™ã‚‹ã“ã¨ã‚‚ã§ãã€å¿…è¦ãŒã‚れã°ã€åˆè¨ˆ 32 個ã¾ã§ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’追加ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ã“ã“ã§å®šç¾©ã§ãる内容ã«ã¤ã„ã¦ã¯ã€æ¬¡ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+* [キーコード](ja/keycodes.md)
+* [機能](ja/features.md)
+* [FAQ](ja/faq.md)
+
+?> キーマップãŒã©ã®ã‚ˆã†ã«æ©Ÿèƒ½ã™ã‚‹ã‹ã‚’感ã˜ãªãŒã‚‰ã€å„変更をå°ã•ãã—ã¦ãã ã•ã„。大ããªå¤‰æ›´ã¯ã€ç™ºç”Ÿã™ã‚‹å•題ã®ãƒ‡ãƒãƒƒã‚°ã‚’困難ã«ã—ã¾ã™ã€‚
+
+## ファームウェアをビルドã™ã‚‹
+
+キーマップã®å¤‰æ›´ãŒå®Œäº†ã—ãŸã‚‰ã€ãƒ•ァームウェアをビルドã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れを行ã†ã«ã¯ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«æˆ»ã‚Šã€ãƒ“ルドコマンドを実行ã—ã¾ã™:
+
+ make <my_keyboard>:<my_keymap>
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ "xyverz" ã§ã€rev5 planck ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™:
+
+ make planck/rev5:xyverz
+
+ã“れãŒã‚³ãƒ³ãƒ‘イルã•れる間ã€ã©ã®ãƒ•ァイルãŒã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã‚‹ã‹ã‚’知らã›ã‚‹å¤šãã®å‡ºåŠ›ãŒç”»é¢ã«è¡¨ç¤ºã•れã¾ã™ã€‚
+次ã®ã‚ˆã†ãªå‡ºåŠ›ã§çµ‚ã‚ã‚‹ã¯ãšã§ã™ã€‚
+
+```
+Linking: .build/planck_rev5_xyverz.elf [OK]
+Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
+Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
+Checking file size of planck_rev5_xyverz.hex [OK]
+ * File size is fine - 18392/28672
+```
+
+## ファームウェアを書ãã“ã‚€
+
+[「ファームウェアを書ãã“ã‚€ã€](ja/newbs_flashing.md) ã«ç§»å‹•ã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ–°ã—ã„ファームウェアを書ã込む方法を学習ã—ã¾ã™ã€‚
diff --git a/docs/ja/newbs_building_firmware_configurator.md b/docs/ja/newbs_building_firmware_configurator.md
new file mode 100644
index 0000000000..228269b34e
--- /dev/null
+++ b/docs/ja/newbs_building_firmware_configurator.md
@@ -0,0 +1,113 @@
+# QMK Configurator
+
+<!---
+ 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
+-->
+
+[QMK Configurator](https://config.qmk.fm) ã¯ã€QMKファームウェア㮠hex ファイルを生æˆã™ã‚‹ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚°ãƒ©ãƒ•ィカルユーザーインターフェイスã§ã™ã€‚
+
+?> **æ¬¡ã®æ‰‹é †ã‚’順番ã«å®Ÿè¡Œã—ã¦ãã ã•ã„。**
+
+[Video Tutorial](https://youtu.be/tx54jkRC9ZY) を見ã¦ãã ã•ã„。
+
+QMK Configurator 㯠Chrome/Firefox ã§æœ€é©ã«å‹•作ã—ã¾ã™ã€‚
+
+!> **KLE ã‚„ kbfirmware ãªã©ã®ä»–ã®ãƒ„ールã®ãƒ•ァイルã¯ã€QMK Configurator ã¨äº’æ›æ€§ãŒã‚りã¾ã›ã‚“。ãれらをロードã—ãŸã‚Šã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸã‚Šã—ãªã„ã§ãã ã•ã„。QMK Configurator ã¯ç•°ãªã‚‹ãƒ„ールã§ã™ã€‚**
+
+## キーボードをé¸ã¶
+
+ドロップダウンボックスをクリックã—ã¦ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã™ã‚‹ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¾ã™ã€‚
+
+?> **キーボードã«è¤‡æ•°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚ã‚‹å ´åˆã¯ã€æ­£ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„。**
+
+大事ãªã“ã¨ãªã®ã§ã‚‚ã†ä¸€åº¦è¨€ã„ã¾ã™ã€‚
+
+!> **æ­£ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’é¸æŠžã—ã¦ãã ã•ã„!**
+
+キーボード㌠QMK ã‚’æ­è¼‰ã—ã¦ã„ã‚‹ã¨å®£ä¼ã•れã¦ã„ã¦ã‚‚リストã«ãªã„å ´åˆã¯ã€é–‹ç™ºè€…ãŒã¾ã ä½œæ¥­ä¸­ã‹ã€ç§ãŸã¡ãŒã¾ã ãƒžãƒ¼ã‚¸ã™ã‚‹ãã£ã‹ã‘ãŒãªã‹ã£ãŸå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+アクティブ㪠[Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) ãŒãªã„å ´åˆã€[qmk_firmware](https://github.com/qmk/qmk_firmware/issues)ã§å ±å‘Šã—ã¦ã€ãã®ç‰¹å®šã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚µãƒãƒ¼ãƒˆã‚’リクエストã—ã¾ã™ã€‚
+製作者自身㮠github アカウントã«ã‚ã‚‹ QMK æ­è¼‰ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚‚ã‚りã¾ã™ã€‚
+ãれもå†ç¢ºèªã—ã¦ãã ã•ã„。
+
+## キーボードã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é¸æŠžã™ã‚‹
+
+作æˆã—ãŸã„ã¨æ€ã†ã‚­ãƒ¼ãƒžãƒƒãƒ—ã«æœ€ã‚‚è¿‘ã„ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚一部ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ã¯ã€ã¾ã å分ãªãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¾ãŸã¯æ­£ã—ã„レイアウトãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。ã“れらã¯å°†æ¥ã‚µãƒãƒ¼ãƒˆã•れる予定ã§ã™ã€‚
+
+## キーマップã®åå‰
+
+ãŠå¥½ã¿ã®åå‰ã‚’キーマップã«ã¤ã‘ã¾ã™ã€‚
+
+?> コンパイル時ã«å•題ãŒç™ºç”Ÿã—ãŸå ´åˆã¯ã€ã‚‚ã—ã‹ã™ã‚‹ã¨ QMK ファームウェアリãƒã‚¸ãƒˆãƒªã«æ—¢ã«åŒã˜åå‰ãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã®ã‹ã‚‚ã—れã¾ã›ã‚“ã€åå‰ã‚’変更ã—ã¦ã¿ã¦ãã ã•ã„。
+
+## キーマップを作る
+
+キーコード入力ã¯3ã¤ã®æ–¹æ³•ã§å®Ÿè¡Œã§ãã¾ã™ã€‚
+1. ドラッグ・アンド・ドロップ
+2. レイアウト上ã®ç©ºã®å ´æ‰€ã‚’クリックã—ã¦ã€å¸Œæœ›ã™ã‚‹ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’クリックã—ã¾ã™
+3. レイアウト上ã®ç©ºã®å ´æ‰€ã‚’クリックã—ã¦ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ç‰©ç†ã‚­ãƒ¼ã‚’押ã—ã¾ã™
+
+マウスをキーã®ä¸Šã«ç½®ãã¨ã€ãã®ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ã®æ©Ÿèƒ½ã®çŸ­ã„説明文ãŒå‡ºã¾ã™ã€‚より詳細ãªèª¬æ˜Žã«ã¤ã„ã¦ã¯ä»¥ä¸‹ã‚’見ã¦ãã ã•ã„。
+
+[Basic Keycode Reference](https://docs.qmk.fm/#/keycodes_basic)
+[Advanced Keycode Reference](https://docs.qmk.fm/#/feature_advanced_keycodes)
+
+キーマップをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€ä¾‹ãˆã°ã‚¹ãƒšãƒ¼ã‚¹ãƒãƒ¼ãŒ3分割ã•れã¦ã„ãŸã‚Šã€ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ãŒ2分割ã•れã¦ã„ãŸã‚Šã€ã‚·ãƒ•トãŒ2分割ã•れã¦ã„るよã†ãªå ´åˆã€ãれらを全ã¦åŸ‹ã‚ã¦ãã ã•ã„。
+
+### 例:
+
+3分割ã®ã‚¹ãƒšãƒ¼ã‚¹ãƒãƒ¼: å…¨ã¦ã‚¹ãƒšãƒ¼ã‚¹ãƒãƒ¼ã§åŸ‹ã‚ã¾ã™ã€‚
+
+2分割ã®ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹: 両方ã¨ã‚‚ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã§åŸ‹ã‚ã¾ã™ã€‚
+
+2分割ã®å³ã‚·ãƒ•ト: 両方ã¨ã‚‚å³ã‚·ãƒ•トã§åŸ‹ã‚ã¾ã™ã€‚
+
+左シフトã¨ISOサãƒãƒ¼ãƒˆç”¨ã«1ã¤ãšã¤: 両方ã¨ã‚‚左シフトã§åŸ‹ã‚ã¾ã™ã€‚
+
+5分割ã ãŒ4キーã®ã¿: 以å‰ã‚„ã£ãŸã“ã¨ãŒã‚る人を推測ã—ã¦ç¢ºèªã™ã‚‹ã‹å°‹ã­ã¦ãã ã•ã„。
+
+## 後日ã®ãŸã‚ã«ã‚­ãƒ¼ãƒžãƒƒãƒ—ã‚’ä¿å­˜ã™ã‚‹
+
+ã‚­ãƒ¼ãƒžãƒƒãƒ—ã«æº€è¶³ã™ã‚‹ã‹ã€ã¾ãŸã¯å¾Œã§ä½œæ¥­ã—ãŸã„å ´åˆã¯ã€`Export Keymap' ボタンを押ã—ã¾ã™ã€‚上記ã§é¸æŠžã—ãŸåå‰ã« .json ãŒè¿½åŠ ã•れãŸã‚­ãƒ¼ãƒžãƒƒãƒ—ãŒä¿å­˜ã•れã¾ã™ã€‚
+
+後日ã€`Import Keymap` ボタンを押ã™ã“ã¨ã§ã€ã“ã® .json ファイルをロードã§ãã¾ã™ã€‚
+
+!> **注æ„:** ã“ã®ãƒ•ァイルã¯ã€kbfirmware.com ã¾ãŸã¯ãã®ä»–ã®ãƒ„ールã«ä½¿ç”¨ã•れる .jsonファイルã¨åŒã˜å½¢å¼ã§ã¯ã‚りã¾ã›ã‚“。ã“れらã®ãƒ„ールã«ã“れを使用ã—ãŸã‚Šã€QMK Configurator ã§ã“れらã®ãƒ„ール㮠.json を使用ã—よã†ã¨ã™ã‚‹ã¨ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒ **爆発** ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
+
+## ファームウェアファイルを生æˆã™ã‚‹
+
+緑色㮠`Compile` ボタンを押ã—ã¾ã™ã€‚
+
+コンパイルãŒå®Œäº†ã™ã‚‹ã¨ã€ç·‘色㮠`Download Firmware` ボタンを押ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+## ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ã込む(フラッシュã™ã‚‹)
+
+[ファームウェアを書ãã“ã‚€](ja/newbs_flashing.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+## トラブルシューティング
+
+#### ç§ã® .json ファイルãŒå‹•ãã¾ã›ã‚“
+
+.json ファイル㌠QMK Configurator ã§ä½œã£ãŸã‚‚ã®ã®å ´åˆã€ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ã€‚ãƒã‚°ã«é­é‡ã—ã¾ã—ãŸã€‚ [qmk_configurator](https://github.com/qmk/qmk_configurator/issues) ã§å ±å‘Šã—ã¦ãã ã•ã„。
+
+ãã†ã§ãªã„å ´åˆã¯ã€... ä»–ã® .json ファイルを使用ã—ãªã„よã†ã«ã¨ã„ã†ã€ä¸Šã«æ›¸ã„ãŸæ³¨æ„書ãを見逃ã—ã¦ã¾ã›ã‚“ã‹ï¼Ÿ
+
+#### レイアウトã«ä½™åˆ†ãªã‚¹ãƒšãƒ¼ã‚¹ãŒã‚りã¾ã™ã‹ï¼Ÿã©ã†ã™ã‚Œã°ã„ã„ã§ã™ã‹ï¼Ÿ
+
+ã‚‚ã—スペースãƒãƒ¼ãŒ3ã¤ã«åˆ†ã‹ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€å…¨ã¦ã‚¹ãƒšãƒ¼ã‚¹ãƒãƒ¼ã§åŸ‹ã‚ã‚‹ã®ãŒæœ€å–„ã®æ–¹æ³•ã§ã™ã€‚ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã‚„シフトã«ã¤ã„ã¦ã‚‚åŒã˜ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+#### キーコードã£ã¦ãªã«ï¼Ÿ
+
+以下を見ã¦ãã ã•ã„。
+
+[Basic Keycode Reference](https://docs.qmk.fm/#/keycodes_basic)
+[Advanced Keycode Reference](https://docs.qmk.fm/#/feature_advanced_keycodes)
+
+#### コンパイルã§ãã¾ã›ã‚“
+
+キーマップã®ä»–ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã‚’å†ç¢ºèªã—ã¦ã€ãƒ©ãƒ³ãƒ€ãƒ ãªã‚­ãƒ¼ãŒå­˜åœ¨ã—ãªã„ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+
+## å•題ã¨ãƒã‚°
+
+ç§ãŸã¡ã¯åˆ©ç”¨è€…ã®ä¾é ¼ã‚„ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’常ã«å—ã‘入れã¦ã„ã¾ã™ã€‚[qmk_configurator](https://github.com/qmk/qmk_configurator/issues) ã§å ±å‘Šã—ã¦ãã ã•ã„。
diff --git a/docs/ja/newbs_flashing.md b/docs/ja/newbs_flashing.md
new file mode 100644
index 0000000000..3407b46253
--- /dev/null
+++ b/docs/ja/newbs_flashing.md
@@ -0,0 +1,400 @@
+# ファームウェアを書ãã“ã‚€
+
+<!---
+ 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
+-->
+
+カスタムファームウェアã¯å‡ºæ¥ãŸã®ã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ãè¾¼ã¿ãŸããªã‚‹ã§ã—ょã†/フラッシュã—ãŸããªã‚‹ã§ã—ょã†ã€‚
+
+## QMK Toolbox を使ã£ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ã込む
+
+ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ã込む最も簡å˜ãªæ–¹æ³•㯠[QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) を使ã†ã“ã¨ã§ã™ã€‚
+
+ãŸã ã—ã€QMK Toolbox ã¯ã€ç¾åœ¨ã¯ Windows 㨠macOS ã§ã—ã‹ä½¿ãˆã¾ã›ã‚“。
+Linuxを使用ã—ã¦ã„ã‚‹å ´åˆ(ãŠã‚ˆã³ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ãƒ•ァームウェアを書ãè¾¼ã¿ãŸã„å ´åˆ)ã¯ã€ä¸‹ã®æ–¹ã§æ¦‚説ã™ã‚‹[方法](ja/newbs_flashing.md#flash-your-keyboard-from-the-command-line)ã§è¡Œãªã†å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+### QMK Toolbox ã«ãƒ•ァイルをロードã™ã‚‹
+
+ã¾ãš QMK Toolbox アプリケーションを起動ã—ã¾ã™ã€‚
+Finder ã¾ãŸã¯ã‚¨ã‚¯ã‚¹ãƒ—ローラーã§ãƒ•ァームウェアã®ãƒ•ァイルを探ã—ã¾ã™ã€‚
+ファイルå㯠`.hex` ã¾ãŸã¯ `.bin` ã®ã©ã¡ã‚‰ã‹ã®å½¢å¼ã§ã™ã€‚
+ビルド時㫠QMK ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«é©ã—ãŸå½¢å¼ã®ã‚‚ã®ã‚’ `qmk_firmware` ã®ãƒˆãƒƒãƒ—フォルダã«ã‚³ãƒ”ーã—ã¦ã„ã‚‹ã¯ãšã§ã™ã€‚
+
+Windows ã‹ macOS を使用ã—ã¦ã„ã‚‹ã¨ãã¯ç¾åœ¨ã®ãƒ•ァームウェアフォルダをエクスプローラー㋠Finder ã§ç°¡å˜ã«é–‹ããŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰ãŒã‚りã¾ã™ã€‚
+
+#### Windows
+
+```
+start .
+```
+
+#### macOS
+
+```
+open .
+```
+
+ファームウェアファイルã¯å¸¸ã«ä»¥ä¸‹ã®å‘½åå½¢å¼ã«å¾“ã£ã¦ã„ã¾ã™ã€‚
+
+```
+<keyboard_name>_<keymap_name>.{bin,hex}
+```
+
+例ãˆã°ã€`plank/rev5` ã® `default` キーマップã®ãƒ•ァイルåã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
+
+```
+planck_rev5_default.hex
+```
+
+ファームウェアファイルを見ã¤ã‘ãŸã‚‰ã€QMK Toolbox ã® "Local file" ボックスã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã‹ã€"Open" をクリックã—ã¦ãƒ•ァームウェアファイルを指定ã—ã¾ã™ã€‚
+
+### キーボードを DFU (Bootloader) モードã«ã™ã‚‹
+
+ファームウェアを書ã込むã«ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’普段ã¨ã¯é•ã†ç‰¹åˆ¥ãªçŠ¶æ…‹ã€ãƒ•ラッシュモードã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¨ã—ã¦ã®æ©Ÿèƒ½ã‚’ã¯ãŸã—ã¾ã›ã‚“。
+ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ›¸ãè¾¼ã¿ä¸­ã«ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã‚±ãƒ¼ãƒ–ルを抜ã„ãŸã‚Šã€æ›¸ãè¾¼ã¿ãƒ—ロセスを中断ã—ãŸã‚Šã—ãªã„ã“ã¨ãŒéžå¸¸ã«é‡è¦ã§ã™ã€‚
+
+キーボードã«ã‚ˆã£ã¦ã€ã“ã®ç‰¹åˆ¥ãªãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚‹æ–¹æ³•ã¯ç•°ãªã‚Šã¾ã™ã€‚
+キーボードãŒç¾åœ¨ QMK ã¾ãŸã¯ TMK を実行ã—ã¦ãŠã‚Šã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãƒ¡ãƒ¼ã‚«ãƒ¼ã‹ã‚‰å…·ä½“çš„ãªæŒ‡ç¤ºãŒä¸Žãˆã‚‰ã‚Œã¦ã„ãªã„å ´åˆã¯ã€æ¬¡ã‚’順番ã«è©¦ã—ã¦ãã ã•ã„。
+
+* 両方ã®ã‚·ãƒ•トキーを押ã—ãªãŒã‚‰ã€`Pause` キーを押ã™
+* 両方ã®ã‚·ãƒ•トキーを押ã—ãªãŒã‚‰ã€`B` キーを押ã™
+* キーボードã®ã‚±ãƒ¼ãƒ–ルを抜ã„ã¦ã€ã‚¹ãƒšãƒ¼ã‚¹ãƒãƒ¼ã¨Bã‚’åŒæ™‚ã«æŠ¼ã—ãªãŒã‚‰ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’å†ã³æŽ¥ç¶šã—ã€1ç§’å¾…ã£ã¦ã‹ã‚‰ã‚­ãƒ¼ã‚’放ã™
+* 基æ¿(PCB)ã«ä»˜ã‘られã¦ã„る物ç†çš„㪠`RESET` ボタンを押ã™
+* PCB 上㮠`BOOT0` ã‹ `RESET` ã®ãƒ©ãƒ™ãƒ«ã®ä»˜ã„ãŸãƒ˜ãƒƒãƒ€ãƒ”ンを探ã—ã€PCB 接続中ã«ãれらを互ã„ã«ã‚·ãƒ§ãƒ¼ãƒˆã™ã‚‹
+
+ã†ã¾ãã„ã‘ã°ã€QMK Toolboxã«æ¬¡ã®ã‚ˆã†ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+```
+*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
+*** DFU device connected
+```
+
+### キーボードã¸ã®æ›¸ãè¾¼ã¿
+
+QMK Toolbox ã® `Flash` ボタンをクリックã—ã¾ã™ã€‚
+次ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+```
+*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
+*** DFU device connected
+*** Attempting to flash, please don't remove device
+>>> dfu-programmer atmega32u4 erase --force
+ Erasing flash... Success
+ Checking memory from 0x0 to 0x6FFF... Empty.
+>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
+ Checking memory from 0x0 to 0x55FF... Empty.
+ 0% 100% Programming 0x5600 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ 0% 100% Reading 0x7000 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ Validating... Success
+ 0x5600 bytes written into 0x7000 bytes memory (76.79%).
+>>> dfu-programmer atmega32u4 reset
+
+*** DFU device disconnected
+*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
+```
+
+## コマンドラインã§ãƒ•ァームウェアを書ã込む :id=flash-your-keyboard-from-the-command-line
+
+ã“れã¯ã€ä»¥å‰ã®ã‚‚ã®ã¨æ¯”較ã—ã¦éžå¸¸ã«å˜ç´”ã«ãªã‚Šã¾ã—ãŸã€‚
+ファームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
+
+ make <my_keyboard>:<my_keymap>:flash
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ xyverz ã§ã€rev5 planck ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚
+
+ make planck/rev5:xyverz:flash
+
+ã“れã«ã‚ˆã‚Šã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æ§‹æˆãŒç¢ºèªã•ã‚Œã€æŒ‡å®šã•れãŸãƒ–ートローダã«åŸºã¥ã„ã¦ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¸ã®æ›¸ãè¾¼ã¿ãŒè©¦è¡Œã•れã¾ã™ã€‚
+ã“れã¯ã‚ãªãŸãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ãŒä½¿ç”¨ã™ã‚‹ãƒ–ートローダを知る必è¦ãŒãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚
+コマンドをãŸã å®Ÿè¡Œã—ã¦ã€ã‚³ãƒžãƒ³ãƒ‰è‡ªèº«ã«é›£ã—ã„処ç†ã‚’ä»»ã›ã¾ã™ã€‚
+
+ãŸã ã—ã€ã“れã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã”ã¨ã«è¨­å®šã•れã¦ã„るブートローダã«ä¾å­˜ã—ã¾ã™ã€‚
+ã‚‚ã—ã“ã®æƒ…å ±ãŒè¨­å®šã•れã¦ã„ãªã„å ´åˆã€ã¾ãŸã¯ä½¿ç”¨ã—ã¦ã„るキーボードã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã®æ›¸ãè¾¼ã¿ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ターゲットãŒè¨­å®šã•れã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+ WARNING: This board's bootloader is not specified or is not supported by the ":flash" target at this time.
+
+ã“ã®å ´åˆã€ã‚ãªãŸã¯æ˜Žç¤ºçš„ã«ãƒ–ートローダを指定ã™ã‚‹æ–¹æ³•を使ã‚ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
+
+ブートローダã¯ä¸»ã« 5 種類ã®ã‚‚ã®ãŒä½¿ã‚れã¦ã„ã¾ã™ã€‚
+Pro Micro ã¨ãã®ã‚¯ãƒ­ãƒ¼ãƒ³ã¯ Caterina ã‚’ã€Teensy 㯠HalfKay ã‚’ã€OLKBã® AVR ボード㯠QMK-DFU ã‚’ã€ãã®ä»–ã® ATmega32U4 ボード㯠DFU ã‚’ã€ãã—ã¦å¤šãã® ARM ボード㯠ARM DFU を使ã„ã¾ã™ã€‚
+
+より詳ã—ã„ãƒ–ãƒ¼ãƒˆãƒ­ãƒ¼ãƒ€ã®æƒ…å ±ã¯ã€[Flashing Instructions and Bootloader Information](ja/flashing.md) ã«ã‚りã¾ã™ã€‚
+
+使用ã—ã¦ã„るブートローダãŒã‚ã‹ã£ã¦ã„ã‚‹ãªã‚‰ã°ã€ãƒ•ァームウェアをコンパイルã™ã‚‹ã¨ãã«ã€å®Ÿã¯ `make` コマンドã«ãƒ–ートローダを指定ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã—ã¦ã€æ›¸ãè¾¼ã¿ãƒ—ロセスを自動化ã§ãã¾ã™ã€‚
+
+### DFU
+
+DFU ブートローダã®å ´åˆã€ãƒ•ァームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
+
+ make <my_keyboard>:<my_keymap>:dfu
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ xyverz ã§ã€rev5 planck ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚
+
+ make planck/rev5:xyverz:dfu
+
+コンパイルãŒçµ‚了ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®å‡ºåŠ›ã«ãªã‚‹ã¯ãšã§ã™ã€‚
+
+```
+Linking: .build/planck_rev5_xyverz.elf [OK]
+Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
+Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
+Checking file size of planck_rev5_xyverz.hex
+ * File size is fine - 18574/28672
+ ```
+
+ã“ã“ã¾ã§ãã‚‹ã¨ã€ãƒ“ルドスクリプトã¯5ç§’ã”ã¨ã« DFU ブートローダを探ã—ã¾ã™ã€‚
+デãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚‹ã‹ã€ã‚ãªãŸãŒã‚­ãƒ£ãƒ³ã‚»ãƒ«ã™ã‚‹ã¾ã§ã€ä»¥ä¸‹ã‚’繰り返ã—ã¾ã™ã€‚
+
+ dfu-programmer: no device present.
+ Error: Bootloader not found. Trying again in 5s.
+
+ã“れを実行ã—ãŸã‚‰ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã‚’リセットã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ãã—ã¦ä¸‹ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+```
+*** Attempting to flash, please don't remove device
+>>> dfu-programmer atmega32u4 erase --force
+ Erasing flash... Success
+ Checking memory from 0x0 to 0x6FFF... Empty.
+>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
+ Checking memory from 0x0 to 0x55FF... Empty.
+ 0% 100% Programming 0x5600 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ 0% 100% Reading 0x7000 bytes...
+ [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
+ Validating... Success
+ 0x5600 bytes written into 0x7000 bytes memory (76.79%).
+>>> dfu-programmer atmega32u4 reset
+```
+
+?> `dfu-programmer:no device present` ãªã©ã€ã“れã«é–¢ã™ã‚‹å•題ãŒã‚ã‚‹å ´åˆã¯ã€[よãã‚る質å•](ja/faq_build.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+#### DFU コマンド
+
+ファームウェアを DFU デãƒã‚¤ã‚¹ã«æ›¸ã込むãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ DFU コマンドãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚
+
+* `:dfu` - ã“れãŒé€šå¸¸ã®ã‚ªãƒ—ションã§ã€DFUデãƒã‚¤ã‚¹ãŒä½¿ç”¨å¯èƒ½ã«ãªã‚‹ã¾ã§å¾…機ã—ãŸã®ã¡ãƒ•ァームウェアを書ãè¾¼ã¿ã¾ã™ã€‚5ç§’ã”ã¨ã«ã€DFUデãƒã‚¤ã‚¹ãŒå­˜åœ¨ã™ã‚‹ã‹ãƒã‚§ãƒƒã‚¯ã—ã¦ã„ã¾ã™ã€‚
+* `:dfu-ee` - 通常㮠hex ファイルã®ä»£ã‚り㫠`eep` ファイルを書ãè¾¼ã¿ã¾ã™ã€‚ã“れを使用ã™ã‚‹ã®ã¯ã¾ã‚Œã§ã™ã€‚
+* `:dfu-split-left` - デフォルトオプション (`:dfu`) ã¨åŒæ§˜ã«ã€é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ãŸã ã—ã€åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã€Œå·¦å´ã®ã€ EEPROMファイルも書ãè¾¼ã¾ã‚Œã¾ã™ã€‚_ã“れã¯ã€Elite C ベースã®åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æœ€é©ã§ã™ã€‚_
+* `:dfu-split-right` - デフォルトオプション (`:dfu`) ã¨åŒæ§˜ã«ã€é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ãŸã ã—ã€åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã€Œå³å´ã®ã€EEPROMファイルも書ãè¾¼ã¾ã‚Œã¾ã™ã€‚_ã“れã¯ã€Elite C ベースã®åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æœ€é©ã§ã™ã€‚_
+
+
+### Caterina
+
+Arduino ボードã¨ãれらã®ã‚¯ãƒ­ãƒ¼ãƒ³ã®å ´åˆ(ãŸã¨ãˆã° SparkFun ProMicro)ã€ãƒ•ァームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
+
+ make <my_keyboard>:<my_keymap>:avrdude
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ xyverz ã§ã€rev2 Lets Split ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚
+
+ make lets_split/rev2:xyverz:avrdude
+
+ファームウェアã®ã‚³ãƒ³ãƒ‘イルãŒå®Œäº†ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å‡ºåŠ›ã•れã¾ã™ã€‚
+
+```
+Linking: .build/lets_split_rev2_xyverz.elf [OK]
+Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
+Checking file size of lets_split_rev2_xyverz.hex [OK]
+ * File size is fine - 27938/28672
+Detecting USB port, reset your controller now..............
+```
+
+ã“ã®æ™‚点ã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’リセットã™ã‚‹ã¨ã€ã‚¹ã‚¯ãƒªãƒ—トãŒãƒ–ートローダを検出ã—ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æ›¸ãè¾¼ã¿ã¾ã™ã€‚å‡ºåŠ›ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
+
+```
+Detected controller on USB port at /dev/ttyS15
+
+Connecting to programmer: .
+Found programmer: Id = "CATERIN"; type = S
+ Software Version = 1.0; No Hardware Version given.
+Programmer supports auto addr increment.
+Programmer supports buffered memory access with buffersize=128 bytes.
+
+Programmer supports the following devices:
+ Device code: 0x44
+
+avrdude.exe: AVR device initialized and ready to accept instructions
+
+Reading | ################################################## | 100% 0.00s
+
+avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
+avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
+ To disable this feature, specify the -D option.
+avrdude.exe: erasing chip
+avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
+avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
+avrdude.exe: writing flash (27938 bytes):
+
+Writing | ################################################## | 100% 2.40s
+
+avrdude.exe: 27938 bytes of flash written
+avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
+avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
+avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
+avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
+avrdude.exe: reading on-chip flash data:
+
+Reading | ################################################## | 100% 0.43s
+
+avrdude.exe: verifying ...
+avrdude.exe: 27938 bytes of flash verified
+
+avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
+
+avrdude.exe done. Thank you.
+```
+ã†ã¾ãã„ã‹ãªã„時ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
+
+ sudo make <my_keyboard>:<my_keymap>:avrdude
+
+
+#### Caterina コマンド
+
+ファームウェアを DFU デãƒã‚¤ã‚¹ã«æ›¸ã込むãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ DFU コマンドãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚
+
+* `:avrdude` - ã“れãŒé€šå¸¸ã®ã‚ªãƒ—ションã§ã€Caterina デãƒã‚¤ã‚¹ãŒ(æ–°ã—ã„ COM ãƒãƒ¼ãƒˆã‚’検出ã—ã¦)使用å¯èƒ½ã«ãªã‚‹ã¾ã§å¾…機ã—ã€ãƒ•ァームウェアを書ãè¾¼ã¿ã¾ã™ã€‚
+* `:avrdude-loop` - ã“れ㯠`:avrdude` ã¨åŒã˜ã§ã™ã€‚ãŸã ã—書ãè¾¼ã¿ãŒçµ‚了ã™ã‚‹ã¨å†ã³ Caterina デãƒã‚¤ã‚¹ã®æ›¸ãè¾¼ã¿å¾…ã¡ã«æˆ»ã‚Šã¾ã™ã€‚ã“れã¯ä½•å°ã‚‚ã®ãƒ‡ãƒã‚¤ã‚¹ã¸ã®æ›¸ãè¾¼ã¿ã«ä¾¿åˆ©ã§ã™ã€‚_Control+C を押ã—ã¦ã€æ‰‹å‹•ã§ã“ã®ç¹°ã‚Šè¿”ã—を終了ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚_
+* `:avrdude-split-left` - デフォルトオプション(`:avrdude`)ã¨åŒæ§˜ã«é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ãŸã ã—ã€åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã€Œå·¦å´ã®ã€EEPROMファイルもフラッシュã•れã¾ã™ã€‚ _ã“れã¯ã€Pro Micro ベースã®åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æœ€é©ã§ã™ã€‚_
+* `:avrdude-split-right` - デフォルトオプション(`:avrdude`)ã¨åŒæ§˜ã«é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ãŸã ã—ã€åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã€Œå³å´ã®ã€EEPROMファイルもフラッシュã•れã¾ã™ã€‚ _ã“れã¯ã€Pro Micro ベースã®åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«æœ€é©ã§ã™ã€‚_
+
+### HalfKay
+
+PJRC デãƒã‚¤ã‚¹(Teensy シリーズ)ã®å ´åˆã€ãƒ•ァームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
+
+ make <my_keyboard>:<my_keymap>:teensy
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ xyverz ã§ã€Ergodox ã¾ãŸã¯ Ergodox EZ ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚
+
+ make ergodox_ez:xyverz:teensy
+
+ファームウェアã®ã‚³ãƒ³ãƒ‘イルãŒå®Œäº†ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å‡ºåŠ›ã•れã¾ã™ã€‚
+
+```
+Linking: .build/ergodox_ez_xyverz.elf [OK]
+Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
+Checking file size of ergodox_ez_xyverz.hex [OK]
+ * File size is fine - 25584/32256
+ Teensy Loader, Command Line, Version 2.1
+Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
+Waiting for Teensy device...
+ (hint: press the reset button)
+ ```
+
+ã“ã®æ™‚点ã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’リセットã—ã¾ã™ã€‚ã™ã‚‹ã¨ã€æ¬¡ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+ ```
+ Found HalfKay Bootloader
+Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
+Programming............................................................................................................................................................................
+...................................................
+Booting
+```
+
+### STM32 (ARM)
+
+主㪠ARM ボード (Proton C, Planck Rev 6, Preonic Rev 3 ã‚’å«ã‚€)ã®å ´åˆã€ãƒ•ァームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
+
+ make <my_keyboard>:<my_keymap>:dfu-util
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ xyverz ã§ã€Planck Revision 6 ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã€(コンパイルãŒçµ‚ã‚ã‚‹å‰ã«)キーボードをå†èµ·å‹•ã—ã¦ãƒ–ートローダを起動ã—ã¾ã™:
+
+ make planck/rev6:xyverz:dfu-util
+
+ファームウェアã®ã‚³ãƒ³ãƒ‘イルãŒå®Œäº†ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å‡ºåŠ›ã•れã¾ã™ã€‚
+
+```
+Linking: .build/planck_rev6_xyverz.elf [OK]
+Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
+Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
+
+Size after:
+ text data bss dec hex filename
+ 0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
+
+Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
+dfu-util 0.9
+
+Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
+Copyright 2010-2016 Tormod Volden and Stefan Schmidt
+This program is Free Software and has ABSOLUTELY NO WARRANTY
+Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
+
+Invalid DFU suffix signature
+A valid DFU suffix will be required in a future dfu-util release!!!
+Opening DFU capable USB device...
+ID 0483:df11
+Run-time device DFU version 011a
+Claiming USB DFU Interface...
+Setting Alternate Setting #0 ...
+Determining device status: state = dfuERROR, status = 10
+dfuERROR, clearing status
+Determining device status: state = dfuIDLE, status = 0
+dfuIDLE, continuing
+DFU mode device DFU version 011a
+Device returned transfer size 2048
+DfuSe interface name: "Internal Flash "
+Downloading to address = 0x08000000, size = 41824
+Download [=========================] 100% 41824 bytes
+Download done.
+File downloaded successfully
+Transitioning to dfuMANIFEST state
+```
+
+#### STM32 コマンド
+
+ファームウェアを STM32 デãƒã‚¤ã‚¹ã«æ›¸ã込むãŸã‚ã«ä½¿ç”¨ã§ãã‚‹ DFU コマンドãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚
+
+* `:dfu-util` - STM32 デãƒã‚¤ã‚¹ã«æ›¸ã込むãŸã‚ã®ãƒ‡ãƒ•ォルトコマンドã§ã€STM32 ブートローダãŒè¦‹ã¤ã‹ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚
+* `:dfu-util-split-left` - デフォルトã®ã‚ªãƒ—ション (`:dfu-util`) ã¨åŒæ§˜ã«ã€é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ ãŸã ã—ã€åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã€Œå·¦å´ã®ã€EEPROM ã®è¨­å®šã‚‚行ã‚れã¾ã™ã€‚
+* `:dfu-util-split-right` - デフォルトã®ã‚ªãƒ—ション (`:dfu-util`) ã¨åŒæ§˜ã«ã€é€šå¸¸ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ãŒæ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ ãŸã ã—ã€åˆ†å‰²ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ã€Œå³å´ã®ã€EEPROM ã®è¨­å®šã‚‚行ã‚れã¾ã™ã€‚
+* `:st-link-cli` - dfu-util ã§ã¯ãªãã€ST-LINK ã® CLI ユーティリティを介ã—ã¦ãƒ•ァームウェアを書ãè¾¼ã‚ã¾ã™ã€‚
+
+### BootloadHID
+
+Bootmapper Client(BMC)/bootloadHID/ATmega32A ベースã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®å ´åˆã€ãƒ•ァームウェアをコンパイルã—ã¦æ›¸ã込む準備ãŒã§ããŸã‚‰ã€ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã„ã¦ãƒ“ルドコマンドを実行ã—ã¾ã™ã€‚
+
+ make <my_keyboard>:<my_keymap>:bootloaderHID
+
+ãŸã¨ãˆã°ã€ã‚­ãƒ¼ãƒžãƒƒãƒ—ã®åå‰ãŒ xyverz ã§ã€jj40 ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¦ã„ã‚‹å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã—ã¾ã™ã€‚
+
+ make jj40:xyverz:bootloaderHID
+
+ファームウェアã®ã‚³ãƒ³ãƒ‘イルãŒå®Œäº†ã™ã‚‹ã¨ã€ä»¥ä¸‹ã®ã‚ˆã†ã«å‡ºåŠ›ã•れã¾ã™ã€‚
+
+```
+Linking: .build/jj40_default.elf [OK]
+Creating load file for flashing: .build/jj40_default.hex [OK]
+Copying jj40_default.hex to qmk_firmware folder [OK]
+Checking file size of jj40_default.hex [OK]
+ * The firmware size is fine - 21920/28672 (6752 bytes free)
+```
+
+ã“ã“ã¾ã§ãã‚‹ã¨ã€ãƒ“ルドスクリプトã¯5ç§’ã”ã¨ã« DFU ブートローダを探ã—ã¾ã™ã€‚
+デãƒã‚¤ã‚¹ãŒè¦‹ã¤ã‹ã‚‹ã‹ã€ã‚ãªãŸãŒã‚­ãƒ£ãƒ³ã‚»ãƒ«ã™ã‚‹ã¾ã§ã€ä»¥ä¸‹ã‚’繰り返ã—ã¾ã™ã€‚
+
+```
+Error opening HIDBoot device: The specified device was not found
+Trying again in 5s.
+```
+
+ã“れを実行ã—ãŸã‚‰ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã‚’リセットã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ãã—ã¦ä¸‹ã®ã‚ˆã†ãªå‡ºåŠ›ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
+
+```
+Page size = 128 (0x80)
+Device size = 32768 (0x8000); 30720 bytes remaining
+Uploading 22016 (0x5600) bytes starting at 0 (0x0)
+0x05580 ... 0x05600
+```
+
+## テストã—ã¾ã—ょã†ï¼
+
+ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ カスタムファームウェアãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ãƒ—ログラムã•れã¾ã—ãŸï¼
+
+使ã£ã¦ã¿ã¦ã€ã™ã¹ã¦ãŒã‚ãªãŸã®æœ›ã‚€ã‚ˆã†ã«å‹•作ã™ã‚‹ã‹ã©ã†ã‹ç¢ºèªã—ã¦ãã ã•ã„。
+ã“ã®åˆå¿ƒè€…ガイドを完全ãªã‚‚ã®ã«ã™ã‚‹ãŸã‚ã« [テストã¨ãƒ‡ãƒãƒƒã‚°](ja/newbs_testing_debugging.md) を書ã„ãŸã®ã§ã€ã‚«ã‚¹ã‚¿ãƒ æ©Ÿèƒ½ã®ãƒˆãƒ©ãƒ–ルシューティング方法ã«ã¤ã„ã¦ã¯ã€ã“ã¡ã‚‰ã‚’ã”覧ãã ã•ã„。
diff --git a/docs/ja/newbs_getting_started.md b/docs/ja/newbs_getting_started.md
new file mode 100644
index 0000000000..865ed162a7
--- /dev/null
+++ b/docs/ja/newbs_getting_started.md
@@ -0,0 +1,122 @@
+# イントロダクション
+
+<!---
+ 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
+-->
+
+キーボードã«ã¯ãƒ—ロセッサãŒå…¥ã£ã¦ãŠã‚Šã€ãれã¯ã‚³ãƒ³ãƒ”ュータã«å…¥ã£ã¦ã„ã‚‹ã‚‚ã®ã¨å¤§ã—ã¦é•ã‚ãªã„ã‚‚ã®ã§ã™ã€‚
+ã“ã®ãƒ—ロセッサã§ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒœã‚¿ãƒ³ã®æŠ¼ã—下ã’ã®æ¤œå‡ºã‚’担当ã—キーボードã®ã©ã®ãƒœã‚¿ãƒ³ãŒæŠ¼ã•れã¦ã„ã‚‹/離ã•れã¦ã„ã‚‹ã‹ã®ãƒ¬ãƒãƒ¼ãƒˆã‚’コンピュータã«é€ä¿¡ã™ã‚‹ã‚½ãƒ•トウェアãŒå‹•作ã—ã¦ã„ã¾ã™ã€‚
+QMK ã¯ã€ãã®ã‚½ãƒ•トウェアã®å½¹å‰²ã‚’æžœãŸã—ã€ãƒœã‚¿ãƒ³ã®æŠ¼ä¸‹ã‚’検出ã—ãã®æƒ…å ±ã‚’ãƒ›ã‚¹ãƒˆã‚³ãƒ³ãƒ”ãƒ¥ãƒ¼ã‚¿ã«æ¸¡ã—ã¾ã™ã€‚
+カスタムキーマップを作るã¨ã„ã†ã“ã¨ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ä¸Šã§å‹•ãプログラムを作るã¨ã„ã†ã“ã¨ãªã®ã§ã™ã€‚
+
+QMK ã¯ã€ç°¡å˜ãªã“ã¨ã¯ç°¡å˜ã«ã€ãã—ã¦ã€é›£ã—ã„ã“ã¨ã‚’å¯èƒ½ãªã“ã¨ã«ã™ã‚‹ã“ã¨ã§ã€ã‚ãªãŸã®æ‰‹ã«ãŸãã•ã‚“ã®ãƒ‘ワーをもãŸã‚‰ã—ã¾ã™ã€‚
+パワフルãªã‚­ãƒ¼ãƒžãƒƒãƒ—を作るãŸã‚ã«ãƒ—ログラムを作æˆã™ã‚‹æ–¹æ³•を知る必è¦ã¯ã‚りã¾ã›ã‚“。ã„ãã¤ã‹ã®ã‚·ãƒ³ãƒ—ãƒ«ãªæ–‡æ³•ã«å¾“ã†ã ã‘ã§OKã§ã™ã€‚
+
+# ã¯ã˜ã‚ã«
+
+キーマップをビルドã™ã‚‹å‰ã«ã€ã„ãã¤ã‹ã®ã‚½ãƒ•トウェアをインストールã—ã¦ãƒ“ルド環境を構築ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ファームウェアをコンパイルã™ã‚‹ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®æ•°ã«é–¢ã‚らãšã€ã“ã®ä½œæ¥­ã‚’一度ã ã‘実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+
+ã‚‚ã—ã€GUI ã§ä½œæ¥­ã‚’ã—ãŸã„å ´åˆã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ä½œæ¥­ã§ãã‚‹ [QMK Configurator](https://config.qmk.fm) を使ã£ã¦ãã ã•ã„。
+ä½¿ã„æ–¹ã¯ [オンライン GUI を使用ã—ã¦åˆã‚ã¦ã®ãƒ•ァームウェアを構築ã™ã‚‹](ja/newbs_building_firmware_configurator.md) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+## ソフトウェアã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰
+
+### テキストエディタ
+
+GUI を使ã‚ãªã„å ´åˆã€ãƒ—レーンテキストを編集・ä¿å­˜ã§ãるエディタãŒå¿…è¦ã§ã™ã€‚
+Windows ã®å ´åˆã€ãƒ¡ãƒ¢å¸³ãŒä½¿ãˆã¾ã™ã€‚Linux ã®å ´åˆã€gedit ãŒä½¿ãˆã¾ã™ã€‚
+ã©ã¡ã‚‰ã‚‚シンプルã§ã™ãŒæ©Ÿèƒ½çš„ãªãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã§ã™ã€‚
+macOS ã§ã¯ã€ãƒ‡ãƒ•ォルトã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ãƒƒãƒˆã‚¢ãƒ—ãƒªã«æ³¨æ„ã—ã¦ãã ã•ã„。_フォーマット_ メニューã‹ã‚‰ _標準テキストã«ã™ã‚‹_ ã‚’é¸æŠžã—ãªã„é™ã‚Šã€ãƒ—レーンテキストã¨ã—ã¦ä¿å­˜ã•れã¾ã›ã‚“。
+
+[Sublime Text](https://www.sublimetext.com/) ã‚„ [VS Code](https://code.visualstudio.com/) ã®ã‚ˆã†ãªå°‚用ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã‚’ダウンロードã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れらã®ãƒ—ログラムã¯ã‚³ãƒ¼ãƒ‰ã‚’編集ã™ã‚‹ãŸã‚ã«ç‰¹åˆ¥ã«ä½œæˆã•れã¦ã„ã‚‹ãŸã‚ã€ã“れã¯ãƒ—ラットフォームã«é–¢ä¿‚ãªããƒ™ã‚¹ãƒˆãªæ–¹æ³•ã§ã™ã€‚
+
+?> ã©ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’使ãˆã°è‰¯ã„ã‹åˆ†ã‹ã‚‰ãªã„å ´åˆã€Laurence Bradford ãŒæ›¸ã„ãŸã“ã®è¨˜äº‹ [a great introduction](https://learntocodewith.me/programming/basics/text-editors/) を読んã§ãã ã•ã„。
+
+### QMK Toolbox
+
+QMK Toolbox ã¯ã€Windows 㨠macOS ã§ä½¿ãˆã‚‹ GUI ã‚’å‚™ãˆãŸãƒ—ログラムã§ã€ã‚«ã‚¹ã‚¿ãƒ ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒ—ログラミングã¨ãƒ‡ãƒãƒƒã‚°ã®ä¸¡æ–¹ãŒã§ãã¾ã™ã€‚
+ã“ã®ãƒ—ログラムã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã«ç°¡å˜ã«ãƒ•ァームウェアを書ã込んã ã‚Šã€å‡ºåŠ›ã•れるデãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’確èªã™ã‚‹éš›ã«ã€ã‹ã‘ãŒãˆã®ãªã„ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ãŒã‚ã‹ã‚‹ã§ã—ょã†ã€‚
+
+[QMK Toolbox ã®æœ€æ–°ç‰ˆ](https://github.com/qmk/qmk_toolbox/releases/latest)
+
+* 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 ã«æ®‹ã‚Šã‚’インストールã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+?> ã‚‚ã—ã€Linux ã‹ Unix ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ãŸã“ã¨ãŒãªã„å ´åˆã€ã“ã¡ã‚‰ã§åŸºæœ¬çš„ãªæ¦‚念やå„種コマンドを学んã§ãã ã•ã„。ã“ã‚Œã‚‰ã®æ•™æã§ QMK を使ã†ã®ã«å¿…è¦ãªã“ã¨ã‚’å­¦ã¶ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+[Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)<br>
+[Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
+
+### Windows
+
+MSYS2 㨠Git ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¿…è¦ã§ã™ã€‚
+
+* [MSYS2 homepage](http://www.msys2.org) ã®æ‰‹é †ã«å¾“ã£ã¦ MSYS2 をインストールã—ã¾ã™ã€‚
+* é–‹ã„ã¦ã„ã‚‹ MSYS2 ã®å…¨ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ç”»é¢ã‚’é–‰ã˜ã¦ã€æ–°ã—ã„ MSYS2 MinGW 64-bit ã®ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ç”»é¢ã‚’é–‹ãã¾ã™ã€‚
+* `pacman -S git` を実行ã—㦠Git をインストールã—ã¾ã™ã€‚
+
+### macOS
+
+[Homebrew homepage](https://brew.sh) ã®æ‰‹é †ã«å¾“ã£ã¦ Homebrew をインストールã—ã¦ãã ã•ã„。
+
+Homebrew をインストールã—ãŸã‚‰ã€ä»¥ä¸‹ã® _QMK ã®è¨­å®š_ ã«é€²ã‚“ã§ãã ã•ã„。ãã®ã‚¹ãƒ†ãƒƒãƒ—ã§ã¯ã€ä»–ã®ãƒ‘ッケージをインストールã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トを実行ã—ã¾ã™ã€‚
+
+### Linux
+
+Git ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¿…è¦ã§ã™ã€‚æ—¢ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¯èƒ½æ€§ã¯é«˜ã„ã§ã™ãŒã€ãã†ã§ãªã„å ´åˆã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã€‚
+
+* Debian / Ubuntu / Devuan: `apt-get install git`
+* Fedora / Red Hat / CentOS: `yum install git`
+* Arch: `pacman -S git`
+
+?> å…¨ã¦ã®ãƒ—ラットフォームã«ãŠã„ã¦ã€Docker を使ã†ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚[詳細ã¯ã“ã¡ã‚‰ã‚’クリックã—ã¦ãã ã•ã„](ja/getting_started_build_tools.md#docker)。
+
+## QMK ã®è¨­å®š :id=set-up-qmk
+
+Linux/Unix ç’°å¢ƒãŒæº–å‚™ã§ããŸã‚‰ QMK ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®æº–å‚™ã¯å®Œäº†ã§ã™ã€‚Git を使用ã—㦠QMK ã®ãƒªãƒã‚¸ãƒˆãƒªã‚’「クローンã€ã™ã‚‹ã“ã¨ã§ QMK をダウンロードã—ã¾ã™ã€‚ターミナル㋠MSYS2 MinGW ウィンドウを開ã„ã¦ã€ã“ã®ã‚¬ã‚¤ãƒ‰ã®æ®‹ã‚Šã®éƒ¨åˆ†ã§ã¯é–‹ã„ãŸã¾ã¾ã«ã—ã¾ã™ã€‚ãã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦å†…ã§ã€æ¬¡ã®2ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚
+
+```shell
+git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
+cd qmk_firmware
+```
+
+?> 既㫠[GitHub ã®ä½¿ã„ã‹ãŸ](ja/getting_started_github.md)を知ã£ã¦ã„ã‚‹ãªã‚‰ã€clone ã§ã¯ãªã fork ã‚’å‹§ã‚ã¾ã™ã€‚ã“ã®ä¸€æ–‡ã®æ„味ãŒåˆ†ã‹ã‚‰ãªã„å ´åˆã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ç„¡è¦–ã—ã¦ã‹ã¾ã„ã¾ã›ã‚“。
+
+QMK ã«ã¯ã€å¿…è¦ãªæ®‹ã‚Šã®è¨­å®šã‚’手助ã‘ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
+セットアップ作業を完了ã•ã›ã‚‹ãŸã‚ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚
+
+ util/qmk_install.sh
+
+## ビルド環境ã®ç¢ºèª
+
+ã“れ㧠QMK ã®ãƒ“ルド環境ãŒç”¨æ„ã§ãã¾ã—ãŸã®ã§ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®ãƒ•ァームウェアをビルドã§ãã¾ã™ã€‚
+キーボードã®ãƒ‡ãƒ•ォルトキーマップをビルドã™ã‚‹ã“ã¨ã‹ã‚‰å§‹ã‚ã¾ã™ã€‚次ã®å½¢å¼ã®ã‚³ãƒžãƒ³ãƒ‰ã§ãƒ“ルドã§ãã‚‹ã¯ãšã§ã™ã€‚
+
+ make <keyboard>:default
+
+例)Clueboard 66% ã®ãƒ•ァームウェアをビルドã™ã‚‹
+
+ make clueboard/66/rev3:default
+
+大é‡ã®å‡ºåŠ›ã®æœ€å¾Œã«æ¬¡ã®ã‚ˆã†ã«å‡ºåŠ›ã•れるã¨å®Œäº†ã§ã™ã€‚
+
+```
+Linking: .build/clueboard_66_rev3_default.elf [OK]
+Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
+Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
+Checking file size of clueboard_66_rev3_default.hex [OK]
+ * The firmware size is fine - 26356/28672 (2316 bytes free)
+```
+
+# キーマップã®ä½œæˆ
+
+ã“れã§ã‚ãªãŸå°‚用ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã™ã‚‹æº–å‚™ãŒã§ãã¾ã—ãŸï¼
+次㯠[Building Your First Firmware](ja/newbs_building_firmware.md) ã§å°‚用ã®ã‚­ãƒ¼ãƒžãƒƒãƒ—を作æˆã—ã¾ã™ã€‚
diff --git a/docs/ja/newbs_learn_more_resources.md b/docs/ja/newbs_learn_more_resources.md
new file mode 100644
index 0000000000..14feb61b32
--- /dev/null
+++ b/docs/ja/newbs_learn_more_resources.md
@@ -0,0 +1,32 @@
+# 学習リソース
+
+<!---
+ 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
+-->
+
+ã“れらã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã€QMKã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®æ–°ã—ã„メンãƒãƒ¼ã«ã€åˆå¿ƒè€…å‘ã‘ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§æä¾›ã•れã¦ã„る情報ã«å¯¾ã™ã‚‹ç†è§£ã‚’æ·±ã‚ã‚‹ã“ã¨ã‚’目的ã¨ã—ã¦ã„ã¾ã™ã€‚
+
+## Git ã«é–¢ã™ã‚‹ãƒªãƒ¼ã‚¹:
+
+### 英語
+
+* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
+* [Git Game To Learn From Examples](https://learngitbranching.js.org/)
+* [Git Resources to Learn More About Github](ja/getting_started_github.md)
+* [Git Resources Aimed Specifically toward QMK](ja/contributing.md)
+
+### 日本語
+
+_日本語ã®ãƒªã‚½ãƒ¼ã‚¹æƒ…報を募集中ã§ã™ã€‚_
+
+## コマンドラインã«é–¢ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹:
+
+### 英語
+
+* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
+
+### 日本語
+
+_日本語ã®ãƒªã‚½ãƒ¼ã‚¹æƒ…報を募集中ã§ã™ã€‚_
diff --git a/docs/ja/newbs_testing_debugging.md b/docs/ja/newbs_testing_debugging.md
new file mode 100644
index 0000000000..9cf5c65200
--- /dev/null
+++ b/docs/ja/newbs_testing_debugging.md
@@ -0,0 +1,107 @@
+# テストã¨ãƒ‡ãƒãƒƒã‚°
+
+<!---
+ 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
+-->
+
+ã‚«ã‚¹ã‚¿ãƒ ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã‚’ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¸æ›¸ã込んã ã‚‰ã€ãƒ†ã‚¹ãƒˆã™ã‚‹æº–å‚™ãŒæ•´ã„ã¾ã™ã€‚é‹ãŒè‰¯ã‘れã°å…¨ã¦å•題ãªã動作ã—ã¦ã„ã‚‹ã¯ãšã§ã™ãŒã€ã‚‚ã—ãã†ã§ãªã‘れã°ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒã©ã“ãŒæ‚ªã„ã®ã‹èª¿ã¹ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚
+
+## テスト
+
+通常ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’テストã™ã‚‹ã®ã¯éžå¸¸ã«ç°¡å˜ã§ã™ã€‚å…¨ã¦ã®ã‚­ãƒ¼ã‚’ã²ã¨ã¤ãšã¤æŠ¼ã—ã¦ã€æœŸå¾…ã•れるキーãŒé€ä¿¡ã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚キーを押ã—ãŸã“ã¨ã‚’見逃ã•ãªã„ãŸã‚ã®ãƒ—ログラムもã‚りã¾ã™ã€‚
+
+メモ: ã“れらã®ãƒ—ログラムã¯QMKã«ã‚ˆã£ã¦æä¾›ãƒ»æ‰¿èªã•れãŸã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。
+
+* [QMK Configurator](https://config.qmk.fm/#/test/) (Web Based)
+* [Switch Hitter](https://web.archive.org/web/20190413233743/https://elitekeyboards.com/switchhitter.php) (Windows Only)
+* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Mac Only)
+* [Keyboard Tester](http://www.keyboardtester.com) (Web Based)
+* [Keyboard Checker](http://keyboardchecker.com) (Web Based)
+
+## デãƒãƒƒã‚°
+
+`rules.mk`ã¸`CONSOLE_ENABLE = yes`ã®è¨­å®šã‚’ã™ã‚‹ã¨ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã¯ãƒ‡ãƒãƒƒã‚°æƒ…報を出力ã—ã¾ã™ã€‚デフォルトã®å‡ºåŠ›ã¯éžå¸¸ã«é™ã‚‰ã‚ŒãŸã‚‚ã®ã§ã™ãŒã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’オンã«ã™ã‚‹ã“ã¨ã§ãƒ‡ãƒãƒƒã‚°æƒ…å ±ã®é‡ã‚’増やã™ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚キーマップã®`DEBUG`キーコードを使用ã™ã‚‹ã‹ã€ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹ [Command](ja/feature_command.md) 機能を使用ã™ã‚‹ã‹ã€ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’キーマップã«è¿½åŠ ã—ã¾ã™ã€‚
+
+```c
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+ debug_enable=true;
+ debug_matrix=true;
+ //debug_keyboard=true;
+ //debug_mouse=true;
+}
+```
+
+### QMK Toolboxを使ã£ãŸãƒ‡ãƒãƒƒã‚°
+
+äº’æ›æ€§ã®ã‚る環境ã§ã¯ã€[QMK Toolbox](https://github.com/qmk/qmk_toolbox)を使ã†ã“ã¨ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã®ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã§ãã¾ã™ã€‚
+
+### hid_listenを使ã£ãŸãƒ‡ãƒãƒƒã‚°
+
+ã‚¿ãƒ¼ãƒŸãƒŠãƒ«ãƒ™ãƒ¼ã‚¹ã®æ–¹æ³•ãŒãŠå¥½ã¿ã§ã™ã‹ï¼ŸPJRCãŒæä¾›ã™ã‚‹[hid_listen](https://www.pjrc.com/teensy/hid_listen.html)もデãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®è¡¨ç¤ºã«ä½¿ç”¨ã§ãã¾ã™ã€‚ビルド済ã¿ã®å®Ÿè¡Œãƒ•ァイルã¯Windows, Linux, MacOS用ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚
+
+<!-- FIXME: Describe the debugging messages here. -->
+
+## 独自ã®ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã™ã‚‹
+
+[custom code](ja/custom_quantum_functions.md)内ã‹ã‚‰ãƒ‡ãƒãƒƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’出力ã™ã‚‹ã¨ä¾¿åˆ©ãªå ´åˆãŒã‚りã¾ã™ã€‚ãれã¯ã¨ã¦ã‚‚ç°¡å˜ã§ã™ã€‚ファイルã®å…ˆé ­ã«`print.h`ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã‚’追加ã—ã¾ã™:
+
+ #include <print.h>
+
+ãã®ã‚ã¨ã¯ã€ã„ãã¤ã‹ã®ç•°ãªã£ãŸprint関数を使用ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚
+
+* `print("string")`: ã‚·ãƒ³ãƒ—ãƒ«ãªæ–‡å­—列を出力ã—ã¾ã™
+* `uprintf("%s string", var)`: フォーマットã•ã‚ŒãŸæ–‡å­—列を出力ã—ã¾ã™
+* `dprint("string")` デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ãŒæœ‰åйãªå ´åˆã®ã¿ã€ã‚·ãƒ³ãƒ—ãƒ«ãªæ–‡å­—列を出力ã—ã¾ã™
+* `dprintf("%s string", var)`: デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ãŒæœ‰åйãªå ´åˆã®ã¿ã€ãƒ•ォーマットã•ã‚ŒãŸæ–‡å­—列を出力ã—ã¾ã™
+
+## デãƒãƒƒã‚°ã®ä¾‹
+
+以下ã¯ç¾å®Ÿä¸–界ã§ã®å®Ÿéš›ã®ãƒ‡ãƒãƒƒã‚°æ‰‹æ³•ã®ä¾‹ã‚’集ã‚ãŸã‚‚ã®ã§ã™ã€‚追加情報ã¯[Debugging/Troubleshooting QMK](ja/faq_debug.md)ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+### マトリックス上ã®ã©ã®å ´æ‰€ã§ã‚­ãƒ¼æŠ¼ä¸‹ãŒèµ·ã“ã£ãŸã‹ï¼Ÿ
+
+ç§»æ¤ã™ã‚‹ã€PCBã®å•題を診断ã™ã‚‹å ´åˆã€ã‚­ãƒ¼å…¥åŠ›ãŒæ­£ã—ãスキャンã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã“ã¨ãŒå½¹ç«‹ã¤å ´åˆãŒã‚りã¾ã™ã€‚ã“ã®æ‰‹æ³•ã§ã®ãƒ­ã‚®ãƒ³ã‚°ã‚’有効化ã™ã‚‹ã«ã¯ã€`keymap.c`ã¸ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’追加ã—ã¾ã™ã€‚
+
+```c
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãŒæœ‰åŠ¹åŒ–ã•れã¦ã„ã‚‹å ´åˆã€ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ä¸Šã®ä½ç½®ã¨ã‚­ãƒ¼æŠ¼ä¸‹çŠ¶æ…‹ã‚’å‡ºåŠ›ã—ã¾ã™
+#ifdef CONSOLE_ENABLE
+ uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+#endif
+ return true;
+}
+```
+
+出力ã®ä¾‹
+```text
+Waiting for device:.......
+Listening:
+KL: kc: 169, col: 0, row: 0, pressed: 1
+KL: kc: 169, col: 0, row: 0, pressed: 0
+KL: kc: 174, col: 1, row: 0, pressed: 1
+KL: kc: 174, col: 1, row: 0, pressed: 0
+KL: kc: 172, col: 2, row: 0, pressed: 1
+KL: kc: 172, col: 2, row: 0, pressed: 0
+```
+
+### キースキャンã«ã‹ã‹ã‚‹æ™‚é–“ã®æ¸¬å®š
+
+パフォーマンスã®å•題をテストã™ã‚‹å ´åˆã€ã‚¹ã‚¤ãƒƒãƒãƒžãƒˆãƒªãƒƒã‚¯ã‚¹ã‚’スキャンã™ã‚‹é »åº¦ã‚’知るã“ã¨ãŒå½¹ç«‹ã¡ã¾ã™ã€‚ã“ã®æ‰‹æ³•ã§ã®ãƒ­ã‚®ãƒ³ã‚°ã‚’有効化ã™ã‚‹ã«ã¯`config.h`ã¸ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’追加ã—ã¾ã™ã€‚
+
+
+```c
+#define DEBUG_MATRIX_SCAN_RATE
+```
+
+出力例
+```text
+ > matrix scan frequency: 315
+ > matrix scan frequency: 313
+ > matrix scan frequency: 316
+ > matrix scan frequency: 316
+ > matrix scan frequency: 316
+ > matrix scan frequency: 316
+```
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 7dcff03fd5..ae0bfb7af7 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -257,37 +257,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)
@@ -297,6 +297,16 @@ This is a reference only. Each group of keys links to the page documenting their
|`OUT_USB` |USB only |
|`OUT_BT` |Bluetooth only |
+## [Dynamic Macros](feature_dynamic_macros.md)
+
+|Key |Alias |Description |
+|-----------------|---------|--------------------------------------------------|
+|`DYN_REC_START1` |`DM_REC1`|Start recording Macro 1 |
+|`DYN_REC_START2` |`DM_REC2`|Start recording Macro 2 |
+|`DYN_MACRO_PLAY1`|`DM_PLY1`|Replay Macro 1 |
+|`DYN_MACRO_PLAY2`|`DM_PLY2`|Replay Macro 2 |
+|`DYN_REC_STOP` |`DM_RSTP`|Finish the macro that is currently being recorded.|
+
## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
|Key |Description |
@@ -379,12 +389,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 |
@@ -397,19 +407,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)
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_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..2e6b26e094
--- /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 commit 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/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_build_tools.md b/docs/ru-ru/getting_started_build_tools.md
index f590685339..facdf35633 100644
--- a/docs/ru-ru/getting_started_build_tools.md
+++ b/docs/ru-ru/getting_started_build_tools.md
@@ -119,21 +119,6 @@ git
* WSL Git **не** ÑовмеÑтим Ñ Windows Git, поÑтому иÑпользуйте Windows Git Bash или Windows Git GUI Ð´Ð»Ñ Ð²Ñех операций Ñ Git.
* Ð’Ñ‹ можете изменÑть файлы как внутри WSL, так и проÑто через Windows. Ðо обратите внимание, что еÑли вы изменÑете makefiles или Ñценарии командной Ñтроки, вы должны убедитьÑÑ, что иÑпользуете текÑтовый редактор, который ÑохранÑет файлы Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð¾Ð¼ Ñтроки в Ñтиле Unix (Unix line endings). Ð’ противном Ñлучае компилÑÑ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ не работать.
-## Windows (Vista и новее) (уÑтарело)
-
-Это уÑтаревшие инÑтрукции Ð´Ð»Ñ Windows Vista и более новых верÑий. Мы рекомендуем иÑпользовать [MSYS2, как Ñказано выше](#windows-Ñ-msys2-рекомендуетÑÑ).
-
-1. ЕÑли вы когда-то уÑтанавливали WinAVR, удалите его.
-2. УÑтановите [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Отключите smatch, но **оÑтавьте галочку напротив опции Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñтрумента в PATH**.
-3. ЕÑли вы ÑобираетеÑÑŒ прошивать клавиатуры на базе Infinity, вам нужно уÑтановить dfu-util. ОбратитеÑÑŒ к инÑтрукциÑм от [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware).
-4. УÑтановите [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). Во Ð²Ñ€ÐµÐ¼Ñ ÑƒÑтановки отключите опцию уÑтановки графичеÑкого пользовательÑкого интерфейÑа. **ÐЕ ИЗМЕÐЯЙТЕ директорию Ð´Ð»Ñ ÑƒÑтановки по умолчанию.** Скрипты завиÑÑÑ‚ от раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию.
-5. Выполните клонирование данного репозиториÑ. [Эта ÑÑылка Ñкачает его в виде zip-файла, который вам нужно будет разархивировать.](https://github.com/qmk/qmk_firmware/archive/master.zip) Откройте извлеченную папку в проводнике Windows.
-6. Перейдите в папку `\util`.
-7. ЗапуÑтите двойным щелчком пакетный файл ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ `1-setup-path-win`. Вам нужно будет ÑоглаÑитьÑÑ Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… запиÑей пользователей (User Account Control, UAC). Ðажмите пробел, чтобы закрыть поÑвившееÑÑ Ñообщение об уÑпешном выполнении операции в командной Ñтроке.
-8. Кликните правой кнопкой по пакетному файлу ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ `2-setup-environment-win`, выберите "ЗапуÑк от имени админиÑтратора" и ÑоглаÑитеÑÑŒ Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ UAC. Это может занÑть пару минут, и вам потребуетÑÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚ÑŒ уÑтановку драйвера. Как только Ñценарий завершит Ñвою работу, ваше окружение будет готово!
-
-ЕÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ проблемы и вам нужна помощь, будет полезно Ñгенерировать файл *Win_Check_Output.txt*, запуÑтив `Win_Check.bat` в папке `\util`.
-
## Docker
ЕÑли Ñто немного Ñложновато Ð´Ð»Ñ Ð²Ð°Ñ, Docker может Ñтать готовым решением, которое вы ищите. ПоÑле уÑтановки [Docker CE](https://docs.docker.com/install/#supported-platforms) выполните Ñледующую команду из директории `qmk_firmware`, чтобы Ñобрать клавиатуру/раÑкладку:
diff --git a/docs/ru-ru/getting_started_getting_help.md b/docs/ru-ru/getting_started_getting_help.md
new file mode 100644
index 0000000000..75be44310e
--- /dev/null
+++ b/docs/ru-ru/getting_started_getting_help.md
@@ -0,0 +1,15 @@
+# Получение помощи
+
+СущеÑтвует много реÑурÑов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð¸ по работе Ñ QMK.
+
+## Чат в реальном времени
+
+Ð’Ñ‹ можете найти разработчиков и пользователей QMK на нашем главном [Ñервере Discord](https://discord.gg/Uq7gcHh). Ðа Ñервере еÑть Ñпециальные каналы Ð´Ð»Ñ Ñ€Ð°Ð·Ð³Ð¾Ð²Ð¾Ñ€Ð¾Ð² о прошивке, Toolbox, оборудовании и конфигураторе.
+
+## OLKB Сабреддит
+
+Официальный форум QMK [/r/olkb](https://reddit.com/r/olkb) на [reddit.com](https://reddit.com).
+
+## GitHub ишью
+
+Ð’Ñ‹ можете открыть [ишью на GitHub](https://github.com/qmk/qmk_firmware/issues). Это оÑобенно удобно, когда ваша проблема потребует длительного обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ отладки.
diff --git a/docs/ru-ru/getting_started_github.md b/docs/ru-ru/getting_started_github.md
new file mode 100644
index 0000000000..8a0fd07a27
--- /dev/null
+++ b/docs/ru-ru/getting_started_github.md
@@ -0,0 +1,58 @@
+# Как иÑпользовать GitHub Ñ QMK
+
+GitHub может показатьÑÑ Ð½ÐµÑколько Ñложным Ð´Ð»Ñ Ñ‚ÐµÑ…, кто никогда Ñ Ð½Ð¸Ð¼ не работал. Ð’ данном руководÑтве будет разобран каждый шаг ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð¾Ñ€ÐºÐ°, ÐºÐ»Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ отправки пулреквеÑта в QMK.
+
+?> Ð’ Ñтом руководÑтве предполагаетÑÑ, что вы в какой-то Ñтепени знакомы Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð¾Ð¹ в командной Ñтроке, и в вашей ÑиÑтеме уÑтановлен git.
+
+Откройте [Ñтраницу QMK на GitHub] (https://github.com/qmk/qmk_firmware), и в правом верхнем углу вы увидите кнопку Ñ Ð½Ð°Ð´Ð¿Ð¸Ñью "Fork":
+
+![Fork on Github](http://i.imgur.com/8Toomz4.jpg)
+
+ЕÑли вы ÑоÑтоите в какой-либо организации, вам нужно выбрать учетную запиÑÑŒ, к которой будет привÑзан форк. Ð’ большинÑтве Ñлучаев Ñто будет личной аккаунт. Как только ваш форк будет завершен (иногда Ñто занимает немного времени), нажмите кнопку "Clone or Download":
+![Download from Github](http://i.imgur.com/N1NYcSz.jpg)
+
+И обÑзательно выберите "HTTPS", затем выделите ÑÑылку и Ñкопируйте ее:
+
+![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
+
+Теперь введите `git clone` в командную Ñтроку, а затем вÑтавьте ÑÑылку:
+
+```
+user@computer:~$ git clone 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.
+```
+
+Теперь у Ð²Ð°Ñ ÐµÑть форк 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/ru-ru/getting_started_introduction.md b/docs/ru-ru/getting_started_introduction.md
new file mode 100644
index 0000000000..142fe4254a
--- /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`. Ð”Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ 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 6fa5d324cf..67481c458d 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -1,13 +1,22 @@
# WS2812 Driver
This driver powers the [RGB Lighting](feature_rgblight.md) and [RGB Matrix](feature_rgb_matrix.md) features.
-Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
+Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
WS2811, WS2812, WS2812B, WS2812C, etc.
SK6812, SK6812MINI, SK6805
These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
+## Supported Driver Types
+
+| | AVR | ARM |
+|----------|--------------------|--------------------|
+| bit bang | :heavy_check_mark: | :heavy_check_mark: |
+| I2C | :heavy_check_mark: | |
+| SPI | | Soonâ„¢ |
+| PWM | | Soonâ„¢ |
+
## Driver configuration
### Bitbang
@@ -17,7 +26,7 @@ Default driver, the absence of configuration assumes this driver. To configure i
WS2812_DRIVER = bitbang
```
-!> ARM does not yet support WS2182. Progress is being made, but we are not quite there, yet.
+!> This driver is not hardware accelerated and may not be performant on heavily loaded systems.
### I2C
Targeting boards where WS2812 support is offloaded to a 2nd MCU. Currently the driver is limited to AVR given the known consumers are ps2avrGB/BMC. To configure it, add this to your rules.mk:
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/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/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..b9eff0ad2e 100644
--- a/drivers/arm/i2c_master.c
+++ b/drivers/arm/i2c_master.c
@@ -62,7 +62,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 a8ed66403a..31cbfb9774 100644
--- a/drivers/arm/i2c_master.h
+++ b/drivers/arm/i2c_master.h
@@ -1,9 +1,9 @@
/* Copyright 2018 Jack Humbert
* Copyright 2018 Yiancar
*
- * This program is free sofare: you can redistribute it and/or modify
+ * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Sofare Foundation, either version 2 of the License, or
+ * the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -27,7 +27,7 @@
#include "ch.h"
#include <hal.h>
-#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
+#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F4XX) || defined(STM32L0xx) || defined(STM32L1xx)
# define USE_I2CV1
#endif
@@ -51,6 +51,20 @@
# define I2C1_SDA 7
#endif
+#if defined(STM32F1XX) || defined(STM32F1xx)
+# define USE_GPIOV1
+#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
+
#ifdef USE_I2CV1
# ifndef I2C1_OPMODE
# define I2C1_OPMODE OPMODE_I2C
@@ -62,14 +76,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
diff --git a/drivers/arm/ws2812.c b/drivers/arm/ws2812.c
index 2094e50098..bdca565d88 100644
--- a/drivers/arm/ws2812.c
+++ b/drivers/arm/ws2812.c
@@ -1 +1,95 @@
-#error("NOT SUPPORTED") \ No newline at end of file
+#include "quantum.h"
+#include "ws2812.h"
+#include "ch.h"
+#include "hal.h"
+
+/* Adapted from https://github.com/bigjosh/SimpleNeoPixelDemo/ */
+
+#ifndef NOP_FUDGE
+# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX)
+# define NOP_FUDGE 0.4
+# else
+# error("NOP_FUDGE configuration required")
+# define NOP_FUDGE 1 // this just pleases the compile so the above error is easier to spot
+# endif
+#endif
+
+#define NUMBER_NOPS 6
+#define CYCLES_PER_SEC (STM32_SYSCLK / NUMBER_NOPS * NOP_FUDGE)
+#define NS_PER_SEC (1000000000L) // Note that this has to be SIGNED since we want to be able to check for negative values of derivatives
+#define NS_PER_CYCLE (NS_PER_SEC / CYCLES_PER_SEC)
+#define NS_TO_CYCLES(n) ((n) / NS_PER_CYCLE)
+
+#define wait_ns(x) \
+ do { \
+ for (int i = 0; i < NS_TO_CYCLES(x); i++) { \
+ __asm__ volatile("nop\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ "nop\n\t"); \
+ } \
+ } while (0)
+
+// These are the timing constraints taken mostly from the WS2812 datasheets
+// These are chosen to be conservative and avoid problems rather than for maximum throughput
+
+#define T1H 900 // Width of a 1 bit in ns
+#define T1L (1250 - T1H) // Width of a 1 bit in ns
+
+#define T0H 350 // Width of a 0 bit in ns
+#define T0L (1250 - T0H) // Width of a 0 bit in ns
+
+// The reset gap can be 6000 ns, but depending on the LED strip it may have to be increased
+// to values like 600000 ns. If it is too small, the pixels will show nothing most of the time.
+#define RES 10000 // Width of the low gap between bits to cause a frame to latch
+
+void sendByte(uint8_t byte) {
+ // WS2812 protocol wants most significant bits first
+ for (unsigned char bit = 0; bit < 8; bit++) {
+ bool is_one = byte & (1 << (7 - bit));
+ // using something like wait_ns(is_one ? T1L : T0L) here throws off timings
+ if (is_one) {
+ // 1
+ writePinHigh(RGB_DI_PIN);
+ wait_ns(T1H);
+ writePinLow(RGB_DI_PIN);
+ wait_ns(T1L);
+ } else {
+ // 0
+ writePinHigh(RGB_DI_PIN);
+ wait_ns(T0H);
+ writePinLow(RGB_DI_PIN);
+ wait_ns(T0L);
+ }
+ }
+}
+
+void ws2812_init(void) { setPinOutput(RGB_DI_PIN); }
+
+// Setleds for standard RGB
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
+ static bool s_init = false;
+ if (!s_init) {
+ ws2812_init();
+ s_init = true;
+ }
+
+ // this code is very time dependent, so we need to disable interrupts
+ chSysLock();
+
+ for (uint8_t i = 0; i < leds; i++) {
+ // WS2812 protocol dictates grb order
+ sendByte(ledarray[i].g);
+ sendByte(ledarray[i].r);
+ sendByte(ledarray[i].b);
+#ifdef RGBW
+ sendByte(ledarray[i].w);
+#endif
+ }
+
+ wait_ns(RES);
+
+ chSysUnlock();
+}
diff --git a/drivers/arm/ws2812.h b/drivers/arm/ws2812.h
new file mode 100644
index 0000000000..41c22a00b8
--- /dev/null
+++ b/drivers/arm/ws2812.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include "quantum/color.h"
+
+/* User Interface
+ *
+ * Input:
+ * ledarray: An array of GRB data describing the LED colors
+ * number_of_leds: The number of LEDs to write
+ *
+ * The functions will perform the following actions:
+ * - Set the data-out pin as output
+ * - Send out the LED data
+ * - Wait 50us to reset the LEDs
+ */
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
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/avr/ws2812.c b/drivers/avr/ws2812.c
index 5c733c4ab0..82d985c20a 100644
--- a/drivers/avr/ws2812.c
+++ b/drivers/avr/ws2812.c
@@ -36,109 +36,6 @@
void ws2812_sendarray(uint8_t *array, uint16_t length);
void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask);
-
-#ifdef RGBW_BB_TWI
-
-// Port for the I2C
-# define I2C_DDR DDRD
-# define I2C_PIN PIND
-# define I2C_PORT PORTD
-
-// Pins to be used in the bit banging
-# define I2C_CLK 0
-# define I2C_DAT 1
-
-# define I2C_DATA_HI() \
- I2C_DDR &= ~(1 << I2C_DAT); \
- I2C_PORT |= (1 << I2C_DAT);
-# define I2C_DATA_LO() \
- I2C_DDR |= (1 << I2C_DAT); \
- I2C_PORT &= ~(1 << I2C_DAT);
-
-# define I2C_CLOCK_HI() \
- I2C_DDR &= ~(1 << I2C_CLK); \
- I2C_PORT |= (1 << I2C_CLK);
-# define I2C_CLOCK_LO() \
- I2C_DDR |= (1 << I2C_CLK); \
- I2C_PORT &= ~(1 << I2C_CLK);
-
-# define I2C_DELAY 1
-
-void I2C_WriteBit(unsigned char c) {
- if (c > 0) {
- I2C_DATA_HI();
- } else {
- I2C_DATA_LO();
- }
-
- I2C_CLOCK_HI();
- _delay_us(I2C_DELAY);
-
- I2C_CLOCK_LO();
- _delay_us(I2C_DELAY);
-
- if (c > 0) {
- I2C_DATA_LO();
- }
-
- _delay_us(I2C_DELAY);
-}
-
-// Inits bitbanging port, must be called before using the functions below
-//
-void I2C_Init(void) {
- I2C_PORT &= ~((1 << I2C_DAT) | (1 << I2C_CLK));
-
- I2C_CLOCK_HI();
- I2C_DATA_HI();
-
- _delay_us(I2C_DELAY);
-}
-
-// Send a START Condition
-//
-void I2C_Start(void) {
- // set both to high at the same time
- I2C_DDR &= ~((1 << I2C_DAT) | (1 << I2C_CLK));
- _delay_us(I2C_DELAY);
-
- I2C_DATA_LO();
- _delay_us(I2C_DELAY);
-
- I2C_CLOCK_LO();
- _delay_us(I2C_DELAY);
-}
-
-// Send a STOP Condition
-//
-void I2C_Stop(void) {
- I2C_CLOCK_HI();
- _delay_us(I2C_DELAY);
-
- I2C_DATA_HI();
- _delay_us(I2C_DELAY);
-}
-
-// write a byte to the I2C slave device
-//
-unsigned char I2C_Write(unsigned char c) {
- for (char i = 0; i < 8; i++) {
- I2C_WriteBit(c & 128);
-
- c <<= 1;
- }
-
- I2C_WriteBit(0);
- _delay_us(I2C_DELAY);
- _delay_us(I2C_DELAY);
-
- // _delay_us(I2C_DELAY);
- // return I2C_ReadBit();
- return 0;
-}
-
-#endif
-
// Setleds for standard RGB
void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
@@ -146,45 +43,15 @@ void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
}
void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask) {
- // ws2812_DDRREG |= pinmask; // Enable DDR
// new universal format (DDR)
_SFR_IO8((RGB_DI_PIN >> 4) + 1) |= pinmask;
- ws2812_sendarray_mask((uint8_t *)ledarray, leds + leds + leds, pinmask);
- _delay_us(50);
-}
-
-// Setleds for SK6812RGBW
-void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds) {
-#ifdef RGBW_BB_TWI
- uint8_t sreg_prev, twcr_prev;
- sreg_prev = SREG;
- twcr_prev = TWCR;
- cli();
- TWCR &= ~(1 << TWEN);
- I2C_Init();
- I2C_Start();
- I2C_Write(0x84);
- uint16_t datlen = leds << 2;
- uint8_t curbyte;
- uint8_t *data = (uint8_t *)ledarray;
- while (datlen--) {
- curbyte = *data++;
- I2C_Write(curbyte);
- }
- I2C_Stop();
- SREG = sreg_prev;
- TWCR = twcr_prev;
-#endif
-
- // ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR
- // new universal format (DDR)
- _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF);
-
- ws2812_sendarray_mask((uint8_t *)ledarray, leds << 2, _BV(RGB_DI_PIN & 0xF));
+ ws2812_sendarray_mask((uint8_t *)ledarray, leds * sizeof(LED_TYPE), pinmask);
-#ifndef RGBW_BB_TWI
+#ifdef RGBW
_delay_us(80);
+#else
+ _delay_us(50);
#endif
}
diff --git a/drivers/avr/ws2812.h b/drivers/avr/ws2812.h
index 9652b94bbe..b869fb28c8 100644
--- a/drivers/avr/ws2812.h
+++ b/drivers/avr/ws2812.h
@@ -34,8 +34,7 @@
* The functions will perform the following actions:
* - Set the data-out pin as output
* - Send out the LED data
- * - Wait 50�s to reset the LEDs
+ * - Wait 50us to reset the LEDs
*/
void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pinmask);
-void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
diff --git a/drivers/avr/ws2812_i2c.c b/drivers/avr/ws2812_i2c.c
index 8525a026c7..1c332e24b6 100644
--- a/drivers/avr/ws2812_i2c.c
+++ b/drivers/avr/ws2812_i2c.c
@@ -1,6 +1,10 @@
#include "ws2812.h"
#include "i2c_master.h"
+#ifdef RGBW
+# error "RGBW not supported"
+#endif
+
#ifndef WS2812_ADDRESS
# define WS2812_ADDRESS 0xb0
#endif
@@ -21,11 +25,3 @@ void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
i2c_transmit(WS2812_ADDRESS, (uint8_t *)ledarray, sizeof(LED_TYPE) * leds, WS2812_TIMEOUT);
}
-
-// Setleds for SK6812RGBW
-void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds) {
-// not supported - for now error out if its enabled
-#ifdef RGBW
-# error "RGBW not supported"
-#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 728554b01e..c40731913b 100644
--- a/drivers/haptic/DRV2605L.c
+++ b/drivers/haptic/DRV2605L.c
@@ -115,15 +115,13 @@ void DRV_init(void) {
}
void DRV_rtp_init(void) {
- DRV_write(DRV_GO, 0x00);
- DRV_write(DRV_RTP_INPUT, 20); //20 is the lowest value I've found where haptics can still be felt.
- DRV_write(DRV_MODE, 0x05);
- DRV_write(DRV_GO, 0x01);
+ DRV_write(DRV_GO, 0x00);
+ DRV_write(DRV_RTP_INPUT, 20); // 20 is the lowest value I've found where haptics can still be felt.
+ DRV_write(DRV_MODE, 0x05);
+ DRV_write(DRV_GO, 0x01);
}
-void DRV_amplitude(uint8_t amplitude) {
- DRV_write(DRV_RTP_INPUT, amplitude);
-}
+void DRV_amplitude(uint8_t amplitude) { DRV_write(DRV_RTP_INPUT, amplitude); }
void DRV_pulse(uint8_t sequence) {
DRV_write(DRV_GO, 0x00);
diff --git a/drivers/haptic/haptic.c b/drivers/haptic/haptic.c
index 989970beee..2ce279b753 100644
--- a/drivers/haptic/haptic.c
+++ b/drivers/haptic/haptic.c
@@ -169,12 +169,12 @@ void haptic_set_mode(uint8_t mode) {
}
void haptic_set_amplitude(uint8_t amp) {
- haptic_config.amplitude = amp;
- eeconfig_update_haptic(haptic_config.raw);
- xprintf("haptic_config.amplitude = %u\n", haptic_config.amplitude);
- #ifdef DRV2605L
- DRV_amplitude(amp);
- #endif
+ haptic_config.amplitude = amp;
+ eeconfig_update_haptic(haptic_config.raw);
+ xprintf("haptic_config.amplitude = %u\n", haptic_config.amplitude);
+#ifdef DRV2605L
+ DRV_amplitude(amp);
+#endif
}
void haptic_set_buzz(uint8_t buzz) {
@@ -211,52 +211,50 @@ uint8_t haptic_get_dwell(void) {
}
void haptic_enable_continuous(void) {
- haptic_config.cont = 1;
- xprintf("haptic_config.cont = %u\n", haptic_config.cont);
- eeconfig_update_haptic(haptic_config.raw);
- #ifdef DRV2605L
- DRV_rtp_init();
- #endif
+ haptic_config.cont = 1;
+ xprintf("haptic_config.cont = %u\n", haptic_config.cont);
+ eeconfig_update_haptic(haptic_config.raw);
+#ifdef DRV2605L
+ DRV_rtp_init();
+#endif
}
void haptic_disable_continuous(void) {
- haptic_config.cont = 0;
- xprintf("haptic_config.cont = %u\n", haptic_config.cont);
- eeconfig_update_haptic(haptic_config.raw);
- #ifdef DRV2605L
- DRV_write(DRV_MODE,0x00);
- #endif
+ haptic_config.cont = 0;
+ xprintf("haptic_config.cont = %u\n", haptic_config.cont);
+ eeconfig_update_haptic(haptic_config.raw);
+#ifdef DRV2605L
+ DRV_write(DRV_MODE, 0x00);
+#endif
}
void haptic_toggle_continuous(void) {
#ifdef DRV2605L
-if (haptic_config.cont) {
- haptic_disable_continuous();
- } else {
- haptic_enable_continuous();
- }
- eeconfig_update_haptic(haptic_config.raw);
+ if (haptic_config.cont) {
+ haptic_disable_continuous();
+ } else {
+ haptic_enable_continuous();
+ }
+ eeconfig_update_haptic(haptic_config.raw);
#endif
}
-
void haptic_cont_increase(void) {
- uint8_t amp = haptic_config.amplitude + 10;
- if (haptic_config.amplitude >= 120) {
- amp = 120;
- }
- haptic_set_amplitude(amp);
+ uint8_t amp = haptic_config.amplitude + 10;
+ if (haptic_config.amplitude >= 120) {
+ amp = 120;
+ }
+ haptic_set_amplitude(amp);
}
void haptic_cont_decrease(void) {
- uint8_t amp = haptic_config.amplitude - 10;
- if (haptic_config.amplitude < 20) {
- amp = 20;
- }
- haptic_set_amplitude(amp);
+ uint8_t amp = haptic_config.amplitude - 10;
+ if (haptic_config.amplitude < 20) {
+ amp = 20;
+ }
+ haptic_set_amplitude(amp);
}
-
void haptic_play(void) {
#ifdef DRV2605L
uint8_t play_eff = 0;
@@ -269,7 +267,6 @@ void haptic_play(void) {
}
bool process_haptic(uint16_t keycode, keyrecord_t *record) {
-
if (keycode == HPT_ON && record->event.pressed) {
haptic_enable();
}
@@ -300,16 +297,16 @@ bool process_haptic(uint16_t keycode, keyrecord_t *record) {
if (keycode == HPT_DWLD && record->event.pressed) {
haptic_dwell_decrease();
}
- if (keycode == HPT_CONT && record->event.pressed) {
- haptic_toggle_continuous();
+ if (keycode == HPT_CONT && record->event.pressed) {
+ haptic_toggle_continuous();
}
- if (keycode == HPT_CONI && record->event.pressed) {
- haptic_cont_increase();
+ if (keycode == HPT_CONI && record->event.pressed) {
+ haptic_cont_increase();
}
- if (keycode == HPT_COND && record->event.pressed) {
- haptic_cont_decrease();
+ if (keycode == HPT_COND && record->event.pressed) {
+ haptic_cont_decrease();
}
-
+
if (haptic_config.enable) {
if (record->event.pressed) {
// keypress
diff --git a/drivers/haptic/haptic.h b/drivers/haptic/haptic.h
index 2f6eb31fc2..5d3bd1c310 100644
--- a/drivers/haptic/haptic.h
+++ b/drivers/haptic/haptic.h
@@ -34,14 +34,14 @@
typedef union {
uint32_t raw;
struct {
- bool enable :1;
- uint8_t feedback :2;
- uint8_t mode :7;
- bool buzz :1;
- uint8_t dwell :7;
- bool cont :1;
- uint8_t amplitude :8;
- uint16_t reserved :7;
+ bool enable : 1;
+ uint8_t feedback : 2;
+ uint8_t mode : 7;
+ bool buzz : 1;
+ uint8_t dwell : 7;
+ bool cont : 1;
+ uint8_t amplitude : 8;
+ uint16_t reserved : 7;
};
} haptic_config_t;
diff --git a/drivers/haptic/solenoid.h b/drivers/haptic/solenoid.h
index 53dc626e33..dd6ececa68 100644
--- a/drivers/haptic/solenoid.h
+++ b/drivers/haptic/solenoid.h
@@ -29,12 +29,8 @@
# define SOLENOID_MIN_DWELL 4
#endif
-#ifndef SOLENOID_ACTIVE
-# define SOLENOID_ACTIVE false
-#endif
-
#ifndef SOLENOID_PIN
-# define SOLENOID_PIN F6
+# error SOLENOID_PIN not defined
#endif
void solenoid_buzz_on(void);
diff --git a/drivers/issi/is31fl3733.c b/drivers/issi/is31fl3733.c
index cc2d895efd..e60f0e878e 100644
--- a/drivers/issi/is31fl3733.c
+++ b/drivers/issi/is31fl3733.c
@@ -24,10 +24,10 @@
# include "wait.h"
#endif
-#include "is31fl3733.h"
#include <string.h>
#include "i2c_master.h"
#include "progmem.h"
+#include "is31fl3733.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 +80,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) {
@@ -213,11 +224,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 +246,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..4cf1867334 100644
--- a/drivers/issi/is31fl3733.h
+++ b/drivers/issi/is31fl3733.h
@@ -32,8 +32,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);
diff --git a/keyboards/1upkeyboards/sweet16/v1/rules.mk b/keyboards/1upkeyboards/sweet16/v1/rules.mk
index 0defba1f19..09bd9e9e25 100644
--- a/keyboards/1upkeyboards/sweet16/v1/rules.mk
+++ b/keyboards/1upkeyboards/sweet16/v1/rules.mk
@@ -1,5 +1,17 @@
+# 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
-LINK_TIME_OPTIMIZATION_ENABLE=yes
+
RGBLIGHT_ENABLE = yes
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+
+LINK_TIME_OPTIMIZATION_ENABLE = yes
diff --git a/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk b/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk
index 4b08a7e6b0..9f38504a8c 100644
--- a/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk
+++ b/keyboards/1upkeyboards/sweet16/v2/promicro/rules.mk
@@ -1,6 +1,15 @@
+# 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
-LINK_TIME_OPTIMIZATION_ENABLE=yes
## Features
CONSOLE_ENABLE = yes
@@ -8,3 +17,5 @@ CONSOLE_ENABLE = yes
## On a Pro Micro you have to choose between underglow and the rotary encoder.
RGBLIGHT_ENABLE = no
ENCODER_ENABLE = yes
+
+LINK_TIME_OPTIMIZATION_ENABLE = yes
diff --git a/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk b/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk
index 3bfa1623fd..dedcf043af 100644
--- a/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk
+++ b/keyboards/1upkeyboards/sweet16/v2/proton_c/rules.mk
@@ -1,3 +1,4 @@
+# MCU name
MCU = STM32F303
## Features
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/nano/keymaps/drashna/keymap.c b/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
index 6c5b974572..668178967b 100644
--- a/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
+++ b/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
@@ -1,12 +1,11 @@
-#include QMK_KEYBOARD_H
#include "drashna.h"
#include "analog.c"
#include "pointing_device.h"
#include "pincontrol.h"
-
#define KC_X0 LT(_FN, KC_ESC)
+// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_VOLU, KC_MPLY, KC_MPRV, RESET,
@@ -14,6 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
+// clang-format on
// Joystick
// Set Pins
@@ -39,7 +39,7 @@ int16_t xOrigin, yOrigin;
uint16_t lastCursor = 0;
int16_t axisCoordinate(uint8_t pin, uint16_t origin) {
- int8_t direction;
+ int8_t direction;
int16_t distanceFromOrigin;
int16_t range;
@@ -57,8 +57,8 @@ int16_t axisCoordinate(uint8_t pin, uint16_t origin) {
direction = 1;
}
- float percent = (float)distanceFromOrigin / range;
- int16_t coordinate = (int16_t)(percent * 100);
+ float percent = (float)distanceFromOrigin / range;
+ int16_t coordinate = (int16_t)(percent * 100);
if (coordinate < 0) {
return 0;
} else if (coordinate > 100) {
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/mechmini/v1/i2c.h b/keyboards/7skb/config.h
index 194a82cab8..cfb6bf4ffc 100644
--- a/keyboards/mechmini/v1/i2c.h
+++ b/keyboards/7skb/config.h
@@ -1,22 +1,21 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@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
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
+
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 __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+#pragma once
-#endif
+#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/7skb/keymaps/default/config.h b/keyboards/7skb/keymaps/default/config.h
new file mode 100644
index 0000000000..4b3496d856
--- /dev/null
+++ b/keyboards/7skb/keymaps/default/config.h
@@ -0,0 +1,22 @@
+/* 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
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..529c3e72c7
--- /dev/null
+++ b/keyboards/7skb/rev1/config.h
@@ -0,0 +1,84 @@
+/*
+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 QMK_KEYBOARD_CONFIG_H
+
+/* 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/kudox/keymaps/jis/rules.mk b/keyboards/7skb/rev1/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/kudox/keymaps/jis/rules.mk
+++ b/keyboards/7skb/rev1/rules.mk
diff --git a/keyboards/7skb/rules.mk b/keyboards/7skb/rules.mk
new file mode 100644
index 0000000000..d663af19f8
--- /dev/null
+++ b/keyboards/7skb/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 = 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 = 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 = 7skb/rev1
diff --git a/keyboards/adkb96/keymaps/default/keymap.c b/keyboards/adkb96/keymaps/default/keymap.c
index a374ffb5e6..dc1e9d7b53 100644
--- a/keyboards/adkb96/keymaps/default/keymap.c
+++ b/keyboards/adkb96/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/aeboards/ext65/keymaps/default/keymap.c b/keyboards/aeboards/ext65/keymaps/default/keymap.c
index efa11cd0fd..339fe2c484 100644
--- a/keyboards/aeboards/ext65/keymaps/default/keymap.c
+++ b/keyboards/aeboards/ext65/keymaps/default/keymap.c
@@ -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/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/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/kudox/keymaps/x1/rules.mk b/keyboards/angel64/alpha/rules.mk
index e69de29bb2..e69de29bb2 100644
--- a/keyboards/kudox/keymaps/x1/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/angel64/rev1/keymaps/default/config.h b/keyboards/angel64/rev1/keymaps/default/config.h
new file mode 100644
index 0000000000..bf1149ebc6
--- /dev/null
+++ b/keyboards/angel64/rev1/keymaps/default/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/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/angel64/rev1/rules.mk b/keyboards/angel64/rev1/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ 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/ares.c b/keyboards/ares/ares.c
index 85c7435edc..07276491c5 100644
--- a/keyboards/ares/ares.c
+++ b/keyboards/ares/ares.c
@@ -17,50 +17,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "ares.h"
-#ifdef RGBLIGHT_ENABLE
-
-#include <string.h>
-#include "i2c_master.h"
-#include "rgblight.h"
-
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
- i2c_init();
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-// custom RGB driver
-void rgblight_set(void) {
- if (!rgblight_config.enable) {
- memset(led, 0, 3 * RGBLED_NUM);
- }
-
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- rgb_init = true;
- }
-
- rgblight_task();
- matrix_scan_user();
-}
-
-#endif
-
#ifdef BACKLIGHT_ENABLE
void backlight_init_ports(void) {
- setPinOutput(D0);
- setPinOutput(D1);
- setPinOutput(D4);
- setPinOutput(D6);
+ setPinOutput(D0);
+ setPinOutput(D1);
+ setPinOutput(D4);
+ setPinOutput(D6);
}
void backlight_set(uint8_t level) {
@@ -79,29 +41,3 @@ void backlight_set(uint8_t level) {
}
}
#endif
-
-// 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);
-}
-*/ \ No newline at end of file
diff --git a/keyboards/ares/config.h b/keyboards/ares/config.h
index dd01d15659..f0aa926ea5 100644
--- a/keyboards/ares/config.h
+++ b/keyboards/ares/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER LSJ
#define PRODUCT QMK Firmware for Ares
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/ares/rules.mk b/keyboards/ares/rules.mk
index 3ac90cf973..58d36bc673 100644
--- a/keyboards/ares/rules.mk
+++ b/keyboards/ares/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
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC += i2c_master.c
diff --git a/keyboards/ares/usbconfig.h b/keyboards/ares/usbconfig.h
index 89b7ffbaab..7c85ff22c9 100644
--- a/keyboards/ares/usbconfig.h
+++ b/keyboards/ares/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'L', 'S', 'J'
diff --git a/keyboards/ash1800/ash1800.c b/keyboards/ash1800/ash1800.c
new file mode 100644
index 0000000000..5b1d1c45f2
--- /dev/null
+++ b/keyboards/ash1800/ash1800.c
@@ -0,0 +1,25 @@
+/* Copyright 2019 angelbirth
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "ash1800.h"
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(NUM_LOCK_LED_PIN, !led_state.num_lock);
+ writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock);
+ writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock);
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/ash1800/ash1800.h b/keyboards/ash1800/ash1800.h
new file mode 100644
index 0000000000..bcfb2ec5d0
--- /dev/null
+++ b/keyboards/ash1800/ash1800.h
@@ -0,0 +1,51 @@
+/* Copyright 2019 angelbirth
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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( \
+ k00, k01, k02, k03, k60, k61, k62, k63, k04, k05, k06, k07, k08, k54, k55, k56, k57, \
+ k64, k65, k66, k67, \
+ k10, k11, k12, k13, k70, k71, k72, k73, k14, k15, k16, k17, k18, k19, k74, k75, k76, k77, \
+ k20, k21, k22, k23, k80, k81, k82, k83, k24, k25, k26, k27, k28, k29, k84, k85, k86, k87, \
+ k30, k31, k32, k33, k90, k91, k92, k93, k34, k35, k36, k37, k38, k94, k95, k96, k97, \
+ k40, k41, k42, k43, ka0, ka1, ka2, ka3, k44, k45, k46, k47, k48, ka9, ka4, ka5, ka6, ka7, \
+ k50, k51, k52, k53, kb4, kb7, ka8, kb8, kb9, kb5, kb6 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, KC_NO }, \
+ { 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, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, KC_NO }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57, KC_NO, KC_NO }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, KC_NO, KC_NO }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87, KC_NO, KC_NO }, \
+ { k90, k91, k92, k93, k94, k95, k96, k97, KC_NO, KC_NO }, \
+ { ka0, ka1, ka2, ka3, ka4, ka5, ka6, ka7, ka8, ka9 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, kb4, kb5, kb6, kb7, kb8, kb9 } \
+}
+ \ No newline at end of file
diff --git a/keyboards/ash1800/config.h b/keyboards/ash1800/config.h
new file mode 100644
index 0000000000..9f25a0f116
--- /dev/null
+++ b/keyboards/ash1800/config.h
@@ -0,0 +1,253 @@
+/*
+Copyright 2019 angelbirth
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 0x1800
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Hasyim Ashari
+#define PRODUCT ASH-1800
+#define DESCRIPTION An attempt to make a cherry g80/g81 clone
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 10
+
+/*
+ * 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 { C6, B6, B5, B4, D7, D0, D1, D2, D3, D5, D4, D6 }
+#define MATRIX_COL_PINS { F1, F4, F5, F6, B0, B2, B1, B3, B7, C7 }
+#define UNUSED_PINS
+
+#define NUM_LOCK_LED_PIN E6
+#define CAPS_LOCK_LED_PIN F0
+#define SCROLL_LOCK_LED_PIN F7
+
+/* 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
diff --git a/keyboards/ash1800/info.json b/keyboards/ash1800/info.json
new file mode 100644
index 0000000000..102b78b0ee
--- /dev/null
+++ b/keyboards/ash1800/info.json
@@ -0,0 +1,539 @@
+{
+ "keyboard_name": "ASH-1800",
+ "maintainer": "angelbirth",
+ "width": 19.5,
+ "height": 7.25,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {
+ "label": "Esc",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "F1",
+ "x": 1.25,
+ "y": 0
+ },
+ {
+ "label": "F2",
+ "x": 2.25,
+ "y": 0
+ },
+ {
+ "label": "F3",
+ "x": 3.25,
+ "y": 0
+ },
+ {
+ "label": "F4",
+ "x": 4.25,
+ "y": 0
+ },
+ {
+ "label": "F5",
+ "x": 5.5,
+ "y": 0
+ },
+ {
+ "label": "F6",
+ "x": 6.5,
+ "y": 0
+ },
+ {
+ "label": "F7",
+ "x": 7.5,
+ "y": 0
+ },
+ {
+ "label": "F8",
+ "x": 8.5,
+ "y": 0
+ },
+ {
+ "label": "F9",
+ "x": 9.75,
+ "y": 0
+ },
+ {
+ "label": "F10",
+ "x": 10.75,
+ "y": 0
+ },
+ {
+ "label": "F11",
+ "x": 11.75,
+ "y": 0
+ },
+ {
+ "label": "F12",
+ "x": 12.75,
+ "y": 0
+ },
+ {
+ "label": "Insert",
+ "x": 15.5,
+ "y": 0
+ },
+ {
+ "label": "Home",
+ "x": 16.5,
+ "y": 0
+ },
+ {
+ "label": "PgUp",
+ "x": 17.5,
+ "y": 0
+ },
+ {
+ "label": "PrtSc",
+ "x": 18.5,
+ "y": 0
+ },
+ {
+ "label": "Del",
+ "x": 15.5,
+ "y": 1
+ },
+ {
+ "label": "End",
+ "x": 16.5,
+ "y": 1
+ },
+ {
+ "label": "PgDn",
+ "x": 17.5,
+ "y": 1
+ },
+ {
+ "label": "Scroll Lock",
+ "x": 18.5,
+ "y": 1
+ },
+ {
+ "label": "~",
+ "x": 0,
+ "y": 2
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 2
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 2
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 2
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 2
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 2
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 2
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 2
+ },
+ {
+ "label": "",
+ "x": 8,
+ "y": 2
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 2
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 2
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 2
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 2
+ },
+ {
+ "label": "Backspace",
+ "x": 13,
+ "y": 2,
+ "w": 2
+ },
+ {
+ "label": "Num Lock",
+ "x": 15.5,
+ "y": 2
+ },
+ {
+ "label": "/",
+ "x": 16.5,
+ "y": 2
+ },
+ {
+ "x": 17.5,
+ "y": 2
+ },
+ {
+ "label": "Pause",
+ "x": 18.5,
+ "y": 2
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 3,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 3
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 3
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 3
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 3
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 3
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 3
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 3
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 3
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 3
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 3
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 3
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 3
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 3,
+ "w": 1.5
+ },
+ {
+ "label": "7",
+ "x": 15.5,
+ "y": 3
+ },
+ {
+ "label": "8",
+ "x": 16.5,
+ "y": 3
+ },
+ {
+ "label": "9",
+ "x": 17.5,
+ "y": 3
+ },
+ {
+ "label": "-",
+ "x": 18.5,
+ "y": 3
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 4,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 4
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 4
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 4
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 4
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 4
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 4
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 4
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 4
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 4
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 4
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 4
+ },
+ {
+ "label": "Enter",
+ "x": 12.75,
+ "y": 4,
+ "w": 2.25
+ },
+ {
+ "label": "4",
+ "x": 15.5,
+ "y": 4
+ },
+ {
+ "label": "5",
+ "x": 16.5,
+ "y": 4
+ },
+ {
+ "label": "6",
+ "x": 17.5,
+ "y": 4
+ },
+ {
+ "label": "+",
+ "x": 18.5,
+ "y": 4
+ },
+ {
+ "label": "Shift",
+ "x": 0,
+ "y": 5,
+ "w": 1.25
+ },
+ {
+ "label": "ISO1",
+ "x": 1.25,
+ "y": 5
+ },
+ {
+ "label": "Z",
+ "x": 2.25,
+ "y": 5
+ },
+ {
+ "label": "X",
+ "x": 3.25,
+ "y": 5
+ },
+ {
+ "label": "C",
+ "x": 4.25,
+ "y": 5
+ },
+ {
+ "label": "V",
+ "x": 5.25,
+ "y": 5
+ },
+ {
+ "label": "B",
+ "x": 6.25,
+ "y": 5
+ },
+ {
+ "label": "N",
+ "x": 7.25,
+ "y": 5
+ },
+ {
+ "label": "M",
+ "x": 8.25,
+ "y": 5
+ },
+ {
+ "label": "<",
+ "x": 9.25,
+ "y": 5
+ },
+ {
+ "label": ">",
+ "x": 10.25,
+ "y": 5
+ },
+ {
+ "label": "?",
+ "x": 11.25,
+ "y": 5
+ },
+ {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 5,
+ "w": 1.75
+ },
+ {
+ "label": "up",
+ "x": 14.25,
+ "y": 5.25
+ },
+ {
+ "label": "1",
+ "x": 15.5,
+ "y": 5
+ },
+ {
+ "label": "2",
+ "x": 16.5,
+ "y": 5
+ },
+ {
+ "label": "3",
+ "x": 17.5,
+ "y": 5
+ },
+ {
+ "label": "Enter",
+ "x": 18.5,
+ "y": 5,
+ "h": 2
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 6,
+ "w": 1.25
+ },
+ {
+ "label": "OS",
+ "x": 1.25,
+ "y": 6,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 6,
+ "w": 1.25
+ },
+ {
+ "x": 3.75,
+ "y": 6,
+ "w": 6.25
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 6,
+ "w": 1.5
+ },
+ {
+ "label": "Ctrl",
+ "x": 11.5,
+ "y": 6,
+ "w": 1.5
+ },
+ {
+ "label": "left",
+ "x": 13.25,
+ "y": 6.25
+ },
+ {
+ "label": "down",
+ "x": 14.25,
+ "y": 6.25
+ },
+ {
+ "label": "right",
+ "x": 15.25,
+ "y": 6.25
+ },
+ {
+ "label": "0",
+ "x": 16.5,
+ "y": 6
+ },
+ {
+ "label": ".",
+ "x": 17.5,
+ "y": 6
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/ash1800/keymaps/default/keymap.c b/keyboards/ash1800/keymaps/default/keymap.c
new file mode 100644
index 0000000000..f1b52b14d6
--- /dev/null
+++ b/keyboards/ash1800/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2019 angelbirth
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_PGUP, KC_PSCR,
+ KC_DEL, KC_END, KC_PGDN, KC_SLCK,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, MO(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_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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_all(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_MUTE, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, _______, _______,
+ _______, _______, _______, KC_MPLY, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______
+ ),
+};
diff --git a/keyboards/ash1800/keymaps/default/readme.md b/keyboards/ash1800/keymaps/default/readme.md
new file mode 100644
index 0000000000..de61a69713
--- /dev/null
+++ b/keyboards/ash1800/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for ash1800
diff --git a/keyboards/ash1800/readme.md b/keyboards/ash1800/readme.md
new file mode 100644
index 0000000000..93257e755e
--- /dev/null
+++ b/keyboards/ash1800/readme.md
@@ -0,0 +1,15 @@
+# ash1800
+
+![ash1800](https://i.imgur.com/YP173rP.jpg)
+
+ASH-1800 is an attempt to make a cheap g80/g81 clone.
+
+* Keyboard Maintainer: [angelbirth](https://github.com/angelbirth)
+* Hardware Supported: ASH-1800, ATMega32u4
+* Hardware Availability: private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ash1800: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/ash1800/rules.mk b/keyboards/ash1800/rules.mk
new file mode 100644
index 0000000000..b4f1dacac8
--- /dev/null
+++ b/keyboards/ash1800/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 = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # 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
+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/ashpil/modelm_usbc/README.md b/keyboards/ashpil/modelm_usbc/README.md
new file mode 100644
index 0000000000..261d97ab49
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/README.md
@@ -0,0 +1,14 @@
+# USB C Model M
+
+![modelm_usbc](https://raw.githubusercontent.com/ashpil/Model-M-Type-C-Controller/master/images/render.png)
+
+This is a configuration of QMK intended to be used with the [USB C Model M alt controller](https://github.com/ashpil/Model-M-Type-C-Controller "USB C Model M alt controller"). Many thanks to iw0rm3r for working on a similar project and providing the foundation for this!
+
+* Keyboard Maintainer: [ashpil](https://github.com/ashpil)
+* Hardware Supported: [USB C Model M alt controller](https://github.com/ashpil/Model-M-Type-C-Controller)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ashpil/modelm_usbc: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/ashpil/modelm_usbc/config.h b/keyboards/ashpil/modelm_usbc/config.h
new file mode 100644
index 0000000000..df4ed32277
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/config.h
@@ -0,0 +1,128 @@
+/*
+Copyright 2019 ashpil
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 ashpil
+#define PRODUCT IBM Model M 101/102
+#define DESCRIPTION Controlled by AVR chip
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#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 { C7, C6, C5, C4, C3, C2, C1, C0 }
+#define MATRIX_COL_PINS { E6, E7, F0, F1, F2, F3, F4, F5, F6, F7, A0, A1, A2, A3, A4, A5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed (5 is default) */
+#define DEBOUNCE 5
+
+
+/*
+ * 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
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 2 \ No newline at end of file
diff --git a/keyboards/ashpil/modelm_usbc/info.json b/keyboards/ashpil/modelm_usbc/info.json
new file mode 100644
index 0000000000..e24a27f200
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "IBM Model M 101 ANSI/102 ISO",
+ "url": "https://github.com/ashpil/qmk_firmware/tree/master/keyboards/ashpil/modelm_usbc",
+ "maintainer": "ashpil",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_fullsize_iso_wkl": {
+ "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":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.5}, {"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":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"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":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.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":"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}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
+ },
+ "LAYOUT_fullsize_ansi_wkl": {
+ "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":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "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":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.5}, {"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":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.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":"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}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h b/keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h
new file mode 100644
index 0000000000..d5cef677e8
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/keymaps/ashpil/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2019 ashpil
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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
+
+
+/* Add combos */
+#define COMBO_COUNT 1
+#define COMBO_TERM 200
diff --git a/keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c b/keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c
new file mode 100644
index 0000000000..35b45e9ccf
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/keymaps/ashpil/keymap.c
@@ -0,0 +1,47 @@
+/* Copyright 2019 ashpil
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_fullsize_ansi_wkl( /* Base layer */
+ 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_MEDIA_PLAY_PAUSE, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, 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_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_AUDIO_VOL_DOWN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+};
+
+enum combo_events {
+ CTRL_PAUS_RESET,
+};
+
+const uint16_t PROGMEM reset_combo[] = {KC_LCTL, KC_PAUS, COMBO_END};
+
+combo_t key_combos[COMBO_COUNT] = {
+ [CTRL_PAUS_RESET] = COMBO_ACTION(reset_combo),
+};
+
+void process_combo_event(uint8_t combo_index, bool pressed) {
+ switch(combo_index) {
+ case CTRL_PAUS_RESET:
+ if (pressed) {
+ reset_keyboard();
+ }
+ break;
+ }
+} \ No newline at end of file
diff --git a/keyboards/ashpil/modelm_usbc/keymaps/ashpil/rules.mk b/keyboards/ashpil/modelm_usbc/keymaps/ashpil/rules.mk
new file mode 100644
index 0000000000..23b7c173b8
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/keymaps/ashpil/rules.mk
@@ -0,0 +1 @@
+COMBO_ENABLE = yes # Reset combo \ No newline at end of file
diff --git a/keyboards/ashpil/modelm_usbc/keymaps/default/keymap.c b/keyboards/ashpil/modelm_usbc/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5bf60cf558
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2019 ashpil
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_fullsize_ansi_wkl( /* Base layer */
+ 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_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+};
diff --git a/keyboards/ashpil/modelm_usbc/modelm_usbc.c b/keyboards/ashpil/modelm_usbc/modelm_usbc.c
new file mode 100644
index 0000000000..e505c72233
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/modelm_usbc.c
@@ -0,0 +1,35 @@
+/* Copyright 2019 ashpil
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "modelm_usbc.h"
+
+void keyboard_pre_init_kb(void) {
+ /* Setting status LEDs pins to output and +5V (off) */
+ setPinOutput(D5);
+ setPinOutput(D6);
+ setPinOutput(D7);
+ writePinHigh(D5);
+ writePinHigh(D6);
+ writePinHigh(D7);
+}
+
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(D5, !led_state.num_lock);
+ writePin(D6, !led_state.caps_lock);
+ writePin(D7, !led_state.scroll_lock);
+ }
+ return true;
+}
diff --git a/keyboards/ashpil/modelm_usbc/modelm_usbc.h b/keyboards/ashpil/modelm_usbc/modelm_usbc.h
new file mode 100644
index 0000000000..da50b865c7
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/modelm_usbc.h
@@ -0,0 +1,64 @@
+/* Copyright 2019 ashpil
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "names" for physical keys of the keyboard
+ * and defines their position on the board.
+ * The second section defines position of the keys on the switch matrix
+ * (where COLUMNS and ROWS crosses). */
+
+#define LAYOUT_fullsize_ansi_wkl( \
+ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \
+ \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, K4U, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3O, K3P, K3Q, K3R, K3S, K3T, K3U, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2O, K2P, K2Q, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, K1P, K1Q, K1R, \
+ K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J \
+) \
+{ \
+ { KC_NO, KC_NO, K5A, KC_NO, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, K0I, K0J, K1N, K0B }, \
+ { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, K2O, K2P, K2Q, KC_NO, KC_NO }, \
+ { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \
+ { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \
+ { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, K3R, K3S, K3T, K3U, K5O }, \
+ { KC_NO, KC_NO, K2B, K2C, K2D, K2E, K3N, K2H, K2I, K2J, K2K, K1O, K1P, K1Q, K1R, KC_NO }, \
+ { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, KC_NO, K4R, K4S, K4T, K5P, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, K4U, K0F, K0D } \
+}
+
+#define LAYOUT_fullsize_iso_wkl( \
+ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \
+ \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, K4U, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, K3Q, K3R, K3S, K3T, K3U, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, K2O, K2P, K2Q, \
+ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1O, K1P, K1Q, K1R, \
+ K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, K0I, K0J \
+) \
+{ \
+ { KC_NO, KC_NO, K5A, K1B, K5E, K2F, K5F, K2G, K5G, KC_NO, K2L, KC_NO, K0I, K0J, K1N, K0B }, \
+ { KC_NO, K1A, K3A, K2A, K5D, K3F, K4N, K3G, K3M, K5H, K3L, K2O, K2P, K2Q, KC_NO, KC_NO }, \
+ { K0A, KC_NO, K4A, K5B, K5C, K4F, K5J, K4G, K4M, K5I, K4L, K3O, K4O, K4Q, K4P, KC_NO }, \
+ { KC_NO, KC_NO, K4B, K4C, K4D, K4E, K5K, K4H, K4I, K4J, K4K, K5L, K5M, K3Q, K3P, K5N }, \
+ { KC_NO, KC_NO, K3B, K3C, K3D, K3E, KC_NO, K3H, K3I, K3J, K3K, K3R, K3S, K3T, K3U, K5O }, \
+ { KC_NO, KC_NO, K2B, K2C, K2D, K2E, KC_NO, K2H, K2I, K2J, K2K, K1O, K1P, K1Q, K1R, KC_NO }, \
+ { K0E, K1M, K1C, K1D, K1E, K1F, K2N, K1I, K1J, K1K, K2M, K4R, K4S, K4T, K5P, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K1G, K0C, K1H, KC_NO, KC_NO, K1L, K0G, K0H, K4U, K0F, K0D } \
+}
diff --git a/keyboards/ashpil/modelm_usbc/rules.mk b/keyboards/ashpil/modelm_usbc/rules.mk
new file mode 100644
index 0000000000..2b2e83c65d
--- /dev/null
+++ b/keyboards/ashpil/modelm_usbc/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = at90usb1286
+
+# 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
+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/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c
index 52b0188506..4babed4c11 100644
--- a/keyboards/atreus62/keymaps/xyverz/keymap.c
+++ b/keyboards/atreus62/keymaps/xyverz/keymap.c
@@ -29,6 +29,7 @@ CHANGELOG:
0.5 - Converted keymap to LAYOUT standard.
0.6 - Swapped ESC and GRV in all layers.
0.7 - Brought code up to current standards.
+ 0.8 - Added MACLOCK macro.
TODO:
@@ -51,6 +52,7 @@ enum atreus52_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK, WOW, DESTINY, LOW
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define ADJUST MO(_ADJUST)
+#define MACLOCK LGUI(LCTL(KC_Q))
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -99,14 +101,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE,
KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______,
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
- _______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
+ _______, _______, KC_HOME, KC_END, _______, KC_DEL, MACLOCK, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
),
[_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,
KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS,
KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
- _______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
+ _______, _______, KC_HOME, KC_END, _______, KC_DEL, MACLOCK, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
),
[_ADJUST] = LAYOUT (
_______, _______, _______, KC_F13, KC_F14, KC_F15, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/bfake/bfake.c b/keyboards/bfake/bfake.c
index 2160706fea..f7d006576c 100644
--- a/keyboards/bfake/bfake.c
+++ b/keyboards/bfake/bfake.c
@@ -16,51 +16,34 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "bfake.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-#endif
__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+void matrix_scan_user(void) {}
void backlight_init_ports(void) {
- DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ setPinOutput(D0);
+ setPinOutput(D1);
+ setPinOutput(D4);
+ setPinOutput(D6);
+
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
}
void backlight_set(uint8_t level) {
if (level == 0) {
// Turn out the lights
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
} else {
// Turn on the lights
- PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinHigh(D0);
+ writePinHigh(D1);
+ writePinHigh(D4);
+ writePinHigh(D6);
}
}
diff --git a/keyboards/bfake/config.h b/keyboards/bfake/config.h
index 8a43aacd9b..0a8911b09a 100644
--- a/keyboards/bfake/config.h
+++ b/keyboards/bfake/config.h
@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER NotActuallyWinkeyless
#define PRODUCT b.fake
diff --git a/keyboards/bfake/i2c.c b/keyboards/bfake/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/bfake/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
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 b5b3b852cb..5963c9810a 100644
--- a/keyboards/bfake/rules.mk
+++ b/keyboards/bfake/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
@@ -34,10 +19,10 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
diff --git a/keyboards/bfake/usbconfig.h b/keyboards/bfake/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/bfake/usbconfig.h
+++ b/keyboards/bfake/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
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/boston_meetup/2019/rules.mk b/keyboards/boston_meetup/2019/rules.mk
index 7c03a025ee..73f9008f01 100644
--- a/keyboards/boston_meetup/2019/rules.mk
+++ b/keyboards/boston_meetup/2019/rules.mk
@@ -1,7 +1,5 @@
-# project specific files
-
-# Cortex version
-MCU = STM32F303
+# MCU name
+MCU = STM32F303
# Build Options
# comment out to disable the options.
diff --git a/keyboards/c39/keymaps/drashna/config.h b/keyboards/c39/keymaps/drashna/config.h
index 361f68a78e..5d53fe54bb 100755..100644
--- a/keyboards/c39/keymaps/drashna/config.h
+++ b/keyboards/c39/keymaps/drashna/config.h
@@ -2,6 +2,11 @@
// place overrides here
#undef MATRIX_COL_PINS
-#define MATRIX_COL_PINS { A3, A2, A1, A0, B13, B14, B15, B9, B3, B2, B4, A10, A9 }
+#define MATRIX_COL_PINS \
+ { A3, A2, A1, A0, B13, B14, B15, B9, B3, B2, B4, A10, A9 }
#undef MATRIX_ROW_PINS
-#define MATRIX_ROW_PINS { B7, B1, B0 }
+#define MATRIX_ROW_PINS \
+ { B7, B1, B0 }
+
+#define RGB_DI_PIN B10
+#define RGBLED_NUM 15
diff --git a/keyboards/c39/keymaps/drashna/keymap.c b/keyboards/c39/keymaps/drashna/keymap.c
index 9de75190d0..882938138f 100755
--- a/keyboards/c39/keymaps/drashna/keymap.c
+++ b/keyboards/c39/keymaps/drashna/keymap.c
@@ -1,45 +1,97 @@
-#include QMK_KEYBOARD_H
+#include "drashna.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 _FN1 1
-
-// Defines for task manager and such
-#define CALTDEL LCTL(LALT(KC_DEL))
-#define TSKMGR LCTL(LSFT(KC_ESC))
+/*
+ * The `LAYOUT_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
+// clang-format off
+#define LAYOUT_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_ESC, K01, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, KC_DEL, \
+ ALT_T(KC_TAB), K11, K12, K13, K14, K15, KC_BSPC, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
+ KC_MLSF, CTL_T(K21), K22, K23, K24, LT(_LOWER,K25), KC_SPC, LT(_RAISE,K26), K27, K28, K29, RCTL_T(K2A), KC_ENT \
+ )
+#define LAYOUT_base_wrapper(...) LAYOUT_base(__VA_ARGS__)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Qwerty
- * ,----------------------------------------------------------------------------. ,-------------.
- * | Q | W | E | R | T | Bksp | Y | U | I | O | P | | M1 | M2 |
- * |------+------+------+------+------+------+------+------+------+------+------+ |------+------|
- * | A | S | D | F | G | Enter| H | J | K | L | ; | | M3 | M4 |
- * |------+------+------+------+------+------+------+------+------+------+------+ |------+------|
- * | Z | X | C | V | B | FN1 | N | M | , | . | / | | M5 | M6 |
- * `----------------------------------------------------------------------------' `-------------'
- */
-[_QWERTY] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_1, KC_2,
- KC_A, KC_S, KC_D, KC_F, KC_G, MT(MOD_LSFT, KC_ENT), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_3, KC_4,
- KC_Z, KC_X, KC_C, KC_V, KC_B, LT(_FN1, KC_SPC), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_5, KC_6
-),
-
-/* FN1
- * ,----------------------------------------------------------------------------. ,-------------.
- * | 1 | 2 | 3 | 4 | 5 | Bksp | 6 | 7 | 8 | 9 | 0 | | M1 | M2 |
- * |------+------+------+------+------+------+------+------+------+------+------+ |------+------|
- * | 4 | 5 | 6 | + | | Enter| | | | | | | M3 | M4 |
- * |------+------+------+------+------+------+------+------+------+------+------+ |------+------|
- * | 7 | 8 | 9 | 0 | | FN1 | | | | | | | M5 | M6 |
- * `----------------------------------------------------------------------------' `-------------'
- */
-[_FN1] = LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_BSPC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_1, KC_2,
- KC_4, KC_5, KC_6, KC_PLUS, _______, KC_ENT, _______, _______, _______, _______, _______, KC_3, KC_4,
- KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______, _______, _______, _______, KC_5, KC_6
-),
+ [_QWERTY] = LAYOUT_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
+ ),
+
+ [_COLEMAK] = LAYOUT_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
+ ),
+
+ [_DVORAK] = LAYOUT_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
+ ),
+
+ [_WORKMAN] = LAYOUT_base_wrapper(
+ _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
+ _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
+ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
+ ),
+
+ [_NORMAN] = LAYOUT_base_wrapper(
+ _________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
+ _________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
+ _________________NORMAN_L3_________________, _________________NORMAN_R3_________________
+ ),
+
+ [_MALTRON] = LAYOUT_base_wrapper(
+ _________________MALTRON_L1________________, _________________MALTRON_R1________________,
+ _________________MALTRON_L2________________, _________________MALTRON_R2________________,
+ _________________MALTRON_L3________________, _________________MALTRON_R3________________
+ ),
+
+ [_EUCALYN] = LAYOUT_base_wrapper(
+ _________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
+ _________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
+ _________________EUCALYN_L3________________, _________________EUCALYN_R3________________
+ ),
+
+ [_CARPLAX] = LAYOUT_base_wrapper(
+ _____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________,
+ _____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________,
+ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
+ ),
+
+ [_MODS] = LAYOUT_wrapper(
+ _______, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______,
+ KC_LSFT, ___________________BLANK___________________, _______, ___________________BLANK___________________, _______
+ ),
+
+ [_LOWER] = LAYOUT_wrapper(
+ KC_TILD, _________________LOWER_L1__________________, _______, _________________LOWER_R1__________________, KC_BSPC,
+ KC_DEL, _________________LOWER_L2__________________, _______, _________________LOWER_R2__________________, KC_PIPE,
+ _______, _________________LOWER_L3__________________, _______, _________________LOWER_R3__________________, _______
+ ),
+
+ [_RAISE] = LAYOUT_wrapper(
+ KC_GRV, _________________RAISE_L1__________________, _______, _________________RAISE_R1__________________, KC_BSPC,
+ KC_DEL, _________________RAISE_L2__________________, _______, _________________RAISE_R2__________________, KC_BSLS,
+ _______, _________________RAISE_L3__________________, _______, _________________RAISE_R3__________________, _______
+ ),
+
+ [_ADJUST] = LAYOUT_wrapper(
+ KC_MAKE, _________________ADJUST_L1_________________, KC_NUKE, _________________ADJUST_R1_________________, KC_RST,
+ VRSN, _________________ADJUST_L2_________________, MG_NKRO, _________________ADJUST_R2_________________, EEP_RST,
+ TG_MODS, _________________ADJUST_L3_________________, KC_RGB_T,_________________ADJUST_R3_________________, RGB_IDL
+ )
};
+// clang-format on
diff --git a/keyboards/c39/keymaps/drashna/rules.mk b/keyboards/c39/keymaps/drashna/rules.mk
index ae0cc9efee..d216f6abe6 100644
--- a/keyboards/c39/keymaps/drashna/rules.mk
+++ b/keyboards/c39/keymaps/drashna/rules.mk
@@ -15,4 +15,6 @@ MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = yes # Audio output on port C6
-RGBLIGHT_ENABLE = no # RGB Enable / Disable
+RGBLIGHT_ENABLE = yes # RGB Enable / Disable
+
+RGBLIGHT_STARTUP_ANIMATION = yes
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/cannonkeys/instant60/keymaps/default/keymap.c b/keyboards/cannonkeys/instant60/keymaps/default/keymap.c
index 303f307301..f9c7995ae0 100644
--- a/keyboards/cannonkeys/instant60/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/instant60/keymaps/default/keymap.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/cannonkeys/instant60/rules.mk b/keyboards/cannonkeys/instant60/rules.mk
index c0a62e9433..1ce6fa3b26 100644
--- a/keyboards/cannonkeys/instant60/rules.mk
+++ b/keyboards/cannonkeys/instant60/rules.mk
@@ -44,7 +44,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
diff --git a/keyboards/cannonkeys/ortho48/keymaps/default/keymap.c b/keyboards/cannonkeys/ortho48/keymaps/default/keymap.c
index 2c3bc80c5d..ba26b9adb2 100644
--- a/keyboards/cannonkeys/ortho48/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/ortho48/keymaps/default/keymap.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/cannonkeys/ortho60/keymaps/default/keymap.c b/keyboards/cannonkeys/ortho60/keymaps/default/keymap.c
index 56caa4dc84..8ae3da3d72 100644
--- a/keyboards/cannonkeys/ortho60/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/ortho60/keymaps/default/keymap.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/cannonkeys/practice60/keymaps/default/keymap.c b/keyboards/cannonkeys/practice60/keymaps/default/keymap.c
index 66ebe0646d..b917cf3eeb 100644
--- a/keyboards/cannonkeys/practice60/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/practice60/keymaps/default/keymap.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/cannonkeys/practice65/keymaps/default/keymap.c b/keyboards/cannonkeys/practice65/keymaps/default/keymap.c
index fdc06e3985..9c0641fe3f 100644
--- a/keyboards/cannonkeys/practice65/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/practice65/keymaps/default/keymap.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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..0dcaa73183
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/boy_314/rules.mk
@@ -0,0 +1,4 @@
+# rules.mk overrides to enable VIA
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/christmas_tree/keymaps/default/keymap.c b/keyboards/christmas_tree/keymaps/default/keymap.c
index 6621201996..6931b91a61 100644
--- a/keyboards/christmas_tree/keymaps/default/keymap.c
+++ b/keyboards/christmas_tree/keymaps/default/keymap.c
@@ -16,7 +16,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
enum layers {
_BASE,
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/keymap.c b/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
index 383b3355de..8c65406ddb 100755
--- a/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
+++ b/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
@@ -18,7 +18,6 @@ enum custom_keycodes {
CKEYS_ABOUT,
};
-extern keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BASE (numpad)
diff --git a/keyboards/ckeys/obelus/keymaps/default/keymap.c b/keyboards/ckeys/obelus/keymaps/default/keymap.c
index f71ac56276..870fdb10d3 100644
--- a/keyboards/ckeys/obelus/keymaps/default/keymap.c
+++ b/keyboards/ckeys/obelus/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* LAYERS
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/thedora/rules.mk b/keyboards/ckeys/thedora/rules.mk
index 11adbdacd4..92665ffb6d 100755
--- a/keyboards/ckeys/thedora/rules.mk
+++ b/keyboards/ckeys/thedora/rules.mk
@@ -1,3 +1,4 @@
+# MCU name
MCU = STM32F303
# Build Options
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..9c5764b920
--- /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 = 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 = 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 \ No newline at end of file
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/claw44/keymaps/default/keymap.c b/keyboards/claw44/keymaps/default/keymap.c
index c346571255..088087c773 100644
--- a/keyboards/claw44/keymaps/default/keymap.c
+++ b/keyboards/claw44/keymaps/default/keymap.c
@@ -7,7 +7,6 @@
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
extern uint8_t is_master;
diff --git a/keyboards/clueboard/60/rules.mk b/keyboards/clueboard/60/rules.mk
index a0927025bb..a9151b87d2 100644
--- a/keyboards/clueboard/60/rules.mk
+++ b/keyboards/clueboard/60/rules.mk
@@ -1,41 +1,5 @@
-# project specific files
-SRC = led.c
-LAYOUTS += 60_ansi 60_ansi_split_bs_rshift 60_iso
-
-## 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.*/
-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 = STM32F303
# Build Options
# comment out to disable the options.
@@ -48,3 +12,7 @@ CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
AUDIO_ENABLE = yes
+
+# project specific files
+SRC = led.c
+LAYOUTS += 60_ansi 60_ansi_split_bs_rshift 60_iso
diff --git a/keyboards/clueboard/66/rev4/rules.mk b/keyboards/clueboard/66/rev4/rules.mk
index 4d20ff2e96..ef7989aa0b 100644
--- a/keyboards/clueboard/66/rev4/rules.mk
+++ b/keyboards/clueboard/66/rev4/rules.mk
@@ -1,19 +1,5 @@
-LAYOUTS = 66_ansi 66_iso
-
-## chip/board settings
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F3xx
-MCU_LDSCRIPT = STM32F303xC
-MCU_STARTUP = stm32f3xx
-BOARD = GENERIC_STM32_F303XC
-MCU = cortex-m4
-ARMV = 7
-USE_FPU = yes
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F303
# Build Options
# comment out to disable the options.
@@ -31,3 +17,5 @@ MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = yes
+
+LAYOUTS = 66_ansi 66_iso
diff --git a/keyboards/clueboard/66_hotswap/gen1/rules.mk b/keyboards/clueboard/66_hotswap/gen1/rules.mk
index 326912a34b..50f140defa 100644
--- a/keyboards/clueboard/66_hotswap/gen1/rules.mk
+++ b/keyboards/clueboard/66_hotswap/gen1/rules.mk
@@ -1,43 +1,5 @@
-# project specific files
-SRC = led.c
-LAYOUTS += 66_ansi
-
-## chip/board settings
-# - the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F3xx
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F303xC
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f3xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F303XC
-
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F303
# LED Configuration
LED_MATRIX_ENABLE = IS31FL3731
@@ -57,3 +19,7 @@ NKRO_ENABLE = yes # USB Nkey Rollover
#CUSTOM_MATRIX = yes # Custom matrix file
AUDIO_ENABLE = yes
# SERIAL_LINK_ENABLE = yes
+
+# project specific files
+SRC = led.c
+LAYOUTS += 66_ansi
diff --git a/keyboards/clueboard/california/rules.mk b/keyboards/clueboard/california/rules.mk
index e9362ffb73..e96afd8135 100644
--- a/keyboards/clueboard/california/rules.mk
+++ b/keyboards/clueboard/california/rules.mk
@@ -1,3 +1,4 @@
+# MCU name
MCU = STM32F303
## Features
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/contra/keymaps/alper/config.h b/keyboards/contra/keymaps/alper/config.h
new file mode 100644
index 0000000000..d61ee2938e
--- /dev/null
+++ b/keyboards/contra/keymaps/alper/config.h
@@ -0,0 +1,38 @@
+#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
+
+#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/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/keymaps/default/keymap.c b/keyboards/contra/keymaps/default/keymap.c
index c63bcc0945..31e90ed267 100644
--- a/keyboards/contra/keymaps/default/keymap.c
+++ b/keyboards/contra/keymaps/default/keymap.c
@@ -16,7 +16,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
enum planck_layers {
_QWERTY,
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/xt_usb/config.h b/keyboards/converter/xt_usb/config.h
index ecebc123fa..fe79953873 100644
--- a/keyboards/converter/xt_usb/config.h
+++ b/keyboards/converter/xt_usb/config.h
@@ -17,6 +17,8 @@ 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 0x6512
#define DEVICE_VER 0x0001
diff --git a/keyboards/converter/xt_usb/matrix.c b/keyboards/converter/xt_usb/matrix.c
index e2d7117b13..d48f1a887f 100644
--- a/keyboards/converter/xt_usb/matrix.c
+++ b/keyboards/converter/xt_usb/matrix.c
@@ -99,25 +99,25 @@ static uint8_t move_e0code(uint8_t code) {
uint8_t matrix_scan(void)
{
static enum {
- INIT,
- E0,
+ XT_STATE_INIT,
+ XT_STATE_E0,
// Pause: E1 1D 45, E1 9D C5
- E1,
- E1_1D,
- E1_9D,
- } state = INIT;
+ XT_STATE_E1,
+ XT_STATE_E1_1D,
+ XT_STATE_E1_9D,
+ } state = XT_STATE_INIT;
uint8_t code = xt_host_recv();
if (!code) return 0;
xprintf("%02X ", code);
switch (state) {
- case INIT:
+ case XT_STATE_INIT:
switch (code) {
case 0xE0:
- state = E0;
+ state = XT_STATE_E0;
break;
case 0xE1:
- state = E1;
+ state = XT_STATE_E1;
break;
default:
if (code < 0x80)
@@ -127,59 +127,59 @@ uint8_t matrix_scan(void)
break;
}
break;
- case E0:
+ case XT_STATE_E0:
switch (code) {
case 0x2A:
case 0xAA:
case 0x36:
case 0xB6:
//ignore fake shift
- state = INIT;
+ state = XT_STATE_INIT;
break;
default:
if (code < 0x80)
matrix_make(move_e0code(code));
else
matrix_break(move_e0code(code & 0x7F));
- state = INIT;
+ state = XT_STATE_INIT;
break;
}
break;
- case E1:
+ case XT_STATE_E1:
switch (code) {
case 0x1D:
- state = E1_1D;
+ state = XT_STATE_E1_1D;
break;
case 0x9D:
- state = E1_9D;
+ state = XT_STATE_E1_9D;
break;
default:
- state = INIT;
+ state = XT_STATE_INIT;
break;
}
break;
- case E1_1D:
+ case XT_STATE_E1_1D:
switch (code) {
case 0x45:
matrix_make(0x55);
break;
default:
- state = INIT;
+ state = XT_STATE_INIT;
break;
}
break;
- case E1_9D:
+ case XT_STATE_E1_9D:
switch (code) {
case 0x45:
matrix_break(0x55);
break;
default:
- state = INIT;
+ state = XT_STATE_INIT;
break;
}
break;
default:
- state = INIT;
+ state = XT_STATE_INIT;
}
matrix_scan_quantum();
return 1;
diff --git a/keyboards/coseyfannitutti/discipad/config.h b/keyboards/coseyfannitutti/discipad/config.h
index ffa06ee25c..7fe0915824 100644
--- a/keyboards/coseyfannitutti/discipad/config.h
+++ b/keyboards/coseyfannitutti/discipad/config.h
@@ -50,6 +50,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
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/discipad/usbconfig.h b/keyboards/coseyfannitutti/discipad/usbconfig.h
index 505f0e5c84..510658b447 100644
--- a/keyboards/coseyfannitutti/discipad/usbconfig.h
+++ b/keyboards/coseyfannitutti/discipad/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x01, 0x00
+#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'
diff --git a/keyboards/coseyfannitutti/discipline/config.h b/keyboards/coseyfannitutti/discipline/config.h
index b3386f94d8..46dd49c51f 100644
--- a/keyboards/coseyfannitutti/discipline/config.h
+++ b/keyboards/coseyfannitutti/discipline/config.h
@@ -48,6 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
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/discipline/usbconfig.h b/keyboards/coseyfannitutti/discipline/usbconfig.h
index f20ad2f9c7..da3ed46079 100644
--- a/keyboards/coseyfannitutti/discipline/usbconfig.h
+++ b/keyboards/coseyfannitutti/discipline/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x01, 0x00
+#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'
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/default/keymap.c b/keyboards/crkbd/keymaps/default/keymap.c
index 02f7689570..446e3281e4 100644
--- a/keyboards/crkbd/keymaps/default/keymap.c
+++ b/keyboards/crkbd/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/crkbd/keymaps/drashna/glcdfont.c b/keyboards/crkbd/keymaps/drashna/glcdfont.c
index 998b5c408a..2bfc3fac6d 100644
--- a/keyboards/crkbd/keymaps/drashna/glcdfont.c
+++ b/keyboards/crkbd/keymaps/drashna/glcdfont.c
@@ -1,17 +1,18 @@
#pragma once
#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/pgmspace.h>
+# include <avr/io.h>
+# include <avr/pgmspace.h>
#elif defined(ESP8266)
- #include <pgmspace.h>
+# include <pgmspace.h>
#else
- #define PROGMEM
+# define PROGMEM
#endif
// 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,
diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c
index cd84f0d919..9a1beeb74b 100644
--- a/keyboards/crkbd/keymaps/drashna/keymap.c
+++ b/keyboards/crkbd/keymaps/drashna/keymap.c
@@ -1,17 +1,17 @@
-#include QMK_KEYBOARD_H
#include "drashna.h"
-extern keymap_config_t keymap_config;
-extern uint8_t is_master;
+extern uint8_t is_master;
#ifdef RGBLIGHT_ENABLE
// Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
#endif
#ifdef OLED_DRIVER_ENABLE
-static uint32_t oled_timer = 0;
-static char keylog_str[6] = {};
-static uint16_t log_timer = 0;
+# 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
@@ -37,7 +37,14 @@ void add_keylog(uint16_t keycode);
enum crkbd_keycodes { RGBRST = NEW_SAFE_RANGE };
-// clang-format off
+/*
+ * The `LAYOUT_crkbd_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
+
#define LAYOUT_crkbd_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
@@ -155,7 +162,7 @@ void add_keylog(uint16_t keycode) {
keycode = 0;
}
- for (uint8_t i = 4; i > 0; --i) {
+ for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) {
keylog_str[i] = keylog_str[i - 1];
}
@@ -168,7 +175,7 @@ void add_keylog(uint16_t keycode) {
void update_log(void) {
if (timer_elapsed(log_timer) > 750) {
- //add_keylog(0);
+ // add_keylog(0);
}
}
@@ -179,7 +186,7 @@ void render_keylogger_status(void) {
void render_default_layer_state(void) {
oled_write_P(PSTR("Lyout"), false);
- switch (biton32(default_layer_state)) {
+ switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
oled_write_P(PSTR(" QRTY"), false);
break;
@@ -268,7 +275,7 @@ void render_status_secondary(void) {
/* Show Keyboard Layout */
render_default_layer_state();
render_layer_state();
- render_mod_status(get_mods()|get_oneshot_mods());
+ render_mod_status(get_mods() | get_oneshot_mods());
render_keylogger_status();
}
@@ -278,9 +285,11 @@ void oled_task_user(void) {
oled_off();
return;
}
-#ifndef SPLIT_KEYBOARD
- else { oled_on(); }
-#endif
+# ifndef SPLIT_KEYBOARD
+ else {
+ oled_on();
+ }
+# endif
update_log();
if (is_master) {
@@ -303,16 +312,12 @@ uint16_t get_tapping_term(uint16_t keycode) {
#ifdef RGB_MATRIX_ENABLE
-void suspend_power_down_keymap(void) {
- rgb_matrix_set_suspend_state(true);
-}
+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 suspend_wakeup_init_keymap(void) { rgb_matrix_set_suspend_state(false); }
void check_default_layer(uint8_t mode, uint8_t type) {
- switch (biton32(default_layer_state)) {
+ switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
rgb_matrix_layer_helper(HSV_CYAN, mode, rgb_matrix_config.speed, type);
break;
@@ -351,7 +356,7 @@ void rgb_matrix_indicators_user(void) {
rgb_matrix_config.enable
# endif
) {
- switch (biton32(layer_state)) {
+ switch (get_highest_layer(layer_state)) {
case _GAMEPAD:
rgb_matrix_layer_helper(HSV_ORANGE, 0, rgb_matrix_config.speed, LED_FLAG_UNDERGLOW);
break;
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/matrix.c b/keyboards/crkbd/rev1/matrix.c
index dd93506db1..9d86879d6c 100644
--- a/keyboards/crkbd/rev1/matrix.c
+++ b/keyboards/crkbd/rev1/matrix.c
@@ -133,9 +133,8 @@ void rx_led_off(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/crkbd/rev1/rules.mk b/keyboards/crkbd/rev1/rules.mk
index 3077863750..ab9bed09c0 100644
--- a/keyboards/crkbd/rev1/rules.mk
+++ b/keyboards/crkbd/rev1/rules.mk
@@ -1,9 +1,3 @@
-RGB_MATRIX_SPLIT_RIGHT = no # if no, order LEDs for left hand, if yes, order LEDs for right hand
-
-ifeq ($(strip $(RGB_MATRIX_SPLIT_RIGHT)), yes)
- OPT_DEFS += -DRGB_MATRIX_SPLIT_RIGHT
-endif
-
SRC += matrix.c \
split_util.c \
split_scomm.c
diff --git a/keyboards/crkbd/rev1/split_util.c b/keyboards/crkbd/rev1/split_util.c
index e1ff8b4379..35aa54d780 100644
--- a/keyboards/crkbd/rev1/split_util.c
+++ b/keyboards/crkbd/rev1/split_util.c
@@ -7,6 +7,11 @@
#include "split_util.h"
#include "matrix.h"
#include "keyboard.h"
+#include "wait.h"
+
+#ifdef EE_HANDS
+# include "eeconfig.h"
+#endif
#ifdef USE_MATRIX_I2C
# include "i2c.h"
@@ -14,19 +19,59 @@
# include "split_scomm.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 +92,9 @@ 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
-}
-
+// this code runs before the usb and keyboard is initialized
void split_keyboard_setup(void) {
- setup_handedness();
+ isLeftHand = is_keyboard_left();
if (has_usb()) {
keyboard_master_setup();
@@ -63,8 +103,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/cutie_club/wraith/info.json b/keyboards/cutie_club/wraith/info.json
index c75f925d3f..51ca82677f 100644
--- a/keyboards/cutie_club/wraith/info.json
+++ b/keyboards/cutie_club/wraith/info.json
@@ -1,15 +1,180 @@
{
- "keyboard_name": "wraith",
- "url": "",
- "maintainer": "amberstarlight",
- "width": 16,
- "height": 6,
- "layouts": {
- "LAYOUT_ansi": {
- "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":"Prt Sc", "x":14, "y":0}, {"label":"Fn", "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":"Insert", "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":"Delete", "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":"Pg Up", "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":"Pg Dn", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":2.25, "y":5, "w":1.5}, {"x":3.75, "y":5, "w":7}, {"label":"Alt", "x":10.75, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
- },
- "LAYOUT_iso": {
- "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":"Prt Sc", "x":14, "y":0}, {"label":"Fn", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"\"", "x":2, "y":1}, {"label":"\u00a3", "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":"Insert", "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":"Enter", "x":13.75, "y":2, "w":1.25, "h":2}, {"label":"Delete", "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":"~", "x":12.75, "y":3}, {"label":"Pg Up", "x":15, "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":"Pg Dn", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":2.25, "y":5, "w":1.5}, {"x":3.75, "y":5, "w":7}, {"label":"Alt", "x":10.75, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
+ "keyboard_name": "wraith",
+ "url": "",
+ "maintainer": "amberstarlight",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "key_count": 80,
+ "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":"Prt Sc", "x":14, "y":0},
+ {"label":"Fn", "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":"Insert", "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":"Delete", "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":"Pg Up", "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":"Pg Dn", "x":15, "y":4},
+ {"label":"Ctrl", "x":0, "y":5, "w":1.5},
+ {"label":"Alt", "x":2.25, "y":5, "w":1.5},
+ {"x":3.75, "y":5, "w":7},
+ {"label":"Alt", "x":10.75, "y":5, "w":1.5},
+ {"label":"\u2190", "x":13, "y":5},
+ {"label":"\u2193", "x":14, "y":5},
+ {"label":"\u2192", "x":15, "y":5}
+ ]
+ },
+ "LAYOUT_iso": {
+ "key_count": 81,
+ "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":"Prt Sc", "x":14, "y":0},
+ {"label":"Fn", "x":15, "y":0},
+ {"label":"~", "x":0, "y":1},
+ {"label":"!", "x":1, "y":1},
+ {"label":"\"", "x":2, "y":1},
+ {"label":"\u00a3", "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":"Insert", "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":"Delete", "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":"~", "x":12.75, "y":3},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
+ {"label":"Pg Up", "x":15, "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":"Pg Dn", "x":15, "y":4},
+ {"label":"Ctrl", "x":0, "y":5, "w":1.5},
+ {"label":"Alt", "x":2.25, "y":5, "w":1.5},
+ {"x":3.75, "y":5, "w":7},
+ {"label":"Alt", "x":10.75, "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/daisy/keymaps/default/keymap.c b/keyboards/daisy/keymaps/default/keymap.c
index 9a520ba55d..adc3298d06 100644
--- a/keyboards/daisy/keymaps/default/keymap.c
+++ b/keyboards/daisy/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Layer shorthand
#define _BL 0
diff --git a/keyboards/deltasplit75/keymaps/default/keymap.c b/keyboards/deltasplit75/keymaps/default/keymap.c
index fc34d1cec9..c13b0627c0 100644
--- a/keyboards/deltasplit75/keymaps/default/keymap.c
+++ b/keyboards/deltasplit75/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/diverge3/keymaps/default/keymap.c b/keyboards/diverge3/keymaps/default/keymap.c
index 29e5576fcd..acf262696b 100644
--- a/keyboards/diverge3/keymaps/default/keymap.c
+++ b/keyboards/diverge3/keymaps/default/keymap.c
@@ -84,7 +84,6 @@ qk_tap_dance_action_t tap_dance_actions[] = {
};
// KEYMAP
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
diff --git a/keyboards/divergetm2/keymaps/default/keymap.c b/keyboards/divergetm2/keymaps/default/keymap.c
index 068705970c..cc098a91a5 100644
--- a/keyboards/divergetm2/keymaps/default/keymap.c
+++ b/keyboards/divergetm2/keymaps/default/keymap.c
@@ -17,7 +17,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -195,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/budget96.c b/keyboards/donutcables/budget96/budget96.c
index 2fc826f092..e9125a3e60 100644
--- a/keyboards/donutcables/budget96/budget96.c
+++ b/keyboards/donutcables/budget96/budget96.c
@@ -13,61 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "budget96.h"
-
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
+#include "budget96.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -76,25 +23,25 @@ void backlight_init_ports(void) {
setPinOutput(D4);
setPinOutput(D6);
- // turn RGB LEDs on
+ // turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
}
- void backlight_set(uint8_t level) {
- if (level == 0) {
- // turn RGB LEDs off
+void backlight_set(uint8_t level) {
+ if (level == 0) {
+ // turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
- // turn RGB LEDs on
+ } else {
+ // turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
- }
+ }
+}
diff --git a/keyboards/donutcables/budget96/config.h b/keyboards/donutcables/budget96/config.h
index b8772fc865..127e542f1c 100644
--- a/keyboards/donutcables/budget96/config.h
+++ b/keyboards/donutcables/budget96/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER DonutCables
#define PRODUCT budget96
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/donutcables/budget96/rules.mk b/keyboards/donutcables/budget96/rules.mk
index 4f9e0e412d..54328d248d 100644
--- a/keyboards/donutcables/budget96/rules.mk
+++ b/keyboards/donutcables/budget96/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
@@ -34,9 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-SRC = i2c_master.c
diff --git a/keyboards/donutcables/budget96/usbconfig.h b/keyboards/donutcables/budget96/usbconfig.h
index 223b69bb94..03ec48972e 100644
--- a/keyboards/donutcables/budget96/usbconfig.h
+++ b/keyboards/donutcables/budget96/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'D', 'o', 'n', 'u', 't', 'C', 'a', 'b', 'l', 'e', 's'
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..87eebbe197 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,16 +48,9 @@
#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
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
-#if defined(WEBUSB_ENABLE) || defined(RAW_ENABLE)
-#define WEBUSB_KEYCOUNT 61
-#define WEBUSB_LAYERCOUNT 2
+#if defined(RAW_ENABLE)
//VIA
#define DYNAMIC_KEYMAP_LAYER_COUNT 2
// EEPROM usage
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..6d2a738643 100644
--- a/keyboards/dp60/keymaps/via/rules.mk
+++ b/keyboards/dp60/keymaps/via/rules.mk
@@ -1,47 +1,39 @@
# 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 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 = 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 = 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 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
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/dz60/config.h b/keyboards/dz60/config.h
index d121d997b8..63794d0270 100644
--- a/keyboards/dz60/config.h
+++ b/keyboards/dz60/config.h
@@ -25,8 +25,9 @@
/* number of backlight levels */
#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_LEVELS 5
-
+#endif
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
@@ -35,12 +36,13 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
#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
-
+#define RGBLIGHT_SLEEP
+#endif
#endif \ No newline at end of file
diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h
index 29e57f8011..1d0c921935 100644
--- a/keyboards/dz60/dz60.h
+++ b/keyboards/dz60/dz60.h
@@ -278,6 +278,33 @@
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
}
+/* LAYOUT_60_abnt2
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â”2d │
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │ 3d │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
+ * │40 │41 │43 │46 │4a │4b │4d │4e │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+*/
+#define LAYOUT_60_abnt2( \
+ 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, \
+ 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, k3c, k3d, \
+ 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
+}
+
/* LAYOUT_60_iso_5x1u
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json
index b0df937977..49efeba066 100644
--- a/keyboards/dz60/info.json
+++ b/keyboards/dz60/info.json
@@ -88,6 +88,10 @@
"LAYOUT_olivierko": {
"key_count": 63,
"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":"Fn", "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":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"↑", "x":12, "y":3}, {"label":"Shift", "x":13, "y":3, "w":2}, {"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":"â†", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"→", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
- }
+ },
+ "LAYOUT_60_abnt2": {
+ "key_count": 63,
+ "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":"\u00a8", "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":"\u00c7", "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":"?", "x":12.25, "y":3}, {"label":"Shift", "x":13.25, "y":3, "w":1.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
}
}
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/calbatr0ss/keymap.c b/keyboards/dz60/keymaps/calbatr0ss/keymap.c
index 2852b4a207..89f4418b1d 100644
--- a/keyboards/dz60/keymaps/calbatr0ss/keymap.c
+++ b/keyboards/dz60/keymaps/calbatr0ss/keymap.c
@@ -11,16 +11,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │ CTRL │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
* │ SHIFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ SHIFT│LYR│
- * ├────┬───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
- * │CAPS│ OS │ ALT│ SPACE │ FN │ SPACE │ ALT│ OS │MENU│CTRL│
- * └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+ * ├────┬───┴┬──┴─┬─┴───┴───┴┬──┴─┬─┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │CAPS│ ALT│ OS │ SPACE │ FN │ SPACE │ OS │ ALT│MENU│CTRL│
+ * └────┴────┴────┴──────────┴────┴────────┴────┴────┴────┴────┘
*/
LAYOUT_60_calbatr0ss(
- 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(3),
- KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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(3),
+ KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, MO(2), KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_RCTL),
/* LAYER 1
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
@@ -31,54 +31,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* │ CTRL │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
* │ SHIFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ SHIFT│LYR│
- * ├────┬───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
- * │CAPS│ ALT│ OS │ SPACE │ FN │ SPACE │ OS │ ALT│MENU│CTRL│
- * └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+ * ├────┬───┴┬──┴─┬─┴───┴───┴┬──┴─┬─┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │CAPS│ OS │ ALT│ SPACE │ FN │ SPACE │ ALT│ OS │MENU│CTRL│
+ * └────┴────┴────┴──────────┴────┴────────┴────┴────┴────┴────┘
*/
LAYOUT_60_calbatr0ss(
- 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(3),
- KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, MO(2), KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_RCTL),
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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(3),
+ KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
/* LAYER 2
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
* │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
- * │ │ │ │ │ │ │ │PDN│ UP│PUP│ │ │ │ DEL │
+ * │ │RGB│ │ │ │ │ │PDN│ UP│PUP│ │ │ │ DEL │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │ │ │ │ │ │HOM│LFT│DWN│RHT│END│ │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
* │ │ │ │ │ │VDN│VUP│MUT│PRV│NXT│PLY│ │ │
- * ├────┬───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
- * │RSET│ │ │ │ │ │ │ │ │ │
- * └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+ * ├────┬───┴┬──┴─┬─┴───┴───┴┬──┴─┬─┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │RSET│ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴──────────┴────┴────────┴────┴────┴────┴────┘
*/
LAYOUT_60_calbatr0ss(
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_PGDN, KC_UP, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_UP, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS,
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
/* LAYER 3
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
- * │ │WIN│MAC│ │ │ │ │ │ │ │ │ │ │ │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * │ │ │WIN│ │ │ │ │ │ │ │ │ │ │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │
- * ├────┬───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤
- * │ │ │ │ │ │ │ │ │ │ │
- * └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+ * │ │ │ │ │ │ │ │MAC│ │ │ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴┬──┴─┬─┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴──────────┴────┴────────┴────┴────┴────┴────┘
*/
LAYOUT_60_calbatr0ss(
- KC_TRNS, DF(0), DF(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, DF(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), KC_TRNS, KC_TRNS, KC_TRNS, 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/dz60/keymaps/danbee/keymap.c b/keyboards/dz60/keymaps/danbee/keymap.c
new file mode 100644
index 0000000000..814be29298
--- /dev/null
+++ b/keyboards/dz60/keymaps/danbee/keymap.c
@@ -0,0 +1,67 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QW,
+ _L1,
+ _L2,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bcksp │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ Ent │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┠│
+ │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ │Shft│ ` │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
+ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ │ Fn │Alt │Cmd │ Space │Cmd │Hypr│Ctrl│Fn 2│
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘*/
+ [_QW] = LAYOUT_60_iso( /* Layer 0: Qwerty */
+ 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_BSLS, KC_ENT,
+ KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ MO(_L1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_HYPR, KC_RCTL, MO(_L2)
+ ),
+ /* 1: fn */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ │ § │Br-│Br+│ │ │BL-│BL+│Pre│Pau│Nxt│Mut│Vo-│Vo+│ Del │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Ins │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┠│
+ │ │ │ │ │ │ │ ◀ │ ▼ │ ▲ │ ▶ │ │ │ │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ │ │ │ │ │ │ │BL~│ │ │ │ │ │ │
+ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ │ │ │ │ │ │ │ │ │
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘*/
+ [_L1] = LAYOUT_60_iso( /* Layer 1: Functions */
+ KC_NUBS, KC_BRID, KC_BRIU, _______, _______, BL_DEC, BL_INC, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_INS,
+ _______, _______, _______, _______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ /* 2: fn 2 */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ │Pwr│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Eject │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┠│
+ │ Caps │ │ │ │ │ │Hom│PgD│PgU│End│ │ │ │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ │ │ │ │ │ │ │Rst│ │ │ │ │ │ │
+ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ │ │ │ │ │ │ │ │ │
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘*/
+ [_L2] = LAYOUT_60_iso( /* Layer 2: Functions */
+ 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_EJCT,
+ _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG, RGB_M_T, RGB_MOD, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, RGB_HUD, RGB_SAD, RGB_VAD, RGB_M_SW,RGB_M_G, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_K, _______, RESET , _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/dz60/keymaps/danbee/rules.mk b/keyboards/dz60/keymaps/danbee/rules.mk
new file mode 100644
index 0000000000..cfd86c52ba
--- /dev/null
+++ b/keyboards/dz60/keymaps/danbee/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = yes
diff --git a/keyboards/dz60/keymaps/default_abnt2/keymap.c b/keyboards/dz60/keymaps/default_abnt2/keymap.c
new file mode 100644
index 0000000000..d6273780f1
--- /dev/null
+++ b/keyboards/dz60/keymaps/default_abnt2/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2019 Luiz Correia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_br_abnt2.h"
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * _______ can be used in place of KC_TRNS (transparent) *
+ * XXXXXXX can be used in place of KC_NO (No Operation) *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+enum layer_names {
+ _BL,
+ _FL,
+ _CL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0 (BR ABNT2 Layout shown)
+ * ,-----------------------------------------------------------.
+ * |Esc|1 !|2 @|3 #|4 $|5 %|6 ¨|7 &|8 *|9 (|0 )|- _|= +| Bksp |
+ * |-----------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P |' `|{ [|Enter|
+ * |------------------------------------------------------. |
+ * | Fn1 | A | S | D | F | G | H | J | K | L | Ç |^ ~|} ]| |
+ * |-----------------------------------------------------------|
+ * |Sft |\ || Z | X | C | V | B | N | M |, <|. >|; :|/ ?|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl |GUI|Alt | Space |Alt |GUI|Fn2|Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_60_abnt2(
+ 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, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
+
+
+ [_FL] = LAYOUT_60_abnt2(
+ 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,
+ XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LGUI, XXXXXXX, KC_RALT, KC_RGUI, _______, KC_RCTL),
+
+ [_CL] = LAYOUT_60_abnt2(
+ KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 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, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX),
+
+};
diff --git a/keyboards/dz60/keymaps/default_abnt2/readme.md b/keyboards/dz60/keymaps/default_abnt2/readme.md
new file mode 100644
index 0000000000..e1a8f82d2c
--- /dev/null
+++ b/keyboards/dz60/keymaps/default_abnt2/readme.md
@@ -0,0 +1,15 @@
+# BR ABNT2 layout
+
+This is a Brazilian ABNT2 keymap for the DZ60 in a standard layout.
+
+The top-left sends Escape normally, but becomes a quote key when
+tapped whilst either Fn or GUI are held down.
+
+## Layout Image
+
+![Layout Image](http://s2.glbimg.com/hlQMZ_E87B3DB_96rVuO_pY2Yy8=/695x0/s.glbimg.com/po/tt2/f/original/2016/06/21/900px-kb_portuguese_brazilsvg_.png)
+
+----
+### References
+
+1. [Grave Escape - QMK Firmware Documentation](https://docs.qmk.fm/#/feature_grave_esc)
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/tarnjotsingh/keymap.c b/keyboards/dz60/keymaps/tarnjotsingh/keymap.c
new file mode 100644
index 0000000000..a6de97fdba
--- /dev/null
+++ b/keyboards/dz60/keymaps/tarnjotsingh/keymap.c
@@ -0,0 +1,7 @@
+#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_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, MO(1), KC_RGUI, KC_LALT, KC_RCTL),
+ [1] = LAYOUT_60_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_TRNS, KC_MUTE, KC_VOLU, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_MFFD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS),
+ [2] = LAYOUT_60_iso(KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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)
+};
diff --git a/keyboards/dz60/keymaps/tarnjotsingh/layers.json b/keyboards/dz60/keymaps/tarnjotsingh/layers.json
new file mode 100644
index 0000000000..7fec50a1d0
--- /dev/null
+++ b/keyboards/dz60/keymaps/tarnjotsingh/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_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", "MO(1)", "KC_RGUI", "KC_LALT", "KC_RCTL"], ["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_MUTE", "KC_VOLU", "KC_MPLY", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_UP", "KC_PSCR", "KC_SLCK", "KC_PAUS", "KC_TRNS", "KC_TRNS", "KC_VOLD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_TRNS", "KC_INS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MRWD", "KC_MFFD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGDN", "KC_HOME", "KC_END", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "MO(2)", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RGB_TOG", "RGB_MOD", "RGB_HUI", "RGB_HUD", "RGB_SAI", "RGB_SAD", "RGB_VAI", "RGB_VAD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "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"]] \ No newline at end of file
diff --git a/keyboards/dz60/keymaps/tarnjotsingh/readme.md b/keyboards/dz60/keymaps/tarnjotsingh/readme.md
new file mode 100644
index 0000000000..c544269663
--- /dev/null
+++ b/keyboards/dz60/keymaps/tarnjotsingh/readme.md
@@ -0,0 +1,24 @@
+# DZ60 ISO Keymap
+
+Custom keymap for UK ISO keyboard layouts.
+This includes 3 different layers.
+
+- Layer 0:
+ - Standard ISO layout with main modifier key, for accessing layer 1, to the right of the space bar.
+- Layer 1:
+ - Layer that gives you access to pretty much everything else like the arrow keys.
+- Layer 2;
+ - Standalone layer only for modifying the lighting on the board. Keys for this purpose are mapped in the locations used by the default dz60 layout.
+ - You can access this layer by holding MO(1) (next to the space bar) followed by holding MO(2) which where the Left Alt key is positioned.
+
+![dz60-iso-keymap](https://i.imgur.com/UV0t6aL.png)
+
+Make the kaymap for this keyboard (after setting up your build environment):
+
+ make dz60:tarnjotsingh
+
+Then flash it by running:
+
+ make dz60:tarnjotsingh: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/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 d2faa99897..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
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_iso 60_abnt2
diff --git a/keyboards/dztech/dz40rgb/dz40rgb.c b/keyboards/dztech/dz40rgb/dz40rgb.c
deleted file mode 100644
index 92e4a7cad3..0000000000
--- a/keyboards/dztech/dz40rgb/dz40rgb.c
+++ /dev/null
@@ -1,203 +0,0 @@
-#include "dz40rgb.h"
-#include "config.h"
-#if defined (split_space)
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {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, K_13, J_13, L_13},
- {0, K_14, J_14, L_14},
-
- {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, H_13, G_13, I_13},
- {0, H_14, G_14, I_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, E_13, D_13, F_13},
- {0, E_14, D_14, F_14},
-
- {0, B_12, A_12, C_12},
- {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}
-
-};
-
-led_config_t g_led_config = { {
- { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },
- { 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 },
- { 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28 },
- { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42 }
-}, {
- { 223, 0 }, { 203, 0 }, { 183, 0 }, { 162, 0 }, { 142, 0 }, { 122, 0 }, { 101, 0 }, { 81, 0 }, { 61, 0 }, { 40, 0 }, { 20, 0 }, { 0, 0 },
- { 223, 10 }, { 0, 10 }, { 223, 21 }, { 203, 21 }, { 183, 21 }, { 162, 21 }, { 142, 21 }, { 122, 21 }, { 101, 21 }, { 81, 21 }, { 61, 21 }, { 40, 21 },
- { 20, 21 }, { 0, 21 }, { 223, 31 }, { 0, 31 }, { 223, 42 }, { 203, 42 }, { 183, 42 }, { 162, 42 }, { 142, 42 }, { 122, 42 }, { 101, 42 }, { 81, 42 },
- { 61, 42 }, { 40, 42 }, { 20, 42 }, { 0, 42 }, { 223, 53 }, { 0, 53 }, { 223, 63 }, { 203, 63 }, { 183, 63 }, { 162, 63 }, { 142, 63 }, { 122, 63 },
- { 101, 63 }, { 81, 63 }, { 61, 63 }, { 40, 63 }, { 20, 63 }, { 0, 63 }
-}, {
- 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, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1
-} };
-
-#else
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {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, K_13, J_13, L_13},
- {0, K_14, J_14, L_14},
-
- {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, H_13, G_13, I_13},
- {0, H_14, G_14, I_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, E_13, D_13, F_13},
- {0, E_14, D_14, F_14},
-
- {0, B_12, A_12, C_12},
- {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_13, A_13, C_13},
- {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}
-
-};
-
-led_config_t g_led_config = { {
- { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 },
- { 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 },
- { 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28 },
- { 52, 51, 50, 49, 48, NO_LED, 47, 46, 45, 44, 43, 42 }
-}, {
- { 223, 0 }, { 203, 0 }, { 183, 0 }, { 162, 0 }, { 142, 0 }, { 122, 0 }, { 101, 0 }, { 81, 0 }, { 61, 0 }, { 40, 0 }, { 20, 0 }, { 0, 0 },
- { 223, 10 }, { 0, 10 }, { 223, 21 }, { 203, 21 }, { 183, 21 }, { 162, 21 }, { 142, 21 }, { 122, 21 }, { 101, 21 }, { 81, 21 }, { 61, 21 }, { 40, 21 },
- { 20, 21 }, { 0, 21 }, { 223, 31 }, { 0, 31 }, { 223, 42 }, { 203, 42 }, { 183, 42 }, { 162, 42 }, { 142, 42 }, { 122, 42 }, { 101, 42 }, { 81, 42 },
- { 61, 42 }, { 40, 42 }, { 20, 42 }, { 0, 42 }, { 223, 53 }, { 0, 53 }, { 223, 63 }, { 203, 63 }, { 183, 63 }, { 162, 63 }, { 142, 63 }, { 111, 63 },
- { 81, 63 }, { 61, 63 }, { 40, 63 }, { 20, 63 }, { 0, 63 }
-}, {
- 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, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 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)
-{
- 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/dztech/dz40rgb/dz40rgb.h b/keyboards/dztech/dz40rgb/dz40rgb.h
deleted file mode 100644
index 5f88a6225a..0000000000
--- a/keyboards/dztech/dz40rgb/dz40rgb.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-#include "quantum.h"
-#define LAYOUT( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, 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, k36, k36, k37, k38, k39, k3a, k3b } \
-}
-
-#define LAYOUT_SPLIT( \
- 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/dztech/dz40rgb/keymaps/default/config.h b/keyboards/dztech/dz40rgb/keymaps/default/config.h
deleted file mode 100644
index 30bf11ed5d..0000000000
--- a/keyboards/dztech/dz40rgb/keymaps/default/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-#define DRIVER_1_LED_TOTAL 53
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz40rgb/keymaps/default/keymap.c b/keyboards/dztech/dz40rgb/keymaps/default/keymap.c
deleted file mode 100644
index e4f56f5a8e..0000000000
--- a/keyboards/dztech/dz40rgb/keymaps/default/keymap.c
+++ /dev/null
@@ -1,71 +0,0 @@
-#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
-#define _LAYER2 2
-#define _LAYER3 3
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT( /* Base */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
- ),
- [_LAYER1] = LAYOUT( /* FN */
- 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, _______,
- _______, _______, _______, _______, _______, _______, TO(3), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
- ),
- [_LAYER2] = LAYOUT( /* FN2 */
- 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, _______,
- RGB_TOG, RGB_MOD, BL_INC, BL_DEC, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
- ),
- [_LAYER3] = LAYOUT( /* FN3 */
- TO(0), RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
-};
-
-void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
- for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
- rgb_matrix_set_color( i, red, green, blue );
- }
- }
-}
-
-void rgb_matrix_indicators_user(void) {
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER1:
- rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
- case _LAYER2:
- rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
- case _LAYER3:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
- }
- }
-
-}
-
-
-
-
-
-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/dz40rgb/keymaps/split_space/config.h b/keyboards/dztech/dz40rgb/keymaps/split_space/config.h
deleted file mode 100644
index 4f35bef373..0000000000
--- a/keyboards/dztech/dz40rgb/keymaps/split_space/config.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-#include "../../config.h"
-#define split_space
-#define DRIVER_1_LED_TOTAL 54
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c b/keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c
deleted file mode 100644
index 04c31bab1b..0000000000
--- a/keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c
+++ /dev/null
@@ -1,96 +0,0 @@
-#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
-#define _LAYER2 2
-#define _LAYER3 3
-#define _LAYER4 4
-#define _LAYER5 5
-#define _LAYER6 6
-#define _LAYER7 7
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_SPLIT( /* Base */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
- [_LAYER1] = LAYOUT_SPLIT( /* FN */
- 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),
- [_LAYER2] = LAYOUT_SPLIT( /* LIGHT */
- 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),
- [_LAYER3] = LAYOUT_SPLIT( /* NUMPAD */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
- [_LAYER4] = LAYOUT_SPLIT( /* MAC */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
- [_LAYER5] = LAYOUT_SPLIT( /* NEED TO DEFINE */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
- [_LAYER6] = LAYOUT_SPLIT( /* NEED TO DEFINE */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
- [_LAYER7] = LAYOUT_SPLIT( /* NEED TO DEFINE */
- 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 ,
- RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
- };
-
-
-
-void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
- for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
- rgb_matrix_set_color( i, red, green, blue );
- }
- }
-}
-
-void rgb_matrix_indicators_user(void) {
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER1:
- rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
- case _LAYER2:
- rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
- case _LAYER4:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
- case _LAYER5:
- rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, false); break;
- case _LAYER6:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0xFF, false); break;
- }
- }
-
-}
-
-
-
-
-
-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/dz60rgb/config.h b/keyboards/dztech/dz60rgb/config.h
index edf0982ab2..434b6c5916 100644
--- a/keyboards/dztech/dz60rgb/config.h
+++ b/keyboards/dztech/dz60rgb/config.h
@@ -1,42 +1,2 @@
#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
-#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 DRIVER_ADDR_1 0b1010000
-#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
-#define DRIVER_COUNT 2
-#if defined (dzrgb60_ansi) || defined (dzrgb60_iso)
-#define DRIVER_1_LED_TOTAL 61
-#elif defined (dzrgb60_hhkb) || defined (dzrgb60_hhkb_iso)
-#define DRIVER_1_LED_TOTAL 62
-#else
-#define DRIVER_1_LED_TOTAL 63
-#endif
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#include "config_common.h" \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb/dz60rgb.c b/keyboards/dztech/dz60rgb/dz60rgb.c
index 0909ace232..a8217480d0 100644
--- a/keyboards/dztech/dz60rgb/dz60rgb.c
+++ b/keyboards/dztech/dz60rgb/dz60rgb.c
@@ -1,348 +1,5 @@
#include "dz60rgb.h"
-#include "config.h"
-#if defined (dzrgb60_iso)
-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_15, G_15, I_15},
- {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, B_14, A_14, C_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, 28 },
- { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 14 },
- { 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, 24 }, { 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 }, { 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
-} };
-
-#elif defined (dzrgb60_hhkb)
-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},
-};
-
-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
-} };
-
-#elif defined (dzrgb60_hhkb_iso)
-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, K_15, J_15, L_15},
- {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_15, D_15, F_15},
- {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, 29 },
- { 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 0, 15 },
- { 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, 24 }, { 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
-} };
-
-#elif defined (dzrgb60_ansi)
-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},
-};
-
-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
-} };
-
-#else
+#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},
@@ -452,3 +109,12 @@ 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))
+ {
+ rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
+ }
+}
+
diff --git a/keyboards/dztech/dz60rgb/dz60rgb.h b/keyboards/dztech/dz60rgb/dz60rgb.h
index 7cb8a43e40..a029933f1f 100644
--- a/keyboards/dztech/dz60rgb/dz60rgb.h
+++ b/keyboards/dztech/dz60rgb/dz60rgb.h
@@ -1,7 +1,6 @@
#pragma once
#define XXX KC_NO
#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, \
@@ -15,58 +14,3 @@
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D }, \
{ K40, K41, K42, XXX, XXX, K45, XXX, XXX, K48, K49, K4A, K4B, XXX, K4D } \
}
-#define LAYOUT_ISO( \
- 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 \
-) { \
- { 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, XXX, K2D }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, XXX }, \
- { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, XXX, K4D } \
-}
-
-#define LAYOUT_HHKB( \
- 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, 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 } \
-}
-
-#define LAYOUT_HHKB_ISO( \
- 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, 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 } \
-}
-
-#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 \
-) { \
- { 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, XXX, K2D }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, XXX }, \
- { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, XXX, K4D } \
-}
diff --git a/keyboards/dztech/dz60rgb/info.json b/keyboards/dztech/dz60rgb/info.json
index 2fbe5a7489..b82ba5d4c8 100644
--- a/keyboards/dztech/dz60rgb/info.json
+++ b/keyboards/dztech/dz60rgb/info.json
@@ -1,17 +1,13 @@
{
- "keyboard_name": "dz60rgb",
- "url": "",
- "maintainer": "dztch",
- "width": 14,
- "height": 5,
- "layouts": {
+ "keyboard_name": "DZ60RGB",
+ "url": "",
+ "maintainer": "dztech",
+ "width": 15,
+ "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_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}]
}
}
}
diff --git a/keyboards/dztech/dz60rgb/keymaps/ansi/config.h b/keyboards/dztech/dz60rgb/keymaps/ansi/config.h
deleted file mode 100644
index 4bfad0df0d..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/ansi/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-#define dzrgb60_ansi
diff --git a/keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c b/keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c
deleted file mode 100644
index 97133d4296..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c
+++ /dev/null
@@ -1,78 +0,0 @@
-#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_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, \
- KC_TRNS, KC_TRNS, KC_TRNS, TO(3), 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),
- [_LAYER3] = LAYOUT_60_ansi( /* FN3 */
- 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_LALT, KC_LGUI, KC_SPC, KC_TRNS,MO(4), KC_RALT, KC_RCTL),
- [_LAYER4] = LAYOUT_60_ansi( /* FN4 */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SLCK, KC_PAUS, RESET ,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, KC_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, \
- KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- };
-
-void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
- for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
- rgb_matrix_set_color( i, red, green, blue );
- }
- }
-}
-
-void rgb_matrix_indicators_user(void) {
- uint8_t this_led = host_keyboard_leds();
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER1:
- rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
- case _LAYER2:
- rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
- case _LAYER3:
- rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
- case _LAYER4:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
- }
- }
- if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
- rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
- }
-
-}
-
-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/dz60rgb/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb/keymaps/default/keymap.c
index 464d92e023..56c9577af3 100644
--- a/keyboards/dztech/dz60rgb/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz60rgb/keymaps/default/keymap.c
@@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_VOLU, KC_MUTE,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, 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 ,\
@@ -36,91 +36,6 @@ 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, 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 rgb_matrix_indicators_user(void) {
- uint8_t this_led = host_keyboard_leds();
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER3:
- if ( this_led & (1<<USB_LED_NUM_LOCK)) {
- rgb_matrix_set_color(13, 0xFF, 0x00, 0x00);
- } else {
- rgb_matrix_set_color(13, 0x00, 0x00, 0x00);
- }
- rgb_matrix_set_color(0, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(1, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(1, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(2, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(3, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(4, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(5, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(6, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(7, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(8, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(9, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(10, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(11, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(12, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(14, 0x00, 0x00, 0xFF);
- rgb_matrix_set_color(15, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(16, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(17, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(18, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(19, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(20, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(21, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(22, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(23, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(24, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(25, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(26, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(27, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(28, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(29, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(30, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(31, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(32, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(33, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(34, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(35, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(36, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(37, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(38, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(39, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(40, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(41, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(42, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(43, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(44, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(45, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(46, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(47, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(48, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(49, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(50, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(51, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(52, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(53, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(54, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(55, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(56, 0x00, 0x00, 0x00);
- rgb_matrix_set_color(57, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(58, 0x00, 0xFF, 0x00);
- rgb_matrix_set_color(59, 0xFF, 0x00, 0x00);
- rgb_matrix_set_color(60, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(61, 0xFF, 0xFF, 0x00);
- rgb_matrix_set_color(62, 0x00, 0x00, 0x00);
- break;
- case _LAYER4:
- rgb_matrix_set_color_all(0xFF, 0xFF, 0x00);
- break;
- }
- }
- if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
- rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
- }
-}
-
void matrix_init_user(void) {
//user initialization
}
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb/config.h b/keyboards/dztech/dz60rgb/keymaps/hhkb/config.h
deleted file mode 100644
index 2b5e7de6a2..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/hhkb/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-#define dzrgb60_hhkb
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c b/keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c
deleted file mode 100644
index 091343ac38..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c
+++ /dev/null
@@ -1,79 +0,0 @@
-#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_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_DEL, 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_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_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, TO(3), 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, 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, KC_TRNS),
- [_LAYER3] = LAYOUT_HHKB( /* FN3 */
- 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_DEL, 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(4),\
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO(4), KC_RGUI, KC_RCTL),
- [_LAYER4] = LAYOUT_HHKB( /* FN4 */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SLCK, KC_PAUS, RESET ,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS),
- };
-
-
-void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
- for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
- rgb_matrix_set_color( i, red, green, blue );
- }
- }
-}
-
-void rgb_matrix_indicators_user(void) {
- uint8_t this_led = host_keyboard_leds();
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER1:
- rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
- case _LAYER2:
- rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
- case _LAYER3:
- rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
- case _LAYER4:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
- }
- }
- if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
- rgb_matrix_set_color(41, 0xFF, 0xFF, 0xFF);
- }
-
-}
-
-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/dz60rgb/keymaps/hhkb_iso/config.h b/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h
deleted file mode 100644
index 8de5853e1a..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-#define dzrgb60_hhkb_iso
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c b/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c
deleted file mode 100644
index bc8a6fa36e..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c
+++ /dev/null
@@ -1,79 +0,0 @@
-#include QMK_KEYBOARD_H
-#define _LAYER0 0
-#define _LAYER1 1
-#define _LAYER2 2
-#define _LAYER3 3
-#define _LAYER4 4
-#define _LAYER5 5
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LAYER0] = LAYOUT_HHKB_ISO( /* 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_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_DEL, 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_ISO( /* 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_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_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, TO(3), KC_TRNS, KC_TRNS, KC_TRNS),
- [_LAYER2] = LAYOUT_HHKB_ISO( /* 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, KC_TRNS, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_HHKB_ISO( /* NUMPAD */
- 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_DEL, 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(4),\
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO(4), KC_RGUI, KC_RCTL),
- [_LAYER4] = LAYOUT_HHKB_ISO( /* MAC */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SLCK, KC_PAUS, RESET ,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS),
- };
-
-void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
- for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
- rgb_matrix_set_color( i, red, green, blue );
- }
- }
-}
-
-void rgb_matrix_indicators_user(void) {
- uint8_t this_led = host_keyboard_leds();
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER1:
- rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
- case _LAYER2:
- rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
- case _LAYER3:
- rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
- case _LAYER4:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
- }
- }
- if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
- rgb_matrix_set_color(41, 0xFF, 0xFF, 0xFF);
- }
-
-}
-
-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/dz60rgb/keymaps/iso/config.h b/keyboards/dztech/dz60rgb/keymaps/iso/config.h
deleted file mode 100644
index c765fe0e25..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/iso/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#pragma once
-#define dzrgb60_iso
diff --git a/keyboards/dztech/dz60rgb/keymaps/iso/keymap.c b/keyboards/dztech/dz60rgb/keymaps/iso/keymap.c
deleted file mode 100644
index 0b16445066..0000000000
--- a/keyboards/dztech/dz60rgb/keymaps/iso/keymap.c
+++ /dev/null
@@ -1,78 +0,0 @@
-#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_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 */
- 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, KC_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, \
- KC_TRNS, KC_TRNS, KC_TRNS, TO(3), 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),
- [_LAYER3] = LAYOUT_60_ansi( /* FN3 */
- 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_LALT, KC_LGUI, KC_SPC, KC_TRNS,MO(4), KC_RALT, KC_RCTL),
- [_LAYER4] = LAYOUT_60_ansi( /* FN4 */
- 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, RGB_TOG, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_MOD, KC_PSCR, KC_SLCK, KC_PAUS, RESET,\
- KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_HOME, KC_PGUP, KC_TRNS,\
- KC_MPRV, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDOWN,KC_MNXT, \
- KC_TRNS, KC_TRNS, KC_TRNS, TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- };
-
-void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
- for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
- if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) {
- rgb_matrix_set_color( i, red, green, blue );
- }
- }
-}
-
-void rgb_matrix_indicators_user(void) {
- uint8_t this_led = host_keyboard_leds();
- if (!g_suspend_state) {
- switch (biton32(layer_state)) {
- case _LAYER1:
- rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
- case _LAYER2:
- rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
- case _LAYER3:
- rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
- case _LAYER4:
- rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
- }
- }
- if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
- rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
- }
-
-}
-
-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/dz60rgb/keymaps/matthewrobo/config.h b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
index a50008beb7..1002f010e1 100644
--- a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
+++ b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
@@ -10,7 +10,7 @@
#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
diff --git a/keyboards/dztech/dz60rgb/v1/config.h b/keyboards/dztech/dz60rgb/v1/config.h
new file mode 100644
index 0000000000..d0358a2434
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v1/config.h
@@ -0,0 +1,36 @@
+#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
+#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/dz40rgb/rules.mk b/keyboards/dztech/dz60rgb/v1/rules.mk
index fc4b028d5c..4f2073e6fa 100644
--- a/keyboards/dztech/dz40rgb/rules.mk
+++ b/keyboards/dztech/dz60rgb/v1/rules.mk
@@ -1,6 +1,6 @@
-MCU = STM32F303
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F303
+
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
@@ -8,7 +8,7 @@ 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
+NKRO_ENABLE = yes # 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 in66666666666666666666666666
+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..ed1056ca90
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v2/config.h
@@ -0,0 +1,44 @@
+#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
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#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
+#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_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..9dda31a1bd
--- /dev/null
+++ b/keyboards/dztech/dz60rgb/v2/rules.mk
@@ -0,0 +1,23 @@
+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
+
+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 = yes # 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_ansi/config.h b/keyboards/dztech/dz60rgb_ansi/config.h
new file mode 100644
index 0000000000..e38246b228
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/config.h
@@ -0,0 +1,2 @@
+#pragma once
+#include "config_common.h"
diff --git a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c
new file mode 100644
index 0000000000..6cb82dd542
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c
@@ -0,0 +1,118 @@
+#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},
+};
+
+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)
+{
+ 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();
+}
+
+
+__attribute__ ((weak))
+void rgb_matrix_indicators_user(void)
+{
+ if (IS_HOST_LED_ON(USB_LED_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
new file mode 100644
index 0000000000..de30c58a73
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.h
@@ -0,0 +1,16 @@
+#pragma once
+#define XXX KC_NO
+#include "quantum.h"
+#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 \
+) { \
+ { 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, XXX, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, XXX }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, XXX, K4D } \
+}
diff --git a/keyboards/dztech/dz60rgb_ansi/info.json b/keyboards/dztech/dz60rgb_ansi/info.json
new file mode 100644
index 0000000000..8e449be1df
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "dz60rgb_ansi",
+ "url": "",
+ "maintainer": "dztch",
+ "width": 14,
+ "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}]
+ }
+ }
+}
diff --git a/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a7b6e820d2
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+#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, NK_TOGG, 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;
+ }
diff --git a/keyboards/dztech/dz60rgb_ansi/readme.md b/keyboards/dztech/dz60rgb_ansi/readme.md
new file mode 100644
index 0000000000..2fffa413b6
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/readme.md
@@ -0,0 +1,15 @@
+# DZ60RGB
+
+![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/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dztech/dz60rgb: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/dztech/dz40rgb/config.h b/keyboards/dztech/dz60rgb_ansi/v1/config.h
index 5f1502f4af..bd9d6e848c 100644
--- a/keyboards/dztech/dz40rgb/config.h
+++ b/keyboards/dztech/dz60rgb_ansi/v1/config.h
@@ -1,32 +1,36 @@
#pragma once
-
-#include "config_common.h"
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x1220
#define DEVICE_VER 0x0001
#define MANUFACTURER DZTECH
-#define PRODUCT DZ40RGB
-#define DESCRIPTION DZ40 ARM RGB keyboard
-#define MATRIX_ROWS 4
-#define MATRIX_COLS 12
-#define MATRIX_ROW_PINS { B13, B12, A2, A1 }
-#define MATRIX_COL_PINS {A6, A7, B0, B1, C15, C14, C13, B9, B8, A8, B14, B15 }
+#define PRODUCT DZ60RGB_ANSI
+#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/rules.mk b/keyboards/dztech/dz60rgb_ansi/v1/rules.mk
index 006541504a..4f2073e6fa 100644
--- a/keyboards/dztech/dz60rgb/rules.mk
+++ b/keyboards/dztech/dz60rgb_ansi/v1/rules.mk
@@ -1,16 +1,14 @@
-MCU = STM32F303
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F303
+
BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = lite # 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
COMMAND_ENABLE = no # Commands for debug and configuration
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE = no # USB Nkey Rollover
+NKRO_ENABLE = yes # 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 \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb_ansi/v2/config.h b/keyboards/dztech/dz60rgb_ansi/v2/config.h
new file mode 100644
index 0000000000..b963fa2beb
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/v2/config.h
@@ -0,0 +1,44 @@
+#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
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#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
+#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_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..9dda31a1bd
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/v2/rules.mk
@@ -0,0 +1,23 @@
+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
+
+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 = yes # 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_wkl/config.h b/keyboards/dztech/dz60rgb_wkl/config.h
new file mode 100644
index 0000000000..434b6c5916
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/config.h
@@ -0,0 +1,2 @@
+#pragma once
+#include "config_common.h" \ No newline at end of file
diff --git a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c
new file mode 100644
index 0000000000..1c0edb7227
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c
@@ -0,0 +1,116 @@
+#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},
+};
+
+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)
+{
+ 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();
+}
+
+__attribute__ ((weak))
+void rgb_matrix_indicators_user(void)
+{
+ if (IS_HOST_LED_ON(USB_LED_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
new file mode 100644
index 0000000000..0c448994f9
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.h
@@ -0,0 +1,18 @@
+#pragma once
+#define XXX KC_NO
+#include "quantum.h"
+#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 } \
+}
+
+#define LAYOUT_HHKB LAYOUT_60_tsangan_hhkb
diff --git a/keyboards/dztech/dz60rgb_wkl/info.json b/keyboards/dztech/dz60rgb_wkl/info.json
new file mode 100644
index 0000000000..522860d3ca
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "dz60rgb_wkl",
+ "url": "",
+ "maintainer": "dztech",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "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}]
+ }
+ }
+}
diff --git a/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c b/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2a4539c557
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+#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_60_tsangan_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_60_tsangan_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, NK_TOGG, 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_tsangan_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;
+ }
diff --git a/keyboards/dztech/dz60rgb_wkl/readme.md b/keyboards/dztech/dz60rgb_wkl/readme.md
new file mode 100644
index 0000000000..2fffa413b6
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/readme.md
@@ -0,0 +1,15 @@
+# DZ60RGB
+
+![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/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dztech/dz60rgb: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/dztech/dz60rgb_wkl/v1/config.h b/keyboards/dztech/dz60rgb_wkl/v1/config.h
new file mode 100644
index 0000000000..97dd46c5f9
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v1/config.h
@@ -0,0 +1,36 @@
+#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
+#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/v1/rules.mk b/keyboards/dztech/dz60rgb_wkl/v1/rules.mk
new file mode 100644
index 0000000000..24bb30c02c
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v1/rules.mk
@@ -0,0 +1,16 @@
+# 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 = yes # 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_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..e2b29d2f84
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v2/config.h
@@ -0,0 +1,44 @@
+#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
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#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
+#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_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..5bcd7620f4
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_wkl/v2/rules.mk
@@ -0,0 +1,25 @@
+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
+
+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 = yes # 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_tsangan_hhkb
diff --git a/keyboards/dztech/dz65rgb/config.h b/keyboards/dztech/dz65rgb/config.h
index f4c1f11149..434b6c5916 100644
--- a/keyboards/dztech/dz65rgb/config.h
+++ b/keyboards/dztech/dz65rgb/config.h
@@ -1,29 +1,2 @@
#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
-
-#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 RGB_MATRIX_MAXIMUM_BRIGHTNESS 180
-
-#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)
+#include "config_common.h" \ No newline at end of file
diff --git a/keyboards/dztech/dz65rgb/dz65rgb.c b/keyboards/dztech/dz65rgb/dz65rgb.c
index 766aea26c4..8f095960d4 100644
--- a/keyboards/dztech/dz65rgb/dz65rgb.c
+++ b/keyboards/dztech/dz65rgb/dz65rgb.c
@@ -1,98 +1,102 @@
#include "dz65rgb.h"
+#ifdef RGB_MATRIX_ENABLE
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
- {0, C2_1, C3_1, C4_1}, // LA0
- {0, C1_1, C3_2, C4_2}, // LA1
- {0, C1_2, C2_2, C4_3}, // LA2
- {0, C1_3, C2_3, C3_3}, // LA3
- {0, C1_4, C2_4, C3_4}, // LA4
- {0, C1_5, C2_5, C3_5}, // LA5
- {0, C1_6, C2_6, C3_6}, // LA6
- {0, C1_7, C2_7, C3_7}, // LA7
- {0, C1_8, C2_8, C3_8}, // LA8
- {0, C9_1, C8_1, C7_1}, // LA9
- {0, C9_2, C8_2, C7_2}, // LA10
- {0, C9_3, C8_3, C7_3}, // LA11
- {0, C9_4, C8_4, C7_4}, // LA12
- {0, C9_5, C8_5, C7_5}, // LA13
- {0, C9_6, C8_6, C7_6}, // LA14
- {0, C9_7, C8_7, C6_6}, // LA15
- {0, C9_8, C7_7, C6_7}, // LA16
+
{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_12, C2_12, C3_12}, // LB4
{0, C1_13, C2_13, C3_13}, // LB5
{0, C1_14, C2_14, C3_14}, // LB6
- {0, C1_15, C2_15, C3_15}, // LB7
- {0, C1_16, C2_16, C3_16}, // LB8
+
+ {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, C9_15, C8_15, C6_14}, // LB15
- {0, C9_16, C7_15, C6_15}, // LB16
- {0, C8_16, C7_16, C6_16}, // LB17
- {1, C2_1, C3_1, C4_1}, // LC0
- {1, C1_1, C3_2, C4_2}, // LC1
- {1, C1_2, C2_2, C4_3}, // LC2
- {1, C1_3, C2_3, C3_3}, // LC3
- {1, C1_4, C2_4, C3_4}, // LC4
- {1, C1_5, C2_5, C3_5}, // LC5
- //{1, C1_6, C2_6, C3_6}, // LC6
- {1, C1_7, C2_7, C3_7}, // LC7
- {1, C1_8, C2_8, C3_8}, // LC8
- {1, C9_1, C8_1, C7_1}, // LC9
- {1, C9_2, C8_2, C7_2}, // LC10
- {1, C9_3, C8_3, C7_3}, // LC11
- {1, C9_4, C8_4, C7_4}, // LC12
- {1, C9_5, C8_5, C7_5}, // LC13
+ {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_7, C8_7, C6_6}, // LC15
- {1, C9_8, C7_7, C6_7}, // LC16
- {1, C8_8, C7_8, C6_8}, // LC17
+ {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
- {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, C1_16, C2_16, C3_16}, // LB8
+
+ {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, C9_13, C8_13, C7_13}, // LD13
+ {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
+
+ {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
+
};
led_config_t g_led_config = { {
- { 17, 16, 15, 14, 13, 12, 11, 10, 9, 18, 19, 20, 21, 22, 23 },
- { 7, 6, 5, 4, 3, 2, 1, 0, 26, 27, 28, 29, 30, 31, 24 },
- { 8, 48, 47, 46, 45, 44, 43, 51, 52, 53, 54, 55, NO_LED, 56, 25 },
- { 49, 40, 39, 38, 37, 36, 60, 61, 62, 63, 57, 58, NO_LED, 59, 32 },
- { 50, 42, 41, NO_LED, NO_LED, 35, NO_LED, NO_LED, 64, 65, 66, 67, NO_LED, 34, 33 }
+ { 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 }
}, {
- { 112, 16 }, { 96, 16 }, { 80, 16 }, { 64, 16 }, { 48, 16 }, { 32, 16 }, { 16, 16 }, { 0, 16 }, { 0, 32 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 },
- { 32, 0 }, { 16, 0 }, { 0, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 208, 0 }, { 224, 0 }, { 224, 16 }, { 224, 32 }, { 128, 16 }, { 144, 16 }, { 160, 16 }, { 176, 16 },
- { 192, 16 }, { 208, 16 }, { 224, 48 }, { 224, 64 }, { 208, 64 }, { 80, 64 }, { 80, 48 }, { 64, 48 }, { 48, 48 }, { 32, 48 }, { 16, 48 }, { 32, 64 }, { 16, 64 }, { 96, 32 }, { 80, 32 },
- { 64, 32 }, { 48, 32 }, { 32, 32 }, { 16, 32 }, { 0, 48 }, { 0, 64 }, { 112, 32 }, { 128, 32 }, { 144, 32 }, { 160, 32 }, { 176, 32 }, { 208, 32 }, { 160, 48 }, { 176, 48 }, { 208, 48 },
- { 96, 48 }, { 112, 48 }, { 128, 48 }, { 144, 48 }, { 128, 64 }, { 144, 64 }, { 160, 64 }, { 176, 64 }
+ {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}
}, {
- 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4,
- 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 4, 1, 1, 4, 4,
- 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 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, 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();
@@ -118,8 +122,8 @@ void suspend_wakeup_init_kb(void)
__attribute__ ((weak))
void rgb_matrix_indicators_user(void)
{
- if (IS_LED_ON(host_keyboard_leds(), USB_LED_CAPS_LOCK))
+ if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK))
{
- rgb_matrix_set_color(8, 0xFF, 0xFF, 0xFF);
+ rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
}
}
diff --git a/keyboards/dztech/dz65rgb/keymaps/default/keymap.c b/keyboards/dztech/dz65rgb/keymaps/default/keymap.c
index 90f25c0e46..149ec0a930 100644
--- a/keyboards/dztech/dz65rgb/keymaps/default/keymap.c
+++ b/keyboards/dztech/dz65rgb/keymaps/default/keymap.c
@@ -12,7 +12,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MUTE,\
+ 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_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
};
diff --git a/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h b/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h
index babc2abcf5..a56af01656 100644
--- a/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h
+++ b/keyboards/dztech/dz65rgb/keymaps/matthewrobo/config.h
@@ -6,7 +6,7 @@
#define TAPPING_TERM 150
#define TAP_HOLD_CAPS_DELAY 0
-
+#undef RGB_MATRIX_STARTUP_MODE
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// #define DISABLE_RGB_MATRIX_SOLID_COLOR
diff --git a/keyboards/dztech/dz65rgb/v1/config.h b/keyboards/dztech/dz65rgb/v1/config.h
new file mode 100644
index 0000000000..361c27df36
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/v1/config.h
@@ -0,0 +1,45 @@
+#pragma once
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1222
+#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
diff --git a/keyboards/dztech/dz65rgb/rules.mk b/keyboards/dztech/dz65rgb/v1/rules.mk
index bf392b4faa..6e80abf472 100644
--- a/keyboards/dztech/dz65rgb/rules.mk
+++ b/keyboards/dztech/dz65rgb/v1/rules.mk
@@ -1,6 +1,6 @@
-MCU = STM32F303
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F303
+
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
diff --git a/keyboards/dztech/dz65rgb/v2/config.h b/keyboards/dztech/dz65rgb/v2/config.h
new file mode 100644
index 0000000000..44bf0b7348
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/v2/config.h
@@ -0,0 +1,45 @@
+#pragma once
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1222
+#define DEVICE_VER 0x0002
+#define MANUFACTURER DZTECH
+#define PRODUCT DZ65RGB
+#define DESCRIPTION DZ65 AVR 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 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..b0b41a88d6
--- /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
+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
+
+LAYOUTS = 65_ansi \ No newline at end of file
diff --git a/keyboards/eco/keymaps/default/keymap.c b/keyboards/eco/keymaps/default/keymap.c
index ede68d59da..58951ce32a 100644
--- a/keyboards/eco/keymaps/default/keymap.c
+++ b/keyboards/eco/keymaps/default/keymap.c
@@ -4,7 +4,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/ergo42/keymaps/default/keymap.c b/keyboards/ergo42/keymaps/default/keymap.c
index 7886e307fd..afe748aa64 100644
--- a/keyboards/ergo42/keymaps/default/keymap.c
+++ b/keyboards/ergo42/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define BASE 0
#define META 1
@@ -64,4 +63,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-
diff --git a/keyboards/ergodash/mini/keymaps/default/keymap.c b/keyboards/ergodash/mini/keymaps/default/keymap.c
index 35cbd87a36..18ba519841 100644
--- a/keyboards/ergodash/mini/keymaps/default/keymap.c
+++ b/keyboards/ergodash/mini/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
diff --git a/keyboards/ergodash/rev1/keymaps/default/keymap.c b/keyboards/ergodash/rev1/keymaps/default/keymap.c
index 6153998748..0c9159497a 100644
--- a/keyboards/ergodash/rev1/keymaps/default/keymap.c
+++ b/keyboards/ergodash/rev1/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h
index bb51ec3215..e60101e5e2 100644
--- a/keyboards/ergodox_ez/config.h
+++ b/keyboards/ergodox_ez/config.h
@@ -75,17 +75,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D7
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 15 // Number of LEDs
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 255
#define RGBLIGHT_VAL_STEP 12
+// Pick one of the modes
+// Defaults to 15 mirror, for legacy behavior
+
+// #define ERGODOX_LED_15 // Addresses 15 LEDs, but same position on both halves
+// #define ERGODOX_LED_15_MIRROR // Addresses 15 LEDs, but are mirrored
+// #define ERGODOX_LED_30 // Addresses all 30 LED individually
+
/* fix space cadet rollover issue */
#define DISABLE_SPACE_CADET_ROLLOVER
-#define RGBW_BB_TWI
-
-#define RGBW 1
+#define RGBW
#define RGBLIGHT_SLEEP
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
new file mode 100644
index 0000000000..3e75a8cd08
--- /dev/null
+++ b/keyboards/ergodox_ez/led_i2c.c
@@ -0,0 +1,86 @@
+/*
+ * light weight WS2812 lib V2.0b
+ *
+ * Controls WS2811/WS2812/WS2812B RGB-LEDs
+ * Author: Tim (cpldcpu@gmail.com)
+ *
+ * Jan 18th, 2014 v2.0b Initial Version
+ * Nov 29th, 2015 v2.3 Added SK6812RGBW support
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifdef RGBLIGHT_ENABLE
+
+# include "ws2812.c"
+# include "ergodox_ez.h"
+
+extern rgblight_config_t rgblight_config;
+
+/*
+ * Forward declare internal functions
+ *
+ * The functions take a byte-array and send to the data output as WS2812 bitstream.
+ * The length is the number of bytes to send - three per LED.
+ */
+
+void ws2812_sendarray(uint8_t *array, uint16_t length);
+void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask);
+
+
+
+
+void rgblight_set(void) {
+ 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;
+#ifdef RGBW
+ led[i].w = 0;
+#endif
+ }
+ }
+
+
+ uint8_t led_num = RGBLED_NUM;
+ i2c_init();
+ i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT);
+ int i = 0;
+# if defined(ERGODOX_LED_30)
+ // prevent right-half code from trying to bitbang all 30
+ // so with 30 LEDs, we count from 29 to 15 here, and the
+ // other half does 0 to 14.
+ led_num = RGBLED_NUM / 2;
+ for (i = led_num + led_num - 1; i >= led_num; --i)
+# elif defined(ERGODOX_LED_15_MIRROR)
+ for (i = 0; i < led_num; ++i)
+# else // ERGDOX_LED_15 non-mirrored
+ for (i = led_num - 1; i >= 0; --i)
+# endif
+ {
+ uint8_t *data = (uint8_t *)(led + i);
+ i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT);
+ i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT);
+#ifdef RGBW
+ i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT);
+#endif
+ }
+ i2c_stop();
+
+ ws2812_setleds(led, RGBLED_NUM);
+}
+
+
+#endif // RGBLIGHT_ENABLE
diff --git a/keyboards/ergodox_ez/post_config.h b/keyboards/ergodox_ez/post_config.h
new file mode 100644
index 0000000000..526cc8c417
--- /dev/null
+++ b/keyboards/ergodox_ez/post_config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#if !defined(ERGODOX_LED_15) && !defined(ERGODOX_LED_30)
+// if no value is defined, assume previous behavior
+// # define ERGODOX_LED_15
+// # define ERGODOX_LED_30
+# define ERGODOX_LED_15_MIRROR
+#endif
+
+#if (defined(ERGODOX_LED_30) + defined(ERGODOX_LED_15) + defined(ERGODOX_LED_15_MIRROR)) != 1
+# error "You must only define one of the ERGODOX_LED options."
+#endif
+
+#ifdef ERGODOX_LED_30
+// If using 30 LEDs, then define that many
+# define RGBLED_NUM 30 // Number of LEDs
+#else
+// If not, then only define 15
+# define RGBLED_NUM 15 // Number of LEDs
+#endif
diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk
index dbc35f6836..fd8f5722d3 100644
--- a/keyboards/ergodox_ez/rules.mk
+++ b/keyboards/ergodox_ez/rules.mk
@@ -31,11 +31,14 @@ SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard
SLEEP_LED_ENABLE = no
API_SYSEX_ENABLE = no
RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
RGB_MATRIX_ENABLE = no # enable later
DEBOUNCE_TYPE = eager_pr
# project specific files
-SRC += matrix.c
+SRC += matrix.c \
+ led_i2c.c
QUANTUM_LIB_SRC += i2c_master.c
LAYOUTS = ergodox
diff --git a/keyboards/ergodox_ez/util/compile_keymap.py b/keyboards/ergodox_ez/util/compile_keymap.py
index f427d6fd80..f427d6fd80 100644..100755
--- a/keyboards/ergodox_ez/util/compile_keymap.py
+++ b/keyboards/ergodox_ez/util/compile_keymap.py
diff --git a/keyboards/ergodox_ez/util/keymap_beautifier/Dockerfile b/keyboards/ergodox_ez/util/keymap_beautifier/Dockerfile
new file mode 100644
index 0000000000..fbee1d0df8
--- /dev/null
+++ b/keyboards/ergodox_ez/util/keymap_beautifier/Dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7.4-alpine3.10
+
+WORKDIR /usr/src/app
+COPY requirements.txt ./
+RUN pip install --no-cache-dir -r requirements.txt
+COPY ./KeymapBeautifier.py ./KeymapBeautifier.py
+
+CMD [ "python", "./KeymapBeautifier.py", "-h" ]
diff --git a/keyboards/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py b/keyboards/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py
new file mode 100755
index 0000000000..b96e4c96cd
--- /dev/null
+++ b/keyboards/ergodox_ez/util/keymap_beautifier/KeymapBeautifier.py
@@ -0,0 +1,399 @@
+#!/usr/bin/env python
+
+import argparse
+import pycparser
+import re
+
+class KeymapBeautifier:
+ justify_toward_center = False
+ filename_in = None
+ filename_out = None
+ output_layout = None
+ output = None
+
+ column_max_widths = {}
+
+ KEY_ALIASES = {
+ "KC_TRANSPARENT": "_______",
+ "KC_TRNS": "_______",
+ "KC_NO": "XXXXXXX",
+ }
+ KEYMAP_START = 'const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n'
+ KEYMAP_END = '};\n'
+ KEYMAP_START_REPLACEMENT = "const int keymaps[]={\n"
+ KEY_CHART = """
+ /*
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
+ * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | 14 | 15 | 16 | 17 | 18 | 19 |------| |------| 52 | 53 | 54 | 55 | 56 | 57 |
+ * |--------+------+------+------+------+------| 26 | | 58 |------+------+------+------+------+--------|
+ * | 20 | 21 | 22 | 23 | 24 | 25 | | | | 59 | 60 | 61 | 62 | 63 | 64 |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | 27 | 28 | 29 | 30 | 31 | | 65 | 66 | 67 | 68 | 69 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | 32 | 33 | | 70 | 71 |
+ * ,------+------+------| |------+------+------.
+ * | | | 34 | | 72 | | |
+ * | 35 | 36 |------| |------| 74 | 75 |
+ * | | | 37 | | 73 | | |
+ * `--------------------' `--------------------'
+ */
+"""
+ KEY_COORDINATES = {
+ 'LAYOUT_ergodox': [
+ # left hand
+ (0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6),
+ (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6),
+ (2,0), (2,1), (2,2), (2,3), (2,4), (2,5),
+ (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6),
+ (4,0), (4,1), (4,2), (4,3), (4,4),
+ # left thumb
+ (5,5), (5,6),
+ (6,6),
+ (7,4), (7,5), (7,6),
+ # right hand
+ (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6),
+ (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (9,6),
+ (10,1), (10,2), (10,3), (10,4), (10,5), (10,6),
+ (11,0), (11,1), (11,2), (11,3), (11,4), (11,5), (11,6),
+ (12,2), (12,3), (12,4), (12,5), (12,6),
+ # right thumb
+ (13,0), (13,1),
+ (14,0),
+ (15,0), (15,1), (15,2)
+ ],
+ 'LAYOUT_ergodox_pretty': [
+ # left hand and right hand
+ (0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (0,11), (0,12), (0,13),
+ (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (1,11), (1,12), (1,13),
+ (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,8), (2,9), (2,10), (2,11), (2,12), (2,13),
+ (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (3,11), (3,12), (3,13),
+ (4,0), (4,1), (4,2), (4,3), (4,4), (4,9), (4,10), (4,11), (4,12), (4,13),
+
+ # left thumb and right thumb
+ (5,5), (5,6), (5,7), (5,8),
+ (6,6), (6,7),
+ (7,4), (7,5), (7,6), (7,7), (7,8), (7,9)
+ ],
+ }
+ current_converted_KEY_COORDINATES = []
+
+ # each column is aligned within each group (tuples of row indexes are inclusive)
+ KEY_ROW_GROUPS = {
+ 'LAYOUT_ergodox': [(0,4),(5,7),(8,12),(13,15)],
+ 'LAYOUT_ergodox_pretty': [(0,7)],
+ #'LAYOUT_ergodox_pretty': [(0,5),(6,7)],
+ #'LAYOUT_ergodox_pretty': [(0,3),(4,4),(5,7)],
+ #'LAYOUT_ergodox_pretty': [(0,4),(5,7)],
+ }
+
+
+ INDEX_CONVERSTION_LAYOUT_ergodox_pretty_to_LAYOUT_ergodox = [
+ 0, 1, 2, 3, 4, 5, 6, 38,39,40,41,42,43,44,
+ 7, 8, 9,10,11,12,13, 45,46,47,48,49,50,51,
+ 14,15,16,17,18,19, 52,53,54,55,56,57,
+ 20,21,22,23,24,25,26, 58,59,60,61,62,63,64,
+ 27,28,29,30,31, 65,66,67,68,69,
+ 32,33, 70,71,
+ 34, 72,
+ 35,36,37, 73,74,75,
+ ]
+
+
+ def index_conversion_map_reversed(self, conversion_map):
+ return [conversion_map.index(i) for i in range(len(conversion_map))]
+
+
+ def __init__(self, source_code = "", output_layout="LAYOUT_ergodox", justify_toward_center = False):
+ self.output_layout = output_layout
+ self.justify_toward_center = justify_toward_center
+ # determine the conversion map
+ #if input_layout == self.output_layout:
+ # conversion_map = [i for i in range(len(self.INDEX_CONVERSTION_LAYOUT_ergodox_pretty_to_LAYOUT_ergodox))]
+ #conversion_map = self.INDEX_CONVERSTION_LAYOUT_ergodox_pretty_to_LAYOUT_ergodox
+ if self.output_layout == "LAYOUT_ergodox_pretty":
+ index_conversion_map = self.index_conversion_map_reversed(self.INDEX_CONVERSTION_LAYOUT_ergodox_pretty_to_LAYOUT_ergodox)
+ else:
+ index_conversion_map = list(range(len(self.INDEX_CONVERSTION_LAYOUT_ergodox_pretty_to_LAYOUT_ergodox)))
+ self.current_converted_KEY_COORDINATES = [
+ self.KEY_COORDINATES[self.output_layout][index_conversion_map[i]]
+ for i in range(len(self.KEY_COORDINATES[self.output_layout]))
+ ]
+
+ self.output = self.beautify_source_code(source_code)
+
+ def beautify_source_code(self, source_code):
+ # to keep it simple for the parser, we only use the parser to parse the key definition part
+ src = {
+ "before": [],
+ "keys": [],
+ "after": [],
+ }
+
+ current_section = "before"
+ for line in source_code.splitlines(True):
+ if current_section == 'before' and line == self.KEYMAP_START:
+ src[current_section].append("\n")
+ current_section = 'keys'
+ src[current_section].append(self.KEYMAP_START_REPLACEMENT)
+ continue
+ elif current_section == 'keys' and line == self.KEYMAP_END:
+ src[current_section].append(self.KEYMAP_END)
+ current_section = 'after'
+ continue
+ src[current_section].append(line)
+ output_lines = src['before'] + self.beautify_keys_section("".join(src['keys'])) + src['after']
+ return "".join(output_lines)
+
+ def beautify_keys_section(self, src):
+ parsed = self.parser(src)
+ layer_output = []
+
+ keymap = parsed.children()[0]
+ layers = keymap[1]
+ for layer in layers.init.exprs:
+ input_layout = layer.expr.name.name
+
+ key_symbols = self.layer_expr(layer)
+ # re-order keys from input_layout to regular layout
+ if input_layout == "LAYOUT_ergodox_pretty":
+ key_symbols = [key_symbols[i] for i in self.index_conversion_map_reversed(self.INDEX_CONVERSTION_LAYOUT_ergodox_pretty_to_LAYOUT_ergodox)]
+
+ padded_key_symbols = self.pad_key_symbols(key_symbols, input_layout)
+ current_pretty_output_layer = self.pretty_output_layer(layer.name[0].value, padded_key_symbols)
+ # strip trailing spaces from padding
+ layer_output.append(re.sub(r" +\n", "\n", current_pretty_output_layer))
+
+ return [self.KEYMAP_START + "\n",
+ self.KEY_CHART + "\n",
+ ",\n\n".join(layer_output) + "\n",
+ self.KEYMAP_END + "\n"]
+
+ def get_row_group(self, row):
+ for low, high in self.KEY_ROW_GROUPS[self.output_layout]:
+ if low <= row <= high:
+ return (low, high)
+ raise Exception("Cannot find row groups in KEY_ROW_GROUPS")
+
+
+ def calculate_column_max_widths(self, key_symbols):
+ # calculate the max width for each column
+ self.column_max_widths = {}
+ for i in range(len(key_symbols)):
+ row_index, column_index = self.current_converted_KEY_COORDINATES[i]
+ row_group = self.get_row_group(row_index)
+ if (row_group, column_index) in self.column_max_widths:
+ self.column_max_widths[(row_group, column_index)] = max(self.column_max_widths[(row_group, column_index)], len(key_symbols[i]))
+ else:
+ self.column_max_widths[(row_group, column_index)] = len(key_symbols[i])
+
+
+ def pad_key_symbols(self, key_symbols, input_layout, just='left'):
+ self.calculate_column_max_widths(key_symbols)
+
+ padded_key_symbols = []
+ # pad each key symbol
+ for i in range(len(key_symbols)):
+ key = key_symbols[i]
+ # look up column coordinate to determine number of spaces to pad
+ row_index, column_index = self.current_converted_KEY_COORDINATES[i]
+ row_group = self.get_row_group(row_index)
+ if just == 'left':
+ padded_key_symbols.append(key.ljust(self.column_max_widths[(row_group, column_index)]))
+ else:
+ padded_key_symbols.append(key.rjust(self.column_max_widths[(row_group, column_index)]))
+ return padded_key_symbols
+
+
+ layer_keys_pointer = 0
+ layer_keys = None
+ def grab_next_n_columns(self, n_columns, input_layout, layer_keys = None, from_beginning = False):
+ if layer_keys:
+ self.layer_keys = layer_keys
+ if from_beginning:
+ self.layer_keys_pointer = 0
+
+ begin = self.layer_keys_pointer
+ end = begin + n_columns
+ return self.layer_keys[self.layer_keys_pointer-n_keys:self.layer_keys_pointer]
+
+ key_coordinates_counter = 0
+ def get_padded_line(self, source_keys, key_from, key_to, just="left"):
+ if just == "right":
+ keys = [k.strip().rjust(len(k)) for k in source_keys[key_from:key_to]]
+ else:
+ keys = [k for k in source_keys[key_from:key_to]]
+
+ from_row, from_column = self.KEY_COORDINATES[self.output_layout][self.key_coordinates_counter]
+ row_group = self.get_row_group(from_row)
+ self.key_coordinates_counter += key_to - key_from
+ columns_before_key_from = sorted([col for row, col in self.KEY_COORDINATES[self.output_layout] if row == from_row and col < from_column])
+ # figure out which columns in this row needs padding; only pad empty columns to the right of an existing column
+ columns_to_pad = { c: True for c in range(from_column) }
+ if columns_before_key_from:
+ for c in range(max(columns_before_key_from)+1):
+ columns_to_pad[c] = False
+
+ # for rows with fewer columns that don't start with column 0, we need to insert leading spaces
+ spaces = 0
+ for c, v in columns_to_pad.items():
+ if not v:
+ continue
+ if (row_group,c) in self.column_max_widths:
+ spaces += self.column_max_widths[(row_group,c)] + len(", ")
+ else:
+ spaces += 0
+ return " " * spaces + ", ".join(keys) + ","
+
+ def pretty_output_layer(self, layer, keys):
+ self.key_coordinates_counter = 0
+ if self.output_layout == "LAYOUT_ergodox":
+ formatted_key_symbols = """
+// left hand
+
+{}
+{}
+{}
+{}
+{}
+
+// left thumb
+
+{}
+{}
+{}
+
+// right hand
+
+{}
+{}
+{}
+{}
+{}
+
+// right thumb
+
+{}
+{}
+{}
+""".format(
+ # left hand
+ self.get_padded_line(keys, 0, 7, just="left"),
+ self.get_padded_line(keys, 7, 14, just="left"),
+ self.get_padded_line(keys, 14, 20, just="left"),
+ self.get_padded_line(keys, 20, 27, just="left"),
+ self.get_padded_line(keys, 27, 32, just="left"),
+ # left thumb
+ self.get_padded_line(keys, 32, 34, just="left"),
+ self.get_padded_line(keys, 34, 35, just="left"),
+ self.get_padded_line(keys, 35, 38, just="left"),
+ # right hand
+ self.get_padded_line(keys, 38, 45, just="left"),
+ self.get_padded_line(keys, 45, 52, just="left"),
+ self.get_padded_line(keys, 52, 58, just="left"),
+ self.get_padded_line(keys, 58, 65, just="left"),
+ self.get_padded_line(keys, 65, 70, just="left"),
+ # right thumb
+ self.get_padded_line(keys, 70, 72, just="left"),
+ self.get_padded_line(keys, 72, 73, just="left"),
+ self.get_padded_line(keys, 73, 76, just="left"),
+ )
+ elif self.output_layout == "LAYOUT_ergodox_pretty":
+ left_half_justification = "right" if self.justify_toward_center else "left"
+ formatted_key_symbols = """
+{} {}
+{} {}
+{} {}
+{} {}
+{} {}
+
+{} {}
+{} {}
+{} {}
+""".format(
+ self.get_padded_line(keys, 0, 7, just=left_half_justification), self.get_padded_line(keys, 38, 45, just="left"),
+ self.get_padded_line(keys, 7, 14, just=left_half_justification), self.get_padded_line(keys, 45, 52, just="left"),
+ self.get_padded_line(keys, 14, 20, just=left_half_justification), self.get_padded_line(keys, 52, 58, just="left"),
+ self.get_padded_line(keys, 20, 27, just=left_half_justification), self.get_padded_line(keys, 58, 65, just="left"),
+ self.get_padded_line(keys, 27, 32, just=left_half_justification), self.get_padded_line(keys, 65, 70, just="left"),
+
+ self.get_padded_line(keys, 32, 34, just=left_half_justification), self.get_padded_line(keys, 70, 72, just="left"),
+ self.get_padded_line(keys, 34, 35, just=left_half_justification), self.get_padded_line(keys, 72, 73, just="left"),
+ self.get_padded_line(keys, 35, 38, just=left_half_justification), self.get_padded_line(keys, 73, 76, just="left"),
+
+ )
+ else:
+ formatted_key_symbols = ""
+
+ # rid of the trailing comma
+ formatted_key_symbols = formatted_key_symbols[0:len(formatted_key_symbols)-2] + "\n"
+ s = "[{}] = {}({})".format(layer, self.output_layout, formatted_key_symbols)
+ return s
+
+ # helper functions for pycparser
+ def parser(self, src):
+ src = self.comment_remover(src)
+ return pycparser.CParser().parse(src)
+ def comment_remover(self, text):
+ # remove comments since pycparser cannot deal with them
+ # credit: https://stackoverflow.com/a/241506
+ def replacer(match):
+ s = match.group(0)
+ if s.startswith('/'):
+ return " " # note: a space and not an empty string
+ else:
+ return s
+ pattern = re.compile(
+ r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
+ re.DOTALL | re.MULTILINE
+ )
+ return re.sub(pattern, replacer, text)
+
+ def function_expr(self, f):
+ name = f.name.name
+ args = []
+ for arg in f.args.exprs:
+ if type(arg) is pycparser.c_ast.Constant:
+ args.append(arg.value)
+ elif type(arg) is pycparser.c_ast.ID:
+ args.append(arg.name)
+ return "{}({})".format(name, ",".join(args))
+
+ def key_expr(self, raw):
+ if type(raw) is pycparser.c_ast.ID:
+ if raw.name in self.KEY_ALIASES:
+ return self.KEY_ALIASES[raw.name]
+ return raw.name
+ elif type(raw) is pycparser.c_ast.FuncCall:
+ return self.function_expr(raw)
+
+ def layer_expr(self, layer):
+ transformed = [self.key_expr(k) for k in layer.expr.args.exprs]
+ return transformed
+
+
+if __name__ == "__main__":
+
+ parser = argparse.ArgumentParser(description="Beautify keymap.c downloaded from ErgoDox-Ez Configurator for easier customization.")
+ parser.add_argument("input_filename", help="input file: c source code file that has the layer keymaps")
+ parser.add_argument("-o", "--output-filename", help="output file: beautified c filename. If not given, output to STDOUT.")
+ parser.add_argument("-p", "--pretty-output-layout", action="store_true", help="use LAYOUT_ergodox_pretty for output instead of LAYOUT_ergodox")
+ parser.add_argument("-c", "--justify-toward-center", action="store_true", help="for LAYOUT_ergodox_pretty, align right for the left half, and align left for the right half. Default is align left for both halves.")
+ args = parser.parse_args()
+ if args.pretty_output_layout:
+ output_layout="LAYOUT_ergodox_pretty"
+ else:
+ output_layout="LAYOUT_ergodox"
+ with open(args.input_filename) as f:
+ source_code = f.read()
+ result = KeymapBeautifier(source_code, output_layout=output_layout, justify_toward_center=args.justify_toward_center).output
+ if args.output_filename:
+ with open(args.output_filename, "w") as f:
+ f.write(result)
+ else:
+ print(result)
+
diff --git a/keyboards/ergodox_ez/util/keymap_beautifier/README.md b/keyboards/ergodox_ez/util/keymap_beautifier/README.md
new file mode 100644
index 0000000000..bd3d125a6d
--- /dev/null
+++ b/keyboards/ergodox_ez/util/keymap_beautifier/README.md
@@ -0,0 +1,139 @@
+# keymap_beautifier.py
+
+## About
+This Python 3 script, by [Tsan-Kuang Lee](https://github.com/tsankuanglee) takes the keymap.c downloaded from [ErgoDox EZ Configurator](https://configure.ergodox-ez.com/) and beautifies it for easier customization, allowing one to quickly draft a layout to build upon.
+
+## Features
+For example, the original `keymap.c` looks like
+
+```
+[0] = LAYOUT_ergodox(KC_EQUAL,KC_1,KC_2,KC_3,KC_4,KC_5,LCTL(KC_MINUS),KC_DELETE,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_LBRACKET,KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,KC_LSPO,CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,ALL_T(KC_NO),LT(1,KC_GRAVE),KC_QUOTE,LALT(KC_LSHIFT),KC_LEFT,KC_RIGHT,ALT_T(KC_APPLICATION),KC_LGUI,KC_HOME,KC_SPACE,KC_UNDS,KC_END,LCTL(KC_EQUAL),KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINUS,KC_RBRACKET,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLASH,KC_H,ALT_T(KC_J),KC_K,KC_L,LT(2,KC_SCOLON),GUI_T(KC_QUOTE),MEH_T(KC_NO),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),KC_RSPC,KC_UP,KC_DOWN,KC_LBRACKET,KC_RBRACKET,TT(1),KC_LALT,CTL_T(KC_ESCAPE),KC_PGUP,KC_PGDOWN,LT(1,KC_TAB),KC_ENTER),
+```
+
+The beautifier parses it and outputs:
+
+```
+[0] = LAYOUT_ergodox(
+// left hand
+
+KC_EQUAL , KC_1 , KC_2 , KC_3 , KC_4 , KC_5, LCTL(KC_MINUS),
+KC_DELETE , KC_Q , KC_W , KC_E , KC_R , KC_T, KC_LBRACKET ,
+KC_BSPACE , KC_A , KC_S , KC_D , KC_F , KC_G,
+KC_LSPO , CTL_T(KC_Z), KC_X , KC_C , KC_V , KC_B, ALL_T(KC_NO) ,
+LT(1,KC_GRAVE), KC_QUOTE , LALT(KC_LSHIFT), KC_LEFT, KC_RIGHT,
+
+// left thumb
+
+ ALT_T(KC_APPLICATION), KC_LGUI,
+ KC_HOME,
+KC_SPACE, KC_UNDS , KC_END ,
+
+// right hand
+
+LCTL(KC_EQUAL), KC_6, KC_7 , KC_8 , KC_9 , KC_0 , KC_MINUS ,
+KC_RBRACKET , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_BSLASH ,
+ KC_H, ALT_T(KC_J), KC_K , KC_L , LT(2,KC_SCOLON), GUI_T(KC_QUOTE),
+MEH_T(KC_NO) , KC_N, KC_M , KC_COMMA, KC_DOT , CTL_T(KC_SLASH), KC_RSPC ,
+ KC_UP , KC_DOWN , KC_LBRACKET, KC_RBRACKET , TT(1) ,
+
+// right thumb
+
+KC_LALT , CTL_T(KC_ESCAPE),
+KC_PGUP ,
+KC_PGDOWN, LT(1,KC_TAB) , KC_ENTER
+)
+```
+
+Optionally, it can also render [LAYOUT_ergodox_pretty](https://github.com/qmk/qmk_firmware/blob/ee700b2e831067bdb7584425569b61bc6329247b/keyboards/ergodox_ez/keymaps/bpruitt-goddard/keymap.c#L49-L57):
+```
+[0] = LAYOUT_ergodox_pretty(
+ KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEAD, KC_LEAD, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPACE ,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HYPR, KC_HYPR, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLASH ,
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H , KC_J , KC_K , KC_L , KC_SCOLON , KC_QUOTE ,
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, SH_MON, SH_MON , KC_N , KC_M , KC_COMMA , KC_DOT , KC_SLASH , KC_RSHIFT ,
+LT(6,KC_NO), LT(7,KC_NO), KC_LCTRL, KC_LGUI, KC_LALT, ALGR_T(KC_MINUS), RGUI_T(KC_EQUAL), RCTL_T(KC_LBRACKET), LT(10,KC_RBRACKET), LT(6,KC_APPLICATION),
+
+ LT(6,KC_GRAVE), MEH_T(KC_NO), KC_LEFT, KC_RIGHT ,
+ LT(10,KC_DELETE), KC_UP ,
+ KC_SPACE, LT(8,KC_ENTER), LT(7,KC_BSPACE), KC_DOWN, LT(7,KC_SPACE), LT(8,KC_ENTER)
+)
+```
+
+We can also align everythng t othe left (easier editing in my opinon):
+```
+[0] = LAYOUT_ergodox_pretty(
+KC_ESCAPE , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_LEAD , KC_LEAD, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPACE ,
+KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_HYPR , KC_HYPR, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLASH ,
+KC_LCTRL , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCOLON , KC_QUOTE ,
+KC_LSHIFT , KC_Z , KC_X , KC_C , KC_V , KC_B , SH_MON , SH_MON , KC_N , KC_M , KC_COMMA , KC_DOT , KC_SLASH , KC_RSHIFT ,
+LT(6,KC_NO), LT(7,KC_NO), KC_LCTRL, KC_LGUI, KC_LALT , ALGR_T(KC_MINUS), RGUI_T(KC_EQUAL), RCTL_T(KC_LBRACKET), LT(10,KC_RBRACKET), LT(6,KC_APPLICATION),
+
+ LT(6,KC_GRAVE), MEH_T(KC_NO) , KC_LEFT, KC_RIGHT ,
+ LT(10,KC_DELETE), KC_UP ,
+ KC_SPACE, LT(8,KC_ENTER), LT(7,KC_BSPACE) , KC_DOWN, LT(7,KC_SPACE), LT(8,KC_ENTER)
+)
+```
+
+## Usage
+
+### With docker
+This is the cleaner way. `Docker` is the only requirement. The program executes within a container that has all dependencies installed.
+
+First build the images. (Run once)
+```
+cd QMK_GIT_REPO_dir/keyboards/ergodox_ez/util/keymap_beautifier
+docker build -t keymapbeautifier:1.0 .
+```
+Run it
+```
+cd QMK_GIT_REPO_dir/keyboards/ergodox_ez/util/keymap_beautifier
+cp PATH_TO_YOUR_C_SOURCE_FILE.c input.c
+./docker_run.sh input.c -p -c -o output.c
+```
+The prettified file is written to `output.c`. See the section Tweaks for non-default settings.
+
+### Without docker
+Requirements:
+* python3 (tested on 3.7.4)
+* python module `pycparser` installed (with `pip install pycparser`)
+
+To run:
+```
+cd QMK_GIT_REPO_dir/keyboards/ergodox_ez/util/keymap_beautifier
+cp PATH_TO_YOUR_C_SOURCE_FILE.c input.c
+./KeymapBeautifier.py input.c -p -c -o output.c
+```
+The prettified file is written to `output.c`. See the section Tweaks for non-default settings.
+
+## Tweaks
+```
+usage: KeymapBeautifier.py [-h] [-o OUTPUT_FILENAME] [-p] [-c] input_filename
+
+Beautify keymap.c downloaded from ErgoDox-Ez Configurator for easier
+customization.
+
+positional arguments:
+ input_filename input file: c source code file that has the layer
+ keymaps
+
+optional arguments:
+ -h, --help show this help message and exit
+ -o OUTPUT_FILENAME, --output-filename OUTPUT_FILENAME
+ output file: beautified c filename. If not given,
+ output to STDOUT.
+ -p, --pretty-output-layout
+ use LAYOUT_ergodox_pretty for output instead of
+ LAYOUT_ergodox
+ -c, --justify-toward-center
+ for LAYOUT_ergodox_pretty, align right for the left
+ half, and align left for the right half. Default is
+ align left for both halves.
+```
+For example,
+```
+./docker_run.sh input.c -p -c -o output.c
+# or if you don't want to use docker:
+#./KeymapBeautifier.py input.c -p -c -o output.c
+```
+will read `input.c`, and produce `output.c` with LAYOUT_ergodox_pretty, and have the key symbols gravitating toward the center.
+
diff --git a/keyboards/ergodox_ez/util/keymap_beautifier/docker_run.sh b/keyboards/ergodox_ez/util/keymap_beautifier/docker_run.sh
new file mode 100755
index 0000000000..1ce43a6dde
--- /dev/null
+++ b/keyboards/ergodox_ez/util/keymap_beautifier/docker_run.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+docker run --mount type=bind,source="${PWD}",target=/usr/src/app --name keymapbeautifier --rm keymapbeautifier:1.0 ./KeymapBeautifier.py $*
diff --git a/keyboards/ergodox_ez/util/keymap_beautifier/requirements.txt b/keyboards/ergodox_ez/util/keymap_beautifier/requirements.txt
new file mode 100644
index 0000000000..dc1c9e101a
--- /dev/null
+++ b/keyboards/ergodox_ez/util/keymap_beautifier/requirements.txt
@@ -0,0 +1 @@
+pycparser
diff --git a/keyboards/ergodox_ez/util/readme.md b/keyboards/ergodox_ez/util/readme.md
index 26c5e5d99c..deb0cad5db 100644
--- a/keyboards/ergodox_ez/util/readme.md
+++ b/keyboards/ergodox_ez/util/readme.md
@@ -1,3 +1,11 @@
# ErgoDox EZ Utilities
+## compile_keymap.py
+
The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option.
+
+## keymap_beautifier.py
+
+This Python 3 script, by [Tsan-Kuang Lee](https://github.com/tsankuanglee) takes the keymap.c downloaded from [ErgoDox EZ Configurator](https://configure.ergodox-ez.com/) and beautifies it for easier customization, allowing one to quickly draft a layout to build upon.
+
+See [README.md](./keymap_beautifier/README.md) for this utility for more details.
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/ergotravel/keymaps/default/keymap.c b/keyboards/ergotravel/keymaps/default/keymap.c
index 370ee2092f..71971d391b 100644
--- a/keyboards/ergotravel/keymaps/default/keymap.c
+++ b/keyboards/ergotravel/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
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/config.h b/keyboards/eve/meteor/config.h
index c948216af2..b23bc877fe 100644
--- a/keyboards/eve/meteor/config.h
+++ b/keyboards/eve/meteor/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER EVE
#define PRODUCT Meteor
diff --git a/keyboards/eve/meteor/meteor.c b/keyboards/eve/meteor/meteor.c
index 1bd47ef9e1..f5ecbad025 100644
--- a/keyboards/eve/meteor/meteor.c
+++ b/keyboards/eve/meteor/meteor.c
@@ -14,49 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "meteor.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -73,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
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/eve/meteor/rules.mk b/keyboards/eve/meteor/rules.mk
index e43baee5c5..e57c21c856 100644
--- a/keyboards/eve/meteor/rules.mk
+++ b/keyboards/eve/meteor/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
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = no
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-QUANTUM_LIB_SRC = i2c_master.c
diff --git a/keyboards/eve/meteor/usbconfig.h b/keyboards/eve/meteor/usbconfig.h
index da9b2b7197..9b045607f1 100644
--- a/keyboards/eve/meteor/usbconfig.h
+++ b/keyboards/eve/meteor/usbconfig.h
@@ -98,20 +98,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -227,7 +217,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
@@ -380,4 +370,4 @@ section at the end of this file).
#define USB_INTR_ENABLE_BIT INT1
/* #define USB_INTR_PENDING EIFR */
#define USB_INTR_PENDING_BIT INTF1
-#define USB_INTR_VECTOR INT1_vect \ No newline at end of file
+#define USB_INTR_VECTOR INT1_vect
diff --git a/keyboards/exclusive/e65/e65.c b/keyboards/exclusive/e65/e65.c
index e3dab38307..e01a0614c5 100644
--- a/keyboards/exclusive/e65/e65.c
+++ b/keyboards/exclusive/e65/e65.c
@@ -17,16 +17,22 @@
#include "e65.h"
void matrix_init_kb(void) {
- setPinOutput(B6);
+ // 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) {
+ setPinOutput(B6);
+ writePinHigh(B6);
}
-void led_set_kb(uint8_t usb_led) {
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinHigh(B6);
- } else {
- writePinLow(B6);
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(B6, !led_state.caps_lock);
}
- led_set_user(usb_led);
+ return true;
}
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/e6v2/le_bmc/le_bmc.c b/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
index 5f7ef25b22..e3b81c81ba 100644
--- a/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
+++ b/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
@@ -13,49 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "le_bmc.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
-} \ No newline at end of file
+ }
+}
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/le_bmc/rules.mk b/keyboards/exclusive/e6v2/le_bmc/rules.mk
index 13a5f1b89a..106044ba72 100644
--- a/keyboards/exclusive/e6v2/le_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/le_bmc/rules.mk
@@ -24,7 +24,7 @@ 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_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
@@ -34,4 +34,3 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
OPT_DEFS = -DDEBUG_LEVEL=0
-SRC += i2c_master.c
diff --git a/keyboards/exclusive/e6v2/le_bmc/usbconfig.h b/keyboards/exclusive/e6v2/le_bmc/usbconfig.h
index f22f2b631d..7a1471a06f 100644
--- a/keyboards/exclusive/e6v2/le_bmc/usbconfig.h
+++ b/keyboards/exclusive/e6v2/le_bmc/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'E', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e'
diff --git a/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c b/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c
index 5357550ae1..97d354653f 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c
+++ b/keyboards/exclusive/e6v2/oe_bmc/oe_bmc.c
@@ -13,57 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "oe_bmc.h"
-#include "rgblight.h"
-#include "i2c_master.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);
-}
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "oe_bmc.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -72,7 +23,7 @@ void backlight_init_ports(void) {
setPinOutput(D4);
setPinOutput(D6);
- // turn RGB LEDs on
+ // turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
@@ -80,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
- // turn RGB LEDs off
+ if (level == 0) {
+ // turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
- // turn RGB LEDs on
+ } else {
+ // turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
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/e6v2/oe_bmc/rules.mk b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
index 13a5f1b89a..106044ba72 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
@@ -24,7 +24,7 @@ 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_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
@@ -34,4 +34,3 @@ FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
OPT_DEFS = -DDEBUG_LEVEL=0
-SRC += i2c_master.c
diff --git a/keyboards/exclusive/e6v2/oe_bmc/usbconfig.h b/keyboards/exclusive/e6v2/oe_bmc/usbconfig.h
index f22f2b631d..7a1471a06f 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/usbconfig.h
+++ b/keyboards/exclusive/e6v2/oe_bmc/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'E', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e'
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/exent.c b/keyboards/exent/exent.c
index 00cd20aff6..82066f7e85 100644
--- a/keyboards/exent/exent.c
+++ b/keyboards/exent/exent.c
@@ -15,76 +15,3 @@
*/
#include "exent.h"
-
-#ifdef RGBLIGHT_ENABLE
-
-# include <string.h>
-# include "i2c_master.h"
-# include "rgblight.h"
-
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
- i2c_init();
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-// custom RGB driver
-void rgblight_set(void) {
- if (!rgblight_config.enable) {
- memset(led, 0, 3 * RGBLED_NUM);
- }
-
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- rgb_init = true;
- }
-
- rgblight_task();
- matrix_scan_user();
-}
-
-#endif
-
-// 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/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/exent/rules.mk b/keyboards/exent/rules.mk
index a49f320582..10442b31ba 100644
--- a/keyboards/exent/rules.mk
+++ b/keyboards/exent/rules.mk
@@ -19,10 +19,8 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-SRC += i2c_master.c
-
LAYOUTS = 65_ansi 65_iso
diff --git a/keyboards/exent/usbconfig.h b/keyboards/exent/usbconfig.h
index 9ef232f045..83ad06544d 100644
--- a/keyboards/exent/usbconfig.h
+++ b/keyboards/exent/usbconfig.h
@@ -98,20 +98,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -227,7 +217,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/facew/config.h b/keyboards/facew/config.h
index 62ba98be59..9a31f92783 100644
--- a/keyboards/facew/config.h
+++ b/keyboards/facew/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER NotActuallyWinkeyless
#define PRODUCT facew
diff --git a/keyboards/facew/facew.c b/keyboards/facew/facew.c
index 7ec56548b1..fa58f0cf79 100644
--- a/keyboards/facew/facew.c
+++ b/keyboards/facew/facew.c
@@ -16,51 +16,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "facew.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
void backlight_init_ports(void) {
- DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ setPinOutput(D0);
+ setPinOutput(D1);
+ setPinOutput(D4);
+ setPinOutput(D6);
+
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
}
void backlight_set(uint8_t level) {
if (level == 0) {
// Turn out the lights
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
} else {
// Turn on the lights
- PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinHigh(D0);
+ writePinHigh(D1);
+ writePinHigh(D4);
+ writePinHigh(D6);
}
}
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/facew/rules.mk b/keyboards/facew/rules.mk
index c9942e3694..c4117d15d7 100644
--- a/keyboards/facew/rules.mk
+++ b/keyboards/facew/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
@@ -34,11 +19,8 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-SRC = i2c_master.c
-
LAYOUTS = 60_ansi
diff --git a/keyboards/facew/usbconfig.h b/keyboards/facew/usbconfig.h
index f3d663f8a6..47755fa8c1 100644
--- a/keyboards/facew/usbconfig.h
+++ b/keyboards/facew/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'S', 'p', 'r', 'i', 't'
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..959b2443f4
--- /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: [mahuyu 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/flx/virgo/config.h b/keyboards/flx/virgo/config.h
new file mode 100644
index 0000000000..3a631dcac3
--- /dev/null
+++ b/keyboards/flx/virgo/config.h
@@ -0,0 +1,76 @@
+/*
+Copyright 2019 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4658 //FX
+#define PRODUCT_ID 0x5647 //VG
+#define DEVICE_VER 0x0001
+#define MANUFACTURER FLX
+#define PRODUCT Virgo
+#define DESCRIPTION A QMK-powered custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#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 { C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, D0 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, B0, B1 }
+
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN B3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 0
+ #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
+
+// generated by KBFirmware JSON to QMK Parser
+// https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/flx/virgo/info.json b/keyboards/flx/virgo/info.json
new file mode 100644
index 0000000000..91fe3bc341
--- /dev/null
+++ b/keyboards/flx/virgo/info.json
@@ -0,0 +1,106 @@
+{
+ "keyboard_name": "flx-virgo-default",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 20.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 91,
+ "layout": [
+ {"label":"K00 (C6,F0)", "x":0, "y":0},
+ {"label":"K01 (C6,F1)", "x":1.5, "y":0},
+ {"label":"K11 (B6,F1)", "x":2.5, "y":0},
+ {"label":"K02 (C6,F4)", "x":3.5, "y":0},
+ {"label":"K12 (B6,F4)", "x":4.5, "y":0},
+ {"label":"K03 (C6,F5)", "x":6, "y":0},
+ {"label":"K13 (B6,F5)", "x":9, "y":0},
+ {"label":"K04 (C6,F6)", "x":10, "y":0},
+ {"label":"K14 (B6,F6)", "x":11, "y":0},
+ {"label":"K05 (C6,F7)", "x":12.5, "y":0},
+ {"label":"K15 (B6,F7)", "x":13.5, "y":0},
+ {"label":"K06 (C6,C7)", "x":14.5, "y":0},
+ {"label":"K16 (B6,C7)", "x":15.5, "y":0},
+ {"label":"K07 (C6,B0)", "x":17.25, "y":0},
+ {"label":"K17 (B6,B0)", "x":18.25, "y":0},
+ {"label":"K08 (C6,B1)", "x":19.25, "y":0},
+ {"label":"K20 (B5,F0)", "x":0, "y":1.25},
+ {"label":"K30 (B4,F0)", "x":1, "y":1.25},
+ {"label":"K21 (B5,F1)", "x":2, "y":1.25},
+ {"label":"K31 (B4,F1)", "x":3, "y":1.25},
+ {"label":"K22 (B5,F4)", "x":4, "y":1.25},
+ {"label":"K32 (B4,F4)", "x":5, "y":1.25},
+ {"label":"K23 (B5,F5)", "x":6, "y":1.25},
+ {"label":"K33 (B4,F5)", "x":9, "y":1.25},
+ {"label":"K24 (B5,F6)", "x":10, "y":1.25},
+ {"label":"K34 (B4,F6)", "x":11, "y":1.25},
+ {"label":"K25 (B5,F7)", "x":12, "y":1.25},
+ {"label":"K35 (B4,F7)", "x":13, "y":1.25},
+ {"label":"K26 (B5,C7)", "x":14, "y":1.25},
+ {"label":"K36 (B4,C7)", "x":15, "y":1.25},
+ {"label":"K66 (D4,C7)", "x":16, "y":1.25},
+ {"label":"K27 (B5,B0)", "x":17.25, "y":1.25},
+ {"label":"K37 (B4,B0)", "x":18.25, "y":1.25},
+ {"label":"K28 (B5,B1)", "x":19.25, "y":1.25},
+ {"label":"K40 (D7,F0)", "x":0, "y":2.25, "w":1.5},
+ {"label":"K50 (D6,F0)", "x":1.5, "y":2.25},
+ {"label":"K41 (D7,F1)", "x":2.5, "y":2.25},
+ {"label":"K51 (D6,F1)", "x":3.5, "y":2.25},
+ {"label":"K42 (D7,F4)", "x":4.5, "y":2.25},
+ {"label":"K52 (D6,F4)", "x":5.5, "y":2.25},
+ {"label":"K43 (D7,F5)", "x":8.5, "y":2.25},
+ {"label":"K53 (D6,F5)", "x":9.5, "y":2.25},
+ {"label":"K44 (D7,F6)", "x":10.5, "y":2.25},
+ {"label":"K54 (D6,F6)", "x":11.5, "y":2.25},
+ {"label":"K45 (D7,F7)", "x":12.5, "y":2.25},
+ {"label":"K55 (D6,F7)", "x":13.5, "y":2.25},
+ {"label":"K46 (D7,C7)", "x":14.5, "y":2.25},
+ {"label":"K56 (D6,C7)", "x":15.5, "y":2.25, "w":1.5},
+ {"label":"K47 (D7,B0)", "x":17.25, "y":2.25},
+ {"label":"K57 (D6,B0)", "x":18.25, "y":2.25},
+ {"label":"K48 (D7,B1)", "x":19.25, "y":2.25},
+ {"label":"K60 (D4,F0)", "x":0, "y":3.25, "w":1.75},
+ {"label":"K70 (D5,F0)", "x":1.75, "y":3.25},
+ {"label":"K61 (D4,F1)", "x":2.75, "y":3.25},
+ {"label":"K71 (D5,F1)", "x":3.75, "y":3.25},
+ {"label":"K62 (D4,F4)", "x":4.75, "y":3.25},
+ {"label":"K72 (D5,F4)", "x":5.75, "y":3.25},
+ {"label":"K63 (D4,F5)", "x":8.75, "y":3.25},
+ {"label":"K73 (D5,F5)", "x":9.75, "y":3.25},
+ {"label":"K64 (D4,F6)", "x":10.75, "y":3.25},
+ {"label":"K74 (D5,F6)", "x":11.75, "y":3.25},
+ {"label":"K65 (D4,F7)", "x":12.75, "y":3.25},
+ {"label":"K75 (D5,F7)", "x":13.75, "y":3.25},
+ {"label":"K76 (D5,C7)", "x":14.75, "y":3.25, "w":2.25},
+ {"label":"K80 (D3,F0)", "x":0, "y":4.25, "w":1.25},
+ {"label":"K90 (D2,F0)", "x":1.25, "y":4.25},
+ {"label":"K81 (D3,F1)", "x":2.25, "y":4.25},
+ {"label":"K91 (D2,F1)", "x":3.25, "y":4.25},
+ {"label":"K82 (D3,F4)", "x":4.25, "y":4.25},
+ {"label":"K92 (D2,F4)", "x":5.25, "y":4.25},
+ {"label":"K83 (D3,F5)", "x":6.25, "y":4.25},
+ {"label":"KA3 (D1,F5)", "x":8.25, "y":4.25},
+ {"label":"K93 (D2,F5)", "x":9.25, "y":4.25},
+ {"label":"K84 (D3,F6)", "x":10.25, "y":4.25},
+ {"label":"K94 (D2,F6)", "x":11.25, "y":4.25},
+ {"label":"K85 (D3,F7)", "x":12.25, "y":4.25},
+ {"label":"K95 (D2,F7)", "x":13.25, "y":4.25},
+ {"label":"K86 (D3,C7)", "x":14.25, "y":4.25, "w":1.75},
+ {"label":"K96 (D2,C7)", "x":16, "y":4.25},
+ {"label":"K97 (D2,B0)", "x":18.25, "y":4.25},
+ {"label":"KA0 (D1,F0)", "x":0, "y":5.25, "w":1.5},
+ {"label":"KB0 (D0,F0)", "x":2.5, "y":5.25, "w":1.5},
+ {"label":"KA1 (D1,F1)", "x":4, "y":5.25},
+ {"label":"KB2 (D0,F4)", "x":5, "y":5.25, "w":2.25},
+ {"label":"KB4 (D0,F6)", "x":8.25, "y":5.25, "w":2.75},
+ {"label":"KB5 (D0,F7)", "x":11, "y":5.25},
+ {"label":"KA6 (D1,C7)", "x":12, "y":5.25, "w":1.5},
+ {"label":"KB6 (D0,C7)", "x":14.5, "y":5.25, "w":1.5},
+ {"label":"KA7 (D1,B0)", "x":17.25, "y":5.25},
+ {"label":"KB7 (D0,B0)", "x":18.25, "y":5.25},
+ {"label":"KA8 (D1,B1)", "x":19.25, "y":5.25}
+ ]
+ }
+ }
+ ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
+} \ No newline at end of file
diff --git a/keyboards/flx/virgo/keymaps/default/config.h b/keyboards/flx/virgo/keymaps/default/config.h
new file mode 100644
index 0000000000..26c6d6ade1
--- /dev/null
+++ b/keyboards/flx/virgo/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/flx/virgo/keymaps/default/keymap.c b/keyboards/flx/virgo/keymaps/default/keymap.c
new file mode 100644
index 0000000000..789c369dbd
--- /dev/null
+++ b/keyboards/flx/virgo/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* 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_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_ENT,
+ KC_LSFT, KC_BSLS, 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_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_LALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, KC_1, KC_2, KC_3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, KC_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_0, KC_EQL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+}; \ No newline at end of file
diff --git a/keyboards/flx/virgo/keymaps/default/readme.md b/keyboards/flx/virgo/keymaps/default/readme.md
new file mode 100644
index 0000000000..e22e64c954
--- /dev/null
+++ b/keyboards/flx/virgo/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for virgo
diff --git a/keyboards/flx/virgo/readme.md b/keyboards/flx/virgo/readme.md
new file mode 100644
index 0000000000..1edfeaf830
--- /dev/null
+++ b/keyboards/flx/virgo/readme.md
@@ -0,0 +1,15 @@
+# virgo
+
+![virgo](https://i.imgur.com/WlWwDLC.jpg)
+
+Custom Split TKL
+
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: Virgo PCB
+* Hardware Availability: GB TBD
+
+Make example for this keyboard (after setting up your build environment):
+
+ make flx/virgo: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/flx/virgo/rules.mk b/keyboards/flx/virgo/rules.mk
new file mode 100644
index 0000000000..b9bb2915f1
--- /dev/null
+++ b/keyboards/flx/virgo/rules.mk
@@ -0,0 +1,36 @@
+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 = 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
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+
+# generated by KBFirmware JSON to QMK Parser
+# https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/flx/virgo/virgo.c b/keyboards/flx/virgo/virgo.c
new file mode 100644
index 0000000000..102d91a709
--- /dev/null
+++ b/keyboards/flx/virgo/virgo.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 "virgo.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ setPinOutput(E6);
+ setPinOutput(B2);
+ 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) {
+ if(led_update_user(led_state)) {
+ writePin(E6, !led_state.caps_lock);
+ writePin(B2, !led_state.scroll_lock);
+ }
+ return true;
+}
diff --git a/keyboards/flx/virgo/virgo.h b/keyboards/flx/virgo/virgo.h
new file mode 100644
index 0000000000..015585c4e1
--- /dev/null
+++ b/keyboards/flx/virgo/virgo.h
@@ -0,0 +1,43 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07, K17, K08, \
+ K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K66, K27, K37, K28, \
+ K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K56, K47, K57, K48, \
+ K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K76, \
+ K80, K90, K81, K91, K82, K92, K83, KA3, K93, K84, K94, K85, K95, K86, K96, K97, \
+ KA0, KB0, KA1, KB2, KB4, KB5, KA6, KB6, KA7, KB7, KA8 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { KC_NO, K11, K12, K13, K14, K15, K16, K17, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, KC_NO }, \
+ { K60, K61, K62, K63, K64, K65, K66, KC_NO, KC_NO }, \
+ { K70, K71, K72, K73, K74, K75, K76, KC_NO, KC_NO }, \
+ { K80, K81, K82, K83, K84, K85, K86, KC_NO, KC_NO }, \
+ { K90, K91, K92, K93, K94, K95, K96, K97, KC_NO }, \
+ { KA0, KA1, KC_NO, KA3, KC_NO, KC_NO, KA6, KA7, KA8 }, \
+ { KB0, KC_NO, KB2, KC_NO, KB4, KB5, KB6, KB7, KC_NO }, \
+}
+
+// generated by KBFirmware JSON to QMK Parser
+// https://noroadsleft.github.io/kbf_qmk_converter/ \ No newline at end of file
diff --git a/keyboards/fortitude60/keymaps/default/keymap.c b/keyboards/fortitude60/keymaps/default/keymap.c
index d20ca40fbb..c476fed854 100644
--- a/keyboards/fortitude60/keymaps/default/keymap.c
+++ b/keyboards/fortitude60/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -156,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/ft/mars80/mars80.c b/keyboards/ft/mars80/mars80.c
index 7543450822..8e51274087 100644
--- a/keyboards/ft/mars80/mars80.c
+++ b/keyboards/ft/mars80/mars80.c
@@ -16,50 +16,6 @@
#include "mars80.h"
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
setPinOutput(D0);
@@ -75,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
-} \ No newline at end of file
+ }
+}
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/ft/mars80/rules.mk b/keyboards/ft/mars80/rules.mk
index f1c79b196c..de85d62c8e 100644
--- a/keyboards/ft/mars80/rules.mk
+++ b/keyboards/ft/mars80/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2019 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# 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
@@ -34,10 +19,8 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-SRC += i2c_master.c
-
LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/ft/mars80/usbconfig.h b/keyboards/ft/mars80/usbconfig.h
index 338b67f583..4430d9e67d 100644
--- a/keyboards/ft/mars80/usbconfig.h
+++ b/keyboards/ft/mars80/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'f', 't'
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/geekboards/tester/config.h b/keyboards/geekboards/tester/config.h
index ac67877ffc..8a6cc09a12 100644
--- a/keyboards/geekboards/tester/config.h
+++ b/keyboards/geekboards/tester/config.h
@@ -23,6 +23,7 @@
#define LOCKING_RESYNC_ENABLE
#define DEBOUNCE 3
+#ifdef RGB_MATRIX_ENABLE
#define RGB_DISABLE_AFTER_TIMEOUT 0
#define RGB_DISABLE_WHEN_USB_SUSPENDED true
#define RGB_MATRIX_KEYPRESSES
@@ -32,8 +33,8 @@
#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110101
-
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 8
#define DRIVER_2_LED_TOTAL 0
#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#endif \ No newline at end of file
diff --git a/keyboards/gergo/keymaps/drashna/keymap.c b/keyboards/gergo/keymaps/drashna/keymap.c
index edc5a9e997..d1e6224060 100644
--- a/keyboards/gergo/keymaps/drashna/keymap.c
+++ b/keyboards/gergo/keymaps/drashna/keymap.c
@@ -1,14 +1,12 @@
-/* Good on you for modifying your layout! if you don't have
- * time to read the QMK docs, a list of keycodes can be found at
- *
- * https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
- *
- * There's also a template for adding new layers at the bottom of this file!
- */
-
-#include QMK_KEYBOARD_H
#include "drashna.h"
+/*
+ * The `LAYOUT_gergo_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
// clang-format off
#define LAYOUT_gergo_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -17,7 +15,7 @@
) \
LAYOUT_gergo_wrapper( \
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_PIPE, \
- KC_TAB, K11, K12, K13, K14, K15, _______, _______, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
+ 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, _______, _______, _______, _______, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
KC_GRV, KC_SPC, BK_LWER, OS_LALT, OS_RGUI, DL_RAIS, KC_ENT, _______ \
)
diff --git a/keyboards/gh60/revc/info.json b/keyboards/gh60/revc/info.json
index e2a7746457..51c61f3182 100644
--- a/keyboards/gh60/revc/info.json
+++ b/keyboards/gh60/revc/info.json
@@ -9,417 +9,38 @@
"height": 5,
"layouts": {
"LAYOUT_all": {
- "key_count": 65,
- "layout": [
- {"label":"~", "x":0, "y":0},
- {"label":"!", "x":1, "y":0},
- {"label":"@", "x":2, "y":0},
- {"label":"#", "x":3, "y":0},
- {"label":"$", "x":4, "y":0},
- {"label":"%", "x":5, "y":0},
- {"label":"^", "x":6, "y":0},
- {"label":"&", "x":7, "y":0},
- {"label":"*", "x":8, "y":0},
- {"label":"(", "x":9, "y":0},
- {"label":")", "x":10, "y":0},
- {"label":"_", "x":11, "y":0},
- {"label":"+", "x":12, "y":0},
- {"label":"Backspace", "x":13, "y":0},
- {"label":"Backspace Extra", "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":"ISO Hash", "x":12.75, "y":2},
- {"label":"Enter", "x":13.75, "y":2, "w":1.25},
- {"label":"Shift", "x":0, "y":3, "w":1.25},
- {"label":"ISO Backslash", "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":"HHKB Fn", "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},
- {"label":"Space", "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}
- ]
+ "key_count":65,
+ "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0},{"label":"Backspace Extra","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":"ISO Hash","x":12.75,"y":2},{"label":"Enter","x":13.75,"y":2,"w":1.25},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"ISO Backslash","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":"HHKB Fn","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},{"label":"Space","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": {
- "key_count": 65,
- "layout": [
- {"label":"~", "x":0, "y":0},
- {"label":"!", "x":1, "y":0},
- {"label":"@", "x":2, "y":0},
- {"label":"#", "x":3, "y":0},
- {"label":"$", "x":4, "y":0},
- {"label":"%", "x":5, "y":0},
- {"label":"^", "x":6, "y":0},
- {"label":"&", "x":7, "y":0},
- {"label":"*", "x":8, "y":0},
- {"label":"(", "x":9, "y":0},
- {"label":")", "x":10, "y":0},
- {"label":"_", "x":11, "y":0},
- {"label":"+", "x":12, "y":0},
- {"label":"Backspace", "x":13, "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":"ISO Hash", "x":12.75, "y":2},
- {"label":"Enter", "x":13.75, "y":2, "w":1.25},
- {"label":"Shift", "x":0, "y":3, "w":1.25},
- {"label":"ISO Backslash", "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":"HHKB Fn", "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},
- {"label":"Space", "x":3.75, "y":4, "w":6.25},
- {"label":"Backspace Extra", "x":14, "y":0},
- {"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}
- ]
+ "key_count":65,
+ "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"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":"ISO Hash","x":12.75,"y":2},{"label":"Enter","x":13.75,"y":2,"w":1.25},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"ISO Backslash","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":"HHKB Fn","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},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Backspace Extra","x":14,"y":0},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
},
"LAYOUT_60_ansi": {
- "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},
- {"label":"Space", "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}
- ]
+ "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},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
},
"LAYOUT_60_iso": {
- "key_count": 62,
- "layout": [
- {"label":"\u00ac", "x":0, "y":0},
- {"label":"!", "x":1, "y":0},
- {"label":"\"", "x":2, "y":0},
- {"label":"\u00a3", "x":3, "y":0},
- {"label":"$", "x":4, "y":0},
- {"label":"%", "x":5, "y":0},
- {"label":"^", "x":6, "y":0},
- {"label":"&", "x":7, "y":0},
- {"label":"*", "x":8, "y":0},
- {"label":"(", "x":9, "y":0},
- {"label":")", "x":10, "y":0},
- {"label":"_", "x":11, "y":0},
- {"label":"+", "x":12, "y":0},
- {"label":"Backspace", "x":13, "y":0, "w":2},
- {"label":"Tab", "x":0, "y":1, "w":1.5},
- {"label":"Q", "x":1.5, "y":1},
- {"label":"W", "x":2.5, "y":1},
- {"label":"E", "x":3.5, "y":1},
- {"label":"R", "x":4.5, "y":1},
- {"label":"T", "x":5.5, "y":1},
- {"label":"Y", "x":6.5, "y":1},
- {"label":"U", "x":7.5, "y":1},
- {"label":"I", "x":8.5, "y":1},
- {"label":"O", "x":9.5, "y":1},
- {"label":"P", "x":10.5, "y":1},
- {"label":"{", "x":11.5, "y":1},
- {"label":"}", "x":12.5, "y":1},
- {"label":"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}
- ]
+ "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}]
},
"LAYOUT_60_ansi_split_bs_rshift": {
- "key_count": 63,
- "layout": [
- {"label":"~", "x":0, "y":0},
- {"label":"!", "x":1, "y":0},
- {"label":"@", "x":2, "y":0},
- {"label":"#", "x":3, "y":0},
- {"label":"$", "x":4, "y":0},
- {"label":"%", "x":5, "y":0},
- {"label":"^", "x":6, "y":0},
- {"label":"&", "x":7, "y":0},
- {"label":"*", "x":8, "y":0},
- {"label":"(", "x":9, "y":0},
- {"label":")", "x":10, "y":0},
- {"label":"_", "x":11, "y":0},
- {"label":"+", "x":12, "y":0},
- {"label":"Backspace", "x":13, "y":0},
- {"label":"Backspace Extra", "x":14, "y":0},
- {"label":"Tab", "x":0, "y":1, "w":1.5},
- {"label":"Q", "x":1.5, "y":1},
- {"label":"W", "x":2.5, "y":1},
- {"label":"E", "x":3.5, "y":1},
- {"label":"R", "x":4.5, "y":1},
- {"label":"T", "x":5.5, "y":1},
- {"label":"Y", "x":6.5, "y":1},
- {"label":"U", "x":7.5, "y":1},
- {"label":"I", "x":8.5, "y":1},
- {"label":"O", "x":9.5, "y":1},
- {"label":"P", "x":10.5, "y":1},
- {"label":"{", "x":11.5, "y":1},
- {"label":"}", "x":12.5, "y":1},
- {"label":"|", "x":13.5, "y":1, "w":1.5},
- {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
- {"label":"A", "x":1.75, "y":2},
- {"label":"S", "x":2.75, "y":2},
- {"label":"D", "x":3.75, "y":2},
- {"label":"F", "x":4.75, "y":2},
- {"label":"G", "x":5.75, "y":2},
- {"label":"H", "x":6.75, "y":2},
- {"label":"J", "x":7.75, "y":2},
- {"label":"K", "x":8.75, "y":2},
- {"label":"L", "x":9.75, "y":2},
- {"label":":", "x":10.75, "y":2},
- {"label":"\"", "x":11.75, "y":2},
- {"label":"Enter", "x":12.75, "y":2, "w":2.25},
- {"label":"Shift", "x":0, "y":3, "w":2.25},
- {"label":"Z", "x":2.25, "y":3},
- {"label":"X", "x":3.25, "y":3},
- {"label":"C", "x":4.25, "y":3},
- {"label":"V", "x":5.25, "y":3},
- {"label":"B", "x":6.25, "y":3},
- {"label":"N", "x":7.25, "y":3},
- {"label":"M", "x":8.25, "y":3},
- {"label":"<", "x":9.25, "y":3},
- {"label":">", "x":10.25, "y":3},
- {"label":"?", "x":11.25, "y":3},
- {"label":"Shift", "x":12.25, "y":3, "w":1.75},
- {"label":"HHKB 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":6},
- {"label":"Alt", "x":10, "y":4, "w":1.5},
- {"label":"Win", "x":11.5, "y":4},
- {"label":"Menu", "x":12.5, "y":4},
- {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
- ]
+ "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},{"label":"Backspace Extra","x":14,"y":0},{"label":"Tab","x":0,"y":1,"w":1.5},{"label":"Q","x":1.5,"y":1},{"label":"W","x":2.5,"y":1},{"label":"E","x":3.5,"y":1},{"label":"R","x":4.5,"y":1},{"label":"T","x":5.5,"y":1},{"label":"Y","x":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","x":0,"y":2,"w":1.75},{"label":"A","x":1.75,"y":2},{"label":"S","x":2.75,"y":2},{"label":"D","x":3.75,"y":2},{"label":"F","x":4.75,"y":2},{"label":"G","x":5.75,"y":2},{"label":"H","x":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"Enter","x":12.75,"y":2,"w":2.25},{"label":"Shift","x":0,"y":3,"w":2.25},{"label":"Z","x":2.25,"y":3},{"label":"X","x":3.25,"y":3},{"label":"C","x":4.25,"y":3},{"label":"V","x":5.25,"y":3},{"label":"B","x":6.25,"y":3},{"label":"N","x":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB 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":6},{"label":"Alt","x":10,"y":4,"w":1.5},{"label":"Win","x":11.5,"y":4},{"label":"Menu","x":12.5,"y":4},{"label":"Ctrl","x":13.5,"y":4,"w":1.5}]
},
"LAYOUT_60_ansi_split_rshift": {
"key_count": 62,
- "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":"HHKB Fn", "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},
- {"label":"Space", "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": [{"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":"HHKB Fn", "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}, {"label":"Space", "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_abnt2": {
+ "key_count": 63,
+ "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":"\u00a8", "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":"\u00c7", "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":"?", "x":12.25, "y":3}, {"label":"Shift", "x":13.25, "y":3, "w":1.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
}
}
}
diff --git a/keyboards/gh60/revc/keymaps/danbee/keymap.c b/keyboards/gh60/revc/keymaps/danbee/keymap.c
new file mode 100644
index 0000000000..d8419f5a63
--- /dev/null
+++ b/keyboards/gh60/revc/keymaps/danbee/keymap.c
@@ -0,0 +1,67 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QW,
+ _L1,
+ _L2,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bcksp │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ Ent │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┠│
+ │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ │Shft│ ` │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │
+ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ │ Fn │Alt │Cmd │ Space │Cmd │Hypr│Ctrl│Fn 2│
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘*/
+ [_QW] = LAYOUT_60_iso( /* Layer 0: Qwerty */
+ 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_BSLS, KC_ENT ,
+ KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ MO(_L1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_HYPR, KC_RCTL, MO(_L2)
+ ),
+ /* 1: fn */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ │ § │Br-│Br+│ │ │BL-│BL+│Pre│Pau│Nxt│Mut│Vo-│Vo+│ Del │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Ins │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┠│
+ │ │ │ │ │ │ │ ◀ │ ▼ │ ▲ │ ▶ │ │ │ │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ │ │ │ │ │ │ │BL~│ │ │ │ │ │ │
+ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ │ │ │ │ │ │ │ │ │
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘*/
+ [_L1] = LAYOUT_60_iso( /* Layer 1: Functions */
+ KC_NUBS, KC_BRID, KC_BRIU, _______, _______, BL_DEC, BL_INC, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_INS ,
+ _______, _______, _______, _______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ /* 2: fn 2 */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ │Pwr│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Eject │
+ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┠│
+ │ Caps │ │ │ │ │ │Hom│PgD│PgU│End│ │ │ │ │
+ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ │ │ │ │ │ │ │ │ │
+ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘*/
+ [_L2] = LAYOUT_60_iso( /* Layer 2: Functions */
+ 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_EJCT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/gh60/revc/keymaps/danbee/rules.mk b/keyboards/gh60/revc/keymaps/danbee/rules.mk
new file mode 100644
index 0000000000..b1434f75c8
--- /dev/null
+++ b/keyboards/gh60/revc/keymaps/danbee/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = no
+KEYBOARD_LOCK_ENABLE = yes
diff --git a/keyboards/gh60/revc/keymaps/default_abnt2/keymap.c b/keyboards/gh60/revc/keymaps/default_abnt2/keymap.c
new file mode 100644
index 0000000000..633b053e69
--- /dev/null
+++ b/keyboards/gh60/revc/keymaps/default_abnt2/keymap.c
@@ -0,0 +1,83 @@
+/* Copyright 2019 Luiz Correia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_br_abnt2.h"
+
+enum layer_names {
+ _BL,
+ _FL,
+ _CL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0 (BR ABNT2 Layout shown)
+ * ,-----------------------------------------------------------.
+ * |Esc|1 !|2 @|3 #|4 $|5 %|6 ¨|7 &|8 *|9 (|0 )|- _|= +| Bksp |
+ * |-----------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P |' `|{ [|Enter|
+ * |------------------------------------------------------. |
+ * | Fn1 | A | S | D | F | G | H | J | K | L | Ç |^ ~|} ]| |
+ * |-----------------------------------------------------------|
+ * |Sft |\ || Z | X | C | V | B | N | M |, <|. >|; :|/ ?|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl |GUI|Alt | Space |Alt |GUI|Fn2|Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_60_abnt2(
+ 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, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
+
+
+ [_FL] = LAYOUT_60_abnt2(
+ 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,
+ XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LGUI, XXXXXXX, KC_RALT, KC_RGUI, _______, KC_RCTL),
+
+ [_CL] = LAYOUT_60_abnt2(
+ KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 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, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX),
+
+};
+
+void matrix_scan_user(void) {
+
+ if (layer_state_is(_FL)) {
+ gh60_wasd_leds_on();
+ gh60_fn_led_on();
+ } else {
+ gh60_wasd_leds_off();
+ gh60_fn_led_off();
+ }
+
+ if (layer_state_is(_CL)) {
+ gh60_poker_leds_on();
+ gh60_esc_led_on();
+ } else {
+ gh60_poker_leds_off();
+ gh60_esc_led_off();
+ }
+
+};
diff --git a/keyboards/gh60/revc/keymaps/default_abnt2/readme.md b/keyboards/gh60/revc/keymaps/default_abnt2/readme.md
new file mode 100644
index 0000000000..fe81001a7e
--- /dev/null
+++ b/keyboards/gh60/revc/keymaps/default_abnt2/readme.md
@@ -0,0 +1,15 @@
+# BR ABNT2 layout
+
+This is a Brazilian ABNT2 keymap for the GH60 in a standard layout.
+
+The top-left sends Escape normally, but becomes a quote key when
+tapped whilst either Fn or GUI are held down.
+
+## Layout Image
+
+![Layout Image](http://s2.glbimg.com/hlQMZ_E87B3DB_96rVuO_pY2Yy8=/695x0/s.glbimg.com/po/tt2/f/original/2016/06/21/900px-kb_portuguese_brazilsvg_.png)
+
+----
+### References
+
+1. [Grave Escape - QMK Firmware Documentation](https://docs.qmk.fm/#/feature_grave_esc)
diff --git a/keyboards/gh60/revc/revc.h b/keyboards/gh60/revc/revc.h
index 048263ba73..dda7a0db6d 100644
--- a/keyboards/gh60/revc/revc.h
+++ b/keyboards/gh60/revc/revc.h
@@ -115,3 +115,30 @@ inline void gh60_wasd_leds_off(void) { setPinInput(F7); writePinLow(F7); }
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
+
+/* LAYOUT_60_abnt2
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────â”
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴â”2d │
+ * │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │ 3d │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
+ * │40 │41 │42 │45 │4a │4b │4c │4d │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+*/
+#define LAYOUT_60_abnt2( \
+ 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, \
+ 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, 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, KC_NO }, \
+ { 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, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+}
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/config.h b/keyboards/gingham/config.h
index 53601e8cad..d89120c281 100644
--- a/keyboards/gingham/config.h
+++ b/keyboards/gingham/config.h
@@ -51,6 +51,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
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/gingham/usbconfig.h b/keyboards/gingham/usbconfig.h
index 30cdd36987..3c7aa0da06 100644
--- a/keyboards/gingham/usbconfig.h
+++ b/keyboards/gingham/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x01, 0x00
+#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 'Y','i','a','n','c','a','r','-','D','e', 's', 'i', 'g', 'n', 's'
diff --git a/keyboards/gray_studio/cod67/cod67.h b/keyboards/gray_studio/cod67/cod67.h
index 2d3911e69c..ed4a729971 100644
--- a/keyboards/gray_studio/cod67/cod67.h
+++ b/keyboards/gray_studio/cod67/cod67.h
@@ -19,11 +19,11 @@
#include "quantum.h"
#define LAYOUT( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ 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, 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 \
+ K40, K41, K42, K43, K44, K45, K46, K47, K0D, K49, K4A, K4B, K4C, K4D \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
diff --git a/keyboards/gray_studio/cod67/config.h b/keyboards/gray_studio/cod67/config.h
index 47b42d8a60..2231827ba6 100644
--- a/keyboards/gray_studio/cod67/config.h
+++ b/keyboards/gray_studio/cod67/config.h
@@ -15,18 +15,17 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
+#define PRODUCT_ID 0x0C0D
#define DEVICE_VER 0x0001
-#define MANUFACTURER Gray
-#define PRODUCT cod67
-#define DESCRIPTION 60% Custom Keyboard
+#define MANUFACTURER Gray Studio
+#define PRODUCT COD67
+#define DESCRIPTION 60% custom keyboard
/* key matrix size */
#define MATRIX_ROWS 5
@@ -49,135 +48,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
+/* D4 is not a PWM pin, but look at timer assisted software PWM if you want something other than toggle
+ * https://docs.qmk.fm/#/feature_backlight?id=timer-assisted-pwm-implementation
+ */
#define BACKLIGHT_PIN D4
-#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN B2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 20
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 255
+ #define RGBLIGHT_SLEEP
+ #define RGBLIGHT_ANIMATIONS
+#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.
- *
- */
-
-/* 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
-
-#endif
diff --git a/keyboards/gray_studio/cod67/keymaps/default/keymap.c b/keyboards/gray_studio/cod67/keymaps/default/keymap.c
index 245d7eee6f..5403bf406f 100644
--- a/keyboards/gray_studio/cod67/keymaps/default/keymap.c
+++ b/keyboards/gray_studio/cod67/keymaps/default/keymap.c
@@ -19,10 +19,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+ 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_TRNS, 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, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT)
};
diff --git a/keyboards/gray_studio/cod67/keymaps/default/readme.md b/keyboards/gray_studio/cod67/keymaps/default/readme.md
index cfbf846a9a..4b45689de8 100644
--- a/keyboards/gray_studio/cod67/keymaps/default/readme.md
+++ b/keyboards/gray_studio/cod67/keymaps/default/readme.md
@@ -1 +1,5 @@
-# The default keymap for cod67
+# The default keymap for a COD67
+
+The default map only implements the default layer from the map on [ydkb.io](http://ydkb.io).
+
+If you want an example of a multi-layer map, look at [rys's map](../rys).
diff --git a/keyboards/gray_studio/cod67/keymaps/rys/keymap.c b/keyboards/gray_studio/cod67/keymaps/rys/keymap.c
new file mode 100644
index 0000000000..9f1d069b73
--- /dev/null
+++ b/keyboards/gray_studio/cod67/keymaps/rys/keymap.c
@@ -0,0 +1,23 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _TOP,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_TOP] = 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_RSFT, KC_UP, KC_DEL,
+ KC_LCTL, KC_LALT, KC_LGUI, _______, _______, KC_SPC, _______, _______, _______, KC_RGUI, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_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, _______,
+ _______, RGB_TOG, RGB_MOD,RGB_RMOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG,
+ _______, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/gray_studio/cod67/keymaps/rys/readme.md b/keyboards/gray_studio/cod67/keymaps/rys/readme.md
new file mode 100644
index 0000000000..8214809bba
--- /dev/null
+++ b/keyboards/gray_studio/cod67/keymaps/rys/readme.md
@@ -0,0 +1,5 @@
+# Rys's keymap for a COD67
+
+The COD67 supports really nice RGB underglow which you can see through the mid diffuser. I've put control for that on layer 1, along with reset on `Space`, backlight toggle on `Enter`, and the function row. The board supports all of the QMK RGB effects.
+
+Look at the excellent [RGB Lighting](https://docs.qmk.fm/#/feature_rgblight) docs on the QMK site for more controls.
diff --git a/keyboards/gray_studio/cod67/readme.md b/keyboards/gray_studio/cod67/readme.md
index 7f91cf30d1..6e79ffec4a 100644
--- a/keyboards/gray_studio/cod67/readme.md
+++ b/keyboards/gray_studio/cod67/readme.md
@@ -1,30 +1,45 @@
# Gray COD67
-The Gray COD67 is a 60% keyboard with a modern and bold design. It features 20 RGB Underglow LED lights and a unique diffuser placement. The COD67 has the most stunning RGB light strip for a custom mechanical keyboard. It also features a center mounted USB C port.
+The Gray COD67 is a 60% keyboard with a modern and bold design. It features 20 RGB Underglow LED lights and a unique diffuser placement. The COD67 has the most stunning RGB light strip for a custom mechanical keyboard. It also features a center mounted USB C port.
-There were only 75 units made worldwide.
+There were only 75 units made worldwide.
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
Hardware Supported: Gray COD67
Hardware Availability: [Zfrontier](https://en.zfrontier.com/products/cod67)
-At this time, flashing ONLY works on Windows systems.
+## Bootloader mode
-To put in bootloader mode, hold the `Esc` key while plugging in the USB cable.
+To put in bootloader mode, hold the `Esc` key while plugging in the USB cable.
-The COD67 will show up as a drive.
+## Making firmware
Make example for this keyboard (after setting up your build environment):
- make gray_studio/cod67:default:bin
+ make gray_studio/cod67: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).
-Rename the resulting `.bin` file to `cod67.bin`.
+## Flashing in Windows
-Drag and drop `cod67.bin` to the drive, overwriting the previous `cod67.bin` stored on it.
+After putting your COD67 in bootloader mode, it will show up as a drive.
-Press the `Esc` key again to reset the board. You are now ready to type!
+* Rename the resulting `.bin` file to `COD67.BIN`.
+* Drag and drop your new `COD67.BIN` to the drive, overwriting the previous `COD67.BIN` stored on it.
+* Wait a few seconds for it to write. The caps lock LED flashes rapidly while writing.
+* Press the `Esc` key again to reset the board. You are now ready to type!
+
+## Flashing in macOS
+
+After putting your COD67 in bootloader mode, it will show up as a drive.
+
+* Rename the resulting `.bin` file to `COD67.BIN`.
+* Drag the existing `COD67.BIN` file from the drive to the Trash in Finder.
+* Empty the Trash in Finder. It's important you do that due to how macOS handles hidden `.Trashes` on removable drives. It needs to be empty to free up flash space.
+* Drag and drop your new `COD67.BIN` to the drive.
+* Wait a few seconds for it to write. The caps lock LED flashes rapidly while writing.
+* Press the `Esc` key or eject the drive in Finder to reset the board. You are now ready to type!
## Notes
-The backlight pin is attached to a non PWM pin `D4` so backlight is only on/off.
+
+The backlight pin is attached to a non PWM pin `D4` so the backlight is only on/off.
diff --git a/keyboards/gray_studio/cod67/rules.mk b/keyboards/gray_studio/cod67/rules.mk
index 196dfb8c48..0bed09539f 100644
--- a/keyboards/gray_studio/cod67/rules.mk
+++ b/keyboards/gray_studio/cod67/rules.mk
@@ -11,19 +11,23 @@ MCU = atmega32u4
# ATmega328P USBasp
BOOTLOADER = atmel-dfu # actually lufa-ms
+# Mass storage bootloader on the COD67 uses bin files
+FIRMWARE_FORMAT = bin
+
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+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)
+CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable 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
diff --git a/keyboards/gray_studio/hb85/config.h b/keyboards/gray_studio/hb85/config.h
index da230f7e8d..dff360ec6a 100644
--- a/keyboards/gray_studio/hb85/config.h
+++ b/keyboards/gray_studio/hb85/config.h
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422F
+#define DEVICE_VER 0x0200
#define MANUFACTURER Gray Studio
#define PRODUCT HB85
diff --git a/keyboards/gray_studio/hb85/hb85.c b/keyboards/gray_studio/hb85/hb85.c
index 3e42023587..21562b9e0f 100644
--- a/keyboards/gray_studio/hb85/hb85.c
+++ b/keyboards/gray_studio/hb85/hb85.c
@@ -16,33 +16,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 <string.h>
-
-#include "rgblight.h"
-
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "hb85.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -51,7 +25,7 @@ void backlight_init_ports(void) {
setPinOutput(D4);
setPinOutput(D6);
- // turn RGB LEDs on
+ // turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
@@ -59,17 +33,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
- // turn RGB LEDs off
+ if (level == 0) {
+ // turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
- // turn RGB LEDs on
+ } else {
+ // turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
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/hb85/rules.mk b/keyboards/gray_studio/hb85/rules.mk
index 5339aad89c..ec57b03dcb 100644
--- a/keyboards/gray_studio/hb85/rules.mk
+++ b/keyboards/gray_studio/hb85/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2019 fcoury <felipe.coury@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
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC += i2c_master.c
diff --git a/keyboards/gray_studio/hb85/usbconfig.h b/keyboards/gray_studio/hb85/usbconfig.h
index c52c90ce8a..186e2dca35 100644
--- a/keyboards/gray_studio/hb85/usbconfig.h
+++ b/keyboards/gray_studio/hb85/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'G', 'r', 'a', 'y', ' ', 'S', 't', 'u', 'd', 'i', 'o'
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/space65.h b/keyboards/gray_studio/space65/space65.h
index 15aa89935b..520679a2ad 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,14 +41,14 @@
}
#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 }, \
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/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/hadron/rules.mk b/keyboards/hadron/rules.mk
index bd1633f619..8498675750 100644
--- a/keyboards/hadron/rules.mk
+++ b/keyboards/hadron/rules.mk
@@ -1,2 +1 @@
-
DEFAULT_FOLDER = hadron/ver2
diff --git a/keyboards/hadron/ver2/keymaps/default/keymap.c b/keyboards/hadron/ver2/keymaps/default/keymap.c
index 41802d38c4..3b3dd58e2c 100644
--- a/keyboards/hadron/ver2/keymaps/default/keymap.c
+++ b/keyboards/hadron/ver2/keymaps/default/keymap.c
@@ -5,7 +5,6 @@
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
diff --git a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c
deleted file mode 100644
index 4331155df4..0000000000
--- a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#include "hal.h"
-
-#if HAL_USE_PAL || defined(__DOXYGEN__)
-/**
- * @brief PAL setup.
- * @details Digital I/O ports static configuration as defined in @p board.h.
- * This variable is used by the HAL when initializing the PAL driver.
- */
-const PALConfig pal_default_config = {
-#if STM32_HAS_GPIOA
- {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
- VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
-#endif
-#if STM32_HAS_GPIOB
- {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
- VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
-#endif
-#if STM32_HAS_GPIOC
- {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
- VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
-#endif
-#if STM32_HAS_GPIOD
- {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
- VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
-#endif
-#if STM32_HAS_GPIOE
- {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
- VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
-#endif
-#if STM32_HAS_GPIOF
- {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
- VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
-#endif
-#if STM32_HAS_GPIOG
- {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
- VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
-#endif
-#if STM32_HAS_GPIOH
- {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
- VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
-#endif
-#if STM32_HAS_GPIOI
- {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
- VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
-#endif
-};
-#endif
-
-void enter_bootloader_mode_if_requested(void);
-
-/**
- * @brief Early initialization code.
- * @details This initialization must be performed just after stack setup
- * and before any other initialization.
- */
-void __early_init(void) {
- enter_bootloader_mode_if_requested();
- stm32_clock_init();
-}
-
-#if HAL_USE_SDC || defined(__DOXYGEN__)
-/**
- * @brief SDC card detection.
- */
-bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief SDC card write protection detection.
- */
-bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif /* HAL_USE_SDC */
-
-#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
-/**
- * @brief MMC_SPI card detection.
- */
-bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
-
- (void)mmcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief MMC_SPI card write protection detection.
- */
-bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
-
- (void)mmcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif
-
-/**
- * @brief Board-specific initialization code.
- * @todo Add your board-specific code, if any.
- */
-void boardInit(void) {
-}
diff --git a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk
deleted file mode 100644
index 43377629a3..0000000000
--- a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of all the board related files.
-BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
-
-# Required include directories
-BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/hadron/ver3/bootloader_defs.h b/keyboards/hadron/ver3/bootloader_defs.h
deleted file mode 100644
index 3b0e9d20a6..0000000000
--- a/keyboards/hadron/ver3/bootloader_defs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/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/hadron/ver3/rules.mk b/keyboards/hadron/ver3/rules.mk
index 599fb53fae..8ce0d77b78 100644
--- a/keyboards/hadron/ver3/rules.mk
+++ b/keyboards/hadron/ver3/rules.mk
@@ -1,6 +1,4 @@
-# projecct specific files
-
-# Cortex version
+# MCU name
MCU = STM32F303
# Build Options
@@ -17,7 +15,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
CUSTOM_MATRIX = no # Custom matrix file
AUDIO_ENABLE = yes
-RGBLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
RGB_MATRIX_ENABLE = no #WS2812 once arm_rgb is implemented
HAPTIC_ENABLE += DRV2605L
QWIIC_ENABLE += MICRO_OLED
diff --git a/keyboards/handwired/2x5keypad/config.h b/keyboards/handwired/2x5keypad/config.h
index 6d09b5ed00..35a0fda8d1 100644
--- a/keyboards/handwired/2x5keypad/config.h
+++ b/keyboards/handwired/2x5keypad/config.h
@@ -37,6 +37,9 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
+/* Tap dancing params */
+#define TAPPING_TERM 250
+
/* key combination for command */
/* DISABLED
#define IS_COMMAND() ( \
@@ -44,9 +47,6 @@
)
*/
-/* prevent stuck modifiers */
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
diff --git a/keyboards/handwired/2x5keypad/keymaps/default/keymap.c b/keyboards/handwired/2x5keypad/keymaps/default/keymap.c
index 808824f3a2..23614a9b78 100644
--- a/keyboards/handwired/2x5keypad/keymaps/default/keymap.c
+++ b/keyboards/handwired/2x5keypad/keymaps/default/keymap.c
@@ -7,27 +7,116 @@ enum layers {
NORMAL_LAYER = 0,
MEDIA_LAYER,
TBD_LAYER2,
- TBD_LAYER3
+ FRENCH_LAYER
};
+/* Enum for the tap dancing keys */
+enum tap_codes {
+ A_Q, E_Q, E_U, E_E,
+ A_Y, I_I, O_C, U_U
+};
+
+#define FR_A_GRAVE "00E0"
+#define FR_A_HAT "00E2"
+
+#define FR_C_CIRCUM "00E7"
+
+#define FR_E_AIGU "00E9"
+#define FR_E_GRAVE "00E8"
+#define FR_E_HAT "00EA"
+#define FR_E_UMLAUT "00EB"
+
+#define FR_I_HAT "00EE"
+#define FR_I_UMLAUT "00EF"
+
+#define FR_O_HAT "00F4"
+
+#define FR_U_GRAVE "00F9"
+#define FR_U_HAT "00FB"
+#define FR_U_UMLAUT "00FC"
+
+#define FR_Y_UMLAUT "00FF"
+
+#define FR_L_QUOTE "00AB"
+#define FR_R_QUOTE "00BB"
+
+void send_french_unicode_char(uint8_t count, char *once, char *twice)
+{
+ if (count <= 1)
+ send_unicode_hex_string(once);
+ else
+ send_unicode_hex_string(twice);
+}
+
+void dance_a_q(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_A_GRAVE, FR_L_QUOTE);
+}
+
+void dance_e_q(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_E_AIGU, FR_R_QUOTE);
+}
+
+void dance_e_u(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_E_GRAVE, FR_U_GRAVE);
+}
+
+void dance_e_e(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_E_HAT, FR_E_UMLAUT);
+}
+
+void dance_a_y(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_A_HAT, FR_Y_UMLAUT);
+}
+
+void dance_i_i(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_I_HAT, FR_I_UMLAUT);
+}
+
+void dance_o_c(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_O_HAT, FR_C_CIRCUM);
+}
+
+void dance_u_u(qk_tap_dance_state_t *state, void *user_data)
+{
+ send_french_unicode_char(state->count, FR_U_HAT, FR_U_UMLAUT);
+}
+
+/* Define the tap dance actions for the french characters */
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [A_Q] = ACTION_TAP_DANCE_FN(dance_a_q),
+ [E_Q] = ACTION_TAP_DANCE_FN(dance_e_q),
+ [E_U] = ACTION_TAP_DANCE_FN(dance_e_u),
+ [E_E] = ACTION_TAP_DANCE_FN(dance_e_e),
+
+ [A_Y] = ACTION_TAP_DANCE_FN(dance_a_y),
+ [I_I] = ACTION_TAP_DANCE_FN(dance_i_i),
+ [O_C] = ACTION_TAP_DANCE_FN(dance_o_c),
+ [U_U] = ACTION_TAP_DANCE_FN(dance_u_u)
+};
+
+
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [NORMAL_LAYER]=
- LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END,
- WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
+ [NORMAL_LAYER] = LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END,
+ WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
- [MEDIA_LAYER]=
- LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU,
- KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
+ [MEDIA_LAYER] = LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
- [TBD_LAYER2]=
- LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [TBD_LAYER2] = LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [TBD_LAYER3]=
- LAYOUT(TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+ [FRENCH_LAYER] = LAYOUT(TO(0), TD(A_Q), TD(E_Q), TD(E_U), TD(E_E),
+ KC_TRNS, TD(A_Y), TD(I_I), TD(O_C), TD(U_U))
};
@@ -44,11 +133,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
*/
+void matrix_init_user(void)
+{
+ set_unicode_input_mode(UC_WINC); /* See https://jayliu50.github.io/qmk-cheatsheet/ */
+}
+
+
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;
@@ -61,7 +156,7 @@ layer_state_t layer_state_set_user(layer_state_t state)
turn_on_led(BLUE_LED);
break;
- case TBD_LAYER3:
+ case FRENCH_LAYER:
turn_on_led(GREEN_LED);
break;
}
diff --git a/keyboards/handwired/2x5keypad/rules.mk b/keyboards/handwired/2x5keypad/rules.mk
index b7027cd9e9..e62a0f24a8 100644
--- a/keyboards/handwired/2x5keypad/rules.mk
+++ b/keyboards/handwired/2x5keypad/rules.mk
@@ -11,13 +11,17 @@ MCU = atmega32u4
# ATmega328P USBasp
BOOTLOADER = caterina
+
+AUDIO_ENABLE = no
+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
+CONSOLE_ENABLE= no # Console for debug
+EXTRAKEY_ENABLE = yes # Audio control and System control
+MOUSEKEY_ENABLE = yes # Mouse keys
NKRO_ENABLE = yes # USB Nkey Rollover -
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
+
RGBLIGHT_ENABLE = no
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+UNICODE_ENABLE = yes
+TAP_DANCE_ENABLE = yes
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/bluepill/keymaps/default/keymap.c b/keyboards/handwired/bluepill/keymaps/default/keymap.c
index 8a34930390..3d93c24d93 100644
--- a/keyboards/handwired/bluepill/keymaps/default/keymap.c
+++ b/keyboards/handwired/bluepill/keymaps/default/keymap.c
@@ -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
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/co60/rev6/rules.mk b/keyboards/handwired/co60/rev6/rules.mk
index dba41e12be..fc7cabb108 100644
--- a/keyboards/handwired/co60/rev6/rules.mk
+++ b/keyboards/handwired/co60/rev6/rules.mk
@@ -1,40 +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 = STM32F3xx
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F303xC
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f3xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F303XC
-
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# MCU name
+MCU = STM32F303
# Code for backlight breathing:
SRC += led.c
diff --git a/keyboards/handwired/co60/rev7/rules.mk b/keyboards/handwired/co60/rev7/rules.mk
index 6e0b3856ab..9daeaf047a 100644
--- a/keyboards/handwired/co60/rev7/rules.mk
+++ b/keyboards/handwired/co60/rev7/rules.mk
@@ -1,40 +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 = STM32F3xx
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F303xC
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f3xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F303XC
-
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# MCU name
+MCU = STM32F303
# Code for backlight breathing:
SRC += led.c
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/4x5/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c
index 4836bb0694..1a328f9d0a 100644
--- a/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _BASE 0
#define _RAISE 1
diff --git a/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c
index ad23beef5c..52ddfad038 100644
--- a/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _BASE 0
#define _RAISE 1
@@ -84,4 +83,3 @@ void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
-
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c
index 0d1efde33b..0910faf899 100644
--- a/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c
@@ -2,7 +2,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
@@ -48,5 +47,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______, _______,_______
),
};
-
-
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/dactyl_manuform/5x7/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c
index 1378f87232..eb4deb6285 100644
--- a/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c
index b78a560086..fd2e5f413d 100644
--- a/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
@@ -52,4 +51,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-
diff --git a/keyboards/handwired/dactyl_manuform/dmote/62key/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/dmote/62key/keymaps/default/keymap.c
index 3012d40a1b..3770a6d68e 100644
--- a/keyboards/handwired/dactyl_manuform/dmote/62key/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/dmote/62key/keymaps/default/keymap.c
@@ -3,7 +3,6 @@
#include <keymap_colemak.h>
#include <sendstring_colemak.h>
-extern keymap_config_t keymap_config;
// Automatic Layer ID:
enum layer_names {
diff --git a/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c b/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
index d396e46762..394803aef5 100644
--- a/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
@@ -3,7 +3,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
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/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/config.h b/keyboards/handwired/hnah40/config.h
index b7a4105d00..3d3c05fd42 100644
--- a/keyboards/handwired/hnah40/config.h
+++ b/keyboards/handwired/hnah40/config.h
@@ -78,6 +78,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
+#define USB_MAX_POWER_CONSUMPTION 100
+
/*
* Force NKRO
*
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/hnah40/usbconfig.h b/keyboards/handwired/hnah40/usbconfig.h
index cbd37c34dc..b26a3c7d67 100644
--- a/keyboards/handwired/hnah40/usbconfig.h
+++ b/keyboards/handwired/hnah40/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x01
+#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','a','h','K','B'
diff --git a/keyboards/handwired/jot50/keymaps/default/keymap.c b/keyboards/handwired/jot50/keymaps/default/keymap.c
index 4ec535c31d..7b674af528 100644
--- a/keyboards/handwired/jot50/keymaps/default/keymap.c
+++ b/keyboards/handwired/jot50/keymaps/default/keymap.c
@@ -3,7 +3,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -75,10 +74,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) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
void matrix_init_user(void) {
}
-
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 44f993db60..3de30d396b 100644
--- a/keyboards/handwired/jotanck/keymaps/default/keymap.c
+++ b/keyboards/handwired/jotanck/keymaps/default/keymap.c
@@ -3,7 +3,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -79,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);
@@ -119,4 +118,3 @@ void matrix_scan_user(void) {
reset_keyboard();
}
}
-
diff --git a/keyboards/handwired/jotpad16/keymaps/default/keymap.c b/keyboards/handwired/jotpad16/keymaps/default/keymap.c
index fb5dc71e23..a5d81ab3f4 100644
--- a/keyboards/handwired/jotpad16/keymaps/default/keymap.c
+++ b/keyboards/handwired/jotpad16/keymaps/default/keymap.c
@@ -3,7 +3,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/keymaps/default/keymap.c b/keyboards/handwired/minorca/keymaps/default/keymap.c
index 29ed7aa03f..f8f9061fec 100644
--- a/keyboards/handwired/minorca/keymaps/default/keymap.c
+++ b/keyboards/handwired/minorca/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c b/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c
index 9e89611631..296a7a281d 100644
--- a/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c
+++ b/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/handwired/onekey/bluepill/config.h b/keyboards/handwired/onekey/bluepill/config.h
index 81282ae1ff..01555e4315 100644
--- a/keyboards/handwired/onekey/bluepill/config.h
+++ b/keyboards/handwired/onekey/bluepill/config.h
@@ -25,3 +25,5 @@
#define BACKLIGHT_PIN A0
#define BACKLIGHT_PWM_DRIVER PWMD2
#define BACKLIGHT_PWM_CHANNEL 1
+
+#define RGB_DI_PIN A1
diff --git a/keyboards/handwired/onekey/keymaps/rgb/config.h b/keyboards/handwired/onekey/keymaps/rgb/config.h
new file mode 100644
index 0000000000..89e76326b4
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/rgb/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define RGBLED_NUM 9
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/handwired/onekey/keymaps/rgb/keymap.c b/keyboards/handwired/onekey/keymaps/rgb/keymap.c
new file mode 100644
index 0000000000..a96c6f3863
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/rgb/keymap.c
@@ -0,0 +1,11 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT( RGB_MOD )
+};
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom_cyan();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
+}
diff --git a/keyboards/handwired/onekey/keymaps/rgb/rules.mk b/keyboards/handwired/onekey/keymaps/rgb/rules.mk
new file mode 100644
index 0000000000..1e3cebb145
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/rgb/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/handwired/onekey/proton_c/config.h b/keyboards/handwired/onekey/proton_c/config.h
index d4fb9c8299..fe34f94add 100644
--- a/keyboards/handwired/onekey/proton_c/config.h
+++ b/keyboards/handwired/onekey/proton_c/config.h
@@ -26,3 +26,5 @@
#define BACKLIGHT_PWM_DRIVER PWMD4
#define BACKLIGHT_PWM_CHANNEL 3
#define BACKLIGHT_PAL_MODE 2
+
+#define RGB_DI_PIN A1
diff --git a/keyboards/handwired/onekey/stm32f0_disco/config.h b/keyboards/handwired/onekey/stm32f0_disco/config.h
index 4024ee1caa..637ed65d3f 100644
--- a/keyboards/handwired/onekey/stm32f0_disco/config.h
+++ b/keyboards/handwired/onekey/stm32f0_disco/config.h
@@ -26,3 +26,5 @@
#define BACKLIGHT_PWM_DRIVER PWMD3
#define BACKLIGHT_PWM_CHANNEL 3
#define BACKLIGHT_PAL_MODE 0
+
+#define RGB_DI_PIN B15
diff --git a/keyboards/percent/skog/i2c.h b/keyboards/handwired/postageboard/config.h
index ada8cc7bf1..417cc9901c 100644
--- a/keyboards/percent/skog/i2c.h
+++ b/keyboards/handwired/postageboard/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright 2019 Yan-Fa Li
This 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,11 +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/>.
*/
-// Please do not modify this file
-
#pragma once
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+#include "config_common.h"
diff --git a/keyboards/handwired/postageboard/keymaps/default/keymap.c b/keyboards/handwired/postageboard/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a42697a9b1
--- /dev/null
+++ b/keyboards/handwired/postageboard/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 Yan-Fa Li
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 {
+ QMKURL = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ KC_A, KC_1, MO(_FN)
+ ),
+ [_FN] = LAYOUT(
+ RESET, QMKURL, _______
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ 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;
+}
diff --git a/keyboards/handwired/postageboard/keymaps/default/readme.md b/keyboards/handwired/postageboard/keymaps/default/readme.md
new file mode 100644
index 0000000000..c166556a85
--- /dev/null
+++ b/keyboards/handwired/postageboard/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for PostageBoard
diff --git a/keyboards/handwired/postageboard/mini/config.h b/keyboards/handwired/postageboard/mini/config.h
new file mode 100644
index 0000000000..ac7d468855
--- /dev/null
+++ b/keyboards/handwired/postageboard/mini/config.h
@@ -0,0 +1,61 @@
+/*
+Copyright 2019 Yan-Fa Li
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 0xB07D
+#define DEVICE_VER 0x0002
+#define MANUFACTURER LifeIsOnTheWire
+#define PRODUCT PostageBoard
+#define DESCRIPTION "A Handwire Controller Board Round 2"
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#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 { D5 }
+#define MATRIX_COL_PINS { E6, B3, B7 }
+#define UNUSED_PINS { D0, D1, D2, D3, D4, D6, D7, B4, B5, B6, C6, C7, B2, B1, B0, F7, F6, F5, F4, F1, F0 }
+
+/* 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
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/handwired/postageboard/mini/mini.c b/keyboards/handwired/postageboard/mini/mini.c
new file mode 100644
index 0000000000..381ad975f0
--- /dev/null
+++ b/keyboards/handwired/postageboard/mini/mini.c
@@ -0,0 +1,18 @@
+/* Copyright 2019 Yan-Fa Li
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "mini.h"
+
diff --git a/keyboards/handwired/postageboard/mini/mini.h b/keyboards/handwired/postageboard/mini/mini.h
new file mode 100644
index 0000000000..28ee58ef13
--- /dev/null
+++ b/keyboards/handwired/postageboard/mini/mini.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Yan-Fa Li
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 \
+) \
+{ \
+ { k00, k01, k02 } \
+}
diff --git a/keyboards/handwired/postageboard/mini/rules.mk b/keyboards/handwired/postageboard/mini/rules.mk
new file mode 100644
index 0000000000..96e8e574cf
--- /dev/null
+++ b/keyboards/handwired/postageboard/mini/rules.mk
@@ -0,0 +1,29 @@
+# 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
+
+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 = 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/postageboard/postageboard.c b/keyboards/handwired/postageboard/postageboard.c
new file mode 100644
index 0000000000..005ce313df
--- /dev/null
+++ b/keyboards/handwired/postageboard/postageboard.c
@@ -0,0 +1 @@
+#include "postageboard.h"
diff --git a/keyboards/handwired/postageboard/postageboard.h b/keyboards/handwired/postageboard/postageboard.h
new file mode 100644
index 0000000000..5bd9ceee5a
--- /dev/null
+++ b/keyboards/handwired/postageboard/postageboard.h
@@ -0,0 +1,26 @@
+/* Copyright 2019 Yan-Fa Li
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 \
+) \
+{ \
+ { k00, k01, k02 } \
+}
diff --git a/keyboards/handwired/postageboard/r1/config.h b/keyboards/handwired/postageboard/r1/config.h
new file mode 100644
index 0000000000..435e87fa1b
--- /dev/null
+++ b/keyboards/handwired/postageboard/r1/config.h
@@ -0,0 +1,61 @@
+/*
+Copyright 2019 Yan-Fa Li
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 0xB07D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER LifeIsOnTheWire
+#define PRODUCT PostageBoard
+#define DESCRIPTION "A Handwire Controller Board"
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#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 { B6 }
+#define MATRIX_COL_PINS { B7, C6, C7 }
+#define UNUSED_PINS { D4, D6, D7, B4, B5, D5, D3, D2, D1, D0, B2, B3, F0, F1, F4, F5, F6, F7, E6, B0, B1 }
+
+/* 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
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/handwired/postageboard/r1/r1.c b/keyboards/handwired/postageboard/r1/r1.c
new file mode 100644
index 0000000000..e87edc145b
--- /dev/null
+++ b/keyboards/handwired/postageboard/r1/r1.c
@@ -0,0 +1,18 @@
+/* Copyright 2019 Yan-Fa Li
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "r1.h"
+
diff --git a/keyboards/handwired/postageboard/r1/r1.h b/keyboards/handwired/postageboard/r1/r1.h
new file mode 100644
index 0000000000..28ee58ef13
--- /dev/null
+++ b/keyboards/handwired/postageboard/r1/r1.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Yan-Fa Li
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 \
+) \
+{ \
+ { k00, k01, k02 } \
+}
diff --git a/keyboards/handwired/postageboard/r1/rules.mk b/keyboards/handwired/postageboard/r1/rules.mk
new file mode 100644
index 0000000000..96e8e574cf
--- /dev/null
+++ b/keyboards/handwired/postageboard/r1/rules.mk
@@ -0,0 +1,29 @@
+# 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
+
+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 = 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/postageboard/readme.md b/keyboards/handwired/postageboard/readme.md
new file mode 100644
index 0000000000..db9d0d11c5
--- /dev/null
+++ b/keyboards/handwired/postageboard/readme.md
@@ -0,0 +1,25 @@
+# Postage Board
+
+### Round 1
+![PostageBoard](https://cdn.shopify.com/s/files/1/1851/5125/products/image_db6a6d1c-01d8-4263-b148-136292425b6a_530x@2x.jpg?v=1540240631)
+
+### Round 2: Mini version
+![PostageBoard](https://cdn.shopify.com/s/files/1/1851/5125/products/image_94eb103e-07f9-437f-b661-0909247cd766_1024x1024@2x.jpg?v=1574211602)
+
+The Postage board is a controller board meant to aid people in making a hand wired keyboard. Controller boards are essentially the brain of the keyboard. It is similar to the common Teensy 2.0, and also the Pro Micro.
+
+However, neither the Teensy, nor the Pro Micro are designed for keyboards specifically. They are just general Arduino-like boards meant for a variety of DIY projects. The Postage Board is designed for mechanical keyboards specifically, and thus the process of assembling your keyboard is easier, and the final product is more refined.
+
+* Keyboard Maintainer: [LifeIsOnTheWire](https://github.com/LifeIsOnTheWire/Postage-Board)
+* Hardware Supported: Available at GB
+* Hardware Availability: Available at GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/postageboard/r1:default
+
+or
+
+ make handwired/postageboard/mini: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/postageboard/rules.mk b/keyboards/handwired/postageboard/rules.mk
new file mode 100644
index 0000000000..a7fcf6bea6
--- /dev/null
+++ b/keyboards/handwired/postageboard/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER=handwired/postageboard/mini
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/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index b09e30457c..14a293bb39 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -84,7 +84,6 @@ enum glow_modes {
uint8_t glow_mode = GLOW_MIN;
void turn_off_capslock(void);
-extern keymap_config_t keymap_config;
// layers, ordering is important!
enum layers {
@@ -987,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/qc60/keymaps/default/keymap.c b/keyboards/handwired/qc60/keymaps/default/keymap.c
index 88062d4ed4..a0f6250ffe 100644
--- a/keyboards/handwired/qc60/keymaps/default/keymap.c
+++ b/keyboards/handwired/qc60/keymaps/default/keymap.c
@@ -16,7 +16,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/handwired/steamvan/rev1/rules.mk b/keyboards/handwired/steamvan/rev1/rules.mk
index 3a91a7c609..471cb4c1e1 100644
--- a/keyboards/handwired/steamvan/rev1/rules.mk
+++ b/keyboards/handwired/steamvan/rev1/rules.mk
@@ -1,40 +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 = STM32F3xx
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F303xC
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f3xx
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = GENERIC_STM32_F303XC
-
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# MCU name
+MCU = STM32F303
# Code for backlight breathing:
SRC += led.c
diff --git a/keyboards/handwired/symmetry60/config.h b/keyboards/handwired/symmetry60/config.h
new file mode 100644
index 0000000000..ee72208afc
--- /dev/null
+++ b/keyboards/handwired/symmetry60/config.h
@@ -0,0 +1,71 @@
+/*
+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 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Marhalloweenvt
+#define PRODUCT Symmetry60
+#define DESCRIPTION A Boardwalk-inspired 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 { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, B6, B5, B4, D7, D6, D4, E6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B1
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#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
+
+/* 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
diff --git a/keyboards/handwired/symmetry60/info.json b/keyboards/handwired/symmetry60/info.json
new file mode 100644
index 0000000000..f33c28b0c5
--- /dev/null
+++ b/keyboards/handwired/symmetry60/info.json
@@ -0,0 +1,83 @@
+{
+ "Keyboard_name": "Symmetry60",
+ "url": "",
+ "maintainer": "marhalloweenvt",
+ "width": 14,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x14": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0, "w":1.5},
+ {"label":"K01", "x":1.5, "y":0},
+ {"label":"K02", "x":2.5, "y":0},
+ {"label":"K03", "x":3.5, "y":0},
+ {"label":"K04", "x":4.5, "y":0},
+ {"label":"K05", "x":5.5, "y":0},
+ {"label":"K06", "x":6.5, "y":0},
+ {"label":"K07", "x":7.5, "y":0},
+ {"label":"K08", "x":8.5, "y":0},
+ {"label":"K09", "x":9.5, "y":0},
+ {"label":"K0A", "x":10.5, "y":0},
+ {"label":"K0B", "x":11.5, "y":0},
+ {"label":"K0C", "x":12.5, "y":0},
+ {"label":"K0D", "x":13.5, "y":0, "w":1.5},
+ {"label":"K10", "x":0, "y":1, "w":1.5},
+ {"label":"K11", "x":1.5, "y":1},
+ {"label":"K12", "x":2.5, "y":1},
+ {"label":"K13", "x":3.5, "y":1},
+ {"label":"K14", "x":4.5, "y":1},
+ {"label":"K15", "x":5.5, "y":1},
+ {"label":"K16", "x":6.5, "y":1},
+ {"label":"K17", "x":7.5, "y":1},
+ {"label":"K18", "x":8.5, "y":1},
+ {"label":"K19", "x":9.5, "y":1},
+ {"label":"K1A", "x":10.5, "y":1},
+ {"label":"K1B", "x":11.5, "y":1},
+ {"label":"K1C", "x":12.5, "y":1},
+ {"label":"K1D", "x":13.5, "y":1, "w":1.5},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":6.5, "y":2},
+ {"label":"K27", "x":7.5, "y":2},
+ {"label":"K28", "x":8.5, "y":2},
+ {"label":"K29", "x":9.5, "y":2},
+ {"label":"K2A", "x":10.5, "y":2},
+ {"label":"K2B", "x":11.5, "y":2},
+ {"label":"K2C", "x":12.5, "y":2},
+ {"label":"K2D", "x":13.5, "y":2, "w":1.5},
+ {"label":"K30", "x":0, "y":3, "w":1.5},
+ {"label":"K31", "x":1.5, "y":3},
+ {"label":"K32", "x":2.5, "y":3},
+ {"label":"K33", "x":3.5, "y":3},
+ {"label":"K34", "x":4.5, "y":3},
+ {"label":"K35", "x":5.5, "y":3},
+ {"label":"K36", "x":6.5, "y":3},
+ {"label":"K37", "x":7.5, "y":3},
+ {"label":"K38", "x":8.5, "y":3},
+ {"label":"K39", "x":9.5, "y":3},
+ {"label":"K3A", "x":10.5, "y":3},
+ {"label":"K3B", "x":11.5, "y":3},
+ {"label":"K3C", "x":12.5, "y":3},
+ {"label":"K3D", "x":13.5, "y":3, "w":1.5},
+ {"label":"K40", "x":0, "y":4, "w":1.5},
+ {"label":"K41", "x":1.5, "y":4},
+ {"label":"K42", "x":2.5, "y":4},
+ {"label":"K43", "x":3.5, "y":4},
+ {"label":"K44", "x":4.5, "y":4},
+ {"label":"K45", "x":5.5, "y":4},
+ {"label":"K46", "x":6.5, "y":4},
+ {"label":"K47", "x":7.5, "y":4},
+ {"label":"K48", "x":8.5, "y":4},
+ {"label":"K49", "x":9.5, "y":4},
+ {"label":"K4A", "x":10.5, "y":4},
+ {"label":"K4B", "x":11.5, "y":4},
+ {"label":"K4C", "x":12.5, "y":4},
+ {"label":"K4D", "x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/symmetry60/keymaps/default/config.h b/keyboards/handwired/symmetry60/keymaps/default/config.h
new file mode 100644
index 0000000000..7b52e1dd03
--- /dev/null
+++ b/keyboards/handwired/symmetry60/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* 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
+
+// place overrides here
diff --git a/keyboards/handwired/symmetry60/keymaps/default/keymap.c b/keyboards/handwired/symmetry60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..6960698951
--- /dev/null
+++ b/keyboards/handwired/symmetry60/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+/* 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_ortho_5x14(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_PGUP, 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_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_DEL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL
+ ),
+};
diff --git a/keyboards/handwired/symmetry60/keymaps/default/readme.md b/keyboards/handwired/symmetry60/keymaps/default/readme.md
new file mode 100644
index 0000000000..db25aa3bf2
--- /dev/null
+++ b/keyboards/handwired/symmetry60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for symmetry60
diff --git a/keyboards/handwired/symmetry60/readme.md b/keyboards/handwired/symmetry60/readme.md
new file mode 100644
index 0000000000..5a4de934fe
--- /dev/null
+++ b/keyboards/handwired/symmetry60/readme.md
@@ -0,0 +1,13 @@
+# SYMMETRY60
+
+A keyboard inspired by Boardwalk
+
+* Keyboard Maintainer: [marhalloweenvt](https://github.com/marhalloweenvt)
+* Hardware Supported: Symmetry60 PCB
+* Hardware Availability: Symmetry60 PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/symmetry60: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/symmetry60/rules.mk b/keyboards/handwired/symmetry60/rules.mk
new file mode 100644
index 0000000000..6830cc6905
--- /dev/null
+++ b/keyboards/handwired/symmetry60/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 = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# 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 = 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
+LTO_ENABLE = yes # Use link time optimization
+
+LAYOUTS = ortho_5x14
diff --git a/keyboards/handwired/symmetry60/symmetry60.c b/keyboards/handwired/symmetry60/symmetry60.c
new file mode 100644
index 0000000000..70828297c7
--- /dev/null
+++ b/keyboards/handwired/symmetry60/symmetry60.c
@@ -0,0 +1,16 @@
+/* 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 "symmetry60.h"
diff --git a/keyboards/handwired/symmetry60/symmetry60.h b/keyboards/handwired/symmetry60/symmetry60.h
new file mode 100644
index 0000000000..138e5bb234
--- /dev/null
+++ b/keyboards/handwired/symmetry60/symmetry60.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_ortho_5x14( \
+ 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, K43, K44, K45, K46, K47, K48, 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, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D }, \
+}
+
diff --git a/keyboards/handwired/terminus_mini/keymaps/default/keymap.c b/keyboards/handwired/terminus_mini/keymaps/default/keymap.c
index 276475873a..78578a33ee 100644
--- a/keyboards/handwired/terminus_mini/keymaps/default/keymap.c
+++ b/keyboards/handwired/terminus_mini/keymaps/default/keymap.c
@@ -15,7 +15,6 @@
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/wulkan/rules.mk b/keyboards/handwired/wulkan/rules.mk
index 3f881b7f12..f432c7d673 100644
--- a/keyboards/handwired/wulkan/rules.mk
+++ b/keyboards/handwired/wulkan/rules.mk
@@ -1,3 +1,4 @@
+# MCU name
MCU = STM32F303
# Build Options
diff --git a/keyboards/handwired/xealous/keymaps/default/keymap.c b/keyboards/handwired/xealous/keymaps/default/keymap.c
index 4e691a0a76..41a3f8c805 100644
--- a/keyboards/handwired/xealous/keymaps/default/keymap.c
+++ b/keyboards/handwired/xealous/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -88,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 c5ab84abe8..7cc3cb586e 100644
--- a/keyboards/helix/pico/keymaps/default/keymap.c
+++ b/keyboards/helix/pico/keymaps/default/keymap.c
@@ -11,7 +11,6 @@
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -147,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| | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
@@ -157,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/readme.md b/keyboards/helix/readme.md
index a535df0527..a994332264 100644
--- a/keyboards/helix/readme.md
+++ b/keyboards/helix/readme.md
@@ -7,7 +7,7 @@ A compact split ortholinear keyboard.
Keyboard Maintainer: [Makoto Kurauchi](https://github.com/MakotoKurauchi/) [@pluis9](https://twitter.com/pluis9)
Hardware Supported: Helix PCB Alpha, Beta, Pro Micro
-Hardware Availability: [PCB & Case Data](https://github.com/MakotoKurauchi/helix), [Yushakobo Shop](https://yushakobo.jp/shop/)
+Hardware Availability: [PCB & Case Data](https://github.com/MakotoKurauchi/helix), [Yushakobo Shop](https://yushakobo.jp/shop/), [Little Keyboards](https://littlekeyboards.com/collections/helix)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/helix/rev1/keymaps/default/keymap.c b/keyboards/helix/rev1/keymaps/default/keymap.c
index 299840e3db..85391f8f60 100644
--- a/keyboards/helix/rev1/keymaps/default/keymap.c
+++ b/keyboards/helix/rev1/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/helix/rev2/keymaps/default/keymap.c b/keyboards/helix/rev2/keymaps/default/keymap.c
index 2f4736add8..78e3424fd5 100644
--- a/keyboards/helix/rev2/keymaps/default/keymap.c
+++ b/keyboards/helix/rev2/keymaps/default/keymap.c
@@ -11,7 +11,6 @@
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -127,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 |
* `-------------------------------------------------------------------------------------------------'
@@ -136,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 \
),
@@ -148,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 |
* `-------------------------------------------------------------------------------------------------'
@@ -157,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 \
),
@@ -279,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| | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
@@ -289,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 \
@@ -527,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"));
@@ -571,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);
}
@@ -598,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/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/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/hbcp/hbcp.h b/keyboards/hineybush/hbcp/hbcp.h
index bb9fcdca11..0bcf7b7304 100644
--- a/keyboards/hineybush/hbcp/hbcp.h
+++ b/keyboards/hineybush/hbcp/hbcp.h
@@ -26,19 +26,19 @@
* represents the switch matrix.
*/
#define LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, \
- K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, K417, \
- K500, K501, K502, K505, K509, K510, K511, K512, K513, K514, K515, K516, K517 \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, K417, \
+ K500, K501, K502, K505, K509, K510, K511, K512, K513, K514, K515, K516, K517 \
) { \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017}, \
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117}, \
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217},\
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317},\
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, K417},\
- { K500, K501, K502, KC_NO, KC_NO, KC_NO, K505, KC_NO, KC_NO, KC_NO, KC_NO,K509, K510, K511, K512, K513, K514, K515, K516, K517 }\
+ { K500, K501, K502, KC_NO, KC_NO, K505, KC_NO, KC_NO, KC_NO, K509, K510, K511, K512, K513, K514, K515, K516, K517 }\
}
#define LAYOUT_wkl( \
diff --git a/keyboards/hineybush/hbcp/info.json b/keyboards/hineybush/hbcp/info.json
index bb21a6294b..8a8fd217f4 100644
--- a/keyboards/hineybush/hbcp/info.json
+++ b/keyboards/hineybush/hbcp/info.json
@@ -2,14 +2,218 @@
"keyboard_name": "hbcp",
"url": "",
"maintainer": "hineybush",
- "width": 22,
- "height": 6.75,
+ "width": 19.5,
+ "height": 6.25,
"layouts": {
"LAYOUT_all": {
- "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":"PrtSc", "x":15.5, "y":0}, {"label":"Scroll Lock", "x":16.5, "y":0}, {"label":"Pause", "x":17.5, "y":0}, {"label":"PgUp", "x":18.5, "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}, {"x":13, "y":1.25}, {"x":14, "y":1.25}, {"label":"Num Lock", "x":15.5, "y":1.25}, {"label":"/", "x":16.5, "y":1.25}, {"label":"*", "x":17.5, "y":1.25}, {"label":"-", "x":18.5, "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":"7", "x":15.5, "y":2.25}, {"label":"8", "x":16.5, "y":2.25}, {"label":"9", "x":17.5, "y":2.25}, {"x":18.5, "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}, {"x":12.75, "y":3.25}, {"label":"Enter", "x":13.75, "y":3.25, "w":1.25}, {"label":"4", "x":15.5, "y":3.25}, {"label":"5", "x":16.5, "y":3.25}, {"label":"6", "x":17.5, "y":3.25}, {"x":18.5, "y":3.25}, {"x":0, "y":4.25, "w":1.25}, {"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":"\u2191", "x":14.25, "y":4.5}, {"label":"1", "x":15.5, "y":4.25}, {"label":"2", "x":16.5, "y":4.25}, {"label":"3", "x":17.5, "y":4.25}, {"x":18.5, "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}, {"x":11, "y":5.25}, {"x":12, "y":5.25}, {"label":"\u2190", "x":13.25, "y":5.5}, {"label":"\u2193", "x":14.25, "y":5.5}, {"label":"\u2192", "x":15.25, "y":5.5}, {"label":"0", "x":16.5, "y":5.25}, {"label":".", "x":17.5, "y":5.25}, {"x":18.5, "y":5.25}]
+ "key_count": 103,
+ "layout": [
+ {"label":"Esc (K000)", "x":0, "y":0},
+ {"label":"F1 (K001)", "x":1.25, "y":0},
+ {"label":"F2 (K002)", "x":2.25, "y":0},
+ {"label":"F3 (K003)", "x":3.25, "y":0},
+ {"label":"F4 (K004)", "x":4.25, "y":0},
+ {"label":"F5 (K005)", "x":5.5, "y":0},
+ {"label":"F6 (K006)", "x":6.5, "y":0},
+ {"label":"F7 (K007)", "x":7.5, "y":0},
+ {"label":"F8 (K008)", "x":8.5, "y":0},
+ {"label":"F9 (K009)", "x":9.75, "y":0},
+ {"label":"F10 (K010)", "x":10.75, "y":0},
+ {"label":"F11 (K011)", "x":11.75, "y":0},
+ {"label":"F12 (K012)", "x":12.75, "y":0},
+ {"label":"Delete (K014)", "x":15.5, "y":0},
+ {"label":"Insert (K015)", "x":16.5, "y":0},
+ {"label":"PgUp (K016)", "x":17.5, "y":0},
+ {"label":"PgDn (K017)", "x":18.5, "y":0},
+ {"label":"~ (K100)", "x":0, "y":1.25},
+ {"label":"! (K101)", "x":1, "y":1.25},
+ {"label":"@ (K102)", "x":2, "y":1.25},
+ {"label":"# (K103)", "x":3, "y":1.25},
+ {"label":"$ (K104)", "x":4, "y":1.25},
+ {"label":"% (K105)", "x":5, "y":1.25},
+ {"label":"^ (K106)", "x":6, "y":1.25},
+ {"label":"& (K107)", "x":7, "y":1.25},
+ {"label":"* (K108)", "x":8, "y":1.25},
+ {"label":"( (K109)", "x":9, "y":1.25},
+ {"label":") (K110)", "x":10, "y":1.25},
+ {"label":"_ (K111)", "x":11, "y":1.25},
+ {"label":"+ (K112)", "x":12, "y":1.25},
+ {"label":"~ (K113)", "x":13, "y":1.25},
+ {"label":"Backspace (K013)", "x":14, "y":1.25},
+ {"label":"Num Lock (K114)", "x":15.5, "y":1.25},
+ {"label":"/ (K115)", "x":16.5, "y":1.25},
+ {"label":"* (K116)", "x":17.5, "y":1.25},
+ {"label":"Pause (K117)", "x":18.5, "y":1.25},
+ {"label":"Tab (K200)", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q (K201)", "x":1.5, "y":2.25},
+ {"label":"W (K202)", "x":2.5, "y":2.25},
+ {"label":"E (K203)", "x":3.5, "y":2.25},
+ {"label":"R (K204)", "x":4.5, "y":2.25},
+ {"label":"T (K205)", "x":5.5, "y":2.25},
+ {"label":"Y (K206)", "x":6.5, "y":2.25},
+ {"label":"U (K207)", "x":7.5, "y":2.25},
+ {"label":"I (K208)", "x":8.5, "y":2.25},
+ {"label":"O (K209)", "x":9.5, "y":2.25},
+ {"label":"P (K210)", "x":10.5, "y":2.25},
+ {"label":"{ (K211)", "x":11.5, "y":2.25},
+ {"label":"} (K212)", "x":12.5, "y":2.25},
+ {"label":"| (K213)", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"7 (K214)", "x":15.5, "y":2.25},
+ {"label":"8 (K215)", "x":16.5, "y":2.25},
+ {"label":"9 (K216)", "x":17.5, "y":2.25},
+ {"label":"- (K217)", "x":18.5, "y":2.25},
+ {"label":"Caps Lock (K300)", "x":0, "y":3.25, "w":1.75},
+ {"label":"A (K301)", "x":1.75, "y":3.25},
+ {"label":"S (K302)", "x":2.75, "y":3.25},
+ {"label":"D (K303)", "x":3.75, "y":3.25},
+ {"label":"F (K304)", "x":4.75, "y":3.25},
+ {"label":"G (K305)", "x":5.75, "y":3.25},
+ {"label":"H (K306)", "x":6.75, "y":3.25},
+ {"label":"J (K307)", "x":7.75, "y":3.25},
+ {"label":"K (K308)", "x":8.75, "y":3.25},
+ {"label":"L (K309)", "x":9.75, "y":3.25},
+ {"label":": (K310)", "x":10.75, "y":3.25},
+ {"label":"\" (K311)", "x":11.75, "y":3.25},
+ {"label":"~ (K312)", "x":12.75, "y":3.25},
+ {"label":"Enter (K313)", "x":13.75, "y":3.25, "w":1.25},
+ {"label":"4 (K314)", "x":15.5, "y":3.25},
+ {"label":"5 (K315)", "x":16.5, "y":3.25},
+ {"label":"6 (K316)", "x":17.5, "y":3.25},
+ {"label":"+ (K317)", "x":18.5, "y":3.25},
+ {"label":"Shift (K400)", "x":0, "y":4.25, "w":1.25},
+ {"label":"| (K401)", "x":1.25, "y":4.25},
+ {"label":"Z (K402)", "x":2.25, "y":4.25},
+ {"label":"X (K403)", "x":3.25, "y":4.25},
+ {"label":"C (K404)", "x":4.25, "y":4.25},
+ {"label":"V (K405)", "x":5.25, "y":4.25},
+ {"label":"B (K406)", "x":6.25, "y":4.25},
+ {"label":"N (K407)", "x":7.25, "y":4.25},
+ {"label":"M (K408)", "x":8.25, "y":4.25},
+ {"label":"< (K409)", "x":9.25, "y":4.25},
+ {"label":"> (K410)", "x":10.25, "y":4.25},
+ {"label":"? (K411)", "x":11.25, "y":4.25},
+ {"label":"Shift (K412)", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"Up (K413)", "x":14.25, "y":4.5},
+ {"label":"1 (K414)", "x":15.5, "y":4.25},
+ {"label":"2 (K415)", "x":16.5, "y":4.25},
+ {"label":"3 (K416)", "x":17.5, "y":4.25},
+ {"label":"TRNS (K417)", "x":18.5, "y":4.25},
+ {"label":"Ctrl (K500)", "x":0, "y":5.25, "w":1.25},
+ {"label":"GUI (K501)", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt (K502)", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"Space (K505)", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"Alt (K509)", "x":10, "y":5.25},
+ {"label":"MO(1) (K510)", "x":11, "y":5.25},
+ {"label":"GUI (K511)", "x":12, "y":5.25},
+ {"label":"Left (K512)", "x":13.25, "y":5.5},
+ {"label":"Down (K513)", "x":14.25, "y":5.5},
+ {"label":"Right (K514)", "x":15.25, "y":5.5},
+ {"label":"0 (K515)", "x":16.5, "y":5.25},
+ {"label":". (K516)", "x":17.5, "y":5.25},
+ {"label":"Enter (K517)", "x":18.5, "y":5.25}
+ ]
},
"LAYOUT_wkl": {
- "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":"PrtSc", "x":15.5, "y":0}, {"label":"Scroll Lock", "x":16.5, "y":0}, {"label":"Pause", "x":17.5, "y":0}, {"label":"PgUp", "x":18.5, "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":"Num Lock", "x":15.5, "y":1.25}, {"label":"/", "x":16.5, "y":1.25}, {"label":"*", "x":17.5, "y":1.25}, {"label":"-", "x":18.5, "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":"7", "x":15.5, "y":2.25}, {"label":"8", "x":16.5, "y":2.25}, {"label":"9", "x":17.5, "y":2.25}, {"x":18.5, "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":"4", "x":15.5, "y":3.25}, {"label":"5", "x":16.5, "y":3.25}, {"label":"6", "x":17.5, "y":3.25}, {"x":18.5, "y":3.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":1.75}, {"label":"\u2191", "x":14.25, "y":4.5}, {"label":"1", "x":15.5, "y":4.25}, {"label":"2", "x":16.5, "y":4.25}, {"label":"3", "x":17.5, "y":4.25}, {"label":"Enter", "x":18.5, "y":4.25, "h":2}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Alt", "x":1.5, "y":5.25, "w":1.5}, {"x":3, "y":5.25, "w":7}, {"label":"Alt", "x":10, "y":5.25, "w":1.5}, {"label":"Win", "x":11.5, "y":5.25, "w":1.5}, {"label":"\u2190", "x":13.25, "y":5.5}, {"label":"\u2193", "x":14.25, "y":5.5}, {"label":"\u2192", "x":15.25, "y":5.5}, {"label":"0", "x":16.5, "y":5.25}, {"label":".", "x":17.5, "y":5.25}]
+ "key_count": 97,
+ "layout": [
+ {"label":"Esc (K000)", "x":0, "y":0},
+ {"label":"F1 (K001)", "x":1.25, "y":0},
+ {"label":"F2 (K002)", "x":2.25, "y":0},
+ {"label":"F3 (K003)", "x":3.25, "y":0},
+ {"label":"F4 (K004)", "x":4.25, "y":0},
+ {"label":"F5 (K005)", "x":5.5, "y":0},
+ {"label":"F6 (K006)", "x":6.5, "y":0},
+ {"label":"F7 (K007)", "x":7.5, "y":0},
+ {"label":"F8 (K008)", "x":8.5, "y":0},
+ {"label":"F9 (K009)", "x":9.75, "y":0},
+ {"label":"F10 (K010)", "x":10.75, "y":0},
+ {"label":"F11 (K011)", "x":11.75, "y":0},
+ {"label":"F12 (K012)", "x":12.75, "y":0},
+ {"label":"Delete (K014)", "x":15.5, "y":0},
+ {"label":"Insert (K015)", "x":16.5, "y":0},
+ {"label":"PgUp (K016)", "x":17.5, "y":0},
+ {"label":"PgDn (K017)", "x":18.5, "y":0},
+ {"label":"~ (K100)", "x":0, "y":1.25},
+ {"label":"! (K101)", "x":1, "y":1.25},
+ {"label":"@ (K102)", "x":2, "y":1.25},
+ {"label":"# (K103)", "x":3, "y":1.25},
+ {"label":"$ (K104)", "x":4, "y":1.25},
+ {"label":"% (K105)", "x":5, "y":1.25},
+ {"label":"^ (K106)", "x":6, "y":1.25},
+ {"label":"& (K107)", "x":7, "y":1.25},
+ {"label":"* (K108)", "x":8, "y":1.25},
+ {"label":"( (K109)", "x":9, "y":1.25},
+ {"label":") (K110)", "x":10, "y":1.25},
+ {"label":"_ (K111)", "x":11, "y":1.25},
+ {"label":"+ (K112)", "x":12, "y":1.25},
+ {"label":"Backspace (K013)", "x":13, "y":1.25, "w":2},
+ {"label":"Num Lock (K114)", "x":15.5, "y":1.25},
+ {"label":"/ (K115)", "x":16.5, "y":1.25},
+ {"label":"* (K116)", "x":17.5, "y":1.25},
+ {"label":"Pause (K117)", "x":18.5, "y":1.25},
+ {"label":"Tab (K200)", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q (K201)", "x":1.5, "y":2.25},
+ {"label":"W (K202)", "x":2.5, "y":2.25},
+ {"label":"E (K203)", "x":3.5, "y":2.25},
+ {"label":"R (K204)", "x":4.5, "y":2.25},
+ {"label":"T (K205)", "x":5.5, "y":2.25},
+ {"label":"Y (K206)", "x":6.5, "y":2.25},
+ {"label":"U (K207)", "x":7.5, "y":2.25},
+ {"label":"I (K208)", "x":8.5, "y":2.25},
+ {"label":"O (K209)", "x":9.5, "y":2.25},
+ {"label":"P (K210)", "x":10.5, "y":2.25},
+ {"label":"{ (K211)", "x":11.5, "y":2.25},
+ {"label":"} (K212)", "x":12.5, "y":2.25},
+ {"label":"| (K213)", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"7 (K214)", "x":15.5, "y":2.25},
+ {"label":"8 (K215)", "x":16.5, "y":2.25},
+ {"label":"9 (K216)", "x":17.5, "y":2.25},
+ {"label":"- (K217)", "x":18.5, "y":2.25},
+ {"label":"Caps Lock (K300)", "x":0, "y":3.25, "w":1.75},
+ {"label":"A (K301)", "x":1.75, "y":3.25},
+ {"label":"S (K302)", "x":2.75, "y":3.25},
+ {"label":"D (K303)", "x":3.75, "y":3.25},
+ {"label":"F (K304)", "x":4.75, "y":3.25},
+ {"label":"G (K305)", "x":5.75, "y":3.25},
+ {"label":"H (K306)", "x":6.75, "y":3.25},
+ {"label":"J (K307)", "x":7.75, "y":3.25},
+ {"label":"K (K308)", "x":8.75, "y":3.25},
+ {"label":"L (K309)", "x":9.75, "y":3.25},
+ {"label":": (K310)", "x":10.75, "y":3.25},
+ {"label":"\" (K311)", "x":11.75, "y":3.25},
+ {"label":"Enter (K313)", "x":12.75, "y":3.25, "w":2.25},
+ {"label":"4 (K314)", "x":15.5, "y":3.25},
+ {"label":"5 (K315)", "x":16.5, "y":3.25},
+ {"label":"6 (K316)", "x":17.5, "y":3.25},
+ {"label":"+ (K317)", "x":18.5, "y":3.25},
+ {"label":"Shift (K400)", "x":0, "y":4.25, "w":2.25},
+ {"label":"Z (K402)", "x":2.25, "y":4.25},
+ {"label":"X (K403)", "x":3.25, "y":4.25},
+ {"label":"C (K404)", "x":4.25, "y":4.25},
+ {"label":"V (K405)", "x":5.25, "y":4.25},
+ {"label":"B (K406)", "x":6.25, "y":4.25},
+ {"label":"N (K407)", "x":7.25, "y":4.25},
+ {"label":"M (K408)", "x":8.25, "y":4.25},
+ {"label":"< (K409)", "x":9.25, "y":4.25},
+ {"label":"> (K410)", "x":10.25, "y":4.25},
+ {"label":"? (K411)", "x":11.25, "y":4.25},
+ {"label":"Shift (K412)", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"Up (K413)", "x":14.25, "y":4.5},
+ {"label":"1 (K414)", "x":15.5, "y":4.25},
+ {"label":"2 (K415)", "x":16.5, "y":4.25},
+ {"label":"3 (K416)", "x":17.5, "y":4.25},
+ {"label":"Ctrl (K500)", "x":0, "y":5.25, "w":1.5},
+ {"label":"Alt (K501)", "x":1.5, "y":5.25, "w":1.5},
+ {"label":"Space (K505)", "x":3, "y":5.25, "w":7},
+ {"label":"MO(1) (K510)", "x":10, "y":5.25, "w":1.5},
+ {"label":"GUI (K511)", "x":11.5, "y":5.25, "w":1.5},
+ {"label":"Left (K512)", "x":13.25, "y":5.5},
+ {"label":"Down (K513)", "x":14.25, "y":5.5},
+ {"label":"Right (K514)", "x":15.25, "y":5.5},
+ {"label":"0 (K515)", "x":16.5, "y":5.25},
+ {"label":". (K516)", "x":17.5, "y":5.25},
+ {"label":"Enter (K517)", "x":18.5, "y":4.25, "h":2}
+ ]
}
}
}
diff --git a/keyboards/hineybush/hbcp/keymaps/default/keymap.c b/keyboards/hineybush/hbcp/keymaps/default/keymap.c
index 09d5b6b33c..b8ab480ba3 100644
--- a/keyboards/hineybush/hbcp/keymaps/default/keymap.c
+++ b/keyboards/hineybush/hbcp/keymaps/default/keymap.c
@@ -23,30 +23,32 @@ enum custom_keycodes {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_wkl( /* Base */
+ [0] = LAYOUT_all( /* Base */
- /*K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, K017, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K114, K115, K116, K117, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, K316, K317, \
- K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, \
- K500, K501, K505, K510, K511, K512, K513, K514, K515, K516, K517 \*/
- 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_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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
- KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ /*#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, K417, \
+ K500, K501, K502, K505, K509, K510, K511, K512, K513, K514, K515, K516, K517 \
+)*/
+ 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_wkl(
- KC_TRNS, KC_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, 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, 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_VOLU, RGB_TOG, RGB_MOD,KC_TRNS,
- KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT, KC_TRNS,KC_TRNS, KC_TRNS
+ [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
),
};
diff --git a/keyboards/hineybush/hbcp/keymaps/default/readme.md b/keyboards/hineybush/hbcp/keymaps/default/readme.md
index becc5829b8..8cbd45cd09 100644
--- a/keyboards/hineybush/hbcp/keymaps/default/readme.md
+++ b/keyboards/hineybush/hbcp/keymaps/default/readme.md
@@ -1 +1,2 @@
-# The default keymap for hbcp \ No newline at end of file
+# The default "all key" keymap for hbcp
+# Somewhat dirty with ISO and split backspace, but has all keys
diff --git a/keyboards/hineybush/hbcp/keymaps/hiney/config.h b/keyboards/hineybush/hbcp/keymaps/hiney/config.h
index 2d8bbf3a73..b864d6a635 100644
--- a/keyboards/hineybush/hbcp/keymaps/hiney/config.h
+++ b/keyboards/hineybush/hbcp/keymaps/hiney/config.h
@@ -22,6 +22,22 @@
#define HSV_SOFT_PINK 255, 110, 100 // Define custom "soft pink" color
#endif
+#ifndef HSV_SOFT_WHITE
+ #define HSV_SOFT_WHITE 0, 0, 90 // Define custom "soft white" color
+#endif
+
+#ifndef HSV_WARM_WHITE
+ #define HSV_WARM_WHITE 41, 105, 90 // Define custom "warm white" color
+#endif
+
+#ifndef HSV_SOFT_RED
+ #define HSV_SOFT_RED 0, 240, 160 // Define custom "soft red" color
+#endif
+
+#ifndef HSV_SOFT_BLUE
+ #define HSV_SOFT_BLUE 159, 180, 160 // Define custom "soft blue" color
+#endif
+
#ifndef HSV_BLACK
#define HSV_BLACK 0, 0, 0 // Define 'black' color, more like 'LED off' (H, S, V)
#endif
diff --git a/keyboards/hineybush/hbcp/keymaps/hiney/keymap.c b/keyboards/hineybush/hbcp/keymaps/hiney/keymap.c
index c3186cbc43..bcfb9ed5bc 100644
--- a/keyboards/hineybush/hbcp/keymaps/hiney/keymap.c
+++ b/keyboards/hineybush/hbcp/keymaps/hiney/keymap.c
@@ -86,17 +86,17 @@ void matrix_scan_user(void) {
// The first three LEDs are used as indicators for CAPS_LOCK, NUM_LOCK and SCROLL_LOCK.
void led_set_user(uint8_t usb_led) {
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- sethsv_raw(HSV_SOFT_PINK, (LED_TYPE *)&led[0]);
+ sethsv_raw(HSV_SOFT_RED, (LED_TYPE *)&led[0]);
} else {
sethsv(HSV_BLACK, (LED_TYPE *)&led[0]);
}
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- sethsv_raw(HSV_SOFT_PINK, (LED_TYPE *)&led[1]);
+ sethsv_raw(HSV_WARM_WHITE, (LED_TYPE *)&led[1]);
} else {
sethsv(HSV_BLACK, (LED_TYPE *)&led[1]);
}
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
- sethsv_raw(HSV_SOFT_PINK, (LED_TYPE *)&led[2]);
+ sethsv_raw(HSV_SOFT_BLUE, (LED_TYPE *)&led[2]);
} else {
sethsv(HSV_BLACK, (LED_TYPE *)&led[2]);
}
diff --git a/keyboards/hineybush/hbcp/keymaps/wkl/config.h b/keyboards/hineybush/hbcp/keymaps/wkl/config.h
new file mode 100644
index 0000000000..89865cef35
--- /dev/null
+++ b/keyboards/hineybush/hbcp/keymaps/wkl/config.h
@@ -0,0 +1,19 @@
+/* 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
+
+// place overrides here
diff --git a/keyboards/hineybush/hbcp/keymaps/wkl/keymap.c b/keyboards/hineybush/hbcp/keymaps/wkl/keymap.c
new file mode 100644
index 0000000000..09d5b6b33c
--- /dev/null
+++ b/keyboards/hineybush/hbcp/keymaps/wkl/keymap.c
@@ -0,0 +1,82 @@
+/* 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 the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_wkl( /* Base */
+
+ /*K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, K315, K316, K317, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, \
+ K500, K501, K505, K510, K511, K512, K513, K514, K515, K516, K517 \*/
+ 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_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_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+
+ ),
+
+ [1] = LAYOUT_wkl(
+ KC_TRNS, KC_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, 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, 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_VOLU, RGB_TOG, RGB_MOD,KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT, KC_TRNS,KC_TRNS, KC_TRNS
+
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
diff --git a/keyboards/hineybush/hbcp/keymaps/wkl/readme.md b/keyboards/hineybush/hbcp/keymaps/wkl/readme.md
new file mode 100644
index 0000000000..70f5936370
--- /dev/null
+++ b/keyboards/hineybush/hbcp/keymaps/wkl/readme.md
@@ -0,0 +1 @@
+# The default WKL keymap for hbcp
diff --git a/keyboards/hineybush/sm68/config.h b/keyboards/hineybush/sm68/config.h
new file mode 100644
index 0000000000..f41f5bc2d5
--- /dev/null
+++ b/keyboards/hineybush/sm68/config.h
@@ -0,0 +1,241 @@
+/*
+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 0xEC9F
+#define DEVICE_VER 0x0001
+#define MANUFACTURER hineybush keyboards
+#define PRODUCT sm68
+#define DESCRIPTION PCB for switchmod keyboards projects
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { B2, B1, B0, D4, D1 }
+#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D3, D2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+
+#define RGB_DI_PIN D0
+#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
diff --git a/keyboards/hineybush/sm68/info.json b/keyboards/hineybush/sm68/info.json
new file mode 100644
index 0000000000..1db400d663
--- /dev/null
+++ b/keyboards/hineybush/sm68/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "sm68",
+ "url": "",
+ "maintainer": "hineybush",
+ "width": 17.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_68_ansi_split_bs_rshift": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Insert", "x":15.5, "y":0}, {"x":16.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.5, "y":1}, {"x":16.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"\u2191", "x":15.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Ctrl", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"\u2190", "x":14.5, "y":4}, {"label":"\u2193", "x":15.5, "y":4}, {"label":"\u2192", "x":16.5, "y":4}]
+ },
+ "LAYOUT_68_ansi_split_rshift": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"x":16.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"x":16.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"\u2191", "x":15.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Ctrl", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"\u2190", "x":14.5, "y":4}, {"label":"\u2193", "x":15.5, "y":4}, {"label":"\u2192", "x":16.5, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/hineybush/sm68/keymaps/default/config.h b/keyboards/hineybush/sm68/keymaps/default/config.h
new file mode 100644
index 0000000000..89865cef35
--- /dev/null
+++ b/keyboards/hineybush/sm68/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* 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
+
+// place overrides here
diff --git a/keyboards/hineybush/sm68/keymaps/default/keymap.c b/keyboards/hineybush/sm68/keymaps/default/keymap.c
new file mode 100644
index 0000000000..3d0a1a4e97
--- /dev/null
+++ b/keyboards/hineybush/sm68/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
+
+// 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_68_ansi_split_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_BSPC, 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_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(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT_68_ansi_split_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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) {
+ return true;
+}
+
+
diff --git a/keyboards/hineybush/sm68/keymaps/default/readme.md b/keyboards/hineybush/sm68/keymaps/default/readme.md
new file mode 100644
index 0000000000..90031c3b02
--- /dev/null
+++ b/keyboards/hineybush/sm68/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for sm68
diff --git a/keyboards/hineybush/sm68/readme.md b/keyboards/hineybush/sm68/readme.md
new file mode 100644
index 0000000000..6c38158bc7
--- /dev/null
+++ b/keyboards/hineybush/sm68/readme.md
@@ -0,0 +1,15 @@
+# sm68
+
+Image TBA
+
+Exact keyboard support TBA by switchmod keyboards
+
+* Keyboard Maintainer: [hineybush](https://github.com/hineybush)
+* Hardware Supported: SM68 PCB
+* Hardware Availability: TBA
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hineybush/sm68: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/sm68/rules.mk b/keyboards/hineybush/sm68/rules.mk
new file mode 100644
index 0000000000..49f5ca7fdc
--- /dev/null
+++ b/keyboards/hineybush/sm68/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 = 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
+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/sm68.c b/keyboards/hineybush/sm68/sm68.c
new file mode 100644
index 0000000000..5aa3c85bbc
--- /dev/null
+++ b/keyboards/hineybush/sm68/sm68.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 "sm68.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/hineybush/sm68/sm68.h b/keyboards/hineybush/sm68/sm68.h
new file mode 100644
index 0000000000..81d25c12fa
--- /dev/null
+++ b/keyboards/hineybush/sm68/sm68.h
@@ -0,0 +1,59 @@
+/* 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.
+ */
+// split backspace
+#define LAYOUT_68_ansi_split_bs_rshift( \
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k113, k014, k015, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, k114, k115, \
+ 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, k314, \
+ k400, k401, k402, k404, k408, k409, k410, k413, k414, k415 \
+) \
+{ \
+ { 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, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, KC_NO, KC_NO}, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO, k314, KC_NO}, \
+ { k400, k401, k402, KC_NO,k404,KC_NO, KC_NO,k408, k409, k410, KC_NO, KC_NO, KC_NO,k413, k414, k415} \
+}
+
+// full backspace
+#define LAYOUT_68_ansi_split_rshift( \
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k113, k014, k015, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, k114, k115, \
+ 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, k314, \
+ k400, k401, k402, k404, k408, k409, k410, k413, k414, k415 \
+) \
+{ \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012,KC_NO, k014, k015 }, \
+ { 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, KC_NO}, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO, k314, KC_NO}, \
+ { k400, k401, k402, KC_NO,k404,KC_NO, KC_NO,k408, k409, k410, KC_NO, KC_NO, KC_NO,k413, k414, k415} \
+}
diff --git a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c
deleted file mode 100644
index 4331155df4..0000000000
--- a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#include "hal.h"
-
-#if HAL_USE_PAL || defined(__DOXYGEN__)
-/**
- * @brief PAL setup.
- * @details Digital I/O ports static configuration as defined in @p board.h.
- * This variable is used by the HAL when initializing the PAL driver.
- */
-const PALConfig pal_default_config = {
-#if STM32_HAS_GPIOA
- {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
- VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
-#endif
-#if STM32_HAS_GPIOB
- {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
- VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
-#endif
-#if STM32_HAS_GPIOC
- {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
- VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
-#endif
-#if STM32_HAS_GPIOD
- {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
- VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
-#endif
-#if STM32_HAS_GPIOE
- {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
- VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
-#endif
-#if STM32_HAS_GPIOF
- {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
- VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
-#endif
-#if STM32_HAS_GPIOG
- {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
- VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
-#endif
-#if STM32_HAS_GPIOH
- {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
- VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
-#endif
-#if STM32_HAS_GPIOI
- {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
- VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
-#endif
-};
-#endif
-
-void enter_bootloader_mode_if_requested(void);
-
-/**
- * @brief Early initialization code.
- * @details This initialization must be performed just after stack setup
- * and before any other initialization.
- */
-void __early_init(void) {
- enter_bootloader_mode_if_requested();
- stm32_clock_init();
-}
-
-#if HAL_USE_SDC || defined(__DOXYGEN__)
-/**
- * @brief SDC card detection.
- */
-bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief SDC card write protection detection.
- */
-bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
-
- (void)sdcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif /* HAL_USE_SDC */
-
-#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
-/**
- * @brief MMC_SPI card detection.
- */
-bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
-
- (void)mmcp;
- /* TODO: Fill the implementation.*/
- return true;
-}
-
-/**
- * @brief MMC_SPI card write protection detection.
- */
-bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
-
- (void)mmcp;
- /* TODO: Fill the implementation.*/
- return false;
-}
-#endif
-
-/**
- * @brief Board-specific initialization code.
- * @todo Add your board-specific code, if any.
- */
-void boardInit(void) {
-}
diff --git a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h
deleted file mode 100644
index fb7283add9..0000000000
--- a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h
+++ /dev/null
@@ -1,1187 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _BOARD_H_
-#define _BOARD_H_
-
-/*
- * Setup for Clueboard 60% Keyboard
- */
-
-/*
- * Board identifier.
- */
-#define BOARD_GENERIC_STM32_F303XC
-#define BOARD_NAME "HS60 V2.0 PCB"
-
-/*
- * Board oscillators-related settings.
- * NOTE: LSE not fitted.
- */
-#if !defined(STM32_LSECLK)
-#define STM32_LSECLK 0U
-#endif
-
-#define STM32_LSEDRV (3U << 3U)
-
-#if !defined(STM32_HSECLK)
-#define STM32_HSECLK 8000000U
-#endif
-
-// #define STM32_HSE_BYPASS
-
-/*
- * MCU type as defined in the ST header.
- */
-#define STM32F303xC
-
-/*
- * IO pins assignments.
- */
-#define GPIOA_PIN0 0U
-#define GPIOA_PIN1 1U
-#define GPIOA_PIN2 2U
-#define GPIOA_PIN3 3U
-#define GPIOA_PIN4 4U
-#define GPIOA_PIN5 5U
-#define GPIOA_PIN6 6U
-#define GPIOA_PIN7 7U
-#define GPIOA_PIN8 8U
-#define GPIOA_PIN9 9U
-#define GPIOA_PIN10 10U
-#define GPIOA_USB_DM 11U
-#define GPIOA_USB_DP 12U
-#define GPIOA_SWDIO 13U
-#define GPIOA_SWCLK 14U
-#define GPIOA_PIN15 15U
-
-#define GPIOB_PIN0 0U
-#define GPIOB_PIN1 1U
-#define GPIOB_PIN2 2U
-#define GPIOB_PIN3 3U
-#define GPIOB_PIN4 4U
-#define GPIOB_PIN5 5U
-#define GPIOB_PIN6 6U
-#define GPIOB_PIN7 7U
-#define GPIOB_PIN8 8U
-#define GPIOB_PIN9 9U
-#define GPIOB_PIN10 10U
-#define GPIOB_PIN11 11U
-#define GPIOB_PIN12 12U
-#define GPIOB_PIN13 13U
-#define GPIOB_PIN14 14U
-#define GPIOB_PIN15 15U
-
-#define GPIOC_PIN0 0U
-#define GPIOC_PIN1 1U
-#define GPIOC_PIN2 2U
-#define GPIOC_PIN3 3U
-#define GPIOC_PIN4 4U
-#define GPIOC_PIN5 5U
-#define GPIOC_PIN6 6U
-#define GPIOC_PIN7 7U
-#define GPIOC_PIN8 8U
-#define GPIOC_PIN9 9U
-#define GPIOC_PIN10 10U
-#define GPIOC_PIN11 11U
-#define GPIOC_PIN12 12U
-#define GPIOC_PIN13 13U
-#define GPIOC_PIN14 14U
-#define GPIOC_PIN15 15U
-
-#define GPIOD_PIN0 0U
-#define GPIOD_PIN1 1U
-#define GPIOD_PIN2 2U
-#define GPIOD_PIN3 3U
-#define GPIOD_PIN4 4U
-#define GPIOD_PIN5 5U
-#define GPIOD_PIN6 6U
-#define GPIOD_PIN7 7U
-#define GPIOD_PIN8 8U
-#define GPIOD_PIN9 9U
-#define GPIOD_PIN10 10U
-#define GPIOD_PIN11 11U
-#define GPIOD_PIN12 12U
-#define GPIOD_PIN13 13U
-#define GPIOD_PIN14 14U
-#define GPIOD_PIN15 15U
-
-#define GPIOE_PIN0 0U
-#define GPIOE_PIN1 1U
-#define GPIOE_PIN2 2U
-#define GPIOE_PIN3 3U
-#define GPIOE_PIN4 4U
-#define GPIOE_PIN5 5U
-#define GPIOE_PIN6 6U
-#define GPIOE_PIN7 7U
-#define GPIOE_PIN8 8U
-#define GPIOE_PIN9 9U
-#define GPIOE_PIN10 10U
-#define GPIOE_PIN11 11U
-#define GPIOE_PIN12 12U
-#define GPIOE_PIN13 13U
-#define GPIOE_PIN14 14U
-#define GPIOE_PIN15 15U
-
-#define GPIOF_I2C2_SDA 0U
-#define GPIOF_I2C2_SCL 1U
-#define GPIOF_PIN2 2U
-#define GPIOF_PIN3 3U
-#define GPIOF_PIN4 4U
-#define GPIOF_PIN5 5U
-#define GPIOF_PIN6 6U
-#define GPIOF_PIN7 7U
-#define GPIOF_PIN8 8U
-#define GPIOF_PIN9 9U
-#define GPIOF_PIN10 10U
-#define GPIOF_PIN11 11U
-#define GPIOF_PIN12 12U
-#define GPIOF_PIN13 13U
-#define GPIOF_PIN14 14U
-#define GPIOF_PIN15 15U
-
-#define GPIOG_PIN0 0U
-#define GPIOG_PIN1 1U
-#define GPIOG_PIN2 2U
-#define GPIOG_PIN3 3U
-#define GPIOG_PIN4 4U
-#define GPIOG_PIN5 5U
-#define GPIOG_PIN6 6U
-#define GPIOG_PIN7 7U
-#define GPIOG_PIN8 8U
-#define GPIOG_PIN9 9U
-#define GPIOG_PIN10 10U
-#define GPIOG_PIN11 11U
-#define GPIOG_PIN12 12U
-#define GPIOG_PIN13 13U
-#define GPIOG_PIN14 14U
-#define GPIOG_PIN15 15U
-
-#define GPIOH_PIN0 0U
-#define GPIOH_PIN1 1U
-#define GPIOH_PIN2 2U
-#define GPIOH_PIN3 3U
-#define GPIOH_PIN4 4U
-#define GPIOH_PIN5 5U
-#define GPIOH_PIN6 6U
-#define GPIOH_PIN7 7U
-#define GPIOH_PIN8 8U
-#define GPIOH_PIN9 9U
-#define GPIOH_PIN10 10U
-#define GPIOH_PIN11 11U
-#define GPIOH_PIN12 12U
-#define GPIOH_PIN13 13U
-#define GPIOH_PIN14 14U
-#define GPIOH_PIN15 15U
-
-/*
- * IO lines assignments.
- */
-#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
-#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
-#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
-#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
-#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
-
-#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
-#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
-
-#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
-
-
-/*
- * I/O ports initial setup, this configuration is established soon after reset
- * in the initialization code.
- * Please refer to the STM32 Reference Manual for details.
- */
-#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
-#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
-#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
-#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
-#define PIN_ODR_LOW(n) (0U << (n))
-#define PIN_ODR_HIGH(n) (1U << (n))
-#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
-#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
-#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
-#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
-#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
-#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
-#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
-#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
-#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
-#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
-
-/*
- * GPIOA setup:
- *
- * PA0 - NC
- * PA1 - NC
- * PA2 - COL1
- * PA3 - COL2
- * PA4 - SPEAKER1
- * PA5 - SPEAKER2
- * PA6 - COL3
- * PA7 - COL8
- * PA8 - COL6
- * PA9 - COL7
- * PA10 - ROW5
- * PA11 - USB_DM (alternate 14).
- * PA12 - USB_DP (alternate 14).
- * PA13 - SWDIO (alternate 0).
- * PA14 - SWCLK (alternate 0).
- * PA15 - ROW4
- */
-#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
- PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
- PIN_MODE_INPUT(GPIOA_PIN2) | \
- PIN_MODE_INPUT(GPIOA_PIN3) | \
- PIN_MODE_INPUT(GPIOA_PIN4) | \
- PIN_MODE_INPUT(GPIOA_PIN5) | \
- PIN_MODE_INPUT(GPIOA_PIN6) | \
- PIN_MODE_INPUT(GPIOA_PIN7) | \
- PIN_MODE_INPUT(GPIOA_PIN8) | \
- PIN_MODE_INPUT(GPIOA_PIN9) | \
- PIN_MODE_INPUT(GPIOA_PIN10) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
- PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
- PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
- PIN_MODE_INPUT(GPIOA_PIN15))
-#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
-#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
- PIN_OSPEED_HIGH(GPIOA_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
- PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
- PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
- PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
- PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN15))
-#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
- PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
- PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN15))
-#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
- PIN_ODR_HIGH(GPIOA_PIN1) | \
- PIN_ODR_HIGH(GPIOA_PIN2) | \
- PIN_ODR_HIGH(GPIOA_PIN3) | \
- PIN_ODR_HIGH(GPIOA_PIN4) | \
- PIN_ODR_HIGH(GPIOA_PIN5) | \
- PIN_ODR_HIGH(GPIOA_PIN6) | \
- PIN_ODR_HIGH(GPIOA_PIN7) | \
- PIN_ODR_HIGH(GPIOA_PIN8) | \
- PIN_ODR_HIGH(GPIOA_PIN9) | \
- PIN_ODR_HIGH(GPIOA_PIN10) | \
- PIN_ODR_HIGH(GPIOA_USB_DM) | \
- PIN_ODR_HIGH(GPIOA_USB_DP) | \
- PIN_ODR_HIGH(GPIOA_SWDIO) | \
- PIN_ODR_HIGH(GPIOA_SWCLK) | \
- PIN_ODR_HIGH(GPIOA_PIN15))
-#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
- PIN_AFIO_AF(GPIOA_PIN1, 1) | \
- PIN_AFIO_AF(GPIOA_PIN2, 0) | \
- PIN_AFIO_AF(GPIOA_PIN3, 0) | \
- PIN_AFIO_AF(GPIOA_PIN4, 0) | \
- PIN_AFIO_AF(GPIOA_PIN5, 5) | \
- PIN_AFIO_AF(GPIOA_PIN6, 5) | \
- PIN_AFIO_AF(GPIOA_PIN7, 5))
-#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
- PIN_AFIO_AF(GPIOA_PIN9, 0) | \
- PIN_AFIO_AF(GPIOA_PIN10, 0) | \
- PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
- PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
- PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
- PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
- PIN_AFIO_AF(GPIOA_PIN15, 0))
-
-/*
- * GPIOB setup:
- *
- * PB0 - PIN0 (input pullup).
- * PB1 - PIN1 (input pullup).
- * PB2 - PIN2 (input pullup).
- * PB3 - PIN3 (alternate 0).
- * PB4 - PIN4 (input pullup).
- * PB5 - PIN5 (input pullup).
- * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
- * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
- * PB8 - PIN8 (input pullup).
- * PB9 - PIN9 (input pullup).
- * PB10 - PIN10 (input pullup).
- * PB11 - PIN11 (input pullup).
- * PB12 - PIN12 (input pullup).
- * PB13 - PIN13 (input pullup).
- * PB14 - PIN14 (input pullup).
- * PB15 - PIN15 (input pullup).
- */
-#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
- PIN_MODE_INPUT(GPIOB_PIN1) | \
- PIN_MODE_INPUT(GPIOB_PIN2) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
- PIN_MODE_INPUT(GPIOB_PIN4) | \
- PIN_MODE_INPUT(GPIOB_PIN5) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
- PIN_MODE_OUTPUT(GPIOB_PIN7) | \
- PIN_MODE_INPUT(GPIOB_PIN8) | \
- PIN_MODE_INPUT(GPIOB_PIN9) | \
- PIN_MODE_INPUT(GPIOB_PIN10) | \
- PIN_MODE_INPUT(GPIOB_PIN11) | \
- PIN_MODE_INPUT(GPIOB_PIN12) | \
- PIN_MODE_INPUT(GPIOB_PIN13) | \
- PIN_MODE_INPUT(GPIOB_PIN14) | \
- PIN_MODE_INPUT(GPIOB_PIN15))
-#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
- PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
-#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
- PIN_OSPEED_HIGH(GPIOB_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
- PIN_OSPEED_HIGH(GPIOB_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN15))
-#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
- PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN15))
-#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
- PIN_ODR_HIGH(GPIOB_PIN1) | \
- PIN_ODR_HIGH(GPIOB_PIN2) | \
- PIN_ODR_HIGH(GPIOB_PIN3) | \
- PIN_ODR_HIGH(GPIOB_PIN4) | \
- PIN_ODR_HIGH(GPIOB_PIN5) | \
- PIN_ODR_HIGH(GPIOB_PIN6) | \
- PIN_ODR_LOW(GPIOB_PIN7) | \
- PIN_ODR_HIGH(GPIOB_PIN8) | \
- PIN_ODR_HIGH(GPIOB_PIN9) | \
- PIN_ODR_HIGH(GPIOB_PIN10) | \
- PIN_ODR_HIGH(GPIOB_PIN11) | \
- PIN_ODR_HIGH(GPIOB_PIN12) | \
- PIN_ODR_HIGH(GPIOB_PIN13) | \
- PIN_ODR_HIGH(GPIOB_PIN14) | \
- PIN_ODR_HIGH(GPIOB_PIN15))
-#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
- PIN_AFIO_AF(GPIOB_PIN1, 0) | \
- PIN_AFIO_AF(GPIOB_PIN2, 0) | \
- PIN_AFIO_AF(GPIOB_PIN3, 0) | \
- PIN_AFIO_AF(GPIOB_PIN4, 0) | \
- PIN_AFIO_AF(GPIOB_PIN5, 0) | \
- PIN_AFIO_AF(GPIOB_PIN6, 4) | \
- PIN_AFIO_AF(GPIOB_PIN7, 0))
-#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
- PIN_AFIO_AF(GPIOB_PIN9, 0) | \
- PIN_AFIO_AF(GPIOB_PIN10, 0) | \
- PIN_AFIO_AF(GPIOB_PIN11, 0) | \
- PIN_AFIO_AF(GPIOB_PIN12, 0) | \
- PIN_AFIO_AF(GPIOB_PIN13, 0) | \
- PIN_AFIO_AF(GPIOB_PIN14, 0) | \
- PIN_AFIO_AF(GPIOB_PIN15, 0))
-
-/*
- * GPIOC setup:
- *
- * PC0 - PIN0 (input pullup).
- * PC1 - PIN1 (input pullup).
- * PC2 - PIN2 (input pullup).
- * PC3 - PIN3 (input pullup).
- * PC4 - PIN4 (input pullup).
- * PC5 - PIN5 (input pullup).
- * PC6 - PIN6 (input pullup).
- * PC7 - PIN7 (input pullup).
- * PC8 - PIN8 (input pullup).
- * PC9 - PIN9 (input pullup).
- * PC10 - PIN10 (input pullup).
- * PC11 - PIN11 (input pullup).
- * PC12 - PIN12 (input pullup).
- * PC13 - PIN13 (input pullup).
- * PC14 - PIN14 (input floating).
- * PC15 - PIN15 (input floating).
- */
-#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
- PIN_MODE_INPUT(GPIOC_PIN1) | \
- PIN_MODE_INPUT(GPIOC_PIN2) | \
- PIN_MODE_INPUT(GPIOC_PIN3) | \
- PIN_MODE_INPUT(GPIOC_PIN4) | \
- PIN_MODE_INPUT(GPIOC_PIN5) | \
- PIN_MODE_INPUT(GPIOC_PIN6) | \
- PIN_MODE_INPUT(GPIOC_PIN7) | \
- PIN_MODE_INPUT(GPIOC_PIN8) | \
- PIN_MODE_INPUT(GPIOC_PIN9) | \
- PIN_MODE_INPUT(GPIOC_PIN10) | \
- PIN_MODE_INPUT(GPIOC_PIN11) | \
- PIN_MODE_INPUT(GPIOC_PIN12) | \
- PIN_MODE_INPUT(GPIOC_PIN13) | \
- PIN_MODE_INPUT(GPIOC_PIN14) | \
- PIN_MODE_INPUT(GPIOC_PIN15))
-#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
-#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
- PIN_OSPEED_HIGH(GPIOC_PIN14) | \
- PIN_OSPEED_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN15))
-#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
- PIN_ODR_HIGH(GPIOC_PIN1) | \
- PIN_ODR_HIGH(GPIOC_PIN2) | \
- PIN_ODR_HIGH(GPIOC_PIN3) | \
- PIN_ODR_HIGH(GPIOC_PIN4) | \
- PIN_ODR_HIGH(GPIOC_PIN5) | \
- PIN_ODR_HIGH(GPIOC_PIN6) | \
- PIN_ODR_HIGH(GPIOC_PIN7) | \
- PIN_ODR_HIGH(GPIOC_PIN8) | \
- PIN_ODR_HIGH(GPIOC_PIN9) | \
- PIN_ODR_HIGH(GPIOC_PIN10) | \
- PIN_ODR_HIGH(GPIOC_PIN11) | \
- PIN_ODR_HIGH(GPIOC_PIN12) | \
- PIN_ODR_HIGH(GPIOC_PIN13) | \
- PIN_ODR_HIGH(GPIOC_PIN14) | \
- PIN_ODR_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
- PIN_AFIO_AF(GPIOC_PIN1, 0) | \
- PIN_AFIO_AF(GPIOC_PIN2, 0) | \
- PIN_AFIO_AF(GPIOC_PIN3, 0) | \
- PIN_AFIO_AF(GPIOC_PIN4, 0) | \
- PIN_AFIO_AF(GPIOC_PIN5, 0) | \
- PIN_AFIO_AF(GPIOC_PIN6, 0) | \
- PIN_AFIO_AF(GPIOC_PIN7, 0))
-#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
- PIN_AFIO_AF(GPIOC_PIN9, 0) | \
- PIN_AFIO_AF(GPIOC_PIN10, 0) | \
- PIN_AFIO_AF(GPIOC_PIN11, 0) | \
- PIN_AFIO_AF(GPIOC_PIN12, 0) | \
- PIN_AFIO_AF(GPIOC_PIN13, 0) | \
- PIN_AFIO_AF(GPIOC_PIN14, 0) | \
- PIN_AFIO_AF(GPIOC_PIN15, 0))
-
-/*
- * GPIOD setup:
- *
- * PD0 - PIN0 (input pullup).
- * PD1 - PIN1 (input pullup).
- * PD2 - PIN2 (input pullup).
- * PD3 - PIN3 (input pullup).
- * PD4 - PIN4 (input pullup).
- * PD5 - PIN5 (input pullup).
- * PD6 - PIN6 (input pullup).
- * PD7 - PIN7 (input pullup).
- * PD8 - PIN8 (input pullup).
- * PD9 - PIN9 (input pullup).
- * PD11 - PIN10 (input pullup).
- * PD11 - PIN11 (input pullup).
- * PD12 - PIN12 (input pullup).
- * PD13 - PIN13 (input pullup).
- * PD14 - PIN14 (input pullup).
- * PD15 - PIN15 (input pullup).
- */
-#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
- PIN_MODE_INPUT(GPIOD_PIN1) | \
- PIN_MODE_INPUT(GPIOD_PIN2) | \
- PIN_MODE_INPUT(GPIOD_PIN3) | \
- PIN_MODE_INPUT(GPIOD_PIN4) | \
- PIN_MODE_INPUT(GPIOD_PIN5) | \
- PIN_MODE_INPUT(GPIOD_PIN6) | \
- PIN_MODE_INPUT(GPIOD_PIN7) | \
- PIN_MODE_INPUT(GPIOD_PIN8) | \
- PIN_MODE_INPUT(GPIOD_PIN9) | \
- PIN_MODE_INPUT(GPIOD_PIN10) | \
- PIN_MODE_INPUT(GPIOD_PIN11) | \
- PIN_MODE_INPUT(GPIOD_PIN12) | \
- PIN_MODE_INPUT(GPIOD_PIN13) | \
- PIN_MODE_INPUT(GPIOD_PIN14) | \
- PIN_MODE_INPUT(GPIOD_PIN15))
-#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
-#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN15))
-#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN15))
-#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
- PIN_ODR_HIGH(GPIOD_PIN1) | \
- PIN_ODR_HIGH(GPIOD_PIN2) | \
- PIN_ODR_HIGH(GPIOD_PIN3) | \
- PIN_ODR_HIGH(GPIOD_PIN4) | \
- PIN_ODR_HIGH(GPIOD_PIN5) | \
- PIN_ODR_HIGH(GPIOD_PIN6) | \
- PIN_ODR_HIGH(GPIOD_PIN7) | \
- PIN_ODR_HIGH(GPIOD_PIN8) | \
- PIN_ODR_HIGH(GPIOD_PIN9) | \
- PIN_ODR_HIGH(GPIOD_PIN10) | \
- PIN_ODR_HIGH(GPIOD_PIN11) | \
- PIN_ODR_HIGH(GPIOD_PIN12) | \
- PIN_ODR_HIGH(GPIOD_PIN13) | \
- PIN_ODR_HIGH(GPIOD_PIN14) | \
- PIN_ODR_HIGH(GPIOD_PIN15))
-#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
- PIN_AFIO_AF(GPIOD_PIN1, 0) | \
- PIN_AFIO_AF(GPIOD_PIN2, 0) | \
- PIN_AFIO_AF(GPIOD_PIN3, 0) | \
- PIN_AFIO_AF(GPIOD_PIN4, 0) | \
- PIN_AFIO_AF(GPIOD_PIN5, 0) | \
- PIN_AFIO_AF(GPIOD_PIN6, 0) | \
- PIN_AFIO_AF(GPIOD_PIN7, 0))
-#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
- PIN_AFIO_AF(GPIOD_PIN9, 0) | \
- PIN_AFIO_AF(GPIOD_PIN10, 0) | \
- PIN_AFIO_AF(GPIOD_PIN11, 0) | \
- PIN_AFIO_AF(GPIOD_PIN12, 0) | \
- PIN_AFIO_AF(GPIOD_PIN13, 0) | \
- PIN_AFIO_AF(GPIOD_PIN14, 0) | \
- PIN_AFIO_AF(GPIOD_PIN15, 0))
-
-/*
- * GPIOE setup:
- *
- * PE0 - PIN0 (input pullup).
- * PE1 - PIN1 (input pullup).
- * PE2 - PIN2 (input pullup).
- * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
- * PE4 - PIN4 (input pullup).
- * PE5 - PIN5 (input pullup).
- * PE6 - PIN6 (input pullup).
- * PE7 - PIN7 (input pullup).
- * PE8 - PIN8 (output pushpull maximum).
- * PE9 - PIN9 (output pushpull maximum).
- * PE10 - PIN10 (output pushpull maximum).
- * PE11 - PIN11 (output pushpull maximum).
- * PE12 - PIN12 (output pushpull maximum).
- * PE13 - PIN13 (output pushpull maximum).
- * PE14 - PIN14 (output pushpull maximum).
- * PE15 - PIN15 (output pushpull maximum).
- */
-#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
- PIN_MODE_INPUT(GPIOE_PIN1) | \
- PIN_MODE_INPUT(GPIOE_PIN2) |\
- PIN_MODE_OUTPUT(GPIOE_PIN3) | \
- PIN_MODE_INPUT(GPIOE_PIN4) |\
- PIN_MODE_INPUT(GPIOE_PIN5) |\
- PIN_MODE_INPUT(GPIOE_PIN6) | \
- PIN_MODE_INPUT(GPIOE_PIN7) | \
- PIN_MODE_OUTPUT(GPIOE_PIN8) | \
- PIN_MODE_OUTPUT(GPIOE_PIN9) | \
- PIN_MODE_OUTPUT(GPIOE_PIN10) | \
- PIN_MODE_OUTPUT(GPIOE_PIN11) | \
- PIN_MODE_OUTPUT(GPIOE_PIN12) | \
- PIN_MODE_OUTPUT(GPIOE_PIN13) | \
- PIN_MODE_OUTPUT(GPIOE_PIN14) | \
- PIN_MODE_OUTPUT(GPIOE_PIN15))
-#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
-#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
- PIN_OSPEED_HIGH(GPIOE_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
- PIN_OSPEED_HIGH(GPIOE_PIN8) | \
- PIN_OSPEED_HIGH(GPIOE_PIN9) | \
- PIN_OSPEED_HIGH(GPIOE_PIN10) | \
- PIN_OSPEED_HIGH(GPIOE_PIN11) | \
- PIN_OSPEED_HIGH(GPIOE_PIN12) | \
- PIN_OSPEED_HIGH(GPIOE_PIN13) | \
- PIN_OSPEED_HIGH(GPIOE_PIN14) | \
- PIN_OSPEED_HIGH(GPIOE_PIN15))
-#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN15))
-#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
- PIN_ODR_HIGH(GPIOE_PIN1) | \
- PIN_ODR_HIGH(GPIOE_PIN2) | \
- PIN_ODR_HIGH(GPIOE_PIN3) | \
- PIN_ODR_HIGH(GPIOE_PIN4) | \
- PIN_ODR_HIGH(GPIOE_PIN5) | \
- PIN_ODR_HIGH(GPIOE_PIN6) | \
- PIN_ODR_HIGH(GPIOE_PIN7) | \
- PIN_ODR_LOW(GPIOE_PIN8) | \
- PIN_ODR_LOW(GPIOE_PIN9) | \
- PIN_ODR_LOW(GPIOE_PIN10) | \
- PIN_ODR_LOW(GPIOE_PIN11) | \
- PIN_ODR_LOW(GPIOE_PIN12) | \
- PIN_ODR_LOW(GPIOE_PIN13) | \
- PIN_ODR_LOW(GPIOE_PIN14) | \
- PIN_ODR_LOW(GPIOE_PIN15))
-#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
- PIN_AFIO_AF(GPIOE_PIN1, 0) | \
- PIN_AFIO_AF(GPIOE_PIN2, 0) |\
- PIN_AFIO_AF(GPIOE_PIN3, 0) | \
- PIN_AFIO_AF(GPIOE_PIN4, 0) |\
- PIN_AFIO_AF(GPIOE_PIN5, 0) |\
- PIN_AFIO_AF(GPIOE_PIN6, 0) | \
- PIN_AFIO_AF(GPIOE_PIN7, 0))
-#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
- PIN_AFIO_AF(GPIOE_PIN9, 0) | \
- PIN_AFIO_AF(GPIOE_PIN10, 0) | \
- PIN_AFIO_AF(GPIOE_PIN11, 0) | \
- PIN_AFIO_AF(GPIOE_PIN12, 0) | \
- PIN_AFIO_AF(GPIOE_PIN13, 0) | \
- PIN_AFIO_AF(GPIOE_PIN14, 0) | \
- PIN_AFIO_AF(GPIOE_PIN15, 0))
-
-/*
- * GPIOF setup:
- *
- * PF0 - I2C2_SDA (input floating).
- * PF1 - I2C2_SCL (input floating).
- * PF2 - PIN2 (input pullup).
- * PF3 - PIN3 (input pullup).
- * PF4 - PIN4 (input pullup).
- * PF5 - PIN5 (input pullup).
- * PF6 - PIN6 (input pullup).
- * PF7 - PIN7 (input pullup).
- * PF8 - PIN8 (input pullup).
- * PF9 - PIN9 (input pullup).
- * PF10 - PIN10 (input pullup).
- * PF11 - PIN11 (input pullup).
- * PF12 - PIN12 (input pullup).
- * PF13 - PIN13 (input pullup).
- * PF14 - PIN14 (input pullup).
- * PF15 - PIN15 (input pullup).
- */
-#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
- PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
- PIN_MODE_INPUT(GPIOF_PIN2) | \
- PIN_MODE_INPUT(GPIOF_PIN3) | \
- PIN_MODE_INPUT(GPIOF_PIN4) | \
- PIN_MODE_INPUT(GPIOF_PIN5) | \
- PIN_MODE_INPUT(GPIOF_PIN6) | \
- PIN_MODE_INPUT(GPIOF_PIN7) | \
- PIN_MODE_INPUT(GPIOF_PIN8) | \
- PIN_MODE_INPUT(GPIOF_PIN9) | \
- PIN_MODE_INPUT(GPIOF_PIN10) | \
- PIN_MODE_INPUT(GPIOF_PIN11) | \
- PIN_MODE_INPUT(GPIOF_PIN12) | \
- PIN_MODE_INPUT(GPIOF_PIN13) | \
- PIN_MODE_INPUT(GPIOF_PIN14) | \
- PIN_MODE_INPUT(GPIOF_PIN15))
-#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
- PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
-#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
- PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN15))
-#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
- PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN15))
-#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
- PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
- PIN_ODR_HIGH(GPIOF_PIN2) | \
- PIN_ODR_HIGH(GPIOF_PIN3) | \
- PIN_ODR_HIGH(GPIOF_PIN4) | \
- PIN_ODR_HIGH(GPIOF_PIN5) | \
- PIN_ODR_HIGH(GPIOF_PIN6) | \
- PIN_ODR_HIGH(GPIOF_PIN7) | \
- PIN_ODR_HIGH(GPIOF_PIN8) | \
- PIN_ODR_HIGH(GPIOF_PIN9) | \
- PIN_ODR_HIGH(GPIOF_PIN10) | \
- PIN_ODR_HIGH(GPIOF_PIN11) | \
- PIN_ODR_HIGH(GPIOF_PIN12) | \
- PIN_ODR_HIGH(GPIOF_PIN13) | \
- PIN_ODR_HIGH(GPIOF_PIN14) | \
- PIN_ODR_HIGH(GPIOF_PIN15))
-#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
- PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
- PIN_AFIO_AF(GPIOF_PIN2, 0) | \
- PIN_AFIO_AF(GPIOF_PIN3, 0) | \
- PIN_AFIO_AF(GPIOF_PIN4, 0) | \
- PIN_AFIO_AF(GPIOF_PIN5, 0) | \
- PIN_AFIO_AF(GPIOF_PIN6, 0) | \
- PIN_AFIO_AF(GPIOF_PIN7, 0))
-#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
- PIN_AFIO_AF(GPIOF_PIN9, 0) | \
- PIN_AFIO_AF(GPIOF_PIN10, 0) | \
- PIN_AFIO_AF(GPIOF_PIN11, 0) | \
- PIN_AFIO_AF(GPIOF_PIN12, 0) | \
- PIN_AFIO_AF(GPIOF_PIN13, 0) | \
- PIN_AFIO_AF(GPIOF_PIN14, 0) | \
- PIN_AFIO_AF(GPIOF_PIN15, 0))
-
-/*
- * GPIOG setup:
- *
- * PG0 - PIN0 (input pullup).
- * PG1 - PIN1 (input pullup).
- * PG2 - PIN2 (input pullup).
- * PG3 - PIN3 (input pullup).
- * PG4 - PIN4 (input pullup).
- * PG5 - PIN5 (input pullup).
- * PG6 - PIN6 (input pullup).
- * PG7 - PIN7 (input pullup).
- * PG8 - PIN8 (input pullup).
- * PG9 - PIN9 (input pullup).
- * PG10 - PIN10 (input pullup).
- * PG11 - PIN11 (input pullup).
- * PG12 - PIN12 (input pullup).
- * PG13 - PIN13 (input pullup).
- * PG14 - PIN14 (input pullup).
- * PG15 - PIN15 (input pullup).
- */
-#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
- PIN_MODE_INPUT(GPIOG_PIN1) | \
- PIN_MODE_INPUT(GPIOG_PIN2) | \
- PIN_MODE_INPUT(GPIOG_PIN3) | \
- PIN_MODE_INPUT(GPIOG_PIN4) | \
- PIN_MODE_INPUT(GPIOG_PIN5) | \
- PIN_MODE_INPUT(GPIOG_PIN6) | \
- PIN_MODE_INPUT(GPIOG_PIN7) | \
- PIN_MODE_INPUT(GPIOG_PIN8) | \
- PIN_MODE_INPUT(GPIOG_PIN9) | \
- PIN_MODE_INPUT(GPIOG_PIN10) | \
- PIN_MODE_INPUT(GPIOG_PIN11) | \
- PIN_MODE_INPUT(GPIOG_PIN12) | \
- PIN_MODE_INPUT(GPIOG_PIN13) | \
- PIN_MODE_INPUT(GPIOG_PIN14) | \
- PIN_MODE_INPUT(GPIOG_PIN15))
-#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
-#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN15))
-#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN15))
-#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
- PIN_ODR_HIGH(GPIOG_PIN1) | \
- PIN_ODR_HIGH(GPIOG_PIN2) | \
- PIN_ODR_HIGH(GPIOG_PIN3) | \
- PIN_ODR_HIGH(GPIOG_PIN4) | \
- PIN_ODR_HIGH(GPIOG_PIN5) | \
- PIN_ODR_HIGH(GPIOG_PIN6) | \
- PIN_ODR_HIGH(GPIOG_PIN7) | \
- PIN_ODR_HIGH(GPIOG_PIN8) | \
- PIN_ODR_HIGH(GPIOG_PIN9) | \
- PIN_ODR_HIGH(GPIOG_PIN10) | \
- PIN_ODR_HIGH(GPIOG_PIN11) | \
- PIN_ODR_HIGH(GPIOG_PIN12) | \
- PIN_ODR_HIGH(GPIOG_PIN13) | \
- PIN_ODR_HIGH(GPIOG_PIN14) | \
- PIN_ODR_HIGH(GPIOG_PIN15))
-#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
- PIN_AFIO_AF(GPIOG_PIN1, 0) | \
- PIN_AFIO_AF(GPIOG_PIN2, 0) | \
- PIN_AFIO_AF(GPIOG_PIN3, 0) | \
- PIN_AFIO_AF(GPIOG_PIN4, 0) | \
- PIN_AFIO_AF(GPIOG_PIN5, 0) | \
- PIN_AFIO_AF(GPIOG_PIN6, 0) | \
- PIN_AFIO_AF(GPIOG_PIN7, 0))
-#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
- PIN_AFIO_AF(GPIOG_PIN9, 0) | \
- PIN_AFIO_AF(GPIOG_PIN10, 0) | \
- PIN_AFIO_AF(GPIOG_PIN11, 0) | \
- PIN_AFIO_AF(GPIOG_PIN12, 0) | \
- PIN_AFIO_AF(GPIOG_PIN13, 0) | \
- PIN_AFIO_AF(GPIOG_PIN14, 0) | \
- PIN_AFIO_AF(GPIOG_PIN15, 0))
-
-/*
- * GPIOH setup:
- *
- * PH0 - PIN0 (input pullup).
- * PH1 - PIN1 (input pullup).
- * PH2 - PIN2 (input pullup).
- * PH3 - PIN3 (input pullup).
- * PH4 - PIN4 (input pullup).
- * PH5 - PIN5 (input pullup).
- * PH6 - PIN6 (input pullup).
- * PH7 - PIN7 (input pullup).
- * PH8 - PIN8 (input pullup).
- * PH9 - PIN9 (input pullup).
- * PH10 - PIN10 (input pullup).
- * PH11 - PIN11 (input pullup).
- * PH12 - PIN12 (input pullup).
- * PH13 - PIN13 (input pullup).
- * PH14 - PIN14 (input pullup).
- * PH15 - PIN15 (input pullup).
- */
-#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
- PIN_MODE_INPUT(GPIOH_PIN1) | \
- PIN_MODE_INPUT(GPIOH_PIN2) | \
- PIN_MODE_INPUT(GPIOH_PIN3) | \
- PIN_MODE_INPUT(GPIOH_PIN4) | \
- PIN_MODE_INPUT(GPIOH_PIN5) | \
- PIN_MODE_INPUT(GPIOH_PIN6) | \
- PIN_MODE_INPUT(GPIOH_PIN7) | \
- PIN_MODE_INPUT(GPIOH_PIN8) | \
- PIN_MODE_INPUT(GPIOH_PIN9) | \
- PIN_MODE_INPUT(GPIOH_PIN10) | \
- PIN_MODE_INPUT(GPIOH_PIN11) | \
- PIN_MODE_INPUT(GPIOH_PIN12) | \
- PIN_MODE_INPUT(GPIOH_PIN13) | \
- PIN_MODE_INPUT(GPIOH_PIN14) | \
- PIN_MODE_INPUT(GPIOH_PIN15))
-#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
-#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN15))
-#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN15))
-#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
- PIN_ODR_HIGH(GPIOH_PIN1) | \
- PIN_ODR_HIGH(GPIOH_PIN2) | \
- PIN_ODR_HIGH(GPIOH_PIN3) | \
- PIN_ODR_HIGH(GPIOH_PIN4) | \
- PIN_ODR_HIGH(GPIOH_PIN5) | \
- PIN_ODR_HIGH(GPIOH_PIN6) | \
- PIN_ODR_HIGH(GPIOH_PIN7) | \
- PIN_ODR_HIGH(GPIOH_PIN8) | \
- PIN_ODR_HIGH(GPIOH_PIN9) | \
- PIN_ODR_HIGH(GPIOH_PIN10) | \
- PIN_ODR_HIGH(GPIOH_PIN11) | \
- PIN_ODR_HIGH(GPIOH_PIN12) | \
- PIN_ODR_HIGH(GPIOH_PIN13) | \
- PIN_ODR_HIGH(GPIOH_PIN14) | \
- PIN_ODR_HIGH(GPIOH_PIN15))
-#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
- PIN_AFIO_AF(GPIOH_PIN1, 0) | \
- PIN_AFIO_AF(GPIOH_PIN2, 0) | \
- PIN_AFIO_AF(GPIOH_PIN3, 0) | \
- PIN_AFIO_AF(GPIOH_PIN4, 0) | \
- PIN_AFIO_AF(GPIOH_PIN5, 0) | \
- PIN_AFIO_AF(GPIOH_PIN6, 0) | \
- PIN_AFIO_AF(GPIOH_PIN7, 0))
-#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
- PIN_AFIO_AF(GPIOH_PIN9, 0) | \
- PIN_AFIO_AF(GPIOH_PIN10, 0) | \
- PIN_AFIO_AF(GPIOH_PIN11, 0) | \
- PIN_AFIO_AF(GPIOH_PIN12, 0) | \
- PIN_AFIO_AF(GPIOH_PIN13, 0) | \
- PIN_AFIO_AF(GPIOH_PIN14, 0) | \
- PIN_AFIO_AF(GPIOH_PIN15, 0))
-
-
-/*
- * USB bus activation macro, required by the USB driver.
- */
-// #define usb_lld_connect_bus(usbp)
-#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
-// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
-/*
- * USB bus de-activation macro, required by the USB driver.
- */
-// #define usb_lld_disconnect_bus(usbp)
-#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
-// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
-
-#if !defined(_FROM_ASM_)
-#ifdef __cplusplus
-extern "C" {
-#endif
- void boardInit(void);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _FROM_ASM_ */
-
-#endif /* _BOARD_H_ */
diff --git a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk
deleted file mode 100644
index 43377629a3..0000000000
--- a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of all the board related files.
-BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
-
-# Required include directories
-BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/hs60/v2/bootloader_defs.h b/keyboards/hs60/v2/bootloader_defs.h
deleted file mode 100644
index 3b0e9d20a6..0000000000
--- a/keyboards/hs60/v2/bootloader_defs.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Address for jumping to bootloader on STM32 chips. */
-/* It is chip dependent, the correct number can be looked up here:
- * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
- * This also requires a patch to chibios:
- * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
- */
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/hs60/v2/keymaps/stanrc85/config.h b/keyboards/hs60/v2/keymaps/stanrc85/config.h
index 5aab3098c7..d61e6bde4f 100644
--- a/keyboards/hs60/v2/keymaps/stanrc85/config.h
+++ b/keyboards/hs60/v2/keymaps/stanrc85/config.h
@@ -7,7 +7,7 @@
// disable backlight after timeout in minutes, 0 = no timeout
#undef RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT
-#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 10
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 20
#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_0
#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_1
@@ -39,3 +39,5 @@
#define RGB_BACKLIGHT_COLOR_1 { .h = 0, .s = 255 }
#define RGB_BACKLIGHT_COLOR_2 { .h = 150, .s = 255 }
+
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/hs60/v2/rules.mk b/keyboards/hs60/v2/rules.mk
index c2b643ad10..6c32342589 100644
--- a/keyboards/hs60/v2/rules.mk
+++ b/keyboards/hs60/v2/rules.mk
@@ -1,52 +1,11 @@
-# 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 =
+# MCU name
+MCU = STM32F303
# 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.
#
@@ -67,3 +26,10 @@ DYNAMIC_KEYMAP_ENABLE = no
CIE1931_CURVE = yes
LAYOUTS = 60_ansi 60_iso
+
+# 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
diff --git a/keyboards/ivy/keymaps/default/keymap.c b/keyboards/ivy/keymaps/default/keymap.c
index 9a95ba820e..c250fbdf8a 100644
--- a/keyboards/ivy/keymaps/default/keymap.c
+++ b/keyboards/ivy/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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 e91f46aeb2..444ebad077 100644
--- a/keyboards/jc65/v32a/config.h
+++ b/keyboards/jc65/v32a/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x1234
#define PRODUCT_ID 0x5679
+#define DEVICE_VER 0x0200
#define MANUFACTURER winkeyless.kr
#define PRODUCT JC65 PS2AVRGB
diff --git a/keyboards/jc65/v32a/i2c.c b/keyboards/jc65/v32a/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/jc65/v32a/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/jc65/v32a/i2c.h b/keyboards/jc65/v32a/i2c.h
deleted file mode 100644
index 93a69c94da..0000000000
--- a/keyboards/jc65/v32a/i2c.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
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 ee6efb3fa5..18e7f1de9d 100644
--- a/keyboards/jc65/v32a/rules.mk
+++ b/keyboards/jc65/v32a/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
@@ -34,10 +19,10 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
diff --git a/keyboards/jc65/v32a/usbconfig.h b/keyboards/jc65/v32a/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/jc65/v32a/usbconfig.h
+++ b/keyboards/jc65/v32a/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/jc65/v32a/v32a.c b/keyboards/jc65/v32a/v32a.c
index 8176ade0a1..9b1e07274c 100644
--- a/keyboards/jc65/v32a/v32a.c
+++ b/keyboards/jc65/v32a/v32a.c
@@ -16,56 +16,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "v32a.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-#endif
__attribute__ ((weak))
-void matrix_scan_user(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
-}
+void matrix_scan_user(void) {}
#ifdef BACKLIGHT_ENABLE
void backlight_init_ports(void) {
- DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ setPinOutput(D0);
+ setPinOutput(D1);
+ setPinOutput(D4);
+ setPinOutput(D6);
+
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
}
void backlight_set(uint8_t level) {
if (level == 0) {
// Turn out the lights
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
} else {
// Turn on the lights
- PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinHigh(D0);
+ writePinHigh(D1);
+ writePinHigh(D4);
+ writePinHigh(D6);
}
}
#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/config.h b/keyboards/jj40/config.h
index c068685a4a..2310ce87e2 100644
--- a/keyboards/jj40/config.h
+++ b/keyboards/jj40/config.h
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
#define MANUFACTURER Kprepublic
@@ -45,6 +46,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/* key combination for magic key command */
/* defined by default; to change, uncomment and set to the combination you want */
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/usbconfig.h b/keyboards/jj40/usbconfig.h
index ad97e7f0a3..4599c03dc9 100644
--- a/keyboards/jj40/usbconfig.h
+++ b/keyboards/jj40/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
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/jj4x4/config.h b/keyboards/jj4x4/config.h
index 80fa07d3bb..8918e60dad 100644
--- a/keyboards/jj4x4/config.h
+++ b/keyboards/jj4x4/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
#define MANUFACTURER Kprepublic
@@ -48,6 +49,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/* key combination for magic key command */
/* defined by default; to change, uncomment and set to the combination you want */
diff --git a/keyboards/jj4x4/jj4x4.c b/keyboards/jj4x4/jj4x4.c
index 265508b2d5..6330c89de5 100644
--- a/keyboards/jj4x4/jj4x4.c
+++ b/keyboards/jj4x4/jj4x4.c
@@ -17,40 +17,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "jj4x4.h"
-
-#ifdef RGBLIGHT_ENABLE
-
-#include <string.h>
-#include "i2c_master.h"
-#include "rgblight.h"
-
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
- i2c_init();
- // call user level keymaps, if any
- matrix_init_user();
-}
-// custom RGB driver
-void rgblight_set(void) {
- if (!rgblight_config.enable) {
- memset(led, 0, 3 * RGBLED_NUM);
- }
-
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- rgb_init = true;
- }
-
- rgblight_task();
- matrix_scan_user();
-}
-
-#endif
diff --git a/keyboards/jj4x4/rules.mk b/keyboards/jj4x4/rules.mk
index fedc525f8e..aa74cc7c92 100644
--- a/keyboards/jj4x4/rules.mk
+++ b/keyboards/jj4x4/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
@@ -40,7 +25,7 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
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
@@ -48,6 +33,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)
-SRC += i2c_master.c
-
LAYOUTS = ortho_4x4
diff --git a/keyboards/jj4x4/usbconfig.h b/keyboards/jj4x4/usbconfig.h
index a7653bde86..96bf2eda8f 100644
--- a/keyboards/jj4x4/usbconfig.h
+++ b/keyboards/jj4x4/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
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 0d35e3129e..dfd8a4a8fb 100644
--- a/keyboards/jj50/config.h
+++ b/keyboards/jj50/config.h
@@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
#define MANUFACTURER kprepublic
diff --git a/keyboards/jj50/i2c.c b/keyboards/jj50/i2c.c
deleted file mode 100644
index c27f3e3d17..0000000000
--- a/keyboards/jj50/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 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/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/jj50/jj50.c b/keyboards/jj50/jj50.c
index d4a70f68d0..7c3cee95d1 100644
--- a/keyboards/jj50/jj50.c
+++ b/keyboards/jj50/jj50.c
@@ -17,24 +17,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "jj50.h"
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
-
#include "backlight.h"
#include "backlight_custom.h"
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
+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) {
b_led_init_ports();
}
@@ -47,48 +43,3 @@ void backlight_set(uint8_t level) {
b_led_set(level);
}
#endif
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
- void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
- }
-
- __attribute__((weak)) // overridable
- void matrix_init_user(void) {
-
- }
-
- __attribute__((weak)) // overridable
- void matrix_scan_user(void) {
-
- }
diff --git a/keyboards/jj50/rules.mk b/keyboards/jj50/rules.mk
index b23b4becd4..40473e6ecc 100644
--- a/keyboards/jj50/rules.mk
+++ b/keyboards/jj50/rules.mk
@@ -1,19 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-# Modified 2018 Wayne Jones (WarmCatUK) <waynekjones@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
@@ -35,22 +19,18 @@ CONSOLE_ENABLE = no
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
NKRO_ENABLE = no
# Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-
-DISABLE_WS2812 = no
-
KEY_LOCK_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
#OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight.c
+SRC = matrix.c backlight.c
LAYOUTS = ortho_5x12
diff --git a/keyboards/jj50/usbconfig.h b/keyboards/jj50/usbconfig.h
index 59f29d04dd..b05fc975e7 100644
--- a/keyboards/jj50/usbconfig.h
+++ b/keyboards/jj50/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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', 'P', 'R', 'e', 'p', 'u', 'b', 'l', 'i', 'c'
diff --git a/keyboards/kbdfans/kbd19x/config.h b/keyboards/kbdfans/kbd19x/config.h
index d722dc2615..3fcda998c2 100644
--- a/keyboards/kbdfans/kbd19x/config.h
+++ b/keyboards/kbdfans/kbd19x/config.h
@@ -47,11 +47,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-
#define BACKLIGHT_PIN B6
-// #define BACKLIGHT_BREATHING
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -59,6 +58,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
+#define RGBLIGHT_SLEEP
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/kbdfans/kbd19x/rules.mk b/keyboards/kbdfans/kbd19x/rules.mk
index 0f6a80f8cb..eb9b5fe7b2 100644
--- a/keyboards/kbdfans/kbd19x/rules.mk
+++ b/keyboards/kbdfans/kbd19x/rules.mk
@@ -22,7 +22,7 @@ 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
+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)
diff --git a/keyboards/kbdfans/kbd4x/config.h b/keyboards/kbdfans/kbd4x/config.h
index 07bc4b9901..6928ea8ff9 100644
--- a/keyboards/kbdfans/kbd4x/config.h
+++ b/keyboards/kbdfans/kbd4x/config.h
@@ -47,11 +47,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-
#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -59,6 +59,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
+#define RGBLIGHT_SLEEP
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/kbdfans/kbd4x/rules.mk b/keyboards/kbdfans/kbd4x/rules.mk
index c5a10bce88..eccc6ebbed 100644
--- a/keyboards/kbdfans/kbd4x/rules.mk
+++ b/keyboards/kbdfans/kbd4x/rules.mk
@@ -22,7 +22,7 @@ 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
+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)
diff --git a/keyboards/kbdfans/kbd66/config.h b/keyboards/kbdfans/kbd66/config.h
index a2666a6197..5d6cab4586 100644
--- a/keyboards/kbdfans/kbd66/config.h
+++ b/keyboards/kbdfans/kbd66/config.h
@@ -47,12 +47,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-
#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6
-
+#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
diff --git a/keyboards/kbdfans/kbd66/rules.mk b/keyboards/kbdfans/kbd66/rules.mk
index 7484ca9e77..4a96ef03fe 100644
--- a/keyboards/kbdfans/kbd66/rules.mk
+++ b/keyboards/kbdfans/kbd66/rules.mk
@@ -22,7 +22,7 @@ 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
+NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/kbdfans/kbd67/hotswap/config.h b/keyboards/kbdfans/kbd67/hotswap/config.h
index fca9916ed9..589d76da36 100644
--- a/keyboards/kbdfans/kbd67/hotswap/config.h
+++ b/keyboards/kbdfans/kbd67/hotswap/config.h
@@ -54,9 +54,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN B4
#ifdef RGB_DI_PIN
#define RGBLED_NUM 8
@@ -67,6 +68,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
// /*== all animations enable ==*/
#define RGBLIGHT_ANIMATIONS
+ #define RGBLIGHT_SLEEP
// /*== or choose animations ==*/
// #define RGBLIGHT_EFFECT_BREATHING
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
diff --git a/keyboards/kbdfans/kbd67/hotswap/rules.mk b/keyboards/kbdfans/kbd67/hotswap/rules.mk
index 4b51619da1..74a62a22bb 100644
--- a/keyboards/kbdfans/kbd67/hotswap/rules.mk
+++ b/keyboards/kbdfans/kbd67/hotswap/rules.mk
@@ -22,7 +22,7 @@ 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
+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)
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/config.h b/keyboards/kbdfans/kbd67/mkii_soldered/config.h
index 6a726af061..df0607b249 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/config.h
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/config.h
@@ -54,9 +54,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
//#define RGB_DI_PIN B3
//#ifdef RGB_DI_PIN
// #define RGBLED_NUM 20
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/default/keymap.c b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/default/keymap.c
index 17bf4ec991..99556b7ef0 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/default/keymap.c
+++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/default/keymap.c
@@ -15,15 +15,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, 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_MUTE,\
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
};
-
-void rgb_matrix_indicators_user(void)
-{
- if (IS_LED_ON(host_keyboard_leds(), USB_LED_CAPS_LOCK))
- {
- rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
- }
-}
-
void matrix_init_user(void)
{
//user initialization
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/mkiirgb.c b/keyboards/kbdfans/kbd67/mkiirgb/mkiirgb.c
index 430dca9524..526949e6fe 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/mkiirgb.c
+++ b/keyboards/kbdfans/kbd67/mkiirgb/mkiirgb.c
@@ -117,3 +117,15 @@ 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))
+ {
+ rgb_matrix_set_color(30, 0xFF, 0xFF, 0xFF);
+ }
+}
+
+
+
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h
index 5ef18fcc79..b60685e2b0 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/config.h
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h
@@ -19,11 +19,27 @@
#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_MAXIMUM_BRIGHTNESS 180
-#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_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 32
-#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/rules.mk b/keyboards/kbdfans/kbd67/mkiirgb/v1/rules.mk
index 782d86c1ea..ea3746069f 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/rules.mk
+++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/rules.mk
@@ -1,6 +1,6 @@
-MCU = STM32F303
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -p DF11 -v 0483
+# MCU name
+MCU = STM32F303
+
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
@@ -11,4 +11,4 @@ NKRO_ENABLE = yes # USB Nkey Rollover
AUDIO_ENABLE = no
RGB_MATRIX_ENABLE = yes # Use RGB matrix
-LAYOUTS = 65_ansi_blocker \ No newline at end of file
+LAYOUTS = 65_ansi_blocker
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/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/rev1/config.h b/keyboards/kbdfans/kbd67/rev1/config.h
index 7a26192f4a..d20dcb1c57 100644
--- a/keyboards/kbdfans/kbd67/rev1/config.h
+++ b/keyboards/kbdfans/kbd67/rev1/config.h
@@ -49,9 +49,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLED_NUM 20
@@ -62,6 +63,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
#define RGBLIGHT_ANIMATIONS
+ #define RGBLIGHT_SLEEP
/*== or choose animations ==*/
// #define RGBLIGHT_EFFECT_BREATHING
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
diff --git a/keyboards/kbdfans/kbd67/rev1/rules.mk b/keyboards/kbdfans/kbd67/rev1/rules.mk
index d71446caf3..a29ca53ecf 100644
--- a/keyboards/kbdfans/kbd67/rev1/rules.mk
+++ b/keyboards/kbdfans/kbd67/rev1/rules.mk
@@ -22,7 +22,7 @@ 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
+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)
diff --git a/keyboards/kbdfans/kbd67/rev2/config.h b/keyboards/kbdfans/kbd67/rev2/config.h
index d4e200fa8e..931f5714b8 100644
--- a/keyboards/kbdfans/kbd67/rev2/config.h
+++ b/keyboards/kbdfans/kbd67/rev2/config.h
@@ -61,4 +61,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_LIMIT_VAL 240
+#define RGBLIGHT_SLEEP
#endif
diff --git a/keyboards/kbdfans/kbd67/rev2/rules.mk b/keyboards/kbdfans/kbd67/rev2/rules.mk
index 46e623fd53..7f66fc0c84 100644
--- a/keyboards/kbdfans/kbd67/rev2/rules.mk
+++ b/keyboards/kbdfans/kbd67/rev2/rules.mk
@@ -22,7 +22,7 @@ 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
+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)
diff --git a/keyboards/kbdfans/kbd6x/config.h b/keyboards/kbdfans/kbd6x/config.h
index 1ee31e5690..61d086fbd5 100644
--- a/keyboards/kbdfans/kbd6x/config.h
+++ b/keyboards/kbdfans/kbd6x/config.h
@@ -47,11 +47,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-
#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN F0
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -59,6 +59,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12
#define RGBLIGHT_VAL_STEP 12
+#define RGBLIGHT_SLEEP
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/kbdfans/kbd6x/rules.mk b/keyboards/kbdfans/kbd6x/rules.mk
index efdbdbb531..ae63197e71 100644
--- a/keyboards/kbdfans/kbd6x/rules.mk
+++ b/keyboards/kbdfans/kbd6x/rules.mk
@@ -22,7 +22,7 @@ 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
+NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/kbdfans/kbd75/config.h b/keyboards/kbdfans/kbd75/config.h
index 83fd8cbdae..09ef6a2f31 100644
--- a/keyboards/kbdfans/kbd75/config.h
+++ b/keyboards/kbdfans/kbd75/config.h
@@ -44,6 +44,7 @@
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_SLEEP
/* If defined, the RGB lighting will be switched off when the host goes to sleep */
#define RGBLIGHT_SLEEP
#endif
diff --git a/keyboards/kbdfans/kbd8x/config.h b/keyboards/kbdfans/kbd8x/config.h
index bdd3104407..5c16274942 100644
--- a/keyboards/kbdfans/kbd8x/config.h
+++ b/keyboards/kbdfans/kbd8x/config.h
@@ -47,11 +47,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-
#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -59,6 +59,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
+#define RGBLIGHT_SLEEP
#endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/kbdfans/kbd8x/rules.mk b/keyboards/kbdfans/kbd8x/rules.mk
index f0a4689fe4..fcc28884f3 100644
--- a/keyboards/kbdfans/kbd8x/rules.mk
+++ b/keyboards/kbdfans/kbd8x/rules.mk
@@ -22,7 +22,7 @@ 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
+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)
diff --git a/keyboards/kbdfans/kbd8x_mk2/config.h b/keyboards/kbdfans/kbd8x_mk2/config.h
index 4c6900b6ca..3e07ad60c6 100644
--- a/keyboards/kbdfans/kbd8x_mk2/config.h
+++ b/keyboards/kbdfans/kbd8x_mk2/config.h
@@ -52,11 +52,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* 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
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-
+#endif
#define RGB_DI_PIN B3
#ifdef RGB_DI_PIN
#define RGBLED_NUM 20
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/kbdmini/config.h b/keyboards/kbdfans/kbdmini/config.h
new file mode 100644
index 0000000000..0fc7b5acb8
--- /dev/null
+++ b/keyboards/kbdfans/kbdmini/config.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x2001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DZTECH
+
+#define PRODUCT KBDMINI
+#define DESCRIPTION KBDMINI RGB keyboard
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+#define MATRIX_ROW_PINS {B7, E6, F5, F4}
+#define MATRIX_COL_PINS {B3, B2, B1, B0, F1, F0, C6, B6, B5, B4, D7, D6, D4}
+#define UNUSED_PINS
+#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_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 52
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
+#endif \ No newline at end of file
diff --git a/keyboards/kbdfans/kbdmini/kbdmini.c b/keyboards/kbdfans/kbdmini/kbdmini.c
new file mode 100644
index 0000000000..b402eed64f
--- /dev/null
+++ b/keyboards/kbdfans/kbdmini/kbdmini.c
@@ -0,0 +1,96 @@
+#include "kbdmini.h"
+#include "config.h"
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+ {0, B_9, A_9, C_9}, //LA33
+ {0, B_10, A_10, C_10}, //LA37
+ {0, B_11, A_11, C_11}, //LA41
+ {0, B_12, A_12, C_12}, //LA45
+ {0, B_13, A_13, C_13}, //LA49
+ {0, B_14, A_14, C_14}, //LA53
+ {0, B_15, A_15, C_15}, //LA57
+ {0, B_6, A_6, C_6}, //LA21
+ {0, B_5, A_5, C_5}, //LA17
+ {0, B_4, A_4, C_4}, //LA13
+ {0, B_3, A_3, C_3}, //LA9
+ {0, B_2, A_2, C_2}, //LA5
+ {0, B_1, A_1, C_1}, //LA1
+
+ {0, E_9, D_9, F_9}, //LA34
+ {0, E_10, D_10, F_10}, //LA38
+ {0, E_11, D_11, F_11}, //LA42
+ {0, E_12, D_12, F_12}, //LA46
+ {0, E_13, D_13, F_13}, //LA50
+ {0, E_14, D_14, F_14}, //LA54
+ {0, E_15, D_15, F_15}, //LA58
+ {0, E_6, D_6, F_6}, //LA22
+ {0, E_5, D_5, F_5}, //LA18
+ {0, E_4, D_4, F_4}, //LA14
+ {0, E_3, D_3, F_3}, //LA10
+ {0, E_2, D_2, F_2}, //LA6
+ {0, E_1, D_1, F_1}, //LA2
+
+ {0, H_9, G_9, I_9}, //LA35
+ {0, H_10, G_10, I_10}, //LA39
+ {0, H_11, G_11, I_11}, //LA43
+ {0, H_12, G_12, I_12}, //LA47
+ {0, H_13, G_13, I_13}, //LA51
+ {0, H_14, G_14, I_14}, //LA55
+ {0, H_15, G_15, I_15}, //LA59
+ {0, H_6, G_6, I_6}, //LA23
+ {0, H_5, G_5, I_5}, //LA19
+ {0, H_4, G_4, I_4}, //LA15
+ {0, H_3, G_3, I_3}, //LA11
+ {0, H_2, G_2, I_2}, //LA7
+ {0, H_1, G_1, I_1}, //LA3
+
+ {0, K_9, J_9, L_9}, //LA36
+ {0, K_10, J_10, L_10}, //LA40
+ {0, K_11, J_11, L_11}, //LA44
+ {0, K_12, J_12, L_12}, //LA48
+ {0, K_13, J_13, L_13}, //LA52
+ {0, K_14, J_14, L_14}, //LA56
+ {0, K_15, J_15, L_15}, //LA60
+ {0, K_6, J_6, L_6}, //LA24
+ {0, K_5, J_5, L_5}, //LA20
+ {0, K_4, J_4, L_4}, //LA16
+ {0, K_3, J_3, L_3}, //LA12
+ {0, K_2, J_2, L_2}, //LA8
+ {0, K_1, J_1, L_1}//LA4
+};
+
+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, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51}
+}, {
+ { 0, 0 }, { 19, 0 }, { 38, 0 }, { 57, 0 }, { 76, 0 }, { 95, 0 }, { 114, 0 }, { 133, 0 }, { 152, 0 }, { 171, 0 }, { 190, 0 }, { 209, 0 }, { 224, 0 },
+ { 0, 21 }, { 19, 21 }, { 38, 21 }, { 57, 21 }, { 76, 21 }, { 95, 21 }, { 114, 21 }, { 133, 21 }, { 152, 21 }, { 171, 21 }, { 190, 21 }, { 209, 21 }, { 224, 21 },
+ { 0, 42 }, { 19, 42 }, { 38, 42 }, { 57, 42 }, { 76, 42 }, { 95, 42 }, { 114, 42 }, { 133, 42 }, { 152, 42 }, { 171, 42 }, { 190, 42 }, { 209, 42 }, { 224, 42 },
+ { 0, 64 }, { 19, 64 }, { 38, 64 }, { 57, 64 }, { 76, 64 }, { 95, 64 }, { 114, 64 }, { 133, 64 }, { 152, 64 }, { 171, 64 }, { 190, 64 }, { 209, 64 }, { 224, 64 }
+}, {
+ 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, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+} };
+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)
+{
+ 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/kbdfans/kbdmini/kbdmini.h b/keyboards/kbdfans/kbdmini/kbdmini.h
new file mode 100644
index 0000000000..38596a569e
--- /dev/null
+++ b/keyboards/kbdfans/kbdmini/kbdmini.h
@@ -0,0 +1,15 @@
+#pragma once
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,\
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C } \
+}
+
diff --git a/keyboards/kbdfans/kbdmini/keymaps/default/keymap.c b/keyboards/kbdfans/kbdmini/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9c8267147c
--- /dev/null
+++ b/keyboards/kbdfans/kbdmini/keymaps/default/keymap.c
@@ -0,0 +1,9 @@
+#include QMK_KEYBOARD_H
+#define _LAYER0 0
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_LAYER0] = LAYOUT(
+ 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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC,
+ 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_ENT,
+ KC_F5, KC_CAPS, KC_LCTL, KC_LGUI, KC_F1, KC_SPC,KC_F2, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+};
diff --git a/keyboards/kbdfans/kbdmini/readme.md b/keyboards/kbdfans/kbdmini/readme.md
new file mode 100644
index 0000000000..e01684f138
--- /dev/null
+++ b/keyboards/kbdfans/kbdmini/readme.md
@@ -0,0 +1,13 @@
+# KBDMINI
+
+![KBDMINI](imgur.com image replace me!)
+
+Keyboard Maintainer: [DZTECH](https://github.com/moyi4681)
+Hardware Supported: KBDMINI
+Hardware Availability: [KBDFans](https://kbdfans.cn/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdfans/kbdmini: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/kbdmini/rules.mk b/keyboards/kbdfans/kbdmini/rules.mk
new file mode 100644
index 0000000000..28178d6584
--- /dev/null
+++ b/keyboards/kbdfans/kbdmini/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 = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/kbdfans/kbdpad/mk1/config.h b/keyboards/kbdfans/kbdpad/mk1/config.h
index 1f0b371af0..d41ec6001e 100644
--- a/keyboards/kbdfans/kbdpad/mk1/config.h
+++ b/keyboards/kbdfans/kbdpad/mk1/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER KBDfans
#define PRODUCT KBDPAD-MKI
diff --git a/keyboards/kbdfans/kbdpad/mk1/mk1.c b/keyboards/kbdfans/kbdpad/mk1/mk1.c
index 71a47b7ba9..aa781875ce 100644
--- a/keyboards/kbdfans/kbdpad/mk1/mk1.c
+++ b/keyboards/kbdfans/kbdpad/mk1/mk1.c
@@ -14,7 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "quantum.h"
+#include "mk1.h"
#define NUMLOCK_PIN D0
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/kbdfans/kbdpad/mk1/rules.mk b/keyboards/kbdfans/kbdpad/mk1/rules.mk
index f1f740760a..b4cd885b1a 100644
--- a/keyboards/kbdfans/kbdpad/mk1/rules.mk
+++ b/keyboards/kbdfans/kbdpad/mk1/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/kbdfans/kbdpad/mk1/usbconfig.h b/keyboards/kbdfans/kbdpad/mk1/usbconfig.h
index 54a7d20f14..e65d210ace 100644
--- a/keyboards/kbdfans/kbdpad/mk1/usbconfig.h
+++ b/keyboards/kbdfans/kbdpad/mk1/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/kbdfans/kbdpad_mk2/config.h b/keyboards/kbdfans/kbdpad_mk2/config.h
index e3b91e1a1b..a7dae0a703 100644
--- a/keyboards/kbdfans/kbdpad_mk2/config.h
+++ b/keyboards/kbdfans/kbdpad_mk2/config.h
@@ -54,9 +54,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 5
-
+#endif
#define RGB_DI_PIN B5
#ifdef RGB_DI_PIN
#define RGBLED_NUM 16
diff --git a/keyboards/kc60/keymaps/noroadsleft/config.h b/keyboards/kc60/keymaps/noroadsleft/config.h
index e216d050b1..4490a3bb76 100644
--- a/keyboards/kc60/keymaps/noroadsleft/config.h
+++ b/keyboards/kc60/keymaps/noroadsleft/config.h
@@ -6,3 +6,12 @@
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 5
#define BREATHING_PERIOD 4
+
+#ifdef LOCKING_SUPPORT_ENABLE
+# undef LOCKING_SUPPORT_ENABLE
+#endif
+#ifdef LOCKING_RESYNC_ENABLE
+# undef LOCKING_RESYNC_ENABLE
+#endif
+
+#define NO_ACTION_ONESHOT
diff --git a/keyboards/kc60/keymaps/noroadsleft/keymap.c b/keyboards/kc60/keymaps/noroadsleft/keymap.c
index 98d7353568..84aeb482d6 100644
--- a/keyboards/kc60/keymaps/noroadsleft/keymap.c
+++ b/keyboards/kc60/keymaps/noroadsleft/keymap.c
@@ -8,42 +8,39 @@
/**********************
** LAYER DEFINITIONS **
**********************/
-enum layers_keymap {
+enum layer_names {
// BASE LAYERS
+ // SHORT CODES
_QWERTY = 0,
+ _QW = _QWERTY,
_DVORAK,
+ _DV = _DVORAK,
_COLEMAK,
+ _CM = _COLEMAK,
_MAC,
+ _MC = _MAC,
_QUAKE2,
+ _Q2 = _QUAKE2,
_QUAKE2_DVORAK,
+ _QD = _QUAKE2_DVORAK,
_QUAKE2_CONSOLE,
-
+ _QC = _QUAKE2_CONSOLE,
// FUNCTION LAYERS
_FUNCWIN,
+ _FW = _FUNCWIN,
_FUNCMAC,
+ _FM = _FUNCMAC,
_FUNCQ2,
-
+ _FQ = _FUNCQ2,
// OTHER LAYERS
_NUMPAD,
+ _NP = _NUMPAD,
_MACROS,
- _SYSTEM
+ _MA = _MACROS,
+ _SYSTEM,
+ _SY = _SYSTEM,
};
-// LAYER SHORT CODES
-#define _QW _QWERTY
-#define _DV _DVORAK
-#define _CM _COLEMAK
-#define _MC _MAC
-#define _Q2 _QUAKE2
-#define _QD _QUAKE2_DVORAK
-#define _QC _QUAKE2_CONSOLE
-#define _FW _FUNCWIN
-#define _FM _FUNCMAC
-#define _FQ _FUNCQ2
-#define _NP _NUMPAD
-#define _MA _MACROS
-#define _SY _SYSTEM
-
// KEYCODE DEFINITIONS
#define NO_CHNG KC_TRNS // Note for me for keys I need to leave as Pass-through
@@ -58,6 +55,8 @@ enum layers_keymap {
#define WN_COPY LCTL(DV_C) // Windows/Linux Copy
#define WN_PSTE LCTL(DV_V) // Windows/Linux Paste
+#define CTL_GRV MT(MOD_LCTL, KC_GRV) // Left Control when held, Grave accent when tapped
+
#define MC_PSCR LGUI(LSFT(KC_3)) // MacOS Print Screen (Command + Shift + 3)
#define MC_HOME LGUI(KC_LEFT) // MacOS Home (Command + Left Arrow)
#define MC_END LGUI(KC_RGHT) // MacOS End (Command + Right Arrow)
@@ -252,6 +251,21 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
return false;
+ case KC_F1 ... KC_F12:
+ if (record->event.pressed) {
+ if ( get_mods() & MOD_MASK_RALT ) {
+ register_code( keycode + 0x2E );
+ } else {
+ register_code( keycode );
+ }
+ } else {
+ if ( get_mods() & MOD_MASK_RALT ) {
+ unregister_code( keycode + 0x2E );
+ } else {
+ unregister_code( keycode );
+ }
+ }
+ return false;
} // switch()
return true;
};
@@ -267,31 +281,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY */
[_QWERTY] = LAYOUT_60_ansi(
// 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- 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_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, \
FW_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, NUBS_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, MO(_FW), KC_RCTL \
+ CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FW), KC_RCTL \
),
/* Dvorak */
[_DVORAK] = LAYOUT_60_ansi(
// 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_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, \
FW_CAPS, 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, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
+ CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FW), KC_RCTL \
),
/* Colemak */
[_COLEMAK] = LAYOUT_60_ansi(
// 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- 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_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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
FW_CAPS, 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, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
+ CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FW), KC_RCTL \
),
/****************
@@ -391,9 +405,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Macro layer */
[_MACROS] = LAYOUT_60_ansi(
// 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, G_FTCH, G_COMM, _______, _______, _______, _______, T_L3DED, _______, _______, _______, \
+ TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DM_REC1, DM_REC2, _______, \
+ _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, DM_PLY1, DM_PLY2, DM_RSTP, \
+ _______, _______, _______, G_FTCH, G_COMM, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, G_BRCH, SIGNA, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
),
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme.md b/keyboards/kc60/keymaps/noroadsleft/readme.md
index c9db4f8de2..6a7ad6f65e 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme.md
@@ -1,6 +1,6 @@
# @noroadsleft's KC60 keymap
-### Last updated: April 7, 2019, 2:26 AM UTC-0700
+### Last updated: November 5, 2019, 12:07 AM UTC-0800
![](https://i.imgur.com/tzhXQYI.jpg)
@@ -9,6 +9,18 @@ I am a full-time Dvorak typist, and occasional semi-serious FPS gamer. The layer
----
+# Preface
+
+Images in this readme follow the following format:
+
+![Legend](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/legend.png)
+*Legend*
+
+Descriptions of the physical locations of keys will use the key's function in a US QWERTY layout, even if the layout itself is not QWERTY.
+
+
+----
+
# Outline
- [Base Layers](./readme_ch1.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
index fff80760e5..3872232f5a 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
@@ -12,21 +12,14 @@
## Layer 0: QWERTY - `_QW`
-Standard QWERTY layout, with three QMK features:
+Standard QWERTY layout, with four QMK features:
- The `Menu` key has been replaced by `MO(_FW)`, which moves to my Windows Fn layer when held.
+- The Right `GUI` key has been replaced with a `MO(_MA)` key, which moves to the Macro layer when held.
- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Windows Fn layer when held, and is `Caps Lock` when tapped
-- The `Escape` key has been replaced with a `KC_GESC` `` ` ~ `` key when used with a `Fn` key or a `Shift` key
+- The Left `Control` key has been replaced with a `MT(MOD_CTRL, KC_GRV)` key, which is <code>&#96; ~</code> when tapped and `Ctrl` when held.
-###### For the rest of this readme, the physical location of keys will be referred to by their function in a US QWERTY layout.
-
-![QWERTY layer](https://i.imgur.com/2eVsefw.png)
-
-Keycode(s) Sent | Notes
-:---------------------------------------------------- | :----
-[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key.
-`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped.
-`MO(_FW)` | Opens the Windows Fn layer when held.
+![QWERTY layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_00.png)
----
@@ -37,13 +30,7 @@ Keycode(s) Sent | Notes
A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared computer that runs MacOS Sierra, in US QWERTY layout. In this layer, I can leave the system in QWERTY, plug my keyboard in, and still type in Dvorak.
-![Hardware Dvorak layer](https://i.imgur.com/a6hYedB.png)
-
-Keycode(s) Sent | Notes
-:---------------------------------------------------- | :----
-[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key.
-`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped.
-`MO(_FW)` | Opens the Windows Fn layer when held.
+![Hardware Dvorak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_01.png)
----
@@ -54,13 +41,7 @@ Keycode(s) Sent | Notes
A hardware-based Colemak layout. Been thinking of trying it, so it's here.
-![Hardware Colemak layer](https://i.imgur.com/dbQ6HDW.png)
-
-Keycode(s) Sent | Notes
-:---------------------------------------------------- | :----
-[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key.
-`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped.
-`MO(_FW)` | Opens the Windows Fn layer when held.
+![Hardware Colemak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_02.png)
----
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
index 142fe302fd..76ab510153 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
@@ -16,7 +16,7 @@
This layer overrides the `Fn` keys on whichever base layer is currently enabled, sending the keyboard to the MacOS-oriented Fn layer `_FM`, instead of the Windows Fn layer `_FW`.
-![MacOS Overlay](https://i.imgur.com/lxsEVpm.png)
+![MacOS Overlay](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_03.png)
----
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
index b9dc556e4e..93c43fbf91 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
@@ -16,20 +16,20 @@
These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method.
-I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L404), is a [macro](./keymap.c#L165-L172) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching.
+I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L418), is a [macro](./keymap.c#L164-L171) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching.
-When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L173-L179) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L180-L186) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L187-L193) that cancels the sending of the message, and undoes the layers.
+When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L172-L178) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L179-L185) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L186-L192) that cancels the sending of the message, and undoes the layers.
I have been testing this configuration for a few months. Sometimes I end up still in Dvorak mode without any text input systems (in-game chat or the console) running, but it pretty much always happens when I'm focused on the game, so I don't know the cause yet.
### Layer 4: Quake 2
-![Quake 2](https://i.imgur.com/WEZ9p2u.png)
+![Quake 2](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_04.png)
### Layer 5: Quake 2 Dvorak
-![Quake 2 Dvorak](https://i.imgur.com/rhugHN4.png)
+![Quake 2 Dvorak](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_05.png)
### Layer 6: Quake 2 Console
-![Quake 2 Console](https://i.imgur.com/dRTAjcy.png)
+![Quake 2 Console](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_06.png)
----
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
index 00e6b781b4..32ca82ce9d 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
@@ -16,7 +16,7 @@
Arrows, Navigation keys (Insert, Home, Page Up, etc.), and Function keys are here. Also has keys for Calculator, Menu, Volume Control, and shortcuts for Select All, Undo, Cut, Copy, and Paste. Numpad Enter for when I'm working in Adobe Photoshop, because it treats Numpad Enter differently from the regular Enter key.
-![Windows Fn layer](https://i.imgur.com/XwCshcz.png)
+![Windows Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_07.png)
----
@@ -27,7 +27,7 @@ Arrows, Navigation keys (Insert, Home, Page Up, etc.), and Function keys are her
Based on my Windows Fn layer, but swaps a few functions for a MacOS environment. Arrow, Navigation, and Function keys are basically unchanged from Layer 2. This layer enables using either `Fn` key as a sort of simulated `Command` key, which I find easier to reach and use.
-![MacOS-oriented Fn layer](https://i.imgur.com/Z11kRu2.png)
+![MacOS-oriented Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_08.png)
----
@@ -38,11 +38,11 @@ Based on my Windows Fn layer, but swaps a few functions for a MacOS environment.
Based on the Windows function layer, but removes some functions that are pointless to have while in the game.
-![Quake 2 Fn layer](https://i.imgur.com/9PG7yWb.png)
+![Quake 2 Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_09.png)
Keycode(s) Sent | Notes
:-------------------------------- | :----
-[`Q2_GRV`](./keymap.c#L194-L201) | Sends `KC_GRV`, then enables the Dvorak, Quake 2 Dvorak, and Quake 2 Console layers.
+[`Q2_GRV`](./keymap.c#L193-L200) | Sends `KC_GRV`, then enables the Dvorak, Quake 2 Dvorak, and Quake 2 Console layers.
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
index a65b3acbeb..cb2abbd6dd 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
@@ -16,7 +16,7 @@
Puts a Numpad on the right-hand side of the keyboard. A through F included for hexadecimal input. Tapping `Space` returns to the previous Base Layer.
-![Numpad layer](https://i.imgur.com/fKVRkGH.png)
+![Numpad layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_10.png)
----
@@ -25,42 +25,35 @@ Puts a Numpad on the right-hand side of the keyboard. A through F included for h
### Accessed by holding the `Fn` key and tapping the right-side `Win` key
-Has some macros that I use in Git, and some frequently-typed strings.
+Has some macros that I use in Git, some frequently-typed strings, and keys for use with the [Dynamic Macros feature](https://docs.qmk.fm/#/feature_dynamic_macros).
Tapping `Esc` exits the Macro layer, if the macro used doesn't do it automatically.
-![Macro layer](https://i.imgur.com/wgbsluI.png)
+![Macro layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_11.png)
### Macros
-#### [T_L3DED](./keymap.c#L122-L126)
-
-Output: `lavak3DED `
-
-Twitch emote for [a streamer I watch a lot](https://www.twitch.tv/lavak3_).
-![lavak3DED](https://static-cdn.jtvnw.net/emoticons/v1/821796/1.0)
-
-#### [G_PUSH](./keymap.c#L127-L131)
+#### [G_PUSH](./keymap.c#L126-L130)
Output: `git push origin `
Everything from here down is related to Git or GitHub.
-#### [G_FTCH](./keymap.c#L132-L141)
+#### [G_FTCH](./keymap.c#L131-L140)
| Condition | Output |
| :-------- | :----- |
| If <kbd>Shift</kbd> is active | `git pull upstream ` |
| Otherwise | `git fetch upstream ` |
-#### [G_COMM](./keymap.c#L142-L147)
+#### [G_COMM](./keymap.c#L141-L146)
Output: `git commit -m ""` <kbd>Left</kbd>
Readies a `git commit` command, moves the cursor between the quotation marks, then disables the Macro layer.
-#### [G_BRCH](./keymap.c#L148-L158)
+#### [G_BRCH](./keymap.c#L147-L157)
| Condition | Output |
| :-------- | :----- |
@@ -69,13 +62,13 @@ Readies a `git commit` command, moves the cursor between the quotation marks, th
`$(git branch-name)` is a [git alias](./readme_git.md) that returns the name of the current branch. This macro disables the Macro layer when finished.
-#### [SIGNA](./keymap.c#L159-L164)
+#### [SIGNA](./keymap.c#L158-L163)
Output: `\- @noroadsleft` <kbd>Enter</kbd>
Sometimes on GitHub, I sign my comments. Types my GitHub name in Markdown syntax, and then taps the `Enter` key. Disables the Macro layer when finished.
-#### [MC_UNDO](./keymap.c#L202-L210)
+#### [MC_UNDO](./keymap.c#L201-L209)
| Condition | Output |
| :-------- | :----- |
@@ -84,7 +77,7 @@ Sometimes on GitHub, I sign my comments. Types my GitHub name in Markdown syntax
An Undo shortcut that turns to Redo if <kbd>Shift</kbd> is being held. I'm not sure that part is required to get that behavior, but it works as desired, so I'm not messing with it.
-#### [MC_PSTE](./keymap.c#L211-L219)
+#### [MC_PSTE](./keymap.c#L210-L218)
| Condition | Output |
| :-------- | :----- |
@@ -93,7 +86,7 @@ An Undo shortcut that turns to Redo if <kbd>Shift</kbd> is being held. I'm not s
The program I use this in uses <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Option</kbd> + <kbd>V</kbd> to paste while maintaining formatting (typeface, text size, etc.). Sometimes I want this and sometimes I don't. Using <kbd>Shift</kbd> changes the behavior.
-#### [NUBS_Z](./keymap.c#L220-L234)
+#### [NUBS_Z](./keymap.c#L219-L233)
| Condition | Output |
| :-------- | :----- |
@@ -102,16 +95,20 @@ The program I use this in uses <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Opti
Sometimes I type in languages from countries that use ISO layout, but my keyboard is ANSI, so I have one key fewer. This macro simulates the Non-US Backslash key if I use Right Alt + Z.
-#### [VRSN](./keymap.c#L235-L239)
+#### [VRSN](./keymap.c#L234-L238)
Outputs a string that tells me the Git commit from which my flashed firmware was built. Looks something like:
kc60/noroadsleft @ 0.6.326-6-gae6d7b-dirty
-#### [Emulated Numeric Keypad](./keymap.c#L240-L254)
+#### [Emulated Numeric Keypad](./keymap.c#L239-L253)
If I hold the Right Alt key, the number row (`KC_1` through `KC_0`) will output numpad keycodes instead of number row keycodes, enabling quicker access to characters like ™ and °.
+#### [Emulated Extended Function Keys](./keymap.c#L254-L268)
+
+Similar to the emulated numpad, if I hold the Right Alt key with the Fn key, the function row (`KC_F1` through `KC_F12`) will output keycodes `KC_F13` throught `KC_F24`.
+
----
### Layer 12: System layer - `_SY`
@@ -120,7 +117,7 @@ If I hold the Right Alt key, the number row (`KC_1` through `KC_0`) will output
This is where I change my keyboard function. Base layer select on `1` through `3`, Backlight controls on `C` through `N`, Reset on `8*`, Debug on `0)`.
-![System layer](https://i.imgur.com/95ovTBn.png)
+![System layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_12.png)
----
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_git.md b/keyboards/kc60/keymaps/noroadsleft/readme_git.md
index b81bb9409d..432f1abc7e 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_git.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_git.md
@@ -11,7 +11,8 @@
# Cherry Pick
cp = cherry-pick
- # Check out a Pull Request
+ # Check out a Pull Request locally
+ # e.g. `git cop 351` fetches the commits from Pull Request #351 and saves it to local branch 'pr/351'.
cop = "!f() { git fetch upstream pull/$1/head:pr/$1; git checkout pr/$1; }; f"
# Sync master branch
@@ -39,13 +40,17 @@
# Short-form status
st = "!git status --short --untracked-files=no"
+ stu = "!git ls-files --others -x '*/*'"
# Returns the name of the current branch
branch-name = "!git rev-parse --abbrev-ref HEAD"
bn = "!git branch-name" # short-form of the above
+ # List branches by the date of their last commit, newest to oldest
+ bbd = "for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(objectname) %(objecttype) %(refname:short) (%(authordate))'"
# Compare commit counts between current branch and QMK master
- cc = "!f() { git fetch upstream; echo \"$(git branch-name) vs. upstream/master\"; git rev-list --left-right --count $(git branch-name)...upstream/master; }; f"
+ # e.g. `git cc dev_branch upstream/master` returns how many commits are on `dev_branch` and not on `upstream/master`, and vice versa.
+ cc = "!f() { git fetch upstream; echo \"$(git branch-name) vs. $2\"; git rev-list --left-right --count $1...$2; }; f"
# Push to origin repo
po = "push origin $(git branch-name)"
@@ -71,6 +76,4 @@
# Force push without overwriting established history
pushf = push --force-with-lease
-
-
```
diff --git a/keyboards/kc60/keymaps/noroadsleft/rules.mk b/keyboards/kc60/keymaps/noroadsleft/rules.mk
index 9d78fc0fb3..c9805878d2 100644
--- a/keyboards/kc60/keymaps/noroadsleft/rules.mk
+++ b/keyboards/kc60/keymaps/noroadsleft/rules.mk
@@ -1,2 +1,8 @@
# https://github.com/qmk/qmk_firmware/issues/3448#issuecomment-406636125
-EXTRAFLAGS += -flto
+# EXTRAFLAGS += -flto
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+
+MOUSEKEY_ENABLE = no # Mouse keys
+# COMMAND_ENABLE = no # Commands for debug and configuration
+SPACE_CADET_ENABLE = no # Space Cadet
+DYNAMIC_MACRO_ENABLE = yes
diff --git a/keyboards/keebio/bdn9/config.h b/keyboards/keebio/bdn9/config.h
index 641dc57361..40c8a1d77a 100644
--- a/keyboards/keebio/bdn9/config.h
+++ b/keyboards/keebio/bdn9/config.h
@@ -64,4 +64,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* 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 LOCKING_RESYNC_ENABLE \ No newline at end of file
diff --git a/keyboards/keebio/bdn9/keymaps/codecoffeecode/config.h b/keyboards/keebio/bdn9/keymaps/codecoffeecode/config.h
new file mode 100644
index 0000000000..5b8b369bc3
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/codecoffeecode/config.h
@@ -0,0 +1,12 @@
+#pragma once
+
+/* For USB nonsense in various OSs */
+#define TAP_CODE_DELAY 10
+
+/* For constant mouse speed */
+#define MOUSEKEY_DELAY 300
+#define MOUSEKEY_INTERVAL 50
+#define MOUSEKEY_MAX_SPEED 1
+#define MOUSEKEY_TIME_TO_MAX 0
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/keebio/bdn9/keymaps/codecoffeecode/keymap.c b/keyboards/keebio/bdn9/keymaps/codecoffeecode/keymap.c
new file mode 100644
index 0000000000..9747dbf223
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/codecoffeecode/keymap.c
@@ -0,0 +1,57 @@
+/* Copyright 2019 Danny Nguyen <danny@keeb.io>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ | Knob 1: Scrl Dn/Up | | Knob 2: Vol Dn/Up |
+ | Press: Mute | Up | Press: Play/Pause |
+ | Left | Down | Right |
+ | Media Previous | MO(1)| Media Next |
+ */
+ [0] = LAYOUT(
+ KC_MUTE, KC_UP, KC_MPLY,
+ KC_LEFT, KC_DOWN, KC_RIGHT,
+ KC_MPRV, MO(1), KC_MNXT
+ ),
+ /*
+ | RESET | Home | Media Stop |
+ | | End | |
+ | CTRL_END | | CTRL_HOME |
+ */
+ [1] = LAYOUT(
+ RESET , KC_HOME, KC_STOP,
+ _______, KC_END, _______,
+ LCTL(KC_END), _______, LCTL(KC_HOME)
+ ),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_MS_WH_UP);
+ } else {
+ tap_code(KC_MS_WH_DOWN);
+ }
+ }
+ else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+}
diff --git a/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk b/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk
new file mode 100644
index 0000000000..e910b7bea5
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = yes
+CTPC = yes \ No newline at end of file
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/bdn9/rules.mk b/keyboards/keebio/bdn9/rules.mk
index 8b4bb334eb..a548334074 100644
--- a/keyboards/keebio/bdn9/rules.mk
+++ b/keyboards/keebio/bdn9/rules.mk
@@ -31,4 +31,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
-ENCODER_ENABLE = yes
+ENCODER_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/keebio/dilly/keymaps/default/keymap.c b/keyboards/keebio/dilly/keymaps/default/keymap.c
index dc92afbd0d..f81aa6d446 100644
--- a/keyboards/keebio/dilly/keymaps/default/keymap.c
+++ b/keyboards/keebio/dilly/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _BASE 0
#define _FN1 1
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/keymaps/default/keymap.c b/keyboards/keebio/iris/keymaps/default/keymap.c
index 942f963122..3102dd2dae 100644
--- a/keyboards/keebio/iris/keymaps/default/keymap.c
+++ b/keyboards/keebio/iris/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
diff --git a/keyboards/keebio/iris/keymaps/drashna/config.h b/keyboards/keebio/iris/keymaps/drashna/config.h
index 6fff5d72c6..25678bd67d 100644
--- a/keyboards/keebio/iris/keymaps/drashna/config.h
+++ b/keyboards/keebio/iris/keymaps/drashna/config.h
@@ -32,7 +32,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# undef RGBLED_NUM
# define RGBLED_NUM 18 // Number of LEDs
# undef RGBLED_SPLIT
-# define RGBLED_SPLIT { 9, 9 }
+# define RGBLED_SPLIT \
+ { 9, 9 }
# define RGBLIGHT_HUE_STEP 8
# define RGBLIGHT_SAT_STEP 8
# define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/keebio/iris/keymaps/drashna/keymap.c b/keyboards/keebio/iris/keymaps/drashna/keymap.c
index de19f7ca08..edfcd23e79 100644
--- a/keyboards/keebio/iris/keymaps/drashna/keymap.c
+++ b/keyboards/keebio/iris/keymaps/drashna/keymap.c
@@ -1,7 +1,13 @@
-
-#include QMK_KEYBOARD_H
#include "drashna.h"
+/*
+ * The `LAYOUT_iris_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
+
// clang-format off
#define LAYOUT_iris_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -10,8 +16,8 @@
) \
LAYOUT_wrapper( \
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, \
- KC_TAB , K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSLS, \
- KC_C1R3, ALT_T(K11), K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
+ LALT_T(KC_TAB), K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSLS, \
+ KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, OS_LALT, OS_RGUI, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
KC_GRV, KC_SPC, LT(_LOWER,KC_BSPC), LT(_RAISE,KC_DEL), KC_ENT, RAISE \
)
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/jerryhcooke/config.h b/keyboards/keebio/iris/keymaps/jerryhcooke/config.h
new file mode 100644
index 0000000000..58f33d3716
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jerryhcooke/config.h
@@ -0,0 +1,35 @@
+/*
+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 2
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#ifndef NO_DEBUG
+# define NO_DEBUG
+#endif // !NO_DEBUG
+#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
+# define NO_PRINT
+#endif // !NO_PRINT
diff --git a/keyboards/keebio/iris/keymaps/jerryhcooke/keymap.c b/keyboards/keebio/iris/keymaps/jerryhcooke/keymap.c
new file mode 100644
index 0000000000..1e512540aa
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jerryhcooke/keymap.c
@@ -0,0 +1,39 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+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_DEL, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT, LCTL_T(KC_LGUI), KC_Z, KC_X, KC_C, KC_D, KC_V, LGUI(KC_L), MEH_T(KC_MINS), KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_LGUI, LT(1, KC_QUOT), KC_SFTENT, KC_SPC, LT(2, KC_BSLS), LALT_T(KC_APP)),
+ [1] = LAYOUT(KC_MPLY, KC_NO, KC_DQUO, KC_NO, LALT(KC_F4), KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_NO, RESET, KC_MPRV, KC_END, KC_UP, KC_HOME, KC_PGUP, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, RGB_SAI, RGB_SAD, KC_MNXT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, RGB_HUI, RGB_HUD, KC_NO, KC_WBAK, KC_WFWD, KC_WSTP, KC_WREF, KC_NO, LCA(KC_DEL), KC_NLCK, KC_P0, KC_P0, KC_PDOT, KC_PENT, RGB_SPI, RGB_SPD, KC_PSCR, KC_NO, KC_LGUI, RGB_TOG, RGB_VAI, RGB_VAD),
+ [2] = 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, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_K, KC_NO, KC_WH_D, KC_MS_U, KC_WH_U, KC_NO, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 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, KC_NO, KC_NO, KC_NO)};
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ switch (biton32(layer_state)) {
+ case _LOWER:
+ clockwise ? tap_code(KC_MS_WH_UP) : tap_code(KC_MS_WH_DOWN);
+ break;
+ case _RAISE:
+ clockwise ? rgblight_increase_hue() : rgblight_decrease_hue();
+ break;
+ default:
+ clockwise ? tap_code(KC_AUDIO_VOL_UP) : tap_code(KC_AUDIO_VOL_DOWN);
+ break;
+ }
+ } else if (index == 1) {
+ switch (biton32(layer_state)) {
+ case _LOWER:
+ clockwise ? tap_code(KC_UP) : tap_code(KC_DOWN);
+ break;
+ case _RAISE:
+ clockwise ? tap_code(KC_MEDIA_NEXT_TRACK) : tap_code(KC_MEDIA_PREV_TRACK);
+ break;
+ default:
+ clockwise ? tap_code(KC_RIGHT) : tap_code(KC_LEFT);
+ break;
+ }
+ }
+}
+#endif // ENCODER_ENABLE
diff --git a/keyboards/keebio/iris/keymaps/jerryhcooke/readme.md b/keyboards/keebio/iris/keymaps/jerryhcooke/readme.md
new file mode 100644
index 0000000000..8c2a6efef7
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jerryhcooke/readme.md
@@ -0,0 +1,3 @@
+[Jerry's Iris R4 Layout](https://imgur.com/a/JLytcqS)
+
+This is a fairly modified version of the default keymap that I tinkered with to allow the rotary encoder to carry out a different function on each layer.
diff --git a/keyboards/keebio/iris/keymaps/jerryhcooke/rules.mk b/keyboards/keebio/iris/keymaps/jerryhcooke/rules.mk
new file mode 100644
index 0000000000..8e5cd7a485
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jerryhcooke/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = yes
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/mehkee96/i2c.h b/keyboards/keebio/iris/keymaps/jhelvy/config.h
index 7ce50cdb57..2285c3f9af 100644
--- a/keyboards/mehkee96/i2c.h
+++ b/keyboards/keebio/iris/keymaps/jhelvy/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+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
@@ -15,13 +15,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// Please do not modify this file
+#pragma once
-#ifndef __I2C_H__
-#define __I2C_H__
+// #define USE_I2C
+#define EE_HANDS
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+#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
-#endif
+#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/levinson/keymaps/default/keymap.c b/keyboards/keebio/levinson/keymaps/default/keymap.c
index abf253380b..270a4ffb58 100644
--- a/keyboards/keebio/levinson/keymaps/default/keymap.c
+++ b/keyboards/keebio/levinson/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/README.md b/keyboards/keebio/levinson/keymaps/issmirnov/README.md
new file mode 100644
index 0000000000..1e03e58e71
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/README.md
@@ -0,0 +1,15 @@
+# Levinson
+
+## Colors
+
+- https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgblight.md
+ - main docs.
+- https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h
+ - list of colors
+- https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h
+ - list of functions for RGB manipulation
+
+## Troubleshooting
+
+- When in doubt, flash both sides of the keyboard. For some reason that helps with LEDs and reponsiveness.
+ - `cd qmk_firmware && make keebio/levinson/rev2:issmirnov:dfu-split-right`
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/asci-keymap.txt b/keyboards/keebio/levinson/keymaps/issmirnov/asci-keymap.txt
new file mode 100644
index 0000000000..aa5bd08b3d
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/asci-keymap.txt
@@ -0,0 +1,55 @@
+ Qwerty
+,-----------------------------------. ,-----------------------------------.
+| Esc | Q | W | E | R | T | | Y | U | I | O | P |⌘ + d|
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| Tab | A | S | D | F | G | | H | J | K | L |TapTo|Mo(Na|
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+|⇧(1) | Z | X | C | V | B | | N | M | . |Comma|Tg(Nu| ' |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+|Ctrl | ⌘⇧ | Alt | Mod | ⌫ | Spc | |Enter| Tab | ↑ | ↓ | ↠| → |
+`-----------------------------------' ------------------------------------'
+
+ Symb
+,-----------------------------------. ,-----------------------------------.
+| | - | @ | { | } | ` | | * | ! | | | % | + | Esc |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | ^ | _ | ( | ) | $ | | # | = | : | ; |TapTo| " |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | < | > | [ | ] | ~ | | & | ? | / | \ |Tg(Nu| ' |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | | | | | | | | | Esc | : | % | 🔒 |
+`-----------------------------------' ------------------------------------'
+
+ Nump
+,-----------------------------------. ,-----------------------------------.
+| | No | No |Lgui(| | | | , | 7 | 8 | 9 | |Reset|
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | |Lgui(|Lgui(|Lgui(| | | 0 | 4 | 5 | 6 |To(Sy| |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | | | |Audio|Audio| | . | 1 | 2 | 3 |To(Qw| |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | | | | | | | | | | |To(Ov| |
+`-----------------------------------' ------------------------------------'
+
+ Overwatch
+,-----------------------------------. ,-----------------------------------.
+| Tab | Q | W | E | R | T | |To(0)| | | | |Clear|
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+|Ctrl | A | S | D | F | P | |RgbMo|RgbMo|RgbVa|RgbVa| |RgbTo|
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+|Lshif| Z | X | C | V |Grave| |RgbMo|RgbMo|RgbMo|RgbMo|RgbMo|RgbMo|
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+|Ctrl | F9 |Pscre| H | R | ⎵ | |RgbHu|RgbHu|RgbSa|RgbSa|RgbMo|RgbMo|
+`-----------------------------------' ------------------------------------'
+
+ Navi
+,-----------------------------------. ,-----------------------------------.
+| | | | ↑ | | | | | | | | | |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | | ↠| ↓ | → | | | |Ctrl | | | | |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | | | | | | | | | | | | |
+|-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
+| | | | | |⌘ + d| | Mod | ⌘⇧ | | | | |
+`-----------------------------------' ------------------------------------'
+
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/build.sh b/keyboards/keebio/levinson/keymaps/issmirnov/build.sh
new file mode 100755
index 0000000000..d013083910
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/build.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+make keebio/levinson/rev2:issmirnov
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/config.h b/keyboards/keebio/levinson/keymaps/issmirnov/config.h
new file mode 100644
index 0000000000..89c2f5ebe8
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/config.h
@@ -0,0 +1,34 @@
+#pragma once
+
+// Use serial comms for split keyboard
+// DO NOT enable USE_IDC - board will not respond.
+#define USE_SERIAL
+//#define USE_I2C
+
+#ifdef RGBLIGHT_ENABLE
+ // Enable animations. +5500 bytes
+ #define RGBLIGHT_ANIMATIONS
+
+ // Map my custom number of LED's
+ #undef RGBLED_NUM
+ #define RGBLED_NUM 16
+ #define RGBLIGHT_LED_MAP { 0, 1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8 } // When changed, BE SURE to flash EEPROM on both halves and clear it.
+
+ // DO NOT USE RGBLED_SPLIT - the slave board will stop responding.
+
+ // Turn off RGB when computer sleeps
+ #define RGBLIGHT_SLEEP
+
+ // custom colors
+ #define RGB_CLEAR 0x00, 0x00, 0x00
+
+ // MOD indicators
+ #define SHFT_LED1 7
+ #define GUI_LED1 8
+#endif
+
+#ifdef AUDIO_ENABLE
+ #define QMK_SPEAKER C6
+ #define C6_AUDIO
+ #define NO_MUSIC_MODE // Save 2000 bytes
+#endif
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/keymap.c b/keyboards/keebio/levinson/keymaps/issmirnov/keymap.c
new file mode 100644
index 0000000000..0023b8424f
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/keymap.c
@@ -0,0 +1,124 @@
+#include "tap_tog.h"
+
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+ #include "sounds.h"
+#endif
+
+
+#ifdef RGBLIGHT_ENABLE
+ #include "rgb.h"
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Run `./qmk show levinson` from parent dir to see this layer.
+[_QWERTY] = LAYOUT_ortho_4x12_wrapper(
+KC_ESC , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________ , APPS ,
+KC_TAB , _________________QWERTY_L2_________________, _________________QWERTY_R2_________________ , MO(_NAVI) ,
+OSMSFT , _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ , KC_QUOTE ,
+KC_LCTL , MODSFT , KC_LALT , KC_LGUI , KC_BSPACE , KC_SPC , KC_ENTER , KC_TAB , KC_UP , KC_DOWN , KC_LEFT , KC_RGHT
+), // Note: visualizer expects this closing parens to be right at the start of the line.
+
+// Run `./qmk show levinson` from parent dir to see this layer.
+[_SYMB] = LAYOUT_ortho_4x12_wrapper(
+_______ , _________________SYMB_L1___________________, _________________SYMB_R1___________________ , KC_ESC ,
+_______ , _________________SYMB_L2___________________, _________________SYMB_R2___________________ , KC_DQT ,
+_______ , _________________SYMB_L3___________________, _________________SYMB_R3___________________ , KC_QUOTE ,
+_______ , ___________________BLANK___________________, _______ , _______ , KC_ESC , KC_COLN , KC_PERC , LOCK
+), // Note: visualizer expects this closing parens to be right at the start of the line.
+
+// Run `./qmk show levinson` from parent dir to see this layer.
+[_NUMP] = LAYOUT_ortho_4x12_wrapper(
+_______ , _________________NUMP_L1___________________ , _________________NUMP_R1___________________ , RESET ,
+_______ , _________________NUMP_L2___________________ , _________________NUMP_R2___________________ , _______ ,
+_______ , _________________NUMP_L3___________________ , _________________NUMP_R3___________________ , _______ ,
+_______ , ___________________BLANK___________________ , _______ , _______ , _______ , _______ , TO(_OVERWATCH) , _______
+), // Note: visualizer expects this closing parens to be right at the start of the line.
+
+// Run `./qmk show levinson` from parent dir to see this layer.
+[_OVERWATCH] = LAYOUT_ortho_4x12_wrapper(
+______________OVERWATCH_L1_________________ , TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , EEP_RST ,
+______________OVERWATCH_L2_________________ , RGB_MODE_FORWARD , RGB_MODE_REVERSE , RGB_VAI , RGB_VAD , XXXXXXX , RGB_TOG ,
+______________OVERWATCH_L3_________________ , RGB_MODE_PLAIN , RGB_MODE_BREATHE , RGB_MODE_RAINBOW , RGB_MODE_SWIRL , RGB_MODE_SNAKE , RGB_MODE_XMAS ,
+______________OVERWATCH_L4_________________ , KC_SPACE, RGB_HUI , RGB_HUD , RGB_SAI , RGB_SAD , RGB_MODE_RGBTEST , RGB_MODE_GRADIENT
+), // Note: visualizer expects this closing parens to be right at the start of the line.
+
+// Run `./qmk show levinson` from parent dir to see this layer.
+[_NAVI] = LAYOUT_ortho_4x12_wrapper(
+XXXXXXX , _________________NAVI_L1___________________ , _________________NAVI_R1___________________ , XXXXXXX ,
+XXXXXXX , _________________NAVI_L2___________________ , _________________NAVI_R2___________________ , XXXXXXX ,
+XXXXXXX , _________________NAVI_L3___________________ , _________________NAVI_R3___________________ , XXXXXXX ,
+XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , APPS , KC_LGUI , MODSFT , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
+), // Note: visualizer expects this closing parens to be right at the start of the line.
+
+};
+
+// called by QMK during key processing before the actual key event is handled. Useful for macros.
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOCK:
+ if (record->event.pressed) {
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
+ }
+ return true; // Let QMK send the press/release events
+ break;
+
+ case TAP_TOG_LAYER:
+ process_tap_tog(_SYMB,record);
+ return false;
+ break;
+ default:
+ tap_tog_count = 0; // reset counter.
+ tap_tog_layer_other_key_pressed = true; // always set this to true, TAP_TOG_LAYER handlers will handle interpreting this
+ break;
+ }
+ return true;
+}
+
+
+// Runs constantly in the background, in a loop every 100ms or so.
+// Best used for LED status output triggered when user isn't actively typing.
+void matrix_scan_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ matrix_scan_rgb();
+ #endif // RGBLIGHT_ENABLE
+}
+
+// only runs when when the layer is changed, good for updating LED's and clearing sticky state
+// RGB modes: https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h
+uint32_t layer_state_set_user(uint32_t state) {
+ #ifdef RGBLIGHT_ENABLE
+ layer_state_set_rgb(state);
+ #endif
+ uint8_t layer = biton32(state);
+ combo_enable(); // by default, enable combos.
+ switch (layer) {
+ case 0:
+ break;
+ case 1:
+ clear_mods();
+ break;
+ case 2:
+ clear_mods();
+ break;
+ case _OVERWATCH:
+ clear_mods();
+ combo_disable(); // We don't want combos in overwatch
+ #ifdef AUDIO_ENABLE
+ // PLAY_SONG(song_overwatch);
+ #endif
+ break;
+ default:
+ break;
+ }
+ return state;
+};
+
+// Runs boot tasks for keyboard.
+// Plays a welcome song and clears RGB state.
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ keyboard_post_init_rgb();
+ #endif
+}
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/push.sh b/keyboards/keebio/levinson/keymaps/issmirnov/push.sh
new file mode 100755
index 0000000000..58eb115f89
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/push.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+make keebio/levinson/rev2:issmirnov:dfu-split-left
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/rgb.c b/keyboards/keebio/levinson/keymaps/issmirnov/rgb.c
new file mode 100644
index 0000000000..de3a5342c0
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/rgb.c
@@ -0,0 +1,61 @@
+#include "rgb.h"
+
+// TODO gate this debugging header
+#include <print.h>
+
+// Wired up in layer_state_set_user in keymap.c
+layer_state_t layer_state_set_rgb(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case _QWERTY:
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ rgblight_sethsv_noeeprom(RGB_CLEAR);
+ break;
+ case _SYMB:
+ rgblight_sethsv_noeeprom_red();
+ break;
+ case _NUMP:
+ rgblight_sethsv_noeeprom_green();
+ break;
+ case _OVERWATCH:
+ rgblight_sethsv_noeeprom_blue();
+ // TODO set up animated rainbow swirl with overwatch colors.
+ // rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
+ // rgblight_effect_breathing(&animation_status);
+ // rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
+ break;
+ case _NAVI:
+ rgblight_sethsv_noeeprom(HSV_AZURE);
+ break;
+ default: // for any other layers, or the default layer
+ break;
+ }
+ return state;
+}
+
+
+void keyboard_post_init_rgb(void) {
+ rgblight_enable();
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ rgblight_setrgb(RGB_CLEAR);
+ uprintf("Reset RGB colors");
+}
+
+void matrix_scan_rgb(void) {
+ set_rgb_indicators(get_mods(), get_oneshot_mods());
+}
+
+void set_rgb_indicators(uint8_t this_mod, uint8_t this_osm) {
+ if (biton32(layer_state) == _QWERTY) {
+ if ((this_mod | this_osm) & MOD_MASK_SHIFT) {
+ rgblight_setrgb_gold_at(SHFT_LED1);
+ } else {
+ rgblight_setrgb_at(RGB_CLEAR, SHFT_LED1);
+ }
+
+ if ((this_mod | this_osm) & MOD_MASK_GUI) {
+ rgblight_setrgb_purple_at(GUI_LED1);
+ } else {
+ rgblight_setrgb_at(RGB_CLEAR, GUI_LED1);
+ }
+ }
+}
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/rgb.h b/keyboards/keebio/levinson/keymaps/issmirnov/rgb.h
new file mode 100644
index 0000000000..254d3cbac0
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/rgb.h
@@ -0,0 +1,15 @@
+#pragma once
+#include "quantum.h"
+#include "issmirnov.h"
+
+// Welcome animation when keyboard boots
+void keyboard_post_init_rgb(void);
+
+// If rgb enabled, set underglow for layer
+uint32_t layer_state_set_rgb(uint32_t state);
+
+// Enhance matrix scan code. Note: keep this light, since it runs every 100ms
+void matrix_scan_rgb(void);
+
+// Light up SHIFT and GUI indicator when pressed.
+void set_rgb_indicators(uint8_t this_mod, uint8_t this_osm);
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/rules.mk b/keyboards/keebio/levinson/keymaps/issmirnov/rules.mk
new file mode 100644
index 0000000000..6cbed2f770
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/rules.mk
@@ -0,0 +1,14 @@
+# Enable RGB underglow
+# https://beta.docs.qmk.fm/features/feature_rgblight
+RGBLIGHT_ENABLE = yes # +5500 bytes
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ # Include my fancy rgb functions source here
+ SRC += rgb.c
+endif
+
+# Disable backlight, since I use RGB underglow.
+# https://beta.docs.qmk.fm/features/feature_backlight
+BACKLIGHT_ENABLE = no
+
+# Control piezo speaker on C6
+AUDIO_ENABLE = yes # +4000 bytes
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/sounds.h b/keyboards/keebio/levinson/keymaps/issmirnov/sounds.h
new file mode 100644
index 0000000000..dac9d276c1
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/sounds.h
@@ -0,0 +1,9 @@
+// ................................................................ Audio Sounds
+#pragma once
+#ifdef AUDIO_ENABLE
+// Songs come from quantum/audio/song_list.h
+float song_startup [][2] = SONG(STARTUP_SOUND);
+float song_goodbye [][2] = SONG(GOODBYE_SOUND);
+float song_overwatch[][2] = SONG(OVERWATCH_THEME);
+#undef AUDIO_VOICES
+#endif
diff --git a/keyboards/keebio/levinson/keymaps/issmirnov/template.txt b/keyboards/keebio/levinson/keymaps/issmirnov/template.txt
new file mode 100644
index 0000000000..8787cee7b5
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/issmirnov/template.txt
@@ -0,0 +1,9 @@
+,-----------------------------------. ,-----------------------------------.
+| 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 |
+`-----------------------------------' ------------------------------------'
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/nyquist/keymaps/default/keymap.c b/keyboards/keebio/nyquist/keymaps/default/keymap.c
index ecaad49bb2..db4b53962b 100644
--- a/keyboards/keebio/nyquist/keymaps/default/keymap.c
+++ b/keyboards/keebio/nyquist/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/keebio/quefrency/keymaps/bcat/config.h b/keyboards/keebio/quefrency/keymaps/bcat/config.h
index 87eaa6a783..071856f10b 100644
--- a/keyboards/keebio/quefrency/keymaps/bcat/config.h
+++ b/keyboards/keebio/quefrency/keymaps/bcat/config.h
@@ -1,6 +1,12 @@
#pragma once
-#define USE_I2C
+/*
+ * Quefrency lacks I2C resistors on the right PCB, so the right half doesn't
+ * work independently. (Presumably the floating I2C lines cause a problem.)
+ * Using serial seems sufficiently fast in practice and allows both halves to
+ * be used independently.
+ */
+#define USE_SERIAL
/* Use an extra LED on the right side since it's wider on the 65% PCB. */
#undef RGBLED_NUM
diff --git a/keyboards/keebio/quefrency/keymaps/default/keymap.c b/keyboards/keebio/quefrency/keymaps/default/keymap.c
index 744a8d32a4..8b30a1174c 100644
--- a/keyboards/keebio/quefrency/keymaps/default/keymap.c
+++ b/keyboards/keebio/quefrency/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/keebio/rorschach/keymaps/default/keymap.c b/keyboards/keebio/rorschach/keymaps/default/keymap.c
index 736d4d353c..431f7d3a91 100644
--- a/keyboards/keebio/rorschach/keymaps/default/keymap.c
+++ b/keyboards/keebio/rorschach/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _LOWER 1
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/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/default/keymap.c b/keyboards/keebio/viterbi/keymaps/default/keymap.c
index c4ae0a5987..78ae83a824 100644
--- a/keyboards/keebio/viterbi/keymaps/default/keymap.c
+++ b/keyboards/keebio/viterbi/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/keebio/viterbi/keymaps/drashna/config.h b/keyboards/keebio/viterbi/keymaps/drashna/config.h
index 201c02e419..40a5bbd0e8 100644
--- a/keyboards/keebio/viterbi/keymaps/drashna/config.h
+++ b/keyboards/keebio/viterbi/keymaps/drashna/config.h
@@ -21,27 +21,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROWS 5
#ifdef RGBLIGHT_ENABLE
-# undef RGBLED_NUM
-# define RGBLED_NUM 16
-
-# define RGBLIGHT_HUE_STEP 8
-# define RGBLIGHT_SAT_STEP 8
-# define RGBLIGHT_VAL_STEP 8
-# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
-# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
-#endif // RGBLIGHT_ENABLE
-
-
+# undef RGBLED_NUM
+# define RGBLED_NUM 16
+# define RGBLIGHT_HUE_STEP 8
+# define RGBLIGHT_SAT_STEP 8
+# define RGBLIGHT_VAL_STEP 8
+# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
+#endif // RGBLIGHT_ENABLE
#undef PRODUCT
-#define PRODUCT Drashnas Viterbi Macro Pad
+#define PRODUCT Drashnas Viterbi Macro Pad
#ifdef AUDIO_ENABLE
-# define C6_AUDIO
-# define NO_MUSIC_MODE
+# define C6_AUDIO
+# define NO_MUSIC_MODE
#endif
+// clang-format off
#define LAYOUT_ortho_5x7( \
L00, L01, L02, L03, L04, L05, L06, \
L10, L11, L12, L13, L14, L15, L16, \
@@ -56,8 +54,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ L30, L31, L32, L33, L34, L35, L36 }, \
{ L40, L41, L42, L43, L44, L45, L46 }, \
}
+// clang-format on
-#define QMK_ESC_OUTPUT F5 // usually COL
-#define QMK_ESC_INPUT D4 // usually ROW
+#define QMK_ESC_OUTPUT F5 // usually COL
+#define QMK_ESC_INPUT D4 // usually ROW
#define QMK_LED B0
#define QMK_SPEAKER C6
diff --git a/keyboards/keebio/viterbi/keymaps/drashna/keymap.c b/keyboards/keebio/viterbi/keymaps/drashna/keymap.c
index 9c17c5a577..3b213418d6 100644
--- a/keyboards/keebio/viterbi/keymaps/drashna/keymap.c
+++ b/keyboards/keebio/viterbi/keymaps/drashna/keymap.c
@@ -1,24 +1,15 @@
-#include QMK_KEYBOARD_H
#include "drashna.h"
-extern keymap_config_t keymap_config;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-
-
// Fillers to make layering more clear
-#define DIABLO TG(_DIABLO)
-#define GAMEPAD TG(_GAMEPAD)
-#define MEDIA TT(_MEDIA)
+#define DIABLO TG(_DIABLO)
+#define GAMEPAD TG(_GAMEPAD)
+#define MEDIA TT(_MEDIA)
-
-//enum more_custom_keycodes {
+// enum more_custom_keycodes {
// KC_P00 = NEW_SAFE_RANGE
//};
+// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMLOCK] = LAYOUT_ortho_5x7(
@@ -55,32 +46,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-
+// clang-format on
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-
- //switch (keycode) {
- //case KC_P00:
- // if (!record->event.pressed) {
- // tap(KC_KP_0);
- // tap(KC_KP_0);
- // }
- // return false;
- // break;
- //}
- return true;
+ // switch (keycode) {
+ // case KC_P00:
+ // if (!record->event.pressed) {
+ // tap(KC_KP_0);
+ // tap(KC_KP_0);
+ // }
+ // return false;
+ // break;
+ //}
+ return true;
}
-
-
-
void matrix_init_keymap(void) {
- #ifndef CONVERT_TO_PROTON_C
+#ifndef CONVERT_TO_PROTON_C
setPinOutput(D5);
writePinHigh(D5);
setPinOutput(B0);
writePinHigh(B0);
- #endif
+#endif
}
diff --git a/keyboards/keebio/wavelet/keymaps/default/keymap.c b/keyboards/keebio/wavelet/keymaps/default/keymap.c
index abf253380b..270a4ffb58 100644
--- a/keyboards/keebio/wavelet/keymaps/default/keymap.c
+++ b/keyboards/keebio/wavelet/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/kingly_keys/romac/readme.md b/keyboards/kingly_keys/romac/readme.md
index 98ed21502a..bc01d14f22 100644
--- a/keyboards/kingly_keys/romac/readme.md
+++ b/keyboards/kingly_keys/romac/readme.md
@@ -11,6 +11,6 @@ A “Plaid†Inspired 12-Key (3x4) Macropad.
Make example for this keyboard (after setting up your build environment):
- make romac:default
+ make kingly_keys/romac: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/kingly_keys/romac_plus/readme.md b/keyboards/kingly_keys/romac_plus/readme.md
index 4411701ca9..aede33b142 100644
--- a/keyboards/kingly_keys/romac_plus/readme.md
+++ b/keyboards/kingly_keys/romac_plus/readme.md
@@ -11,6 +11,6 @@ An Upgraded “Plaid†Inspired 12-Key (3x4) Macropad With Fancy Features.
Make example for this keyboard (after setting up your build environment):
- make romac_plus:default
+ make kingly_keys/romac_plus: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/kingly_keys/ropro/readme.md b/keyboards/kingly_keys/ropro/readme.md
index 0a90c87f8a..21b05679eb 100644
--- a/keyboards/kingly_keys/ropro/readme.md
+++ b/keyboards/kingly_keys/ropro/readme.md
@@ -11,6 +11,6 @@ Hardware Availability: [Kingly-Keys.xyz](https://kingly-keys.xyz/) - (Through GB
Make example for this keyboard (after setting up your build environment):
- make ropro:default
+ make kingly_keys/ropro: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/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/kudox/columner/columner.c b/keyboards/kudox/columner/columner.c
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/columner/columner.c
diff --git a/keyboards/kudox/columner/columner.h b/keyboards/kudox/columner/columner.h
new file mode 100644
index 0000000000..dcc745ddb7
--- /dev/null
+++ b/keyboards/kudox/columner/columner.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
+ L10, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, R10, \
+ L20, L21, L22, L23, L24, L25, R25, R24, R23, R22, R21, R20, \
+ L30, L31, L32, L33, L34, L35, R35, R34, R33, R32, R31, R30, \
+ L40, L41, L42, L43, L44, L45, L46, R46, R45, R44, R43, R42, R41, R40 \
+) \
+{ \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { 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 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, R44, R45, R46 } \
+}
diff --git a/keyboards/kudox/columner/config.h b/keyboards/kudox/columner/config.h
new file mode 100644
index 0000000000..a76bce09da
--- /dev/null
+++ b/keyboards/kudox/columner/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 0x9691
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Kumao Kobo
+#define PRODUCT The Kudox Keyboard
+#define DESCRIPTION Split column staggered 5x7 custom keyboard
+
+/* 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/kudox/columner/info.json b/keyboards/kudox/columner/info.json
new file mode 100644
index 0000000000..8d98c81788
--- /dev/null
+++ b/keyboards/kudox/columner/info.json
@@ -0,0 +1,77 @@
+{
+ "url": "http://kumaokobo.com/",
+ "maintainer": "Kumao Kobo",
+ "keyboard_name": "Kudox Keyboard Columner",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0.5, "w":1.25},
+ {"label":"1", "x":1.25, "y":0.5},
+ {"label":"2", "x":2.25, "y":0.25},
+ {"label":"3", "x":3.25, "y":0},
+ {"label":"4", "x":4.25, "y":0.25},
+ {"label":"5", "x":5.25, "y":0.5},
+ {"label":"6", "x":11, "y":0.5},
+ {"label":"7", "x":12, "y":0.25},
+ {"label":"8", "x":13, "y":0},
+ {"label":"9", "x":14, "y":0.25},
+ {"label":"0", "x":15, "y":0.5},
+ {"label":"\u2190", "x":16, "y":0.5, "w":1.25},
+ {"label":"Tab", "x":0, "y":1.5, "w":1.25},
+ {"label":"Q", "x":1.25, "y":1.5},
+ {"label":"W", "x":2.25, "y":1.25},
+ {"label":"E", "x":3.25, "y":1},
+ {"label":"R", "x":4.25, "y":1.25},
+ {"label":"T", "x":5.25, "y":1.5},
+ {"label":"{", "x":6.25, "y":1.25, "h":1.25},
+ {"label":"}", "x":10, "y":1.25, "h":1.25},
+ {"label":"Y", "x":11, "y":1.5},
+ {"label":"U", "x":12, "y":1.25},
+ {"label":"I", "x":13, "y":1},
+ {"label":"O", "x":14, "y":1.25},
+ {"label":"P", "x":15, "y":1.5},
+ {"label":"\\", "x":16, "y":1.5, "w":1.25},
+ {"label":"Ctrl", "x":0, "y":2.5, "w":1.25},
+ {"label":"A", "x":1.25, "y":2.5},
+ {"label":"S", "x":2.25, "y":2.25},
+ {"label":"D", "x":3.25, "y":2},
+ {"label":"F", "x":4.25, "y":2.25},
+ {"label":"G", "x":5.25, "y":2.5},
+ {"label":"H", "x":11, "y":2.5},
+ {"label":"J", "x":12, "y":2.25},
+ {"label":"K", "x":13, "y":2},
+ {"label":"L", "x":14, "y":2.25},
+ {"label":";", "x":15, "y":2.5},
+ {"label":"Enter", "x":16, "y":2.5, "w":1.25},
+ {"label":"Shift", "x":0, "y":3.5, "w":1.25},
+ {"label":"Z", "x":1.25, "y":3.5},
+ {"label":"X", "x":2.25, "y":3.25},
+ {"label":"V", "x":4.25, "y":3.25},
+ {"label":"C", "x":3.25, "y":3},
+ {"label":"B", "x":5.25, "y":3.5},
+ {"label":"-", "x":6.25, "y":2.5, "h":1.25},
+ {"label":"=", "x":10, "y":2.5, "h":1.25},
+ {"label":"N", "x":11, "y":3.5},
+ {"label":"M", "x":12, "y":3.25},
+ {"label":",", "x":13, "y":3},
+ {"label":".", "x":14, "y":3.25},
+ {"label":"/", "x":15, "y":3.5},
+ {"label":"Shift", "x":16, "y":3.5, "w":1.25},
+ {"label":"Alt", "x":0, "y":4.5, "w":1.25},
+ {"label":"'", "x":1.25, "y":4.5},
+ {"label":"~", "x":2.25, "y":4.25},
+ {"label":"Del", "x":3.25, "y":4},
+ {"label":"LANG2", "x":4.25, "y":4.5},
+ {"label":"GUI", "x":5.25, "y":4.75},
+ {"label":"Space", "x":6.25, "y":5},
+ {"label":"Space", "x":10, "y":5},
+ {"label":"GUI", "x":11, "y":4.75},
+ {"label":"LANG2", "x":12, "y":4.5},
+ {"label":"\u2190", "x":13, "y":4},
+ {"label":"\u2193", "x":14, "y":4.25},
+ {"label":"\u2191", "x":15, "y":4.5},
+ {"label":"\u2192", "x":16, "y":4.5, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kudox/keymaps/default/config.h b/keyboards/kudox/columner/keymaps/default/config.h
index f5bf85cca0..f5bf85cca0 100644
--- a/keyboards/kudox/keymaps/default/config.h
+++ b/keyboards/kudox/columner/keymaps/default/config.h
diff --git a/keyboards/kudox/columner/keymaps/default/keymap.c b/keyboards/kudox/columner/keymaps/default/keymap.c
new file mode 100644
index 0000000000..84ebcc906b
--- /dev/null
+++ b/keyboards/kudox/columner/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+#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
+#define _NUMB 2
+
+// Shortcut to make keymap more readable
+#define KC_ALES LALT_T(KC_ESC)
+
+#define KC_LGENT MT(KC_LGUI, KC_ENT)
+#define KC_RGENT MT(KC_RGUI, KC_ENT)
+
+#define KC_L1NUM LT(_NUMB, KC_LANG1)
+#define KC_L2SYM LT(_SYMB, KC_LANG2)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┬────────â”
+ KC_ESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_LBRC , KC_RBRC ,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_MINS , KC_EQL ,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_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_ALES ,KC_QUOT ,KC_GRV ,KC_DEL ,KC_L2SYM,KC_LGENT,KC_SPC , KC_SPC ,KC_RGENT,KC_L1NUM,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┬────────â”
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F11 , KC_F12 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_DQUO ,KC_QUOT ,KC_TILD ,KC_ASTR ,KC_PLUS ,_______ , _______ ,_______ ,_______ ,_______ ,KC_TILD ,KC_GRV ,KC_JYEN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_AT ,KC_COLN ,KC_GRV ,_______ ,KC_MINS , _______ ,_______ ,_______ ,KC_DQUO ,KC_QUOT ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_DOT ,KC_SLSH , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,KC_LT ,KC_UNDS ,KC_CIRC ,KC_GT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_NUMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────┬────────â”
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_7 ,KC_8 ,KC_9 ,KC_ASTR ,KC_PLUS ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_4 ,KC_5 ,KC_6 ,KC_0 ,KC_MINS , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_1 ,KC_2 ,KC_3 ,KC_DOT ,KC_SLSH , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ _______ ,_______ ,KC_JYEN ,KC_0 ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/kudox/columner/keymaps/default/readme.md b/keyboards/kudox/columner/keymaps/default/readme.md
new file mode 100644
index 0000000000..13d9e8bee1
--- /dev/null
+++ b/keyboards/kudox/columner/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for Kudox Keyboard Columner
diff --git a/keyboards/kudox/columner/readme.md b/keyboards/kudox/columner/readme.md
new file mode 100644
index 0000000000..0c62174bcf
--- /dev/null
+++ b/keyboards/kudox/columner/readme.md
@@ -0,0 +1,32 @@
+# The Kudox Keyboard Columner
+
+<p align="center">
+<img src="https://raw.githubusercontent.com/kumaokobo/kudox-keyboard/master/img/kudox.png" alt="Kudox logo" width="600"/>
+</p>
+
+<p align="center">
+<img src="https://raw.githubusercontent.com/kumaokobo/kudox-keyboard/master/img/kudox-columner.jpg" alt="Kudox Columner" width="600"/>
+</p>
+
+- Keyboard Maintainer: [Kumao Kobo](https://github.com/kumaokobo)
+- Hardware Supported: Kudox Columner PCB rev1.0 w/ Pro Micro
+
+Make example for this keyboard (after setting up your build environment):
+
+```sh
+make kudox/columner:default
+```
+
+
+Example of flashing this keyboard:
+
+```sh
+make kudox/columner: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).
+
+
+## Layout
+
+![layout](https://raw.githubusercontent.com/kumaokobo/kudox-keyboard/master/img/kudox-columner-layout-rev1.png)
diff --git a/keyboards/kudox/columner/rules.mk b/keyboards/kudox/columner/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/columner/rules.mk
diff --git a/keyboards/kudox/kudox.h b/keyboards/kudox/kudox.h
index 8ff75559d1..09549fbc55 100644
--- a/keyboards/kudox/kudox.h
+++ b/keyboards/kudox/kudox.h
@@ -19,5 +19,11 @@
#ifdef KEYBOARD_kudox_rev1
#include "rev1.h"
#endif
+#ifdef KEYBOARD_kudox_rev2
+ #include "rev2.h"
+#endif
+#ifdef KEYBOARD_kudox_columner
+ #include "columner.h"
+#endif
#include "quantum.h"
diff --git a/keyboards/kudox/readme.md b/keyboards/kudox/readme.md
index 42e1ed9372..cc97bf83b0 100644
--- a/keyboards/kudox/readme.md
+++ b/keyboards/kudox/readme.md
@@ -5,22 +5,25 @@
</p>
<p align="center">
-<img src="https://raw.githubusercontent.com/kumaokobo/kudox-keyboard/master/img/kudox-pcb.jpg" alt="Kudox PCB rev1.0" width="600"/>
+<img src="https://raw.githubusercontent.com/kumaokobo/kudox-keyboard/master/img/kudox-pcb.jpg" alt="Kudox PCB rev2.0" width="600"/>
</p>
- Keyboard Maintainer: [Kumao Kobo](https://github.com/kumaokobo)
-- Hardware Supported: Kudox PCB rev1.0 w/ Pro Micro
+- Hardware Supported: Kudox PCB rev1.0 rev2.0 w/ Pro Micro
Make example for this keyboard (after setting up your build environment):
```sh
-make kudox/rev1:default
+make kudox/rev2:default
```
+
Example of flashing this keyboard:
```sh
-make kudox/rev1:default:avrdude
+make kudox/rev2:default:flash
```
+*keymaps/default is for rev2.0. If you want to use rev1.0, you should remove Left-06 key and Right-06 key.*
+
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/kudox/info.json b/keyboards/kudox/rev1/info.json
index 842fb655c6..f92d525838 100644
--- a/keyboards/kudox/info.json
+++ b/keyboards/kudox/rev1/info.json
@@ -1,9 +1,7 @@
{
- "keyboard_name": "Kudox Keyboard",
- "url": "",
+ "url": "http://kumaokobo.com/",
"maintainer": "Kumao Kobo",
- "width": 17,
- "height": 6,
+ "keyboard_name": "Kudox Keyboard Rev1",
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/kudox/keymaps/jis/config.h b/keyboards/kudox/rev1/keymaps/default/config.h
index f5bf85cca0..f5bf85cca0 100644
--- a/keyboards/kudox/keymaps/jis/config.h
+++ b/keyboards/kudox/rev1/keymaps/default/config.h
diff --git a/keyboards/kudox/keymaps/default/keymap.c b/keyboards/kudox/rev1/keymaps/default/keymap.c
index 4c24576824..4c24576824 100644
--- a/keyboards/kudox/keymaps/default/keymap.c
+++ b/keyboards/kudox/rev1/keymaps/default/keymap.c
diff --git a/keyboards/kudox/keymaps/default/readme.md b/keyboards/kudox/rev1/keymaps/default/readme.md
index 98d8b2a054..98d8b2a054 100644
--- a/keyboards/kudox/keymaps/default/readme.md
+++ b/keyboards/kudox/rev1/keymaps/default/readme.md
diff --git a/keyboards/kudox/keymaps/x1/config.h b/keyboards/kudox/rev1/keymaps/jis/config.h
index f5bf85cca0..f5bf85cca0 100644
--- a/keyboards/kudox/keymaps/x1/config.h
+++ b/keyboards/kudox/rev1/keymaps/jis/config.h
diff --git a/keyboards/kudox/keymaps/jis/keymap.c b/keyboards/kudox/rev1/keymaps/jis/keymap.c
index 5de27ff8d4..5de27ff8d4 100644
--- a/keyboards/kudox/keymaps/jis/keymap.c
+++ b/keyboards/kudox/rev1/keymaps/jis/keymap.c
diff --git a/keyboards/kudox/keymaps/jis/readme.md b/keyboards/kudox/rev1/keymaps/jis/readme.md
index 0f3fae39f7..0f3fae39f7 100644
--- a/keyboards/kudox/keymaps/jis/readme.md
+++ b/keyboards/kudox/rev1/keymaps/jis/readme.md
diff --git a/keyboards/kudox/rev1/keymaps/jis/rules.mk b/keyboards/kudox/rev1/keymaps/jis/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/rev1/keymaps/jis/rules.mk
diff --git a/keyboards/kudox/rev1/keymaps/x1/config.h b/keyboards/kudox/rev1/keymaps/x1/config.h
new file mode 100644
index 0000000000..f5bf85cca0
--- /dev/null
+++ b/keyboards/kudox/rev1/keymaps/x1/config.h
@@ -0,0 +1,17 @@
+/* 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
diff --git a/keyboards/kudox/keymaps/x1/keymap.c b/keyboards/kudox/rev1/keymaps/x1/keymap.c
index 1c08349b01..1c08349b01 100644
--- a/keyboards/kudox/keymaps/x1/keymap.c
+++ b/keyboards/kudox/rev1/keymaps/x1/keymap.c
diff --git a/keyboards/kudox/keymaps/x1/readme.md b/keyboards/kudox/rev1/keymaps/x1/readme.md
index 1085735afc..1085735afc 100644
--- a/keyboards/kudox/keymaps/x1/readme.md
+++ b/keyboards/kudox/rev1/keymaps/x1/readme.md
diff --git a/keyboards/kudox/rev1/keymaps/x1/rules.mk b/keyboards/kudox/rev1/keymaps/x1/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/rev1/keymaps/x1/rules.mk
diff --git a/keyboards/kudox/rev2/config.h b/keyboards/kudox/rev2/config.h
new file mode 100644
index 0000000000..3a0d608c22
--- /dev/null
+++ b/keyboards/kudox/rev2/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 0x9690
+#define DEVICE_VER 0x0200
+#define MANUFACTURER Kumao Kobo
+#define PRODUCT The Kudox Keyboard
+#define DESCRIPTION Split row staggered 5x7 custom keyboard
+
+/* 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/kudox/rev2/info.json b/keyboards/kudox/rev2/info.json
new file mode 100644
index 0000000000..73cb5a525a
--- /dev/null
+++ b/keyboards/kudox/rev2/info.json
@@ -0,0 +1,77 @@
+{
+ "url": "http://kumaokobo.com/",
+ "maintainer": "Kumao Kobo",
+ "keyboard_name": "Kudox Keyboard Rev2",
+ "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":"`", "x":6, "y":0},
+ {"label":"6", "x":10, "y":0},
+ {"label":"7", "x":11, "y":0},
+ {"label":"8", "x":12, "y":0},
+ {"label":"9", "x":13, "y":0},
+ {"label":"0", "x":14, "y":0},
+ {"label":"-", "x":15, "y":0},
+ {"label":"\u2190", "x":16, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.25},
+ {"label":"Q", "x":1.25, "y":1},
+ {"label":"W", "x":2.25, "y":1},
+ {"label":"E", "x":3.25, "y":1},
+ {"label":"R", "x":4.25, "y":1},
+ {"label":"T", "x":5.25, "y":1},
+ {"label":"LANG2", "x":6.25, "y":1},
+ {"label":"Y", "x":9.75, "y":1},
+ {"label":"U", "x":10.75, "y":1},
+ {"label":"I", "x":11.75, "y":1},
+ {"label":"O", "x":12.75, "y":1},
+ {"label":"P", "x":13.75, "y":1},
+ {"label":"/", "x":14.75, "y":1},
+ {"label":"\\", "x":15.75, "y":1, "w":1.25},
+ {"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":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":"Enter", "x":15.25, "y":2, "w":1.75},
+ {"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":"LANG1", "x":9.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":"Shift", "x":14.75, "y":3, "w":2.25},
+ {"label":"Alt", "x":0, "y":4, "w":1.25},
+ {"label":"'", "x":1.25, "y":4},
+ {"label":"-", "x":2.25, "y":4},
+ {"label":"=", "x":3.25, "y":4},
+ {"label":"layer", "x":4.25, "y":4.33, "w":1.25},
+ {"label":"GUI", "x":5.5, "y":4.67},
+ {"label":"Space", "x":6.5, "y":5},
+ {"label":"Enter", "x":9.5, "y":5},
+ {"label":"Del", "x":10.5, "y":4.67},
+ {"label":"layer", "x":11.5, "y":4.33, "w":1.25},
+ {"label":"\u2190", "x":12.75, "y":4},
+ {"label":"\u2193", "x":13.75, "y":4},
+ {"label":"\u2191", "x":14.75, "y":4},
+ {"label":"\u2192", "x":15.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kudox/rev2/keymaps/default/config.h b/keyboards/kudox/rev2/keymaps/default/config.h
new file mode 100644
index 0000000000..f5bf85cca0
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/default/config.h
@@ -0,0 +1,17 @@
+/* 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
diff --git a/keyboards/kudox/rev2/keymaps/default/keymap.c b/keyboards/kudox/rev2/keymaps/default/keymap.c
new file mode 100644
index 0000000000..138a725a8c
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+#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_RGENT MT(KC_RGUI, KC_ENT)
+
+#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_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_GRV , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,KC_BSPC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_L2SYM, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_SLSH ,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_ENT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , KC_L1SYM,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ KC_ALES ,KC_QUOT ,KC_MINS ,KC_EQL ,KC_ENT ,KC_LGUI ,KC_SPC , KC_RGENT,KC_DEL ,SYM_L ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = 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_DQUO ,KC_QUOT ,KC_GRV ,KC_ASTR ,KC_PLUS ,KC_EQL , KC_LPRN ,KC_RPRN ,KC_PIPE ,KC_ASTR ,KC_TILD ,KC_CIRC ,KC_JYEN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_AT ,KC_COLN ,KC_GRV ,_______ ,KC_MINS , KC_LBRC ,KC_RBRC ,KC_DOT ,KC_SLSH ,KC_MINS ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_DOT ,KC_SLSH , _______ ,KC_LCBR ,KC_RCBR ,KC_DOT ,KC_SLSH ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,KC_LT ,KC_UNDS ,KC_CIRC ,KC_GT
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/kudox/rev2/keymaps/default/readme.md b/keyboards/kudox/rev2/keymaps/default/readme.md
new file mode 100644
index 0000000000..9bc4ca5051
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for Kudox Keyboard Rev2.0
+
+Left-06 key and Right-06 key are different between Rev1.0 and Rev2.0.
diff --git a/keyboards/kudox/rev2/keymaps/jis/config.h b/keyboards/kudox/rev2/keymaps/jis/config.h
new file mode 100644
index 0000000000..f5bf85cca0
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/jis/config.h
@@ -0,0 +1,17 @@
+/* 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
diff --git a/keyboards/kudox/rev2/keymaps/jis/keymap.c b/keyboards/kudox/rev2/keymaps/jis/keymap.c
new file mode 100644
index 0000000000..c78cea2331
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/jis/keymap.c
@@ -0,0 +1,48 @@
+#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_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,KC_BSPC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LANG2, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,JP_AT ,JP_COLN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL ,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_UP ,KC_N ,KC_M ,KC_SLSH ,JP_UNDS ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ KC_ALES ,KC_LGUI ,KC_LALT ,KC_DEL ,KC_L2SYM,KC_SPC ,KC_ENT , KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_COMM ,KC_DOT ,KC_L1SYM,JP_BSLS
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = 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 ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,JP_LPRN ,JP_RPRN ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , JP_HASH ,JP_DLR ,JP_PERC ,JP_PLUS ,KC_MINS ,JP_CIRC ,JP_YEN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┘ └────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,JP_LBRC ,JP_RBRC ,XXXXXXX ,XXXXXXX ,XXXXXXX , JP_AMPR ,KC_SLSH ,JP_ASTR ,KC_SCLN ,JP_COLN ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,JP_LCBR ,JP_RCBR ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_VOLU ,XXXXXXX ,XXXXXXX ,KC_LT ,KC_GT ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┴────────┼────────┼────────┼────────┤
+ _______ ,_______ ,KC_LT ,KC_GT ,KC_LANG2,_______ ,_______ , KC_MUTE ,KC_VOLD ,KC_LANG1,_______ ,_______ ,_______ ,KC_DEL
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/kudox/rev2/keymaps/jis/readme.md b/keyboards/kudox/rev2/keymaps/jis/readme.md
new file mode 100644
index 0000000000..ddf27339d1
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/jis/readme.md
@@ -0,0 +1,3 @@
+# The JIS keymap for Kudox Keyboard Rev2.0
+
+Left-06 key and Right-06 key are different between Rev1.0 and Rev2.0.
diff --git a/keyboards/kudox/rev2/keymaps/jis/rules.mk b/keyboards/kudox/rev2/keymaps/jis/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/rev2/keymaps/jis/rules.mk
diff --git a/keyboards/kudox/rev2/rev2.c b/keyboards/kudox/rev2/rev2.c
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/rev2/rev2.c
diff --git a/keyboards/kudox/rev2/rev2.h b/keyboards/kudox/rev2/rev2.h
new file mode 100644
index 0000000000..dcc745ddb7
--- /dev/null
+++ b/keyboards/kudox/rev2/rev2.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
+ L10, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, R10, \
+ L20, L21, L22, L23, L24, L25, R25, R24, R23, R22, R21, R20, \
+ L30, L31, L32, L33, L34, L35, R35, R34, R33, R32, R31, R30, \
+ L40, L41, L42, L43, L44, L45, L46, R46, R45, R44, R43, R42, R41, R40 \
+) \
+{ \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { 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 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, R44, R45, R46 } \
+}
diff --git a/keyboards/kudox/rev2/rules.mk b/keyboards/kudox/rev2/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/kudox/rev2/rules.mk
diff --git a/keyboards/kudox/rules.mk b/keyboards/kudox/rules.mk
index 68a434feb1..5d8c2b2bb3 100644
--- a/keyboards/kudox/rules.mk
+++ b/keyboards/kudox/rules.mk
@@ -33,4 +33,4 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SPLIT_KEYBOARD = yes
-DEFAULT_FOLDER = kudox/rev1
+DEFAULT_FOLDER = kudox/rev2
diff --git a/keyboards/kyria/config.h b/keyboards/kyria/config.h
new file mode 100644
index 0000000000..2e1e190bd7
--- /dev/null
+++ b/keyboards/kyria/config.h
@@ -0,0 +1,18 @@
+/*
+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
+
+#include "config_common.h"
+
diff --git a/keyboards/kyria/info.json b/keyboards/kyria/info.json
new file mode 100644
index 0000000000..916367f47a
--- /dev/null
+++ b/keyboards/kyria/info.json
@@ -0,0 +1,23 @@
+{
+ "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}
+ ]
+ }
+ }
+ } \ No newline at end of file
diff --git a/keyboards/kyria/keymaps/default/config.h b/keyboards/kyria/keymaps/default/config.h
new file mode 100644
index 0000000000..f00bfa8e70
--- /dev/null
+++ b/keyboards/kyria/keymaps/default/config.h
@@ -0,0 +1,32 @@
+/* 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
+#endif
+
+// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
+// #define SPLIT_USB_DETECT
+// #define NO_USB_STARTUP_CHECK
diff --git a/keyboards/kyria/keymaps/default/keymap.c b/keyboards/kyria/keymaps/default/keymap.c
new file mode 100644
index 0000000000..acadb0422b
--- /dev/null
+++ b/keyboards/kyria/keymaps/default/keymap.c
@@ -0,0 +1,219 @@
+/* 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
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * Base Layer: QWERTY
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * |RAIS/ESC| Q | W | E | R | T | | Y | U | I | O | P | | \ |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * |Ctrl/BS | A | S | D | F | G | | H | J | K | L | ; : | ' " |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B |LShift|LShift| |LShift|LShift| N | M | , < | . > | / ? | - _ |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | GUI | Del | Enter| Space| Esc | | Enter| Space| Tab | Bksp | AltGr|
+ * | | | Alt | Lower| Raise| | Lower| Raise| | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_QWERTY] = LAYOUT(
+ LT(_RAISE, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
+ MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LSFT, KC_LSFT, KC_LSFT, KC_LSFT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+ KC_LGUI, KC_DEL, MT(MOD_LALT, KC_ENT), LT(_LOWER, KC_SPC), LT(_RAISE, KC_ESC), LT(_LOWER, KC_ENT), LT(_RAISE, KC_SPC), KC_TAB, KC_BSPC, KC_RALT
+ ),
+/*
+ * Lower Layer: Symbols
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | ! | @ | { | } | | | | | | | | | | \ |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` | | + | - | / | * | % | ' " |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | | | & | = | , | . | / ? | - _ |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | ; | = | | = | ; | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_LOWER] = LAYOUT(
+ _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______, _______, KC_BSLS,
+ _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
+ _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, _______, _______, _______, _______, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+ _______, _______, _______, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, _______, _______, _______
+ ),
+/*
+ * Raise Layer: Number keys, media, navigation
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | Prev | Play | Next | VolUp| | Left | Down | Up | Right| | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | | | Mute | VolDn| | | | | | MLeft| Mdown| MUp |MRight| | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_RAISE] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, KC_MUTE, KC_VOLD, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+/*
+ * Adjust Layer: Function keys, RGB
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | TOG | SAI | HUI | VAI | MOD | | | | | F11 | F12 | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | SAD | HUD | VAD | RMOD | | | | | | | | | | | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [_ADJUST] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, RGB_MOD, _______, _______, _______, KC_F11, KC_F12, _______,
+ _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+// /*
+// * Layer template
+// *
+// * ,-------------------------------------------. ,-------------------------------------------.
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | |
+// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+// * | | | | | | | | | | | | | | | | | |
+// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+// * | | | | | | | | | | | |
+// * | | | | | | | | | | | |
+// * `----------------------------------' `----------------------------------'
+// */
+// [_LAYERINDEX] = LAYOUT(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ),
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+#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_qmk_logo(void) {
+ static const char PROGMEM qmk_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};
+
+ oled_write_P(qmk_logo, false);
+}
+
+static void render_status(void) {
+ // QMK Logo and version information
+ render_qmk_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
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ else if (index == 1) {
+ // Page up/Page down
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+#endif
diff --git a/keyboards/kyria/keymaps/default/rules.mk b/keyboards/kyria/keymaps/default/rules.mk
new file mode 100644
index 0000000000..213c50a80f
--- /dev/null
+++ b/keyboards/kyria/keymaps/default/rules.mk
@@ -0,0 +1,3 @@
+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 \ No newline at end of file
diff --git a/keyboards/kyria/keymaps/drashna/config.h b/keyboards/kyria/keymaps/drashna/config.h
new file mode 100644
index 0000000000..83d6283f56
--- /dev/null
+++ b/keyboards/kyria/keymaps/drashna/config.h
@@ -0,0 +1,38 @@
+/* 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
+
+#define EE_HANDS
+
+#ifdef OLED_DRIVER_ENABLE
+# define OLED_DISPLAY_128X64
+# define OLED_FONT_H "font_gmk_bad.h"
+# define OLED_DISABLE_TIMEOUT
+# define OLED_SCROLL_TIMEOUT_RIGHT 60000
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+# define RGBLIGHT_SLEEP
+# define RGBLIGHT_LIMIT_VAL 200
+# define RGBLIGHT_HUE_STEP 8
+# define RGBLIGHT_SAT_STEP 8
+# define RGBLIGHT_VAL_STEP 8
+#endif
+
+// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
+#define SPLIT_USB_DETECT
+#define SPLIT_USB_TIMEOUT 1000
diff --git a/keyboards/kyria/keymaps/drashna/keymap.c b/keyboards/kyria/keymaps/drashna/keymap.c
new file mode 100644
index 0000000000..bdb00e5967
--- /dev/null
+++ b/keyboards/kyria/keymaps/drashna/keymap.c
@@ -0,0 +1,372 @@
+#include "drashna.h"
+
+uint8_t is_master;
+
+#ifdef OLED_DRIVER_ENABLE
+# define KEYLOGGER_LENGTH 10
+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
+};
+
+void add_keylog(uint16_t keycode);
+#endif
+
+#ifndef UNICODE_ENABLE
+# define UC(x) KC_NO
+#endif
+
+/*
+ * The `LAYOUT_kyria_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
+
+// clang-format off
+#define LAYOUT_kyria_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_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, \
+ 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 */
+#define LAYOUT_kyria_base_wrapper(...) LAYOUT_kyria_base(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kyria_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
+ ),
+
+ [_COLEMAK] = LAYOUT_kyria_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
+ ),
+
+ [_DVORAK] = LAYOUT_kyria_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
+ ),
+
+ [_WORKMAN] = LAYOUT_kyria_base_wrapper(
+ _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
+ _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
+ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
+ ),
+
+ [_NORMAN] = LAYOUT_kyria_base_wrapper(
+ _________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
+ _________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
+ _________________NORMAN_L3_________________, _________________NORMAN_R3_________________
+ ),
+
+ [_MALTRON] = LAYOUT_kyria_base_wrapper(
+ _________________MALTRON_L1________________, _________________MALTRON_R1________________,
+ _________________MALTRON_L2________________, _________________MALTRON_R2________________,
+ _________________MALTRON_L3________________, _________________MALTRON_R3________________
+ ),
+
+ [_EUCALYN] = LAYOUT_kyria_base_wrapper(
+ _________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
+ _________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
+ _________________EUCALYN_L3________________, _________________EUCALYN_R3________________
+ ),
+
+ [_CARPLAX] = LAYOUT_kyria_base_wrapper(
+ _____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________,
+ _____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________,
+ _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
+ ),
+ [_MODS] = LAYOUT_wrapper(
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_LSFT, ___________________BLANK___________________, _______, _______, _______, _______, ___________________BLANK___________________, KC_RSFT,
+ _______, _______, KC_LALT, _______, _______, _______, _______, KC_RGUI, _______, _______
+ ),
+ [_LOWER] = LAYOUT_wrapper(
+ KC_F12, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
+ _______, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
+ _______, _________________LOWER_L3__________________, _______, _______, _______, _______, _________________LOWER_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_RAISE] = LAYOUT_wrapper(
+ KC_F12, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_F11,
+ _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
+ _______, _________________RAISE_L3__________________, _______, _______, _______, _______, _________________RAISE_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_ADJUST] = LAYOUT_wrapper(
+ KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
+ VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
+ _______, _________________ADJUST_L3_________________, HPT_TOG, HPT_FBK, MG_NKRO, UC_MOD, _________________ADJUST_R3_________________, TG_MODS,
+ _______, _______, _______, KC_NUKE, _______, _______, _______, _______, _______, _______
+ ),
+// [_LAYERINDEX] = LAYOUT_wrapper(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ),
+};
+// clang-format on
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef OLED_DRIVER_ENABLE
+ oled_timer = timer_read32();
+ add_keylog(keycode);
+#endif
+#ifndef SPLIT_KEYBOARD
+ if (keycode == RESET && !is_master) {
+ return false;
+ }
+#endif
+ }
+ return true;
+}
+void matrix_init_keymap(void) { is_master = (uint8_t)is_keyboard_master(); }
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
+
+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 update_log(void) {
+ if (timer_elapsed(log_timer) > 750) {
+ // add_keylog(0);
+ }
+}
+
+void render_keylogger_status(void) {
+ oled_write_P(PSTR("Keylogger: "), false);
+ oled_write(keylog_str, false);
+}
+
+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;
+ }
+}
+
+void render_layer_state(void) {
+ oled_write_ln_P(PSTR("Layer:"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("Lower"), layer_state_is(_LOWER));
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("Raise"), layer_state_is(_RAISE));
+ oled_write_P(PSTR(" "), false);
+ oled_write_ln_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("NUM"), 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));
+}
+
+void render_mod_status(uint8_t modifiers) {
+ oled_write_P(PSTR("Mods: "), false);
+ oled_write_P(PSTR("Sft"), (modifiers & MOD_MASK_SHIFT));
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("Ctl"), (modifiers & MOD_MASK_CTRL));
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("Alt"), (modifiers & MOD_MASK_ALT));
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("GUI"), (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("Boot "), 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(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);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("GRV"), keymap_config.swap_grave_esc);
+ oled_write_P(PSTR(" "), false);
+ oled_write_ln_P(PSTR("CAPS"), keymap_config.swap_control_capslock);
+}
+
+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(" "), false);
+ oled_write_P(PSTR("Layr"), userspace_config.rgb_layer_change);
+ oled_write_P(PSTR(" "), false);
+ oled_write_ln_P(PSTR("Nuke"), userspace_config.nuke_switch);
+}
+
+// clang-format off
+void render_logo(void) {
+ static const char PROGMEM qmk_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};
+
+ oled_write_P(qmk_logo, false);
+}
+
+# ifndef SPLIT_TRANSPORT_MIRROR
+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));
+}
+# endif
+// clang-format on
+
+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_logo();
+ 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;
+ }
+# ifndef SPLIT_KEYBOARD
+ else {
+ oled_on();
+ }
+# endif
+
+ update_log();
+ if (is_master) {
+ render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+# ifdef SPLIT_TRANSPORT_MIRROR
+ render_status_secondary();
+# else
+ render_kyria_logo();
+# endif
+ }
+}
+
+#endif
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ // Page up/Page down
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
+#endif
diff --git a/keyboards/kyria/keymaps/drashna/rules.mk b/keyboards/kyria/keymaps/drashna/rules.mk
new file mode 100644
index 0000000000..c1a37f5c59
--- /dev/null
+++ b/keyboards/kyria/keymaps/drashna/rules.mk
@@ -0,0 +1,22 @@
+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
+
+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
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = yes # 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
+
+BOOTLOADER = atmel-dfu
+
+SPLIT_TRANSPORT = mirror
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/keymaps/thomasbaart/config.h b/keyboards/kyria/keymaps/thomasbaart/config.h
new file mode 100644
index 0000000000..e878663bfb
--- /dev/null
+++ b/keyboards/kyria/keymaps/thomasbaart/config.h
@@ -0,0 +1,47 @@
+/* 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
+
+// EC11K encoders have a different resolution than other EC11 encoders.
+// When using the default resolution of 4, if you notice your encoder skipping
+// every other tick, lower the resolution to 2.
+#define ENCODER_RESOLUTION 2
+
+// The Leader key allows to flexibly assign macros to key sequences.
+#define LEADER_PER_KEY_TIMING
+#define LEADER_TIMEOUT 350
+
+#define TAPPING_TERM 200
+
+// Allows to use either side as the master. Look at the documentation for info:
+// https://docs.qmk.fm/#/config_options?id=setting-handedness
+#define EE_HANDS
+
+// Allows media codes to properly register in macros and rotary encoder code
+#define TAP_CODE_DELAY 10 \ No newline at end of file
diff --git a/keyboards/kyria/keymaps/thomasbaart/keymap.c b/keyboards/kyria/keymaps/thomasbaart/keymap.c
new file mode 100644
index 0000000000..ea6ce0a749
--- /dev/null
+++ b/keyboards/kyria/keymaps/thomasbaart/keymap.c
@@ -0,0 +1,333 @@
+/* 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
+
+uint16_t copy_paste_timer;
+
+enum layers {
+ QWERTY = 0,
+ LOWER,
+ RAISE,
+ NAV,
+ ADJUST
+};
+
+enum custom_keycodes {
+ KC_CCCV = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * Base Layer: QWERTY
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | ESC | Q | W | E | R | T | | Y | U | I | O | P | | \ |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | LSFT | A | S | D | F | G | | H | J | K | L | ; : | ' " |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | LCTL | Z | X | C | V | B | CCCV | | | Del |Leader| N | M | , < | . > | / ? | - _ |
+ * `----------------------+------+------+------+------+ | |------+------+------+------+------+----------------------'
+ * | GUI | Alt | | Space| Enter| | Bspc | Space| | Tab | AltGr|
+ * | | | Lower| Shift| Alt | | | Nav | 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_PIPE,
+ 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_CCCV, XXXXXXX, KC_DEL, KC_LEAD, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+ KC_LGUI, KC_LALT, MO(LOWER), MT(MOD_LSFT, KC_SPC), MT(MOD_LALT, KC_ENT), KC_BSPC, LT(NAV, KC_SPC), MO(RAISE), KC_TAB, KC_RALT
+ ),
+/*
+ * Lower Layer: Numpad, Media
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | VolUp| | | | / ? | 7 & | 8 * | 9 ( | - _ | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | Prev | Play | Next | | | * | 4 $ | 5 % | 6 ^ | , < | + |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | | VolDn| Mute | | | | | | | 0 ) | 1 ! | 2 @ | 3 # | = + | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | Lower| | | | | Nav | Raise| | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [LOWER] = LAYOUT(
+ _______, _______, _______, KC_VOLU, _______, _______, KC_SLSH, KC_7, KC_8, KC_9, KC_MINS, _______,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_ASTR, KC_4, KC_5, KC_6, KC_COMM, KC_PLUS,
+ _______, _______, _______, KC_VOLD, KC_MUTE, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_EQL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+/*
+ * Raise Layer: Symbols
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | ! | @ | { | } | | | | | _ | € | | | \ |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` | | + | - | / | * | % | ' " |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | | | & | = | , | . | / ? | - _ |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | Lower| | | | | Nav | Raise| | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [RAISE] = LAYOUT(
+ _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, _______, KC_UNDS, ALGR(KC_5),_______,_______,KC_BSLS,
+ _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
+ _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, _______, _______, _______, _______, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+/*
+ * Navigation Layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | PgUp | Home | Up | End | | ScrlLk |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | | | | | | PgDn | Left | Down | Right| | CapsLk |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | | | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | Lower| | | | | Nav | Raise| | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [NAV] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, KC_SLCK,
+ _______, _______, _______, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_CAPS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+/*
+ * Adjust Layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | | F7 | F8 | F9 | F10 | |
+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ * | | | SAI | HUI | VAI | | | | F4 | F5 | F6 | F11 | |
+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
+ * | | | SAD | HUD | VAD | | | | | | | | F1 | F2 | F3 | F12 | |
+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
+ * | | | | | | | | | | | |
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ */
+ [ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11, _______,
+ _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+// /*
+// * 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 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;
+ }
+ return true;
+}
+
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY(KC_C) { // Inline Code
+ SEND_STRING("`` " SS_TAP(X_LEFT) SS_TAP(X_LEFT));
+ }
+ SEQ_ONE_KEY(KC_P) { // Invoke Password Manager
+ SEND_STRING(SS_LCTRL(SS_LALT("\\")));
+ }
+ SEQ_ONE_KEY(KC_S) { // Windows screenshot
+ SEND_STRING(SS_LGUI("\nS"));
+ }
+ SEQ_TWO_KEYS(KC_F, KC_P) { // Fusion Projection prefix
+ SEND_STRING("[Projection] ");
+ }
+ SEQ_TWO_KEYS(KC_E, KC_S) { // Email splitkb
+ SEND_STRING("thomas@splitkb.com");
+ }
+ SEQ_TWO_KEYS(KC_E, KC_P) { // Email personal
+ SEND_STRING("mail@thomasbaart.nl");
+ }
+ SEQ_TWO_KEYS(KC_S, KC_D) { // Splitkb documentation
+ SEND_STRING("https://docs.splitkb.com/");
+ }
+ SEQ_TWO_KEYS(KC_S, KC_V) { // Splitkb VAT number
+ SEND_STRING("NL210593349B01");
+ }
+ SEQ_THREE_KEYS(KC_S, KC_D, KC_K) { // Splitkb Kyria build log
+ SEND_STRING("https://docs.splitkb.com/docs/kyria-build-log/");
+ }
+ SEQ_TWO_KEYS(KC_B, KC_C) { // Discord bongocat
+ SEND_STRING(":bongocat:\n");
+ }
+ SEQ_TWO_KEYS(KC_C, KC_B) { // Discord code block
+ SEND_STRING("```c" SS_LSFT("\n\n") "``` " SS_TAP(X_UP));
+ }
+ }
+}
+
+#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_qmk_logo(void) {
+ static const char PROGMEM qmk_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};
+
+ oled_write_P(qmk_logo, false);
+}
+
+static void render_status(void) {
+ // QMK Logo and version information
+ render_qmk_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 NAV:
+ oled_write_P(PSTR("Navigation\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
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ switch (biton32(layer_state)) {
+ case QWERTY:
+ // Move whole words. Hold shift to select while moving.
+ if (clockwise) {
+ tap_code16(C(KC_RGHT));
+ } else {
+ tap_code16(C(KC_LEFT));
+ }
+ break;
+ default:
+ // History scrubbing. For Adobe products, hold shift while moving
+ // backward to go forward instead.
+ if (clockwise) {
+ tap_code16(C(KC_Z));
+ } else {
+ tap_code16(C(KC_Y));
+ }
+ break;
+ }
+ } else if (index == 1) {
+ switch (biton32(layer_state)) {
+ case QWERTY:
+ // Scrolling with PageUp and PgDn.
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ break;
+ default:
+ // Volume control.
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ break;
+ }
+ }
+}
+#endif
diff --git a/keyboards/kyria/keymaps/thomasbaart/rules.mk b/keyboards/kyria/keymaps/thomasbaart/rules.mk
new file mode 100644
index 0000000000..9b8e294198
--- /dev/null
+++ b/keyboards/kyria/keymaps/thomasbaart/rules.mk
@@ -0,0 +1,5 @@
+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
+LEADER_ENABLE = yes # Enable the Leader Key feature
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/kyria/kyria.c b/keyboards/kyria/kyria.c
new file mode 100644
index 0000000000..21ed5e84c8
--- /dev/null
+++ b/keyboards/kyria/kyria.c
@@ -0,0 +1,16 @@
+/* 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 "kyria.h"
diff --git a/keyboards/kyria/kyria.h b/keyboards/kyria/kyria.h
new file mode 100644
index 0000000000..a2a675e0db
--- /dev/null
+++ b/keyboards/kyria/kyria.h
@@ -0,0 +1,43 @@
+/* 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
+
+#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, R06, R07, R08, R09, R10, R11, \
+ L12, L13, L14, L15, L16, L17, R18, R19, R20, R21, R22, R23, \
+ L24, L25, L26, L27, L28, L29, L30, L31, R32, R33, R34, R35, R36, R37, R38, R39, \
+ L40, L41, L42, L43, L44, R45, R46, R47, R48, R49 \
+) \
+{ \
+ { KC_NO, KC_NO, L05, L04, L03, L02, L01, L00 }, \
+ { KC_NO, KC_NO, L17, L16, L15, L14, L13, L12 }, \
+ { L31, L30, L29, L28, L27, L26, L25, L24 }, \
+ { L44, L43, L42, L41, L40, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, R06, R07, R08, R09, R10, R11 }, \
+ { KC_NO, KC_NO, R18, R19, R20, R21, R22, R23 }, \
+ { R32, R33, R34, R35, R36, R37, R38, R39 }, \
+ { R45, R46, R47, R48, R49, KC_NO, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/kyria/readme.md b/keyboards/kyria/readme.md
new file mode 100644
index 0000000000..ed4b145081
--- /dev/null
+++ b/keyboards/kyria/readme.md
@@ -0,0 +1,21 @@
+# Kyria
+
+![Kyria](https://cdn.shopify.com/s/files/1/0227/9171/6941/products/PlateCase_f1870016-98b8-43a9-8aed-3eaf073b367b_900x.jpg?v=1568934600)
+
+An ergonomical 40% split keyboard
+
+Keyboard Maintainer: [splitkb.com](https://github.com/splitkb)
+Hardware Supported: Pro Micro 5V/16MHz and compatible.
+Hardware Availability: [splitkb.com](https://splitkb.com) and partners.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kyria:default
+
+Example of flashing this keyboard:
+
+ make kyria/rev1: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 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/kyria/rev1/config.h b/keyboards/kyria/rev1/config.h
new file mode 100644
index 0000000000..29209f3fc6
--- /dev/null
+++ b/keyboards/kyria/rev1/config.h
@@ -0,0 +1,65 @@
+/*
+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
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER splitkb
+#define PRODUCT Kyria Keyboard
+#define DESCRIPTION Split 40 percent ergonomic keyboard
+
+/* key matrix size */
+/* Rows are doubled up */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+// wiring
+#define MATRIX_ROW_PINS { B4, E6, D7, D4 }
+#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
+#define UNUSED_PINS
+
+#define ENCODERS_PAD_A { C6 }
+#define ENCODERS_PAD_B { B5 }
+#define ENCODERS_PAD_A_RIGHT { B5 }
+#define ENCODERS_PAD_B_RIGHT { C6 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/*
+ * 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
+
+#define RGB_DI_PIN D3
+#define RGBLED_SPLIT { 10, 10 }
+#define RGBLED_NUM 20
+
+/* 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/kyria/rev1/rev1.c b/keyboards/kyria/rev1/rev1.c
new file mode 100644
index 0000000000..9aedcc130a
--- /dev/null
+++ b/keyboards/kyria/rev1/rev1.c
@@ -0,0 +1 @@
+#include "rev1.h" \ No newline at end of file
diff --git a/keyboards/kyria/rev1/rev1.h b/keyboards/kyria/rev1/rev1.h
new file mode 100644
index 0000000000..2ef05bb0e9
--- /dev/null
+++ b/keyboards/kyria/rev1/rev1.h
@@ -0,0 +1,43 @@
+/* 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
+
+#include "kyria.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, R06, R07, R08, R09, R10, R11, \
+ L12, L13, L14, L15, L16, L17, R18, R19, R20, R21, R22, R23, \
+ L24, L25, L26, L27, L28, L29, L30, L31, R32, R33, R34, R35, R36, R37, R38, R39, \
+ L40, L41, L42, L43, L44, R45, R46, R47, R48, R49 \
+) \
+{ \
+ { KC_NO, KC_NO, L05, L04, L03, L02, L01, L00 }, \
+ { KC_NO, KC_NO, L17, L16, L15, L14, L13, L12 }, \
+ { L31, L30, L29, L28, L27, L26, L25, L24 }, \
+ { L44, L43, L42, L41, L40, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, R06, R07, R08, R09, R10, R11 }, \
+ { KC_NO, KC_NO, R18, R19, R20, R21, R22, R23 }, \
+ { R32, R33, R34, R35, R36, R37, R38, R39 }, \
+ { R45, R46, R47, R48, R49, KC_NO, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/kyria/rev1/rules.mk b/keyboards/kyria/rev1/rules.mk
new file mode 100644
index 0000000000..8b1c9616cb
--- /dev/null
+++ b/keyboards/kyria/rev1/rules.mk
@@ -0,0 +1,3 @@
+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
diff --git a/keyboards/kyria/rules.mk b/keyboards/kyria/rules.mk
new file mode 100644
index 0000000000..57fbf76cfb
--- /dev/null
+++ b/keyboards/kyria/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 = 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
+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 # Split common
+LINK_TIME_OPTIMIZATION_ENABLE =yes
+
+DEFAULT_FOLDER = kyria/rev1
diff --git a/keyboards/launchpad/keymaps/default/keymap.c b/keyboards/launchpad/keymaps/default/keymap.c
index c793349a5d..8ebc98159d 100644
--- a/keyboards/launchpad/keymaps/default/keymap.c
+++ b/keyboards/launchpad/keymaps/default/keymap.c
@@ -1,7 +1,6 @@
// Below layout is based upon /u/That-Canadian's planck layout
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/lazydesigners/the30/config.h b/keyboards/lazydesigners/the30/config.h
new file mode 100644
index 0000000000..fdd76fe730
--- /dev/null
+++ b/keyboards/lazydesigners/the30/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2019 Erovia
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 0x0030
+#define DEVICE_VER 0x0001
+#define MANUFACTURER LazyDesigners
+#define PRODUCT THE30
+#define DESCRIPTION A 30% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 10
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2 }
+#define MATRIX_COL_PINS { B1, B2, B3, D4, D6, D7, B4, B5, B6, C6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 3
diff --git a/keyboards/lazydesigners/the30/info.json b/keyboards/lazydesigners/the30/info.json
new file mode 100644
index 0000000000..97974112eb
--- /dev/null
+++ b/keyboards/lazydesigners/the30/info.json
@@ -0,0 +1,44 @@
+{
+ "keyboard_name": "THE30",
+ "url": "http://lazydesigners.cn",
+ "maintainer": "Erovia",
+ "width": 10,
+ "height": 3,
+ "layouts": {
+ "LAYOUT_ortho_3x10": {
+ "key_count": 30,
+ "layout": [
+ {"label":"Q", "x":0, "y":0},
+ {"label":"W", "x":1, "y":0},
+ {"label":"E", "x":2, "y":0},
+ {"label":"R", "x":3, "y":0},
+ {"label":"T", "x":4, "y":0},
+ {"label":"Y", "x":5, "y":0},
+ {"label":"U", "x":6, "y":0},
+ {"label":"I", "x":7, "y":0},
+ {"label":"O", "x":8, "y":0},
+ {"label":"P", "x":9, "y":0},
+ {"label":"A", "x":0, "y":1},
+ {"label":"S", "x":1, "y":1},
+ {"label":"D", "x":2, "y":1},
+ {"label":"F", "x":3, "y":1},
+ {"label":"G", "x":4, "y":1},
+ {"label":"H", "x":5, "y":1},
+ {"label":"J", "x":6, "y":1},
+ {"label":"K", "x":7, "y":1},
+ {"label":"L", "x":8, "y":1},
+ {"label":"ENTER", "x":9, "y":1},
+ {"label":"Z", "x":0, "y":2},
+ {"label":"X", "x":1, "y":2},
+ {"label":"C", "x":2, "y":2},
+ {"label":"V", "x":3, "y":2},
+ {"label":"B", "x":4, "y":2},
+ {"label":"N", "x":5, "y":2},
+ {"label":"M", "x":6, "y":2},
+ {"label":",", "x":7, "y":2},
+ {"label":".", "x":8, "y":2},
+ {"label":"/", "x":9, "y":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/lazydesigners/the30/keymaps/default/keymap.c b/keyboards/lazydesigners/the30/keymaps/default/keymap.c
new file mode 100644
index 0000000000..e15fad7eb3
--- /dev/null
+++ b/keyboards/lazydesigners/the30/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
+/* Copyright 2019 Erovia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_layers {
+ _QWERTY,
+ _FN
+};
+
+/* Press for Enter, hold for FN layer */
+#define FN_ENT LT(_FN, KC_ENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * ,-------------------------------------------------.
+ * | Q | W | E | R | T | Y | U | I | O | P |
+ * |-------------------------------------------------|
+ * | A | S | D | F | G | H | J | K | L |ENT |
+ * |-------------------------------------------------|
+ * | Z | X | C | V | B | N | M | , | . | / |
+ * `-------------------------------------------------'
+ */
+ [_QWERTY] = 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, FN_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+ ),
+/*
+ * ,-------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+ * |-------------------------------------------------|
+ * | | | | | | | | | | |
+ * |-------------------------------------------------|
+ * |RST |ERST| | |SPC | | | | | |
+ * `-------------------------------------------------'
+ */
+ [_FN] = LAYOUT_ortho_3x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, EEP_RST, _______, _______, KC_SPC, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/lazydesigners/the30/keymaps/default/readme.md b/keyboards/lazydesigners/the30/keymaps/default/readme.md
new file mode 100644
index 0000000000..7df2b3b0a9
--- /dev/null
+++ b/keyboards/lazydesigners/the30/keymaps/default/readme.md
@@ -0,0 +1,25 @@
+# The default keymap for THE30
+
+_Very simple keymap for testing and for easy access to RESET_
+
+## QWERTY (Normal) Layer
+```
+,-------------------------------------------------.
+| Q | W | E | R | T | Y | U | I | O | P |
+|-------------------------------------------------|
+| A | S | D | F | G | H | J | K | L |ENT |
+|-------------------------------------------------|
+| Z | X | C | V | B | N | M | , | . | / |
+`-------------------------------------------------'
+```
+
+## FN Layer
+```
+,-------------------------------------------------.
+| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+|-------------------------------------------------|
+| | | | | | | | | | |
+|-------------------------------------------------|
+|RST |ERST| | |SPC | | | | | |
+`-------------------------------------------------'
+```
diff --git a/keyboards/lazydesigners/the30/readme.md b/keyboards/lazydesigners/the30/readme.md
new file mode 100644
index 0000000000..a00e4d1fa1
--- /dev/null
+++ b/keyboards/lazydesigners/the30/readme.md
@@ -0,0 +1,21 @@
+# THE30
+
+![the30](https://i.loli.net/2019/11/06/KTn3dNjreigovRz.jpg)
+
+A 30% custom keyboard designed and produced by [LazyDesigners](http://lazydesigners.cn).
+
+* Keyboard Maintainer: [Erovia](https://github.com/Erovia)
+* Hardware Supported: THE30
+* Hardware Availability: Check for GBs on [Geekhack](https://geekhack.org) and on [LazyDesigner's homepage.](http://lazydesigners.cn)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lazydesigners/the30:default
+
+Flashing example for this keyboard ([using the command line](https://docs.qmk.fm/#/newbs_flashing?id=flash-your-keyboard-from-the-command-line)):
+
+ make lazydesigners/the30:default:flash
+
+To enter the bootloader, either press the RESET button on the PCB or the RESET button if the current keymap has one.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/the30/rules.mk b/keyboards/lazydesigners/the30/rules.mk
new file mode 100644
index 0000000000..6c1e24fda0
--- /dev/null
+++ b/keyboards/lazydesigners/the30/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 = 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
+
+# Support community keymaps
+LAYOUTS = ortho_3x10
diff --git a/keyboards/lazydesigners/the30/the30.c b/keyboards/lazydesigners/the30/the30.c
new file mode 100644
index 0000000000..c41e16dc08
--- /dev/null
+++ b/keyboards/lazydesigners/the30/the30.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 Erovia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "the30.h"
diff --git a/keyboards/lazydesigners/the30/the30.h b/keyboards/lazydesigners/the30/the30.h
new file mode 100644
index 0000000000..82a6bf8ba5
--- /dev/null
+++ b/keyboards/lazydesigners/the30/the30.h
@@ -0,0 +1,38 @@
+/* Copyright 2019 Erovia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_3x10( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29 }, \
+}
diff --git a/keyboards/leeku/finger65/config.h b/keyboards/leeku/finger65/config.h
new file mode 100644
index 0000000000..3e6eebb324
--- /dev/null
+++ b/keyboards/leeku/finger65/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2018 Rasmus Schults <rasmusx@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 0x6050
+#define DEVICE_VER 0x0100
+#define MANUFACTURER LeeKu
+#define PRODUCT L3
+#define DESCRIPTION QMK keyboard firmware for L3
+
+#define RGBLED_NUM 12
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_ROW_PINS { C3, C4, C5, C6, C7 }
+#define UNUSED_PINS
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 1
+
diff --git a/keyboards/leeku/finger65/finger65.h b/keyboards/leeku/finger65/finger65.h
new file mode 100644
index 0000000000..3d2ef2db45
--- /dev/null
+++ b/keyboards/leeku/finger65/finger65.h
@@ -0,0 +1,61 @@
+/* Copyright 2018 Rasmus Schults <rasmusx@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, K2P, \
+ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1O, K1P, \
+ K0A, K0B, K0C, K0D, K0G, K0I, K0J, K0M, K0N, K0O, K0P \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, KC_NO, K2P }, \
+ { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, KC_NO, K1O, K1P }, \
+ { K0A, K0B, K0C, K0D, KC_NO, KC_NO, K0G, KC_NO, K0I, K0J, KC_NO, KC_NO, K0M, K0N, K0O, K0P } \
+}
+
+#define LAYOUT_65_ansi( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2P, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1O, K1P, \
+ K0A, K0B, K0C, K0G, K0J, K0M, K0N, K0O, K0P \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, K4P }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
+ { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, KC_NO, K1O, K1P }, \
+ { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, KC_NO, KC_NO, K0M, K0N, K0O, K0P } \
+}
+
+#define LAYOUT_65_ansi_split_bs( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2P, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1O, K1P, \
+ K0A, K0B, K0C, K0G, K0J, K0M, K0N, K0O, K0P \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
+ { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, KC_NO, K1O, K1P }, \
+ { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, KC_NO, KC_NO, K0M, K0N, K0O, K0P } \
+}
diff --git a/keyboards/leeku/finger65/info.json b/keyboards/leeku/finger65/info.json
new file mode 100644
index 0000000000..f78d7098b0
--- /dev/null
+++ b/keyboards/leeku/finger65/info.json
@@ -0,0 +1,1095 @@
+{
+ "keyboard_name": "Leeku Finger65",
+ "url": "",
+ "maintainer": "sidcarter",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {
+ "label": "K4A",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "K4B",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "K4C",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "K4D",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "K4E",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "K4F",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "K4G",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "K4H",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "K4I",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "K4J",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": "K4K",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "K4L",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "K4M",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "K4N",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "K4O",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "label": "K4P",
+ "x": 15,
+ "y": 0
+ },
+ {
+ "label": "K3A",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "K3B",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "K3C",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "K3D",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "K3E",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "K3F",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "K3G",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "K3H",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "K3I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "K3J",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "K3K",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "K3L",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "K3M",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "K3N",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "K3P",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "K2A",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "K2B",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "K2C",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "K2D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "K2E",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "K2F",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "K2G",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "K2H",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K2I",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "K2J",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": "K2K",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "K2L",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "K2M",
+ "x": 12.75,
+ "y": 2
+ },
+ {
+ "label": "K2N",
+ "x": 13.75,
+ "y": 2,
+ "w": 1.25
+ },
+ {
+ "label": "K2P",
+ "x": 15,
+ "y": 2
+ },
+ {
+ "label": "K1A",
+ "x": 0,
+ "y": 3,
+ "w": 1.25
+ },
+ {
+ "label": "K1B",
+ "x": 1.25,
+ "y": 3
+ },
+ {
+ "label": "K1C",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "K1D",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "K1E",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "K1F",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "K1G",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "K1H",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "K1I",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "K1J",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": "K1K",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "K1L",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "K1M",
+ "x": 12.25,
+ "y": 3,
+ "w": 1.75
+ },
+ {
+ "label": "K1O",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "K1P",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "K0A",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0B",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0C",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0D",
+ "x": 3.75,
+ "y": 4,
+ "w": 2.25
+ },
+ {
+ "label": "K0G",
+ "x": 6,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0I",
+ "x": 7.25,
+ "y": 4,
+ "w": 2.75
+ },
+ {
+ "label": "K0J",
+ "x": 10,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "K0M",
+ "x": 11.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "K0N",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "K0O",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "K0P",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ },
+ "LAYOUT_65_ansi": {
+ "layout": [
+ {
+ "label": "K4A",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "K4B",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "K4C",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "K4D",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "K4E",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "K4F",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "K4G",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "K4H",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "K4I",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "K4J",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": "K4K",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "K4L",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "K4M",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "K4O",
+ "x": 13,
+ "y": 0,
+ "w": 2
+ },
+ {
+ "label": "K4P",
+ "x": 15,
+ "y": 0
+ },
+ {
+ "label": "K3A",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "K3B",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "K3C",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "K3D",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "K3E",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "K3F",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "K3G",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "K3H",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "K3I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "K3J",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "K3K",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "K3L",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "K3M",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "K4N",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "K3P",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "K2A",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "K2B",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "K2C",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "K2D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "K2E",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "K2F",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "K2G",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "K2H",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K2I",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "K2J",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": "K2K",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "K2L",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "K2N",
+ "x": 12.75,
+ "y": 2,
+ "w": 2.25
+ },
+ {
+ "label": "K2P",
+ "x": 15,
+ "y": 2
+ },
+ {
+ "label": "K1A",
+ "x": 0,
+ "y": 3,
+ "w": 2.25
+ },
+ {
+ "label": "K1B",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "K1C",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "K1D",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "K1E",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "K1F",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "K1G",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "K1H",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "K1J",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": "K1K",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "K1L",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "K1M",
+ "x": 12.25,
+ "y": 3,
+ "w": 1.75
+ },
+ {
+ "label": "K1O",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "K1P",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "K0A",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0B",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0C",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0G",
+ "x": 3.75,
+ "y": 4,
+ "w": 6.25
+ },
+ {
+ "label": "K0J",
+ "x": 10,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "K0M",
+ "x": 11.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "K0N",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "K0O",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "K0P",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ },
+ "LAYOUT_65_ansi_split_bs": {
+ "layout": [
+ {
+ "label": "K4A",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "K4B",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "K4C",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "K4D",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "K4E",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "K4F",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "K4G",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "K4H",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "K4I",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "K4J",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": "K4K",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "K4L",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "K4M",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "K4N",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "K4O",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "label": "K4P",
+ "x": 15,
+ "y": 0
+ },
+ {
+ "label": "K3A",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "K3B",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "K3C",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "K3D",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "K3E",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "K3F",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "K3G",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "K3H",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "K3I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "K3J",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "K3K",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "K3L",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "K3M",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "K4N",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "K3P",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "K2A",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "K2B",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "K2C",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "K2D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "K2E",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "K2F",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "K2G",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "K2H",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K2I",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "K2J",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": "K2K",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "K2L",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "K2N",
+ "x": 12.75,
+ "y": 2,
+ "w": 2.25
+ },
+ {
+ "label": "K2P",
+ "x": 15,
+ "y": 2
+ },
+ {
+ "label": "K1A",
+ "x": 0,
+ "y": 3,
+ "w": 2.25
+ },
+ {
+ "label": "K1B",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "K1C",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "K1D",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "K1E",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "K1F",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "K1G",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "K1H",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "K1J",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": "K1K",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "K1L",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "K1M",
+ "x": 12.25,
+ "y": 3,
+ "w": 1.75
+ },
+ {
+ "label": "K1O",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "K1P",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "K0A",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0B",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0C",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "K0G",
+ "x": 3.75,
+ "y": 4,
+ "w": 6.25
+ },
+ {
+ "label": "K0J",
+ "x": 10,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "K0M",
+ "x": 11.5,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "K0N",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "K0O",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "K0P",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/leeku/finger65/keymaps/default/keymap.c b/keyboards/leeku/finger65/keymaps/default/keymap.c
new file mode 100644
index 0000000000..14a0f0c5c9
--- /dev/null
+++ b/keyboards/leeku/finger65/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE,
+ _FN,
+};
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ESC│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ( │ ) │ ` │BS │HOM│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PGU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┼───┤
+ * │ FUNC │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ENT │PGD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │ SHIFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SHIFT │UP │END│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │CTRL│GUI │ALT │ SPACE (6.25u) │ ALT │CTRL │LFT│DWN│RGT│
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_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,
+ TG(_FN), 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, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FN] = 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_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_INS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+};
diff --git a/keyboards/leeku/finger65/keymaps/madhatter/keymap.c b/keyboards/leeku/finger65/keymaps/madhatter/keymap.c
new file mode 100644
index 0000000000..f8d5a0f7bb
--- /dev/null
+++ b/keyboards/leeku/finger65/keymaps/madhatter/keymap.c
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _FNMS,
+};
+
+#define FNMS MO(_FNMS)
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───â”
+ * │ESC│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ( │ ) │ \ │ \ │HOM│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┼───┼───┤
+ * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BKSPC│PGU│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ ` │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │PGD│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ SHIFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SHIFT │UP │END│
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
+ * │CTRL │GUI│ ALT │ SPACE (6.25u) │ ALT │CTRL │LFT│DWN│RGT│
+ * └─────┴───┴─────┴───────────────────────┴─────┴─────┴───┴───┴───┘
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_65_ansi_split_bs(
+ 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_BSLS, 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_GRV, 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, FNMS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FNMS] = LAYOUT_65_ansi_split_bs(
+ 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,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 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
+ ),
+};
+
+// uint32_t layer_state_set_user(uint32_t state) {
+// switch(biton32(state)) {
+// case _FNMS:
+// led_off();
+// rgb_on();
+// break;
+// default:
+// led_off();
+// rgb_off();
+// break;
+// }
+// return state;
+// }
diff --git a/keyboards/leeku/finger65/keymaps/madhatter/rules.mk b/keyboards/leeku/finger65/keymaps/madhatter/rules.mk
new file mode 100644
index 0000000000..6c605daecf
--- /dev/null
+++ b/keyboards/leeku/finger65/keymaps/madhatter/rules.mk
@@ -0,0 +1 @@
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/leeku/finger65/readme.md b/keyboards/leeku/finger65/readme.md
new file mode 100644
index 0000000000..c27ce5d489
--- /dev/null
+++ b/keyboards/leeku/finger65/readme.md
@@ -0,0 +1,16 @@
+# 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 leeku/finger65:default
+
+Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
+
+ 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).
diff --git a/keyboards/leeku/finger65/rules.mk b/keyboards/leeku/finger65/rules.mk
new file mode 100644
index 0000000000..16ce59ecb1
--- /dev/null
+++ b/keyboards/leeku/finger65/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 = yes # 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
+NKRO_ENABLE = no # USB Nkey Rollover
+MIDI_ENABLE = no # MIDI support
diff --git a/keyboards/leeku/finger65/usbconfig.h b/keyboards/leeku/finger65/usbconfig.h
new file mode 100644
index 0000000000..48be890468
--- /dev/null
+++ b/keyboards/leeku/finger65/usbconfig.h
@@ -0,0 +1,364 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+
+/*
+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 'L', 'e', 'e', 'k', 'u'
+#define USB_CFG_VENDOR_NAME_LEN 5
+/* 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 'F', 'i', 'n', 'g', 'e', 'r', '6', '5'
+#define USB_CFG_DEVICE_NAME_LEN 8
+/* 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_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_REPORT USB_PROP_IS_DYNAMIC
+#define USB_CFG_DESCR_PROPS_UNKNOWN 0
+
+/* ----------------------- 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 */
+
+#endif /* __usbconfig_h_included__ */
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/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/default/keymap.c b/keyboards/lily58/keymaps/default/keymap.c
index b8dda17d53..f36248e12d 100644
--- a/keyboards/lily58/keymaps/default/keymap.c
+++ b/keyboards/lily58/keymaps/default/keymap.c
@@ -9,7 +9,6 @@
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
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/m10a/keymaps/default/keymap.c b/keyboards/m10a/keymaps/default/keymap.c
index 2322396099..570cf91833 100644
--- a/keyboards/m10a/keymaps/default/keymap.c
+++ b/keyboards/m10a/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/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/wasdat.c b/keyboards/maartenwut/wasdat/wasdat.c
index 11338634d4..a2ec320f78 100644
--- a/keyboards/maartenwut/wasdat/wasdat.c
+++ b/keyboards/maartenwut/wasdat/wasdat.c
@@ -29,30 +29,19 @@ void matrix_init_kb(void) {
void led_init_ports(void) {
setPinOutput(B0);
+ writePinHigh(B0);
setPinOutput(B1);
+ writePinHigh(B1);
setPinOutput(B2);
+ writePinHigh(B2);
}
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinLow(B0);
- } else {
- writePinHigh(B0);
- }
-
- if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
- writePinLow(B1);
- } else {
- writePinHigh(B1);
- }
-
- if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- writePinLow(B2);
- } else {
- writePinHigh(B2);
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(B0, !led_state.caps_lock);
+ writePin(B1, !led_state.scroll_lock);
+ writePin(B2, !led_state.num_lock);
}
- led_set_user(usb_led);
+ return true;
}
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/winkeyless/bminiex/i2c.h b/keyboards/massdrop/alt/keymaps/xulkal/config.h
index ada8cc7bf1..a078fece0f 100644
--- a/keyboards/winkeyless/bminiex/i2c.h
+++ b/keyboards/massdrop/alt/keymaps/xulkal/config.h
@@ -1,5 +1,8 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+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
@@ -15,11 +18,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// Please do not modify this file
-
#pragma once
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
+#define RGB_MATRIX_TOG_LAYERS
diff --git a/keyboards/massdrop/alt/keymaps/xulkal/keymap.c b/keyboards/massdrop/alt/keymaps/xulkal/keymap.c
new file mode 100644
index 0000000000..9fe1c8643a
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/xulkal/keymap.c
@@ -0,0 +1,79 @@
+#include QMK_KEYBOARD_H
+#include "xulkal.h"
+
+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
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+#define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, TD_BSPC, KC_HOME, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_PGDN, \
+ KC_LCPO, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LOWER, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+#ifndef GAMELAYER_DISABLE
+ [_GAME] = 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_HOME, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_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, LOWER, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+#endif
+
+ [_LOWER] = LAYOUT(
+ _______, RGB_RMOD,RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ RGB_SPI, RGB_SAI, RGB_VAI, RGB_HUI, RESET, QWERTY, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______, _______, \
+ RGB_SPD, RGB_SAD, RGB_VAD, RGB_HUD, RGBRST, GAME, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+};
+
+#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record)
+{
+ 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 DBG_TOG:
+ if (record->event.pressed)
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed)
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed)
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed)
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ return false;
+ }
+
+ return true;
+}
diff --git a/keyboards/massdrop/alt/keymaps/xulkal/rules.mk b/keyboards/massdrop/alt/keymaps/xulkal/rules.mk
new file mode 100644
index 0000000000..f78fb3237b
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/xulkal/rules.mk
@@ -0,0 +1 @@
+DISABLE_LTO = yes
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..9a0b2d8efa
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/README.md
@@ -0,0 +1,75 @@
+# Massdrop Ctrl Endgame
+
+This keymap is here to show some love to the MD Ctrl.
+
+## Layers
+
+### Typing Layer
+
+![Typing Layer](https://i.imgur.com/1uSVUdU.png)
+
+### Function Layer
+
+![Function Layer](https://i.imgur.com/rINs7ro.png)
+
+### Mouse Layer
+
+![Mouse Layer](https://i.imgur.com/IaS0nAB.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 and RCTRL are used for their respective keycodes at single tap and to send 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, IntelliJ, VIM, 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.
+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.
+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.
+
+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..cd9a56c820
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/config.h
@@ -0,0 +1,74 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+#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 PERMISSIVE_HOLD
+#define TAPPING_TERM 250
+
+#define TAP_HOLD_CAPS_DELAY 0
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// #define DISABLE_RGB_MATRIX_BAND_SAT
+// #define DISABLE_RGB_MATRIX_BAND_VAL
+// #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_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
+
+#define QMK_KEYS_PER_SCAN 4
+
+// #define RGB_MATRIX_KEYRELEASES
+
+// 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
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..a6e0c9f505
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/keymap.c
@@ -0,0 +1,421 @@
+#include QMK_KEYBOARD_H
+
+// Include for debugging.
+#include <print.h>
+
+#define MILLISECONDS_IN_SECOND 1000
+
+//========================================================== 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
+
+static uint16_t idle_timer; // Idle LED timeout timer
+static uint8_t idle_second_counter; // Idle LED seconds counter, counts seconds not milliseconds
+
+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;
+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;
+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 tapdance_keycodes {
+ TD_GUI_ML = 0, // Tap dance key to switch to mouse layer _ML
+ TD_LCTRL_TERM,
+ TD_RCTRL_TERM,
+};
+
+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,
+};
+
+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
+ _VL, // VIM Layout: VIM shorcuts and macros
+ _GL, // GIT Layout: GIT shortcuts and macros
+ _YL, // Yakuake Layout: Yakuake drop-down terminal shortcuts and macros
+ _EL, // KDE Layout: Shortcuts for KDE desktop using default KDE shortcuts settings
+};
+
+//Associate our tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_GUI_ML] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_LGUI, _ML),
+ [TD_LCTRL_TERM] = ACTION_TAP_DANCE_DOUBLE(KC_LCTRL, LCA(KC_T)),
+ [TD_RCTRL_TERM] = ACTION_TAP_DANCE_DOUBLE(KC_RCTRL, 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_LCTRL_TERM), TD(TD_GUI_ML), KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_APP, 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, _______, _______,
+ _______, RGB_M_P, _______, _______, _______, _______, _______, _______, _______, ROUT_FM, ROUT_TG, ROUT_VD, ROUT_VI, _______, KC_MSTP, KC_MPLY, 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, _______, COPY_ALL, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_BRIU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, 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, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______,
+ _______, TD(TD_GUI_ML), _______, _______, _______, _______, TG(_ML), _______, _______, _______, _______
+ ),
+ /*
+ [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
+ ),
+ */
+};
+
+// 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;
+ rgb_time_out_seconds = RGB_DEFAULT_TIME_OUT;
+ rgb_time_out_enable = true;
+ rgb_enabled_flag = true;
+ rgb_time_out_user_value = true;
+ rgb_time_out_fast_mode_enabled = false;
+ rgb_time_out_saved_flag = rgb_matrix_get_flags();
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ if(rgb_time_out_enable && rgb_enabled_flag) {
+ 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;
+
+ 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 DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ case RGB_TOG:
+ if (record->event.pressed) {
+ 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:
+ if (record->event.pressed) {
+ // 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
+ if (record->event.pressed) {
+ 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
+ if (record->event.pressed) {
+ 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
+ if (record->event.pressed) {
+ // 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
+ if (record->event.pressed) {
+ // 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 (record->event.pressed) {
+ 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;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
+
+void rgb_matrix_indicators_user(void) {
+ /*
+ [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
+ )
+ */
+ if (!g_suspend_state && rgb_matrix_config.enable) {
+ switch (biton32(layer_state)) {
+ case _FL: {
+ /*
+ [_FL] = LAYOUT(
+ _______, DM_PLY1, DM_PLY2, _______, _______, DM_REC1, DM_REC2, _______, _______, DM_RSTP, _______, KC_WAKE, KC_SLEP, KC_MUTE, _______, _______,
+ _______, RGB_M_P, _______, _______, _______, _______, _______, _______, _______, ROUT_FM, ROUT_TG, ROUT_VD, ROUT_VI, _______, KC_MSTP, KC_MPLY, 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, _______, COPY_ALL, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_BRIU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRID, _______
+ )
+ */
+
+ // Function key. Color code #ffc100
+ rgb_matrix_set_color(81, 0xff, 0xc1, 0x00);
+ // Sleep and Wake. Color code #aeb0b0
+ rgb_matrix_set_color(11, 0xae, 0xb0, 0xb0);
+ rgb_matrix_set_color(12, 0xae, 0xb0, 0xb0);
+ // Power Control Keys. Color code #cb2f2a
+ rgb_matrix_set_color(40, 0xcb, 0x2f, 0x2a);
+ rgb_matrix_set_color(41, 0xcb, 0x2f, 0x2a);
+ rgb_matrix_set_color(74, 0xcb, 0x2f, 0x2a);
+ rgb_matrix_set_color(83, 0xcb, 0x2f, 0x2a);
+ // Keyboard Control Keys. Color code #f4791e
+ rgb_matrix_set_color(68, 0xf4, 0x79, 0x1e);
+ rgb_matrix_set_color(69, 0xf4, 0x79, 0x1e);
+ // Copy All Key. Color Code #45b866
+ rgb_matrix_set_color(66, 0x45, 0xb8, 0x66);
+ // Brightness Keys. Color code #aeb0b0
+ rgb_matrix_set_color(75, 0xae, 0xb0, 0xb0);
+ rgb_matrix_set_color(85, 0xae, 0xb0, 0xb0);
+ // RGB Timeout Keys. Color code #34a4b9
+ rgb_matrix_set_color(25, 0x34, 0xa3, 0xb9);
+ rgb_matrix_set_color(26, 0x34, 0xa3, 0xb9);
+ rgb_matrix_set_color(27, 0x34, 0xa3, 0xb9);
+ rgb_matrix_set_color(28, 0x34, 0xa3, 0xb9);
+ // Media Keys. Color code #51c0dd
+ rgb_matrix_set_color(13, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(30, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(31, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(32, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(47, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(48, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(49, 0x51, 0xc0, 0xdd);
+ // RBG Control Keys. Color code #2790c2
+ rgb_matrix_set_color(17, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(34, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(35, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(36, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(37, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(38, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(51, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(52, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(53, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(54, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(55, 0x27, 0x90, 0xc2);
+ rgb_matrix_set_color(64, 0x27, 0x90, 0xc2);
+ // Dynamic Macro Keys. Color code #45b866
+ rgb_matrix_set_color(1, 0x45, 0xb8, 0x66);
+ rgb_matrix_set_color(2, 0x45, 0xb8, 0x66);
+ rgb_matrix_set_color(5, 0x45, 0xb8, 0x66);
+ rgb_matrix_set_color(6, 0x45, 0xb8, 0x66);
+ rgb_matrix_set_color(9, 0x45, 0xb8, 0x66);
+ }
+ break;
+ case _ML: {
+ /*
+ [_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, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______,
+ _______, TD(TD_GUI_ML), _______, _______, _______, _______, TG(_ML), _______, _______, _______, _______
+ )
+ */
+
+ // Mouse movement keys. Color code #51c0dd
+ rgb_matrix_set_color(35, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(51, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(52, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(53, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(54, 0x51, 0xc0, 0xdd);
+ rgb_matrix_set_color(37, 0x51, 0xc0, 0xdd);
+ // Mouse Button keys. Color code #009bca
+ rgb_matrix_set_color(17, 0x00, 0x9b, 0xca);
+ rgb_matrix_set_color(18, 0x00, 0x9b, 0xca);
+ rgb_matrix_set_color(19, 0x00, 0x9b, 0xca);
+ rgb_matrix_set_color(34, 0x00, 0x9b, 0xca);
+ rgb_matrix_set_color(36, 0x00, 0x9b, 0xca);
+ // Mouse acceleration control. Color code #5dcde3
+ rgb_matrix_set_color(1, 0x5d, 0xcd, 0xe3);
+ rgb_matrix_set_color(2, 0x5d, 0xcd, 0xe3);
+ rgb_matrix_set_color(3, 0x5d, 0xcd, 0xe3);
+ // Layer toggle keys. Color code #ffc100
+ rgb_matrix_set_color(77, 0xff, 0xc1, 0x00);
+ rgb_matrix_set_color(82, 0xff, 0xc1, 0x00);
+ // Select copy key. Color code #45b866
+ rgb_matrix_set_color(66, 0x45, 0xb8, 0x66);
+ // NKRO key. Color code #f4791e
+ rgb_matrix_set_color(69, 0xf4, 0x79, 0x1e);
+ }
+ break;
+ }
+ }
+}
diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/rules.mk b/keyboards/massdrop/ctrl/keymaps/endgame/rules.mk
new file mode 100644
index 0000000000..2a599810f8
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/endgame/rules.mk
@@ -0,0 +1,12 @@
+# NKRO_ENABLE = yes # USB Nkey Rollover
+# AUTO_SHIFT_ENABLE = yes # Auto Shift
+# # RGBLIGHT_ENABLE is not for MD boards. This is here in case you forget.
+# RGBLIGHT_ENABLE = no
+# COMMAND_ENABLE = yes
+# BOOTMAGIC_ENABLE = full
+# BOOTMAGIC_ENABLE = lite
+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
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/nk65/boards/GENERIC_STM32_F303XC/board.c b/keyboards/matrix/noah/boards/noah_bd/board.c
index 4331155df4..7fd6a60b5f 100755..100644
--- a/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.c
+++ b/keyboards/matrix/noah/boards/noah_bd/board.c
@@ -14,6 +14,11 @@
limitations under the License.
*/
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
#include "hal.h"
#if HAL_USE_PAL || defined(__DOXYGEN__)
diff --git a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h b/keyboards/matrix/noah/boards/noah_bd/board.h
index ec26557f3a..37d1d13623 100644
--- a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h
+++ b/keyboards/matrix/noah/boards/noah_bd/board.h
@@ -14,18 +14,24 @@
limitations under the License.
*/
-#ifndef _BOARD_H_
-#define _BOARD_H_
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#ifndef BOARD_H
+#define BOARD_H
/*
- * Setup for Clueboard 60% Keyboard
+ * Setup for Matrix M65 board.
*/
/*
* Board identifier.
*/
-#define BOARD_GENERIC_STM32_F303XC
-#define BOARD_NAME "Planck PCB"
+#define BOARD_MATRIX_NOAH
+#define BOARD_NAME "Matrix noah65 keyboard"
+#define BOARD_OTG_NOVBUSSENS
/*
* Board oscillators-related settings.
@@ -35,172 +41,211 @@
#define STM32_LSECLK 0U
#endif
-#define STM32_LSEDRV (3U << 3U)
-
#if !defined(STM32_HSECLK)
#define STM32_HSECLK 8000000U
#endif
-// #define STM32_HSE_BYPASS
+//#define STM32_HSE_BYPASS
+
+/*
+ * Board voltages.
+ * Required for performance limits calculation.
+ */
+#define STM32_VDD 300U
/*
* MCU type as defined in the ST header.
*/
-#define STM32F303xC
+#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_PIN5 5U
-#define GPIOA_PIN6 6U
-#define GPIOA_PIN7 7U
-#define GPIOA_PIN8 8U
-#define GPIOA_PIN9 9U
-#define GPIOA_PIN10 10U
-#define GPIOA_USB_DM 11U
-#define GPIOA_USB_DP 12U
-#define GPIOA_SWDIO 13U
-#define GPIOA_SWCLK 14U
-#define GPIOA_PIN15 15U
+#define 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_PIN3 3U
-#define GPIOB_PIN4 4U
-#define GPIOB_PIN5 5U
-#define GPIOB_PIN6 6U
-#define GPIOB_PIN7 7U
-#define GPIOB_PIN8 8U
-#define GPIOB_PIN9 9U
-#define GPIOB_PIN10 10U
-#define GPIOB_PIN11 11U
-#define GPIOB_PIN12 12U
-#define GPIOB_PIN13 13U
-#define GPIOB_PIN14 14U
-#define GPIOB_PIN15 15U
+#define 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 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 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 GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
-#define GPIOF_I2C2_SDA 0U
-#define GPIOF_I2C2_SCL 1U
-#define GPIOF_PIN2 2U
-#define GPIOF_PIN3 3U
-#define GPIOF_PIN4 4U
-#define GPIOF_PIN5 5U
-#define GPIOF_PIN6 6U
-#define GPIOF_PIN7 7U
-#define GPIOF_PIN8 8U
-#define GPIOF_PIN9 9U
-#define GPIOF_PIN10 10U
-#define GPIOF_PIN11 11U
-#define GPIOF_PIN12 12U
-#define GPIOF_PIN13 13U
-#define GPIOF_PIN14 14U
-#define GPIOF_PIN15 15U
+#define 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 GPIOG_PIN0 0U
+#define GPIOG_PIN1 1U
+#define GPIOG_PIN2 2U
+#define GPIOG_PIN3 3U
+#define GPIOG_PIN4 4U
+#define GPIOG_PIN5 5U
+#define GPIOG_PIN6 6U
+#define GPIOG_PIN7 7U
+#define GPIOG_PIN8 8U
+#define GPIOG_PIN9 9U
+#define GPIOG_PIN10 10U
+#define GPIOG_PIN11 11U
+#define GPIOG_PIN12 12U
+#define GPIOG_PIN13 13U
+#define GPIOG_PIN14 14U
+#define GPIOG_PIN15 15U
-#define GPIOH_PIN0 0U
-#define GPIOH_PIN1 1U
-#define GPIOH_PIN2 2U
-#define GPIOH_PIN3 3U
-#define GPIOH_PIN4 4U
-#define GPIOH_PIN5 5U
-#define GPIOH_PIN6 6U
-#define GPIOH_PIN7 7U
-#define GPIOH_PIN8 8U
-#define GPIOH_PIN9 9U
-#define GPIOH_PIN10 10U
-#define GPIOH_PIN11 11U
-#define GPIOH_PIN12 12U
-#define GPIOH_PIN13 13U
-#define GPIOH_PIN14 14U
-#define GPIOH_PIN15 15U
+#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_L3GD20_SDI PAL_LINE(GPIOA, 7U)
-#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
-#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
-#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
-#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
-
-#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
-#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
+#define LINE_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_CAPS_LOCK PAL_LINE(GPIOB, 7U)
+#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
@@ -227,353 +272,353 @@
/*
* GPIOA setup:
*
- * PA0 - NC
- * PA1 - NC
- * PA2 - COL1
- * PA3 - COL2
- * PA4 - SPEAKER1
- * PA5 - SPEAKER2
- * PA6 - COL3
- * PA7 - COL8
- * PA8 - COL6
- * PA9 - COL7
- * PA10 - ROW5
- * PA11 - USB_DM (alternate 14).
- * PA12 - USB_DP (alternate 14).
+ * 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 - ROW4
+ * PA15 - (input pullup).
*/
#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
- PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
- PIN_MODE_INPUT(GPIOA_PIN2) | \
- PIN_MODE_INPUT(GPIOA_PIN3) | \
- PIN_MODE_INPUT(GPIOA_PIN4) | \
- PIN_MODE_INPUT(GPIOA_PIN5) | \
- PIN_MODE_INPUT(GPIOA_PIN6) | \
- PIN_MODE_INPUT(GPIOA_PIN7) | \
- PIN_MODE_INPUT(GPIOA_PIN8) | \
- PIN_MODE_INPUT(GPIOA_PIN9) | \
- PIN_MODE_INPUT(GPIOA_PIN10) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
+ PIN_MODE_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_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_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_HIGH(GPIOA_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
- PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
- PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
+#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_FLOATING(GPIOA_PIN0) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
+#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_PIN5) | \
- PIN_ODR_HIGH(GPIOA_PIN6) | \
- PIN_ODR_HIGH(GPIOA_PIN7) | \
- PIN_ODR_HIGH(GPIOA_PIN8) | \
- PIN_ODR_HIGH(GPIOA_PIN9) | \
- PIN_ODR_HIGH(GPIOA_PIN10) | \
- PIN_ODR_HIGH(GPIOA_USB_DM) | \
- PIN_ODR_HIGH(GPIOA_USB_DP) | \
+ PIN_ODR_HIGH(GPIOA_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, 0) | \
- PIN_AFIO_AF(GPIOA_PIN1, 1) | \
- PIN_AFIO_AF(GPIOA_PIN2, 0) | \
- PIN_AFIO_AF(GPIOA_PIN3, 0) | \
- PIN_AFIO_AF(GPIOA_PIN4, 0) | \
- PIN_AFIO_AF(GPIOA_PIN5, 5) | \
- PIN_AFIO_AF(GPIOA_PIN6, 5) | \
- PIN_AFIO_AF(GPIOA_PIN7, 5))
-#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
- PIN_AFIO_AF(GPIOA_PIN9, 0) | \
- PIN_AFIO_AF(GPIOA_PIN10, 0) | \
- PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
- PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
- PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
- PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
- PIN_AFIO_AF(GPIOA_PIN15, 0))
+#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 - PIN0 (input pullup).
- * PB1 - PIN1 (input pullup).
- * PB2 - PIN2 (input pullup).
- * PB3 - PIN3 (alternate 0).
- * PB4 - PIN4 (input pullup).
- * PB5 - PIN5 (input pullup).
- * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
- * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
- * PB8 - PIN8 (input pullup).
- * PB9 - PIN9 (input pullup).
- * PB10 - PIN10 (input pullup).
- * PB11 - PIN11 (input pullup).
- * PB12 - PIN12 (input pullup).
- * PB13 - PIN13 (input pullup).
- * PB14 - PIN14 (input pullup).
- * PB15 - PIN15 (input pullup).
+ * 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) | \
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
PIN_MODE_INPUT(GPIOB_PIN1) | \
PIN_MODE_INPUT(GPIOB_PIN2) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
- PIN_MODE_INPUT(GPIOB_PIN4) | \
- PIN_MODE_INPUT(GPIOB_PIN5) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
- PIN_MODE_OUTPUT(GPIOB_PIN7) | \
- PIN_MODE_INPUT(GPIOB_PIN8) | \
- PIN_MODE_INPUT(GPIOB_PIN9) | \
- PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_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) | \
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
- PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_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_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
- PIN_OSPEED_HIGH(GPIOB_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+#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_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) | \
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
- PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_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) | \
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
PIN_ODR_HIGH(GPIOB_PIN1) | \
PIN_ODR_HIGH(GPIOB_PIN2) | \
- PIN_ODR_HIGH(GPIOB_PIN3) | \
- PIN_ODR_HIGH(GPIOB_PIN4) | \
- PIN_ODR_HIGH(GPIOB_PIN5) | \
- PIN_ODR_HIGH(GPIOB_PIN6) | \
- PIN_ODR_LOW(GPIOB_PIN7) | \
- PIN_ODR_HIGH(GPIOB_PIN8) | \
- PIN_ODR_HIGH(GPIOB_PIN9) | \
- PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_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, 0) | \
- PIN_AFIO_AF(GPIOB_PIN1, 0) | \
- PIN_AFIO_AF(GPIOB_PIN2, 0) | \
- PIN_AFIO_AF(GPIOB_PIN3, 0) | \
- PIN_AFIO_AF(GPIOB_PIN4, 0) | \
- PIN_AFIO_AF(GPIOB_PIN5, 0) | \
- PIN_AFIO_AF(GPIOB_PIN6, 4) | \
- PIN_AFIO_AF(GPIOB_PIN7, 0))
-#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
- PIN_AFIO_AF(GPIOB_PIN9, 0) | \
- PIN_AFIO_AF(GPIOB_PIN10, 0) | \
- PIN_AFIO_AF(GPIOB_PIN11, 0) | \
- PIN_AFIO_AF(GPIOB_PIN12, 0) | \
- PIN_AFIO_AF(GPIOB_PIN13, 0) | \
- PIN_AFIO_AF(GPIOB_PIN14, 0) | \
- PIN_AFIO_AF(GPIOB_PIN15, 0))
+#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 - PIN0 (input pullup).
- * PC1 - PIN1 (input pullup).
- * PC2 - PIN2 (input pullup).
- * PC3 - PIN3 (input pullup).
- * PC4 - PIN4 (input pullup).
- * PC5 - PIN5 (input pullup).
- * PC6 - PIN6 (input pullup).
- * PC7 - PIN7 (input pullup).
- * PC8 - PIN8 (input pullup).
- * PC9 - PIN9 (input pullup).
- * PC10 - PIN10 (input pullup).
- * PC11 - PIN11 (input pullup).
- * PC12 - PIN12 (input pullup).
- * PC13 - PIN13 (input pullup).
- * PC14 - PIN14 (input floating).
- * PC15 - PIN15 (input floating).
+ * 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) | \
+#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_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_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) | \
+#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_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_PIN13) | \
PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
-#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
- PIN_OSPEED_HIGH(GPIOC_PIN14) | \
- PIN_OSPEED_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+#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_PIN7) | \
PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN15))
-#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
- PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_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_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_PIN13) | \
PIN_ODR_HIGH(GPIOC_PIN14) | \
PIN_ODR_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
- PIN_AFIO_AF(GPIOC_PIN1, 0) | \
- PIN_AFIO_AF(GPIOC_PIN2, 0) | \
- PIN_AFIO_AF(GPIOC_PIN3, 0) | \
- PIN_AFIO_AF(GPIOC_PIN4, 0) | \
- PIN_AFIO_AF(GPIOC_PIN5, 0) | \
- PIN_AFIO_AF(GPIOC_PIN6, 0) | \
- PIN_AFIO_AF(GPIOC_PIN7, 0))
-#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
- PIN_AFIO_AF(GPIOC_PIN9, 0) | \
- PIN_AFIO_AF(GPIOC_PIN10, 0) | \
- PIN_AFIO_AF(GPIOC_PIN11, 0) | \
- PIN_AFIO_AF(GPIOC_PIN12, 0) | \
- PIN_AFIO_AF(GPIOC_PIN13, 0) | \
- PIN_AFIO_AF(GPIOC_PIN14, 0) | \
- PIN_AFIO_AF(GPIOC_PIN15, 0))
+#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:
@@ -588,7 +633,7 @@
* PD7 - PIN7 (input pullup).
* PD8 - PIN8 (input pullup).
* PD9 - PIN9 (input pullup).
- * PD11 - PIN10 (input pullup).
+ * PD10 - PIN10 (input pullup).
* PD11 - PIN11 (input pullup).
* PD12 - PIN12 (input pullup).
* PD13 - PIN13 (input pullup).
@@ -627,22 +672,22 @@
PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
-#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_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) | \
@@ -675,145 +720,145 @@
PIN_ODR_HIGH(GPIOD_PIN13) | \
PIN_ODR_HIGH(GPIOD_PIN14) | \
PIN_ODR_HIGH(GPIOD_PIN15))
-#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
- PIN_AFIO_AF(GPIOD_PIN1, 0) | \
- PIN_AFIO_AF(GPIOD_PIN2, 0) | \
- PIN_AFIO_AF(GPIOD_PIN3, 0) | \
- PIN_AFIO_AF(GPIOD_PIN4, 0) | \
- PIN_AFIO_AF(GPIOD_PIN5, 0) | \
- PIN_AFIO_AF(GPIOD_PIN6, 0) | \
- PIN_AFIO_AF(GPIOD_PIN7, 0))
-#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
- PIN_AFIO_AF(GPIOD_PIN9, 0) | \
- PIN_AFIO_AF(GPIOD_PIN10, 0) | \
- PIN_AFIO_AF(GPIOD_PIN11, 0) | \
- PIN_AFIO_AF(GPIOD_PIN12, 0) | \
- PIN_AFIO_AF(GPIOD_PIN13, 0) | \
- PIN_AFIO_AF(GPIOD_PIN14, 0) | \
- PIN_AFIO_AF(GPIOD_PIN15, 0))
+#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 L3GD20_CS (output pushpull maximum).
- * PE4 - PIN4 (input pullup).
- * PE5 - PIN5 (input pullup).
+ * 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 (output pushpull maximum).
- * PE9 - PIN9 (output pushpull maximum).
- * PE10 - PIN10 (output pushpull maximum).
- * PE11 - PIN11 (output pushpull maximum).
- * PE12 - PIN12 (output pushpull maximum).
- * PE13 - PIN13 (output pushpull maximum).
- * PE14 - PIN14 (output pushpull maximum).
- * PE15 - PIN15 (output pushpull maximum).
+ * 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_OUTPUT(GPIOE_PIN3) | \
- PIN_MODE_INPUT(GPIOE_PIN4) |\
- PIN_MODE_INPUT(GPIOE_PIN5) |\
+#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_OUTPUT(GPIOE_PIN8) | \
- PIN_MODE_OUTPUT(GPIOE_PIN9) | \
- PIN_MODE_OUTPUT(GPIOE_PIN10) | \
- PIN_MODE_OUTPUT(GPIOE_PIN11) | \
- PIN_MODE_OUTPUT(GPIOE_PIN12) | \
- PIN_MODE_OUTPUT(GPIOE_PIN13) | \
- PIN_MODE_OUTPUT(GPIOE_PIN14) | \
- PIN_MODE_OUTPUT(GPIOE_PIN15))
-#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
+ PIN_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_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \
PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
-#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
- PIN_OSPEED_HIGH(GPIOE_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
- PIN_OSPEED_HIGH(GPIOE_PIN8) | \
- PIN_OSPEED_HIGH(GPIOE_PIN9) | \
- PIN_OSPEED_HIGH(GPIOE_PIN10) | \
- PIN_OSPEED_HIGH(GPIOE_PIN11) | \
- PIN_OSPEED_HIGH(GPIOE_PIN12) | \
- PIN_OSPEED_HIGH(GPIOE_PIN13) | \
- PIN_OSPEED_HIGH(GPIOE_PIN14) | \
+#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_FLOATING(GPIOE_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
+#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_FLOATING(GPIOE_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN15))
-#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
- PIN_ODR_HIGH(GPIOE_PIN1) | \
- PIN_ODR_HIGH(GPIOE_PIN2) | \
- PIN_ODR_HIGH(GPIOE_PIN3) | \
- PIN_ODR_HIGH(GPIOE_PIN4) | \
- PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_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_LOW(GPIOE_PIN8) | \
- PIN_ODR_LOW(GPIOE_PIN9) | \
- PIN_ODR_LOW(GPIOE_PIN10) | \
- PIN_ODR_LOW(GPIOE_PIN11) | \
- PIN_ODR_LOW(GPIOE_PIN12) | \
- PIN_ODR_LOW(GPIOE_PIN13) | \
- PIN_ODR_LOW(GPIOE_PIN14) | \
- PIN_ODR_LOW(GPIOE_PIN15))
-#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
- PIN_AFIO_AF(GPIOE_PIN1, 0) | \
- PIN_AFIO_AF(GPIOE_PIN2, 0) |\
- PIN_AFIO_AF(GPIOE_PIN3, 0) | \
- PIN_AFIO_AF(GPIOE_PIN4, 0) |\
- PIN_AFIO_AF(GPIOE_PIN5, 0) |\
- PIN_AFIO_AF(GPIOE_PIN6, 0) | \
- PIN_AFIO_AF(GPIOE_PIN7, 0))
-#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
- PIN_AFIO_AF(GPIOE_PIN9, 0) | \
- PIN_AFIO_AF(GPIOE_PIN10, 0) | \
- PIN_AFIO_AF(GPIOE_PIN11, 0) | \
- PIN_AFIO_AF(GPIOE_PIN12, 0) | \
- PIN_AFIO_AF(GPIOE_PIN13, 0) | \
- PIN_AFIO_AF(GPIOE_PIN14, 0) | \
- PIN_AFIO_AF(GPIOE_PIN15, 0))
+ 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 - I2C2_SDA (input floating).
- * PF1 - I2C2_SCL (input floating).
+ * PF0 - PIN0 (input pullup).
+ * PF1 - PIN1 (input pullup).
* PF2 - PIN2 (input pullup).
* PF3 - PIN3 (input pullup).
* PF4 - PIN4 (input pullup).
@@ -829,8 +874,8 @@
* PF14 - PIN14 (input pullup).
* PF15 - PIN15 (input pullup).
*/
-#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
- PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
+#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) | \
@@ -845,8 +890,8 @@
PIN_MODE_INPUT(GPIOF_PIN13) | \
PIN_MODE_INPUT(GPIOF_PIN14) | \
PIN_MODE_INPUT(GPIOF_PIN15))
-#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
- PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
+#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) | \
@@ -861,24 +906,24 @@
PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
-#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
- PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN15))
-#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
- PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
+#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) | \
@@ -893,8 +938,8 @@
PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
PIN_PUPDR_PULLUP(GPIOF_PIN15))
-#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
- PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
+#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) | \
@@ -909,22 +954,22 @@
PIN_ODR_HIGH(GPIOF_PIN13) | \
PIN_ODR_HIGH(GPIOF_PIN14) | \
PIN_ODR_HIGH(GPIOF_PIN15))
-#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
- PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
- PIN_AFIO_AF(GPIOF_PIN2, 0) | \
- PIN_AFIO_AF(GPIOF_PIN3, 0) | \
- PIN_AFIO_AF(GPIOF_PIN4, 0) | \
- PIN_AFIO_AF(GPIOF_PIN5, 0) | \
- PIN_AFIO_AF(GPIOF_PIN6, 0) | \
- PIN_AFIO_AF(GPIOF_PIN7, 0))
-#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
- PIN_AFIO_AF(GPIOF_PIN9, 0) | \
- PIN_AFIO_AF(GPIOF_PIN10, 0) | \
- PIN_AFIO_AF(GPIOF_PIN11, 0) | \
- PIN_AFIO_AF(GPIOF_PIN12, 0) | \
- PIN_AFIO_AF(GPIOF_PIN13, 0) | \
- PIN_AFIO_AF(GPIOF_PIN14, 0) | \
- PIN_AFIO_AF(GPIOF_PIN15, 0))
+#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:
@@ -978,22 +1023,22 @@
PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
-#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN15))
+#define VAL_GPIOG_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) | \
@@ -1026,28 +1071,28 @@
PIN_ODR_HIGH(GPIOG_PIN13) | \
PIN_ODR_HIGH(GPIOG_PIN14) | \
PIN_ODR_HIGH(GPIOG_PIN15))
-#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
- PIN_AFIO_AF(GPIOG_PIN1, 0) | \
- PIN_AFIO_AF(GPIOG_PIN2, 0) | \
- PIN_AFIO_AF(GPIOG_PIN3, 0) | \
- PIN_AFIO_AF(GPIOG_PIN4, 0) | \
- PIN_AFIO_AF(GPIOG_PIN5, 0) | \
- PIN_AFIO_AF(GPIOG_PIN6, 0) | \
- PIN_AFIO_AF(GPIOG_PIN7, 0))
-#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
- PIN_AFIO_AF(GPIOG_PIN9, 0) | \
- PIN_AFIO_AF(GPIOG_PIN10, 0) | \
- PIN_AFIO_AF(GPIOG_PIN11, 0) | \
- PIN_AFIO_AF(GPIOG_PIN12, 0) | \
- PIN_AFIO_AF(GPIOG_PIN13, 0) | \
- PIN_AFIO_AF(GPIOG_PIN14, 0) | \
- PIN_AFIO_AF(GPIOG_PIN15, 0))
+#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 - PIN0 (input pullup).
- * PH1 - PIN1 (input pullup).
+ * PH0 - OSC_IN (input floating).
+ * PH1 - OSC_OUT (input floating).
* PH2 - PIN2 (input pullup).
* PH3 - PIN3 (input pullup).
* PH4 - PIN4 (input pullup).
@@ -1063,8 +1108,8 @@
* PH14 - PIN14 (input pullup).
* PH15 - PIN15 (input pullup).
*/
-#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
- PIN_MODE_INPUT(GPIOH_PIN1) | \
+#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) | \
@@ -1079,8 +1124,8 @@
PIN_MODE_INPUT(GPIOH_PIN13) | \
PIN_MODE_INPUT(GPIOH_PIN14) | \
PIN_MODE_INPUT(GPIOH_PIN15))
-#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
+#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) | \
@@ -1095,24 +1140,24 @@
PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
-#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN15))
-#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
+#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) | \
@@ -1127,8 +1172,8 @@
PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
PIN_PUPDR_PULLUP(GPIOH_PIN15))
-#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
- PIN_ODR_HIGH(GPIOH_PIN1) | \
+#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) | \
@@ -1143,36 +1188,140 @@
PIN_ODR_HIGH(GPIOH_PIN13) | \
PIN_ODR_HIGH(GPIOH_PIN14) | \
PIN_ODR_HIGH(GPIOH_PIN15))
-#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
- PIN_AFIO_AF(GPIOH_PIN1, 0) | \
- PIN_AFIO_AF(GPIOH_PIN2, 0) | \
- PIN_AFIO_AF(GPIOH_PIN3, 0) | \
- PIN_AFIO_AF(GPIOH_PIN4, 0) | \
- PIN_AFIO_AF(GPIOH_PIN5, 0) | \
- PIN_AFIO_AF(GPIOH_PIN6, 0) | \
- PIN_AFIO_AF(GPIOH_PIN7, 0))
-#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
- PIN_AFIO_AF(GPIOH_PIN9, 0) | \
- PIN_AFIO_AF(GPIOH_PIN10, 0) | \
- PIN_AFIO_AF(GPIOH_PIN11, 0) | \
- PIN_AFIO_AF(GPIOH_PIN12, 0) | \
- PIN_AFIO_AF(GPIOH_PIN13, 0) | \
- PIN_AFIO_AF(GPIOH_PIN14, 0) | \
- PIN_AFIO_AF(GPIOH_PIN15, 0))
-
+#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))
/*
- * USB bus activation macro, required by the USB driver.
- */
-// #define usb_lld_connect_bus(usbp)
-#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
-// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
-/*
- * USB bus de-activation macro, required by the USB driver.
+ * 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 usb_lld_disconnect_bus(usbp)
-#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
-// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
+#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
@@ -1184,4 +1333,4 @@ extern "C" {
#endif
#endif /* _FROM_ASM_ */
-#endif /* _BOARD_H_ */
+#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/nk65/bootloader_defs.h b/keyboards/matrix/noah/bootloader_defs.h
index 3b0e9d20a6..20b8f73e6f 100755..100644
--- a/keyboards/nk65/bootloader_defs.h
+++ b/keyboards/matrix/noah/bootloader_defs.h
@@ -4,4 +4,4 @@
* This also requires a patch to chibios:
* <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
*/
-#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
+#define STM32_BOOTLOADER_ADDRESS 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/i2c.c b/keyboards/mechmini/v1/i2c.c
deleted file mode 100644
index c27f3e3d17..0000000000
--- a/keyboards/mechmini/v1/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 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/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/mechmini/v1/rules.mk b/keyboards/mechmini/v1/rules.mk
index 3510ca6f3f..ee023b43ba 100644
--- a/keyboards/mechmini/v1/rules.mk
+++ b/keyboards/mechmini/v1/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
@@ -34,10 +19,10 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
diff --git a/keyboards/mechmini/v1/usbconfig.h b/keyboards/mechmini/v1/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/mechmini/v1/usbconfig.h
+++ b/keyboards/mechmini/v1/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/mechmini/v1/v1.c b/keyboards/mechmini/v1/v1.c
index 508d60c784..2c910d9658 100644
--- a/keyboards/mechmini/v1/v1.c
+++ b/keyboards/mechmini/v1/v1.c
@@ -16,61 +16,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "v1.h"
-#include <avr/pgmspace.h>
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
-#include "rgblight.h"
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
+void matrix_init_kb(void) { matrix_init_user(); }
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
+__attribute__ ((weak))
+void matrix_init_user(void) {}
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
+void matrix_scan_kb(void) { matrix_scan_user(); }
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
-void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__((weak)) // overridable
-void matrix_init_user(void) {
-
-}
-
-
-__attribute__((weak)) // overridable
-void matrix_scan_user(void) {
-
-}
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
diff --git a/keyboards/mehkee96/config.h b/keyboards/mehkee96/config.h
index 334358aad1..4adfcc86b9 100644
--- a/keyboards/mehkee96/config.h
+++ b/keyboards/mehkee96/config.h
@@ -5,6 +5,7 @@
/* USB Device descriptor parameter */
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER mehkee
#define PRODUCT 96kee
diff --git a/keyboards/mehkee96/i2c.c b/keyboards/mehkee96/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/mehkee96/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/mehkee96/mehkee96.c b/keyboards/mehkee96/mehkee96.c
index 604fad8032..46427ec93b 100644
--- a/keyboards/mehkee96/mehkee96.c
+++ b/keyboards/mehkee96/mehkee96.c
@@ -16,66 +16,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "mehkee96.h"
-#include "rgblight.h"
-#include <avr/pgmspace.h>
+void matrix_init_kb(void) { matrix_init_user(); }
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
+__attribute__ ((weak))
+void matrix_init_user(void) {}
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
+void matrix_scan_kb(void) { matrix_scan_user(); }
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
-#ifdef RGBLIGHT_ANIMATION
- rgblight_task();
-#endif
-
-#else
-void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__((weak)) // overridable
-void matrix_init_user(void) {
-
-}
-
-
-__attribute__((weak)) // overridable
-void matrix_scan_user(void) {
-
-}
+__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 244dd2141e..1cbd02948f 100644
--- a/keyboards/mehkee96/rules.mk
+++ b/keyboards/mehkee96/rules.mk
@@ -21,10 +21,10 @@ CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
diff --git a/keyboards/mehkee96/usbconfig.h b/keyboards/mehkee96/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/mehkee96/usbconfig.h
+++ b/keyboards/mehkee96/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/minidox/keymaps/default/keymap.c b/keyboards/minidox/keymaps/default/keymap.c
index 6cc78cce1d..03731082c9 100644
--- a/keyboards/minidox/keymaps/default/keymap.c
+++ b/keyboards/minidox/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/mint60/keymaps/default/keymap.c b/keyboards/mint60/keymaps/default/keymap.c
index fde64d8def..0c65f73c7e 100644
--- a/keyboards/mint60/keymaps/default/keymap.c
+++ b/keyboards/mint60/keymaps/default/keymap.c
@@ -19,7 +19,6 @@
#include "split_util.h"
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
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 485acfd3e2..7dbfaf0cfb 100644
--- a/keyboards/model01/keymaps/dshields/keymap.c
+++ b/keyboards/model01/keymaps/dshields/keymap.c
@@ -1,13 +1,12 @@
#include QMK_KEYBOARD_H
#include "dshields.h"
-#include "dynamic_macro.h"
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_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_PLAY, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
+ 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,
KC_BSPC, KC_SPC ,
KC_LGUI, OSMRALT,
@@ -16,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_STRT, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
- KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
- KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, DM_STOP, _______, _______, _______, _______, KC_BSLS, KC_PIPE,
+ 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_DEL , KC_ENT ,
_______, _______,
diff --git a/keyboards/mt40/i2c.c b/keyboards/mt40/i2c.c
deleted file mode 100644
index c27f3e3d17..0000000000
--- a/keyboards/mt40/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 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/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/mt40/mt40.c b/keyboards/mt40/mt40.c
index 555689f872..dd079e7d81 100644
--- a/keyboards/mt40/mt40.c
+++ b/keyboards/mt40/mt40.c
@@ -13,32 +13,5 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "mt40.h"
-#include "rgblight.h"
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
-
-extern rgblight_config_t rgblight_config;
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- rgblight_task();
- matrix_init_user();
-}
+#include "mt40.h"
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 19410bc6e0..0cbf90c674 100644
--- a/keyboards/mt40/rules.mk
+++ b/keyboards/mt40/rules.mk
@@ -24,14 +24,14 @@ AUDIO_ENABLE ?= no # Audio output on port C6
UNICODE_ENABLE ?= no # Unicode
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight.
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
TAP_DANCE_ENABLE = no
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
LAYOUTS = planck_mit
LAYOUTS_HAS_RGB = no
diff --git a/keyboards/mt40/usbconfig.h b/keyboards/mt40/usbconfig.h
index 498b01fd9e..e1f5f2ea42 100644
--- a/keyboards/mt40/usbconfig.h
+++ b/keyboards/mt40/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x03
+#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 'T', 'h', 'o', 'm', 'a', 's', 'D', 'e', 'h', 'a', 'e', 'z', 'e'
diff --git a/keyboards/nafuda/config.h b/keyboards/nafuda/config.h
new file mode 100644
index 0000000000..3db4401d49
--- /dev/null
+++ b/keyboards/nafuda/config.h
@@ -0,0 +1,69 @@
+/*
+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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0012
+#define MANUFACTURER Salicylic_Acid
+#define PRODUCT nafuda
+#define DESCRIPTION A custom cursorpad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D1, D0, D4 }
+#define MATRIX_COL_PINS { F4, F5, F6 }
+
+/* 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
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 7 // Number of LEDs
+#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)
+ #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/nafuda/info.json b/keyboards/nafuda/info.json
new file mode 100644
index 0000000000..d5bf2b055e
--- /dev/null
+++ b/keyboards/nafuda/info.json
@@ -0,0 +1,20 @@
+{
+ "keyboard_name": "nafuda",
+ "url": "https://salicylic-acid3.hatenablog.com/",
+ "maintainer": "Salicylic_acid3",
+ "width": 3,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Mouse", "x":1, "y":0},
+ {"label":"Backspace", "x":0, "y":0.5},
+ {"label":"\u2191", "x":1, "y":1},
+ {"label":"Browser", "x":2, "y":0.5},
+ {"label":"\u2190", "x":0, "y":1.5},
+ {"label":"\u2193", "x":1, "y":2},
+ {"label":"\u2192", "x":2, "y":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/nafuda/keymaps/default/config.h b/keyboards/nafuda/keymaps/default/config.h
new file mode 100644
index 0000000000..e35fe2ccd7
--- /dev/null
+++ b/keyboards/nafuda/keymaps/default/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
+
diff --git a/keyboards/nafuda/keymaps/default/keymap.c b/keyboards/nafuda/keymaps/default/keymap.c
new file mode 100644
index 0000000000..f0baff6c22
--- /dev/null
+++ b/keyboards/nafuda/keymaps/default/keymap.c
@@ -0,0 +1,61 @@
+#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 {
+ _BASE,
+ _MOUSE,
+ _BROWSER,
+ _ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ //|-------------------------------------------|
+ TG(_MOUSE),
+ //|---------------+---------------+-----------|
+LT(_ADJUST, KC_BSPC), KC_UP,TG(_BROWSER),
+ //|---------------+---------------+-----------|
+ KC_LEFT, KC_DOWN, KC_RIGHT
+ //|-------------------------------------------|
+ ),
+
+ [_MOUSE] = LAYOUT(
+ //|-------------------------------------------|
+ TG(_MOUSE),
+ //|---------------+---------------+-----------|
+ KC_BTN1, KC_MS_U, KC_BTN2,
+ //|---------------+---------------+-----------|
+ KC_MS_L, KC_MS_D, KC_MS_R
+ //|-------------------------------------------|
+ ),
+
+ [_BROWSER] = LAYOUT(
+ //|-------------------------------------------|
+ LCTL(KC_W),
+ //|---------------+---------------+-----------|
+ LCTL(LSFT(KC_T)), KC_WH_U,TG(_BROWSER),
+ //|---------------+---------------+-----------|
+ LCTL(LSFT(KC_TAB)), KC_WH_D,LCTL(KC_TAB)
+ //|-------------------------------------------|
+ ),
+
+ [_ADJUST] = LAYOUT( /* Base */
+ //|-------------------------------------------|
+ RGB_VAD,
+ //|---------------+---------------+-----------|
+ MO(_ADJUST), RGB_SAD, RGB_VAI,
+ //|---------------+---------------+-----------|
+ RGB_MOD, RGB_TOG, RGB_SAI
+ //|-------------------------------------------|
+ )
+};
diff --git a/keyboards/nafuda/keymaps/default/readme.md b/keyboards/nafuda/keymaps/default/readme.md
new file mode 100644
index 0000000000..b84276bf8a
--- /dev/null
+++ b/keyboards/nafuda/keymaps/default/readme.md
@@ -0,0 +1,34 @@
+# The default keymap for nafuda
+
+## Base
+| 1 | 2 | 3 |
+|:--------------:|:--------:|:-----:|
+| | MOUSE | |
+| ADJUST or BSPC | UP |BROWSER|
+| LEFT | DOWN | RIGHT|
+
+
+## MOUSE
+| 1 | 2 | 3 |
+|:--------:|:--------:|:---------:|
+| | BASE | |
+| Btn 1 | MOUSE_UP | Btn2 |
+|MOUSE_LEFT|MOUSE_DOWN|MOUSE_RIGHT|
+
+
+## BROWSER
+| 1 | 2 | 3 |
+|:-----------:|:--------:|:-------:|
+| | LCTL(W) | |
+| LCTL+LSFT(T)| WHEEL_UP | BROWSER |
+|LCTL+SFT(TAB)|WHEEL_DOWN|LCTL(TAB)|
+
+
+## Adjust
+| 1 | 2 | 3 |
+|:-------:|:-------:|:------:|
+| | RGB_VAD | |
+| Adjust | RGB_SAD | RGB_VAI|
+| RGB_MOD | RGB_TOG | RGB_SAI|
+
+
diff --git a/keyboards/nafuda/nafuda.c b/keyboards/nafuda/nafuda.c
new file mode 100644
index 0000000000..d2061181e7
--- /dev/null
+++ b/keyboards/nafuda/nafuda.c
@@ -0,0 +1,5 @@
+#include "nafuda.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+};
diff --git a/keyboards/nafuda/nafuda.h b/keyboards/nafuda/nafuda.h
new file mode 100644
index 0000000000..008a9c16f4
--- /dev/null
+++ b/keyboards/nafuda/nafuda.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "quantum.h"
+
+/*
+ * ,-----------------.
+ * | | L01 | |
+ * |-----------------+
+ * | L10 | L11 | L12 |
+ * |-----------------+
+ * | L20 | L21 | L22 |
+ * |-----------------'
+ */
+
+#define LAYOUT( \
+ L01, \
+ L10, L11, L12, \
+ L20, L21, L22 \
+ ) \
+ { \
+ {KC_NO, L01,KC_NO }, \
+ { L10, L11, L12 }, \
+ { L20, L21, L22 } \
+ }
diff --git a/keyboards/nafuda/readme.md b/keyboards/nafuda/readme.md
new file mode 100644
index 0000000000..73007ed01e
--- /dev/null
+++ b/keyboards/nafuda/readme.md
@@ -0,0 +1,17 @@
+# nafuda
+
+![nafuda](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190608/20190608024901.jpg)
+
+This is 7 keys cursor macropad.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: Nafuda PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271706)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nafuda: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/nafuda-build-guide)
diff --git a/keyboards/nafuda/rules.mk b/keyboards/nafuda/rules.mk
new file mode 100644
index 0000000000..bdc8634648
--- /dev/null
+++ b/keyboards/nafuda/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 = 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.
+TAP_DANCE_ENABLE = no
+OLED_DRIVER_ENABLE = no
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
diff --git a/keyboards/naked48/keymaps/default/keymap.c b/keyboards/naked48/keymaps/default/keymap.c
index 686685e263..616967f57b 100644
--- a/keyboards/naked48/keymaps/default/keymap.c
+++ b/keyboards/naked48/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -109,4 +108,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
void matrix_init_user(void) {
}
-
diff --git a/keyboards/naked60/keymaps/default/keymap.c b/keyboards/naked60/keymaps/default/keymap.c
index e669df61ed..9b764482ec 100644
--- a/keyboards/naked60/keymaps/default/keymap.c
+++ b/keyboards/naked60/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
extern uint8_t is_master;
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/newgame40/keymaps/default/keymap.c b/keyboards/newgame40/keymaps/default/keymap.c
index f3588751fa..282a06c102 100644
--- a/keyboards/newgame40/keymaps/default/keymap.c
+++ b/keyboards/newgame40/keymaps/default/keymap.c
@@ -16,8 +16,7 @@
#include QMK_KEYBOARD_H
- extern keymap_config_t keymap_config;
-
+
enum layers {
_QWERTY,
_COLEMAK,
@@ -172,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/niu_mini/keymaps/codecoffeecode/keymap.c b/keyboards/niu_mini/keymaps/codecoffeecode/keymap.c
new file mode 100644
index 0000000000..7c794b2037
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/codecoffeecode/keymap.c
@@ -0,0 +1,103 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Caps | Alt |Layer1| Space |Layer2| Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [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_LCTL, KC_LGUI, KC_CAPS, KC_LALT, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Layer 1
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Vol- | Vol+ | Mute | | | | F11 | F12 | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Reset| | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [1] = LAYOUT_planck_mit(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, KC_F11, KC_F12, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Layer 2 (r_ Indicates RGB Controls)
+ * ,-----------------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |r_TOG |r_Mode|r_Hue+|r_Hue-| | | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |BL_TOG|BL_STEP| | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [2] = LAYOUT_planck_mit(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, BL_TOGG, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (IS_LED_ON(usb_led, USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/niu_mini/keymaps/codecoffeecode/readme.md b/keyboards/niu_mini/keymaps/codecoffeecode/readme.md
new file mode 100644
index 0000000000..661e24c9fa
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/codecoffeecode/readme.md
@@ -0,0 +1,5 @@
+## CodeCoffeeCode's 40% Keymap
+
+- Added Delete to Layer 1
+- Swapped Tab and Esc like on the Planck EZ
+- Put all the Arrows on the bottom row, moving the Forward Slash to beside Enter \ No newline at end of file
diff --git a/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.h b/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.h
deleted file mode 100755
index 54df72ea68..0000000000
--- a/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.h
+++ /dev/null
@@ -1,1187 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _BOARD_H_
-#define _BOARD_H_
-
-/*
- * Setup for NK65 Keyboard
- */
-
-/*
- * Board identifier.
- */
-#define BOARD_GENERIC_STM32_F303XC
-#define BOARD_NAME "NK65 PCB"
-
-/*
- * Board oscillators-related settings.
- * NOTE: LSE not fitted.
- */
-#if !defined(STM32_LSECLK)
-#define STM32_LSECLK 0U
-#endif
-
-#define STM32_LSEDRV (3U << 3U)
-
-#if !defined(STM32_HSECLK)
-#define STM32_HSECLK 8000000U
-#endif
-
-// #define STM32_HSE_BYPASS
-
-/*
- * MCU type as defined in the ST header.
- */
-#define STM32F303xC
-
-/*
- * IO pins assignments.
- */
-#define GPIOA_PIN0 0U
-#define GPIOA_PIN1 1U
-#define GPIOA_PIN2 2U
-#define GPIOA_PIN3 3U
-#define GPIOA_PIN4 4U
-#define GPIOA_PIN5 5U
-#define GPIOA_PIN6 6U
-#define GPIOA_PIN7 7U
-#define GPIOA_PIN8 8U
-#define GPIOA_PIN9 9U
-#define GPIOA_PIN10 10U
-#define GPIOA_USB_DM 11U
-#define GPIOA_USB_DP 12U
-#define GPIOA_SWDIO 13U
-#define GPIOA_SWCLK 14U
-#define GPIOA_PIN15 15U
-
-#define GPIOB_PIN0 0U
-#define GPIOB_PIN1 1U
-#define GPIOB_PIN2 2U
-#define GPIOB_PIN3 3U
-#define GPIOB_PIN4 4U
-#define GPIOB_PIN5 5U
-#define GPIOB_PIN6 6U
-#define GPIOB_PIN7 7U
-#define GPIOB_PIN8 8U
-#define GPIOB_PIN9 9U
-#define GPIOB_PIN10 10U
-#define GPIOB_PIN11 11U
-#define GPIOB_PIN12 12U
-#define GPIOB_PIN13 13U
-#define GPIOB_PIN14 14U
-#define GPIOB_PIN15 15U
-
-#define GPIOC_PIN0 0U
-#define GPIOC_PIN1 1U
-#define GPIOC_PIN2 2U
-#define GPIOC_PIN3 3U
-#define GPIOC_PIN4 4U
-#define GPIOC_PIN5 5U
-#define GPIOC_PIN6 6U
-#define GPIOC_PIN7 7U
-#define GPIOC_PIN8 8U
-#define GPIOC_PIN9 9U
-#define GPIOC_PIN10 10U
-#define GPIOC_PIN11 11U
-#define GPIOC_PIN12 12U
-#define GPIOC_PIN13 13U
-#define GPIOC_PIN14 14U
-#define GPIOC_PIN15 15U
-
-#define GPIOD_PIN0 0U
-#define GPIOD_PIN1 1U
-#define GPIOD_PIN2 2U
-#define GPIOD_PIN3 3U
-#define GPIOD_PIN4 4U
-#define GPIOD_PIN5 5U
-#define GPIOD_PIN6 6U
-#define GPIOD_PIN7 7U
-#define GPIOD_PIN8 8U
-#define GPIOD_PIN9 9U
-#define GPIOD_PIN10 10U
-#define GPIOD_PIN11 11U
-#define GPIOD_PIN12 12U
-#define GPIOD_PIN13 13U
-#define GPIOD_PIN14 14U
-#define GPIOD_PIN15 15U
-
-#define GPIOE_PIN0 0U
-#define GPIOE_PIN1 1U
-#define GPIOE_PIN2 2U
-#define GPIOE_PIN3 3U
-#define GPIOE_PIN4 4U
-#define GPIOE_PIN5 5U
-#define GPIOE_PIN6 6U
-#define GPIOE_PIN7 7U
-#define GPIOE_PIN8 8U
-#define GPIOE_PIN9 9U
-#define GPIOE_PIN10 10U
-#define GPIOE_PIN11 11U
-#define GPIOE_PIN12 12U
-#define GPIOE_PIN13 13U
-#define GPIOE_PIN14 14U
-#define GPIOE_PIN15 15U
-
-#define GPIOF_I2C2_SDA 0U
-#define GPIOF_I2C2_SCL 1U
-#define GPIOF_PIN2 2U
-#define GPIOF_PIN3 3U
-#define GPIOF_PIN4 4U
-#define GPIOF_PIN5 5U
-#define GPIOF_PIN6 6U
-#define GPIOF_PIN7 7U
-#define GPIOF_PIN8 8U
-#define GPIOF_PIN9 9U
-#define GPIOF_PIN10 10U
-#define GPIOF_PIN11 11U
-#define GPIOF_PIN12 12U
-#define GPIOF_PIN13 13U
-#define GPIOF_PIN14 14U
-#define GPIOF_PIN15 15U
-
-#define GPIOG_PIN0 0U
-#define GPIOG_PIN1 1U
-#define GPIOG_PIN2 2U
-#define GPIOG_PIN3 3U
-#define GPIOG_PIN4 4U
-#define GPIOG_PIN5 5U
-#define GPIOG_PIN6 6U
-#define GPIOG_PIN7 7U
-#define GPIOG_PIN8 8U
-#define GPIOG_PIN9 9U
-#define GPIOG_PIN10 10U
-#define GPIOG_PIN11 11U
-#define GPIOG_PIN12 12U
-#define GPIOG_PIN13 13U
-#define GPIOG_PIN14 14U
-#define GPIOG_PIN15 15U
-
-#define GPIOH_PIN0 0U
-#define GPIOH_PIN1 1U
-#define GPIOH_PIN2 2U
-#define GPIOH_PIN3 3U
-#define GPIOH_PIN4 4U
-#define GPIOH_PIN5 5U
-#define GPIOH_PIN6 6U
-#define GPIOH_PIN7 7U
-#define GPIOH_PIN8 8U
-#define GPIOH_PIN9 9U
-#define GPIOH_PIN10 10U
-#define GPIOH_PIN11 11U
-#define GPIOH_PIN12 12U
-#define GPIOH_PIN13 13U
-#define GPIOH_PIN14 14U
-#define GPIOH_PIN15 15U
-
-/*
- * IO lines assignments.
- */
-#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
-#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
-#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
-#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
-#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
-
-#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
-#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
-
-#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
-
-
-/*
- * I/O ports initial setup, this configuration is established soon after reset
- * in the initialization code.
- * Please refer to the STM32 Reference Manual for details.
- */
-#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
-#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
-#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
-#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
-#define PIN_ODR_LOW(n) (0U << (n))
-#define PIN_ODR_HIGH(n) (1U << (n))
-#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
-#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
-#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
-#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
-#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
-#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
-#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
-#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
-#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
-#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
-
-/*
- * GPIOA setup:
- *
- * PA0 - NC
- * PA1 - NC
- * PA2 - COL1
- * PA3 - COL2
- * PA4 - SPEAKER1
- * PA5 - SPEAKER2
- * PA6 - COL3
- * PA7 - COL8
- * PA8 - COL6
- * PA9 - COL7
- * PA10 - ROW5
- * PA11 - USB_DM (alternate 14).
- * PA12 - USB_DP (alternate 14).
- * PA13 - SWDIO (alternate 0).
- * PA14 - SWCLK (alternate 0).
- * PA15 - ROW4
- */
-#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
- PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
- PIN_MODE_INPUT(GPIOA_PIN2) | \
- PIN_MODE_INPUT(GPIOA_PIN3) | \
- PIN_MODE_INPUT(GPIOA_PIN4) | \
- PIN_MODE_INPUT(GPIOA_PIN5) | \
- PIN_MODE_INPUT(GPIOA_PIN6) | \
- PIN_MODE_INPUT(GPIOA_PIN7) | \
- PIN_MODE_INPUT(GPIOA_PIN8) | \
- PIN_MODE_INPUT(GPIOA_PIN9) | \
- PIN_MODE_INPUT(GPIOA_PIN10) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
- PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
- PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
- PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
- PIN_MODE_INPUT(GPIOA_PIN15))
-#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
- PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
- PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
- PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
-#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
- PIN_OSPEED_HIGH(GPIOA_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
- PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
- PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
- PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
- PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
- PIN_OSPEED_VERYLOW(GPIOA_PIN15))
-#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
- PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
- PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
- PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
- PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
- PIN_PUPDR_PULLUP(GPIOA_PIN15))
-#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
- PIN_ODR_HIGH(GPIOA_PIN1) | \
- PIN_ODR_HIGH(GPIOA_PIN2) | \
- PIN_ODR_HIGH(GPIOA_PIN3) | \
- PIN_ODR_HIGH(GPIOA_PIN4) | \
- PIN_ODR_HIGH(GPIOA_PIN5) | \
- PIN_ODR_HIGH(GPIOA_PIN6) | \
- PIN_ODR_HIGH(GPIOA_PIN7) | \
- PIN_ODR_HIGH(GPIOA_PIN8) | \
- PIN_ODR_HIGH(GPIOA_PIN9) | \
- PIN_ODR_HIGH(GPIOA_PIN10) | \
- PIN_ODR_HIGH(GPIOA_USB_DM) | \
- PIN_ODR_HIGH(GPIOA_USB_DP) | \
- PIN_ODR_HIGH(GPIOA_SWDIO) | \
- PIN_ODR_HIGH(GPIOA_SWCLK) | \
- PIN_ODR_HIGH(GPIOA_PIN15))
-#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
- PIN_AFIO_AF(GPIOA_PIN1, 1) | \
- PIN_AFIO_AF(GPIOA_PIN2, 0) | \
- PIN_AFIO_AF(GPIOA_PIN3, 0) | \
- PIN_AFIO_AF(GPIOA_PIN4, 0) | \
- PIN_AFIO_AF(GPIOA_PIN5, 5) | \
- PIN_AFIO_AF(GPIOA_PIN6, 5) | \
- PIN_AFIO_AF(GPIOA_PIN7, 5))
-#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
- PIN_AFIO_AF(GPIOA_PIN9, 0) | \
- PIN_AFIO_AF(GPIOA_PIN10, 0) | \
- PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
- PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
- PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
- PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
- PIN_AFIO_AF(GPIOA_PIN15, 0))
-
-/*
- * GPIOB setup:
- *
- * PB0 - PIN0 (input pullup).
- * PB1 - PIN1 (input pullup).
- * PB2 - PIN2 (input pullup).
- * PB3 - PIN3 (alternate 0).
- * PB4 - PIN4 (input pullup).
- * PB5 - PIN5 (input pullup).
- * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
- * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
- * PB8 - PIN8 (input pullup).
- * PB9 - PIN9 (input pullup).
- * PB10 - PIN10 (input pullup).
- * PB11 - PIN11 (input pullup).
- * PB12 - PIN12 (input pullup).
- * PB13 - PIN13 (input pullup).
- * PB14 - PIN14 (input pullup).
- * PB15 - PIN15 (input pullup).
- */
-#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
- PIN_MODE_INPUT(GPIOB_PIN1) | \
- PIN_MODE_INPUT(GPIOB_PIN2) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
- PIN_MODE_INPUT(GPIOB_PIN4) | \
- PIN_MODE_INPUT(GPIOB_PIN5) | \
- PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
- PIN_MODE_OUTPUT(GPIOB_PIN7) | \
- PIN_MODE_INPUT(GPIOB_PIN8) | \
- PIN_MODE_INPUT(GPIOB_PIN9) | \
- PIN_MODE_INPUT(GPIOB_PIN10) | \
- PIN_MODE_INPUT(GPIOB_PIN11) | \
- PIN_MODE_INPUT(GPIOB_PIN12) | \
- PIN_MODE_INPUT(GPIOB_PIN13) | \
- PIN_MODE_INPUT(GPIOB_PIN14) | \
- PIN_MODE_INPUT(GPIOB_PIN15))
-#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
- PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
-#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
- PIN_OSPEED_HIGH(GPIOB_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
- PIN_OSPEED_HIGH(GPIOB_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOB_PIN15))
-#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
- PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
- PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOB_PIN15))
-#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
- PIN_ODR_HIGH(GPIOB_PIN1) | \
- PIN_ODR_HIGH(GPIOB_PIN2) | \
- PIN_ODR_HIGH(GPIOB_PIN3) | \
- PIN_ODR_HIGH(GPIOB_PIN4) | \
- PIN_ODR_HIGH(GPIOB_PIN5) | \
- PIN_ODR_HIGH(GPIOB_PIN6) | \
- PIN_ODR_LOW(GPIOB_PIN7) | \
- PIN_ODR_HIGH(GPIOB_PIN8) | \
- PIN_ODR_HIGH(GPIOB_PIN9) | \
- PIN_ODR_HIGH(GPIOB_PIN10) | \
- PIN_ODR_HIGH(GPIOB_PIN11) | \
- PIN_ODR_HIGH(GPIOB_PIN12) | \
- PIN_ODR_HIGH(GPIOB_PIN13) | \
- PIN_ODR_HIGH(GPIOB_PIN14) | \
- PIN_ODR_HIGH(GPIOB_PIN15))
-#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
- PIN_AFIO_AF(GPIOB_PIN1, 0) | \
- PIN_AFIO_AF(GPIOB_PIN2, 0) | \
- PIN_AFIO_AF(GPIOB_PIN3, 0) | \
- PIN_AFIO_AF(GPIOB_PIN4, 0) | \
- PIN_AFIO_AF(GPIOB_PIN5, 0) | \
- PIN_AFIO_AF(GPIOB_PIN6, 4) | \
- PIN_AFIO_AF(GPIOB_PIN7, 0))
-#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
- PIN_AFIO_AF(GPIOB_PIN9, 0) | \
- PIN_AFIO_AF(GPIOB_PIN10, 0) | \
- PIN_AFIO_AF(GPIOB_PIN11, 0) | \
- PIN_AFIO_AF(GPIOB_PIN12, 0) | \
- PIN_AFIO_AF(GPIOB_PIN13, 0) | \
- PIN_AFIO_AF(GPIOB_PIN14, 0) | \
- PIN_AFIO_AF(GPIOB_PIN15, 0))
-
-/*
- * GPIOC setup:
- *
- * PC0 - PIN0 (input pullup).
- * PC1 - PIN1 (input pullup).
- * PC2 - PIN2 (input pullup).
- * PC3 - PIN3 (input pullup).
- * PC4 - PIN4 (input pullup).
- * PC5 - PIN5 (input pullup).
- * PC6 - PIN6 (input pullup).
- * PC7 - PIN7 (input pullup).
- * PC8 - PIN8 (input pullup).
- * PC9 - PIN9 (input pullup).
- * PC10 - PIN10 (input pullup).
- * PC11 - PIN11 (input pullup).
- * PC12 - PIN12 (input pullup).
- * PC13 - PIN13 (input pullup).
- * PC14 - PIN14 (input floating).
- * PC15 - PIN15 (input floating).
- */
-#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
- PIN_MODE_INPUT(GPIOC_PIN1) | \
- PIN_MODE_INPUT(GPIOC_PIN2) | \
- PIN_MODE_INPUT(GPIOC_PIN3) | \
- PIN_MODE_INPUT(GPIOC_PIN4) | \
- PIN_MODE_INPUT(GPIOC_PIN5) | \
- PIN_MODE_INPUT(GPIOC_PIN6) | \
- PIN_MODE_INPUT(GPIOC_PIN7) | \
- PIN_MODE_INPUT(GPIOC_PIN8) | \
- PIN_MODE_INPUT(GPIOC_PIN9) | \
- PIN_MODE_INPUT(GPIOC_PIN10) | \
- PIN_MODE_INPUT(GPIOC_PIN11) | \
- PIN_MODE_INPUT(GPIOC_PIN12) | \
- PIN_MODE_INPUT(GPIOC_PIN13) | \
- PIN_MODE_INPUT(GPIOC_PIN14) | \
- PIN_MODE_INPUT(GPIOC_PIN15))
-#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
-#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
- PIN_OSPEED_HIGH(GPIOC_PIN14) | \
- PIN_OSPEED_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
- PIN_PUPDR_FLOATING(GPIOC_PIN15))
-#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
- PIN_ODR_HIGH(GPIOC_PIN1) | \
- PIN_ODR_HIGH(GPIOC_PIN2) | \
- PIN_ODR_HIGH(GPIOC_PIN3) | \
- PIN_ODR_HIGH(GPIOC_PIN4) | \
- PIN_ODR_HIGH(GPIOC_PIN5) | \
- PIN_ODR_HIGH(GPIOC_PIN6) | \
- PIN_ODR_HIGH(GPIOC_PIN7) | \
- PIN_ODR_HIGH(GPIOC_PIN8) | \
- PIN_ODR_HIGH(GPIOC_PIN9) | \
- PIN_ODR_HIGH(GPIOC_PIN10) | \
- PIN_ODR_HIGH(GPIOC_PIN11) | \
- PIN_ODR_HIGH(GPIOC_PIN12) | \
- PIN_ODR_HIGH(GPIOC_PIN13) | \
- PIN_ODR_HIGH(GPIOC_PIN14) | \
- PIN_ODR_HIGH(GPIOC_PIN15))
-#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
- PIN_AFIO_AF(GPIOC_PIN1, 0) | \
- PIN_AFIO_AF(GPIOC_PIN2, 0) | \
- PIN_AFIO_AF(GPIOC_PIN3, 0) | \
- PIN_AFIO_AF(GPIOC_PIN4, 0) | \
- PIN_AFIO_AF(GPIOC_PIN5, 0) | \
- PIN_AFIO_AF(GPIOC_PIN6, 0) | \
- PIN_AFIO_AF(GPIOC_PIN7, 0))
-#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
- PIN_AFIO_AF(GPIOC_PIN9, 0) | \
- PIN_AFIO_AF(GPIOC_PIN10, 0) | \
- PIN_AFIO_AF(GPIOC_PIN11, 0) | \
- PIN_AFIO_AF(GPIOC_PIN12, 0) | \
- PIN_AFIO_AF(GPIOC_PIN13, 0) | \
- PIN_AFIO_AF(GPIOC_PIN14, 0) | \
- PIN_AFIO_AF(GPIOC_PIN15, 0))
-
-/*
- * GPIOD setup:
- *
- * PD0 - PIN0 (input pullup).
- * PD1 - PIN1 (input pullup).
- * PD2 - PIN2 (input pullup).
- * PD3 - PIN3 (input pullup).
- * PD4 - PIN4 (input pullup).
- * PD5 - PIN5 (input pullup).
- * PD6 - PIN6 (input pullup).
- * PD7 - PIN7 (input pullup).
- * PD8 - PIN8 (input pullup).
- * PD9 - PIN9 (input pullup).
- * PD11 - PIN10 (input pullup).
- * PD11 - PIN11 (input pullup).
- * PD12 - PIN12 (input pullup).
- * PD13 - PIN13 (input pullup).
- * PD14 - PIN14 (input pullup).
- * PD15 - PIN15 (input pullup).
- */
-#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
- PIN_MODE_INPUT(GPIOD_PIN1) | \
- PIN_MODE_INPUT(GPIOD_PIN2) | \
- PIN_MODE_INPUT(GPIOD_PIN3) | \
- PIN_MODE_INPUT(GPIOD_PIN4) | \
- PIN_MODE_INPUT(GPIOD_PIN5) | \
- PIN_MODE_INPUT(GPIOD_PIN6) | \
- PIN_MODE_INPUT(GPIOD_PIN7) | \
- PIN_MODE_INPUT(GPIOD_PIN8) | \
- PIN_MODE_INPUT(GPIOD_PIN9) | \
- PIN_MODE_INPUT(GPIOD_PIN10) | \
- PIN_MODE_INPUT(GPIOD_PIN11) | \
- PIN_MODE_INPUT(GPIOD_PIN12) | \
- PIN_MODE_INPUT(GPIOD_PIN13) | \
- PIN_MODE_INPUT(GPIOD_PIN14) | \
- PIN_MODE_INPUT(GPIOD_PIN15))
-#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
-#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOD_PIN15))
-#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOD_PIN15))
-#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
- PIN_ODR_HIGH(GPIOD_PIN1) | \
- PIN_ODR_HIGH(GPIOD_PIN2) | \
- PIN_ODR_HIGH(GPIOD_PIN3) | \
- PIN_ODR_HIGH(GPIOD_PIN4) | \
- PIN_ODR_HIGH(GPIOD_PIN5) | \
- PIN_ODR_HIGH(GPIOD_PIN6) | \
- PIN_ODR_HIGH(GPIOD_PIN7) | \
- PIN_ODR_HIGH(GPIOD_PIN8) | \
- PIN_ODR_HIGH(GPIOD_PIN9) | \
- PIN_ODR_HIGH(GPIOD_PIN10) | \
- PIN_ODR_HIGH(GPIOD_PIN11) | \
- PIN_ODR_HIGH(GPIOD_PIN12) | \
- PIN_ODR_HIGH(GPIOD_PIN13) | \
- PIN_ODR_HIGH(GPIOD_PIN14) | \
- PIN_ODR_HIGH(GPIOD_PIN15))
-#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
- PIN_AFIO_AF(GPIOD_PIN1, 0) | \
- PIN_AFIO_AF(GPIOD_PIN2, 0) | \
- PIN_AFIO_AF(GPIOD_PIN3, 0) | \
- PIN_AFIO_AF(GPIOD_PIN4, 0) | \
- PIN_AFIO_AF(GPIOD_PIN5, 0) | \
- PIN_AFIO_AF(GPIOD_PIN6, 0) | \
- PIN_AFIO_AF(GPIOD_PIN7, 0))
-#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
- PIN_AFIO_AF(GPIOD_PIN9, 0) | \
- PIN_AFIO_AF(GPIOD_PIN10, 0) | \
- PIN_AFIO_AF(GPIOD_PIN11, 0) | \
- PIN_AFIO_AF(GPIOD_PIN12, 0) | \
- PIN_AFIO_AF(GPIOD_PIN13, 0) | \
- PIN_AFIO_AF(GPIOD_PIN14, 0) | \
- PIN_AFIO_AF(GPIOD_PIN15, 0))
-
-/*
- * GPIOE setup:
- *
- * PE0 - PIN0 (input pullup).
- * PE1 - PIN1 (input pullup).
- * PE2 - PIN2 (input pullup).
- * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
- * PE4 - PIN4 (input pullup).
- * PE5 - PIN5 (input pullup).
- * PE6 - PIN6 (input pullup).
- * PE7 - PIN7 (input pullup).
- * PE8 - PIN8 (output pushpull maximum).
- * PE9 - PIN9 (output pushpull maximum).
- * PE10 - PIN10 (output pushpull maximum).
- * PE11 - PIN11 (output pushpull maximum).
- * PE12 - PIN12 (output pushpull maximum).
- * PE13 - PIN13 (output pushpull maximum).
- * PE14 - PIN14 (output pushpull maximum).
- * PE15 - PIN15 (output pushpull maximum).
- */
-#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
- PIN_MODE_INPUT(GPIOE_PIN1) | \
- PIN_MODE_INPUT(GPIOE_PIN2) |\
- PIN_MODE_OUTPUT(GPIOE_PIN3) | \
- PIN_MODE_INPUT(GPIOE_PIN4) |\
- PIN_MODE_INPUT(GPIOE_PIN5) |\
- PIN_MODE_INPUT(GPIOE_PIN6) | \
- PIN_MODE_INPUT(GPIOE_PIN7) | \
- PIN_MODE_OUTPUT(GPIOE_PIN8) | \
- PIN_MODE_OUTPUT(GPIOE_PIN9) | \
- PIN_MODE_OUTPUT(GPIOE_PIN10) | \
- PIN_MODE_OUTPUT(GPIOE_PIN11) | \
- PIN_MODE_OUTPUT(GPIOE_PIN12) | \
- PIN_MODE_OUTPUT(GPIOE_PIN13) | \
- PIN_MODE_OUTPUT(GPIOE_PIN14) | \
- PIN_MODE_OUTPUT(GPIOE_PIN15))
-#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
- PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
-#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
- PIN_OSPEED_HIGH(GPIOE_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
- PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
- PIN_OSPEED_HIGH(GPIOE_PIN8) | \
- PIN_OSPEED_HIGH(GPIOE_PIN9) | \
- PIN_OSPEED_HIGH(GPIOE_PIN10) | \
- PIN_OSPEED_HIGH(GPIOE_PIN11) | \
- PIN_OSPEED_HIGH(GPIOE_PIN12) | \
- PIN_OSPEED_HIGH(GPIOE_PIN13) | \
- PIN_OSPEED_HIGH(GPIOE_PIN14) | \
- PIN_OSPEED_HIGH(GPIOE_PIN15))
-#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
- PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
- PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
- PIN_PUPDR_FLOATING(GPIOE_PIN15))
-#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
- PIN_ODR_HIGH(GPIOE_PIN1) | \
- PIN_ODR_HIGH(GPIOE_PIN2) | \
- PIN_ODR_HIGH(GPIOE_PIN3) | \
- PIN_ODR_HIGH(GPIOE_PIN4) | \
- PIN_ODR_HIGH(GPIOE_PIN5) | \
- PIN_ODR_HIGH(GPIOE_PIN6) | \
- PIN_ODR_HIGH(GPIOE_PIN7) | \
- PIN_ODR_LOW(GPIOE_PIN8) | \
- PIN_ODR_LOW(GPIOE_PIN9) | \
- PIN_ODR_LOW(GPIOE_PIN10) | \
- PIN_ODR_LOW(GPIOE_PIN11) | \
- PIN_ODR_LOW(GPIOE_PIN12) | \
- PIN_ODR_LOW(GPIOE_PIN13) | \
- PIN_ODR_LOW(GPIOE_PIN14) | \
- PIN_ODR_LOW(GPIOE_PIN15))
-#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
- PIN_AFIO_AF(GPIOE_PIN1, 0) | \
- PIN_AFIO_AF(GPIOE_PIN2, 0) |\
- PIN_AFIO_AF(GPIOE_PIN3, 0) | \
- PIN_AFIO_AF(GPIOE_PIN4, 0) |\
- PIN_AFIO_AF(GPIOE_PIN5, 0) |\
- PIN_AFIO_AF(GPIOE_PIN6, 0) | \
- PIN_AFIO_AF(GPIOE_PIN7, 0))
-#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
- PIN_AFIO_AF(GPIOE_PIN9, 0) | \
- PIN_AFIO_AF(GPIOE_PIN10, 0) | \
- PIN_AFIO_AF(GPIOE_PIN11, 0) | \
- PIN_AFIO_AF(GPIOE_PIN12, 0) | \
- PIN_AFIO_AF(GPIOE_PIN13, 0) | \
- PIN_AFIO_AF(GPIOE_PIN14, 0) | \
- PIN_AFIO_AF(GPIOE_PIN15, 0))
-
-/*
- * GPIOF setup:
- *
- * PF0 - I2C2_SDA (input floating).
- * PF1 - I2C2_SCL (input floating).
- * PF2 - PIN2 (input pullup).
- * PF3 - PIN3 (input pullup).
- * PF4 - PIN4 (input pullup).
- * PF5 - PIN5 (input pullup).
- * PF6 - PIN6 (input pullup).
- * PF7 - PIN7 (input pullup).
- * PF8 - PIN8 (input pullup).
- * PF9 - PIN9 (input pullup).
- * PF10 - PIN10 (input pullup).
- * PF11 - PIN11 (input pullup).
- * PF12 - PIN12 (input pullup).
- * PF13 - PIN13 (input pullup).
- * PF14 - PIN14 (input pullup).
- * PF15 - PIN15 (input pullup).
- */
-#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
- PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
- PIN_MODE_INPUT(GPIOF_PIN2) | \
- PIN_MODE_INPUT(GPIOF_PIN3) | \
- PIN_MODE_INPUT(GPIOF_PIN4) | \
- PIN_MODE_INPUT(GPIOF_PIN5) | \
- PIN_MODE_INPUT(GPIOF_PIN6) | \
- PIN_MODE_INPUT(GPIOF_PIN7) | \
- PIN_MODE_INPUT(GPIOF_PIN8) | \
- PIN_MODE_INPUT(GPIOF_PIN9) | \
- PIN_MODE_INPUT(GPIOF_PIN10) | \
- PIN_MODE_INPUT(GPIOF_PIN11) | \
- PIN_MODE_INPUT(GPIOF_PIN12) | \
- PIN_MODE_INPUT(GPIOF_PIN13) | \
- PIN_MODE_INPUT(GPIOF_PIN14) | \
- PIN_MODE_INPUT(GPIOF_PIN15))
-#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
- PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
-#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
- PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOF_PIN15))
-#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
- PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOF_PIN15))
-#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
- PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
- PIN_ODR_HIGH(GPIOF_PIN2) | \
- PIN_ODR_HIGH(GPIOF_PIN3) | \
- PIN_ODR_HIGH(GPIOF_PIN4) | \
- PIN_ODR_HIGH(GPIOF_PIN5) | \
- PIN_ODR_HIGH(GPIOF_PIN6) | \
- PIN_ODR_HIGH(GPIOF_PIN7) | \
- PIN_ODR_HIGH(GPIOF_PIN8) | \
- PIN_ODR_HIGH(GPIOF_PIN9) | \
- PIN_ODR_HIGH(GPIOF_PIN10) | \
- PIN_ODR_HIGH(GPIOF_PIN11) | \
- PIN_ODR_HIGH(GPIOF_PIN12) | \
- PIN_ODR_HIGH(GPIOF_PIN13) | \
- PIN_ODR_HIGH(GPIOF_PIN14) | \
- PIN_ODR_HIGH(GPIOF_PIN15))
-#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
- PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
- PIN_AFIO_AF(GPIOF_PIN2, 0) | \
- PIN_AFIO_AF(GPIOF_PIN3, 0) | \
- PIN_AFIO_AF(GPIOF_PIN4, 0) | \
- PIN_AFIO_AF(GPIOF_PIN5, 0) | \
- PIN_AFIO_AF(GPIOF_PIN6, 0) | \
- PIN_AFIO_AF(GPIOF_PIN7, 0))
-#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
- PIN_AFIO_AF(GPIOF_PIN9, 0) | \
- PIN_AFIO_AF(GPIOF_PIN10, 0) | \
- PIN_AFIO_AF(GPIOF_PIN11, 0) | \
- PIN_AFIO_AF(GPIOF_PIN12, 0) | \
- PIN_AFIO_AF(GPIOF_PIN13, 0) | \
- PIN_AFIO_AF(GPIOF_PIN14, 0) | \
- PIN_AFIO_AF(GPIOF_PIN15, 0))
-
-/*
- * GPIOG setup:
- *
- * PG0 - PIN0 (input pullup).
- * PG1 - PIN1 (input pullup).
- * PG2 - PIN2 (input pullup).
- * PG3 - PIN3 (input pullup).
- * PG4 - PIN4 (input pullup).
- * PG5 - PIN5 (input pullup).
- * PG6 - PIN6 (input pullup).
- * PG7 - PIN7 (input pullup).
- * PG8 - PIN8 (input pullup).
- * PG9 - PIN9 (input pullup).
- * PG10 - PIN10 (input pullup).
- * PG11 - PIN11 (input pullup).
- * PG12 - PIN12 (input pullup).
- * PG13 - PIN13 (input pullup).
- * PG14 - PIN14 (input pullup).
- * PG15 - PIN15 (input pullup).
- */
-#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
- PIN_MODE_INPUT(GPIOG_PIN1) | \
- PIN_MODE_INPUT(GPIOG_PIN2) | \
- PIN_MODE_INPUT(GPIOG_PIN3) | \
- PIN_MODE_INPUT(GPIOG_PIN4) | \
- PIN_MODE_INPUT(GPIOG_PIN5) | \
- PIN_MODE_INPUT(GPIOG_PIN6) | \
- PIN_MODE_INPUT(GPIOG_PIN7) | \
- PIN_MODE_INPUT(GPIOG_PIN8) | \
- PIN_MODE_INPUT(GPIOG_PIN9) | \
- PIN_MODE_INPUT(GPIOG_PIN10) | \
- PIN_MODE_INPUT(GPIOG_PIN11) | \
- PIN_MODE_INPUT(GPIOG_PIN12) | \
- PIN_MODE_INPUT(GPIOG_PIN13) | \
- PIN_MODE_INPUT(GPIOG_PIN14) | \
- PIN_MODE_INPUT(GPIOG_PIN15))
-#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
-#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOG_PIN15))
-#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOG_PIN15))
-#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
- PIN_ODR_HIGH(GPIOG_PIN1) | \
- PIN_ODR_HIGH(GPIOG_PIN2) | \
- PIN_ODR_HIGH(GPIOG_PIN3) | \
- PIN_ODR_HIGH(GPIOG_PIN4) | \
- PIN_ODR_HIGH(GPIOG_PIN5) | \
- PIN_ODR_HIGH(GPIOG_PIN6) | \
- PIN_ODR_HIGH(GPIOG_PIN7) | \
- PIN_ODR_HIGH(GPIOG_PIN8) | \
- PIN_ODR_HIGH(GPIOG_PIN9) | \
- PIN_ODR_HIGH(GPIOG_PIN10) | \
- PIN_ODR_HIGH(GPIOG_PIN11) | \
- PIN_ODR_HIGH(GPIOG_PIN12) | \
- PIN_ODR_HIGH(GPIOG_PIN13) | \
- PIN_ODR_HIGH(GPIOG_PIN14) | \
- PIN_ODR_HIGH(GPIOG_PIN15))
-#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
- PIN_AFIO_AF(GPIOG_PIN1, 0) | \
- PIN_AFIO_AF(GPIOG_PIN2, 0) | \
- PIN_AFIO_AF(GPIOG_PIN3, 0) | \
- PIN_AFIO_AF(GPIOG_PIN4, 0) | \
- PIN_AFIO_AF(GPIOG_PIN5, 0) | \
- PIN_AFIO_AF(GPIOG_PIN6, 0) | \
- PIN_AFIO_AF(GPIOG_PIN7, 0))
-#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
- PIN_AFIO_AF(GPIOG_PIN9, 0) | \
- PIN_AFIO_AF(GPIOG_PIN10, 0) | \
- PIN_AFIO_AF(GPIOG_PIN11, 0) | \
- PIN_AFIO_AF(GPIOG_PIN12, 0) | \
- PIN_AFIO_AF(GPIOG_PIN13, 0) | \
- PIN_AFIO_AF(GPIOG_PIN14, 0) | \
- PIN_AFIO_AF(GPIOG_PIN15, 0))
-
-/*
- * GPIOH setup:
- *
- * PH0 - PIN0 (input pullup).
- * PH1 - PIN1 (input pullup).
- * PH2 - PIN2 (input pullup).
- * PH3 - PIN3 (input pullup).
- * PH4 - PIN4 (input pullup).
- * PH5 - PIN5 (input pullup).
- * PH6 - PIN6 (input pullup).
- * PH7 - PIN7 (input pullup).
- * PH8 - PIN8 (input pullup).
- * PH9 - PIN9 (input pullup).
- * PH10 - PIN10 (input pullup).
- * PH11 - PIN11 (input pullup).
- * PH12 - PIN12 (input pullup).
- * PH13 - PIN13 (input pullup).
- * PH14 - PIN14 (input pullup).
- * PH15 - PIN15 (input pullup).
- */
-#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
- PIN_MODE_INPUT(GPIOH_PIN1) | \
- PIN_MODE_INPUT(GPIOH_PIN2) | \
- PIN_MODE_INPUT(GPIOH_PIN3) | \
- PIN_MODE_INPUT(GPIOH_PIN4) | \
- PIN_MODE_INPUT(GPIOH_PIN5) | \
- PIN_MODE_INPUT(GPIOH_PIN6) | \
- PIN_MODE_INPUT(GPIOH_PIN7) | \
- PIN_MODE_INPUT(GPIOH_PIN8) | \
- PIN_MODE_INPUT(GPIOH_PIN9) | \
- PIN_MODE_INPUT(GPIOH_PIN10) | \
- PIN_MODE_INPUT(GPIOH_PIN11) | \
- PIN_MODE_INPUT(GPIOH_PIN12) | \
- PIN_MODE_INPUT(GPIOH_PIN13) | \
- PIN_MODE_INPUT(GPIOH_PIN14) | \
- PIN_MODE_INPUT(GPIOH_PIN15))
-#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
- PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
-#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
- PIN_OSPEED_VERYLOW(GPIOH_PIN15))
-#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
- PIN_PUPDR_PULLUP(GPIOH_PIN15))
-#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
- PIN_ODR_HIGH(GPIOH_PIN1) | \
- PIN_ODR_HIGH(GPIOH_PIN2) | \
- PIN_ODR_HIGH(GPIOH_PIN3) | \
- PIN_ODR_HIGH(GPIOH_PIN4) | \
- PIN_ODR_HIGH(GPIOH_PIN5) | \
- PIN_ODR_HIGH(GPIOH_PIN6) | \
- PIN_ODR_HIGH(GPIOH_PIN7) | \
- PIN_ODR_HIGH(GPIOH_PIN8) | \
- PIN_ODR_HIGH(GPIOH_PIN9) | \
- PIN_ODR_HIGH(GPIOH_PIN10) | \
- PIN_ODR_HIGH(GPIOH_PIN11) | \
- PIN_ODR_HIGH(GPIOH_PIN12) | \
- PIN_ODR_HIGH(GPIOH_PIN13) | \
- PIN_ODR_HIGH(GPIOH_PIN14) | \
- PIN_ODR_HIGH(GPIOH_PIN15))
-#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
- PIN_AFIO_AF(GPIOH_PIN1, 0) | \
- PIN_AFIO_AF(GPIOH_PIN2, 0) | \
- PIN_AFIO_AF(GPIOH_PIN3, 0) | \
- PIN_AFIO_AF(GPIOH_PIN4, 0) | \
- PIN_AFIO_AF(GPIOH_PIN5, 0) | \
- PIN_AFIO_AF(GPIOH_PIN6, 0) | \
- PIN_AFIO_AF(GPIOH_PIN7, 0))
-#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
- PIN_AFIO_AF(GPIOH_PIN9, 0) | \
- PIN_AFIO_AF(GPIOH_PIN10, 0) | \
- PIN_AFIO_AF(GPIOH_PIN11, 0) | \
- PIN_AFIO_AF(GPIOH_PIN12, 0) | \
- PIN_AFIO_AF(GPIOH_PIN13, 0) | \
- PIN_AFIO_AF(GPIOH_PIN14, 0) | \
- PIN_AFIO_AF(GPIOH_PIN15, 0))
-
-
-/*
- * USB bus activation macro, required by the USB driver.
- */
-// #define usb_lld_connect_bus(usbp)
-#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
-// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
-/*
- * USB bus de-activation macro, required by the USB driver.
- */
-// #define usb_lld_disconnect_bus(usbp)
-#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
-// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
-
-#if !defined(_FROM_ASM_)
-#ifdef __cplusplus
-extern "C" {
-#endif
- void boardInit(void);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _FROM_ASM_ */
-
-#endif /* _BOARD_H_ */
diff --git a/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.mk
deleted file mode 100755
index 43377629a3..0000000000
--- a/keyboards/nk65/boards/GENERIC_STM32_F303XC/board.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-# List of all the board related files.
-BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
-
-# Required include directories
-BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/nk65/rules.mk b/keyboards/nk65/rules.mk
index ca0a8e5855..0840daf376 100755
--- a/keyboards/nk65/rules.mk
+++ b/keyboards/nk65/rules.mk
@@ -1,52 +1,11 @@
-# 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 =
+# MCU name
+MCU = STM32F303
# 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.
#
@@ -67,3 +26,10 @@ DYNAMIC_KEYMAP_ENABLE = no
CIE1931_CURVE = yes
LAYOUTS = 65_ansi
+
+# 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
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/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h
index 4719c22696..585c916404 100644
--- a/keyboards/orthodox/keymaps/drashna/config.h
+++ b/keyboards/orthodox/keymaps/drashna/config.h
@@ -34,41 +34,40 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* key combination for magic key command */
#undef IS_COMMAND
-#define IS_COMMAND() ( \
- get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT)) \
-)
+#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT)))
#ifdef RGBLIGHT_ENABLE
-# define RGB_DI_PIN D3
-# define RGBLED_NUM 16 // Number of LEDs
-# define RGBLED_SPLIT { 8, 8 }
-
-# define RGBLIGHT_HUE_STEP 12
-# define RGBLIGHT_SAT_STEP 12
-# define RGBLIGHT_VAL_STEP 12
-# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
-# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
-#endif // RGBLIGHT_ENABLE
+# define RGB_DI_PIN D3
+# define RGBLED_NUM 16 // Number of LEDs
+# define RGBLED_SPLIT \
+ { 8, 8 }
+
+# define RGBLIGHT_HUE_STEP 12
+# define RGBLIGHT_SAT_STEP 12
+# define RGBLIGHT_VAL_STEP 12
+# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
+#endif // RGBLIGHT_ENABLE
#ifdef AUDIO_ENABLE
-# define C6_AUDIO
-# ifdef RGBLIGHT_ENABLE
-# define NO_MUSIC_MODE
-# endif
-#endif //AUDIO_ENABLE
+# define C6_AUDIO
+# ifdef RGBLIGHT_ENABLE
+# define NO_MUSIC_MODE
+# endif
+#endif // AUDIO_ENABLE
#undef PRODUCT
#ifdef KEYBOARD_orthodox_rev1
-# define PRODUCT Drashna Hacked Orthodox Rev.1
+# define PRODUCT Drashna Hacked Orthodox Rev .1
#elif KEYBOARD_orthodox_rev3
-# define PRODUCT Drashna Hacked Orthodox Rev.3
+# define PRODUCT Drashna Hacked Orthodox Rev .3
#endif
-#define QMK_ESC_OUTPUT D7 // usually COL
+#define QMK_ESC_OUTPUT D7 // usually COL
#ifdef KEYBOARD_orthodox_rev1
-# define QMK_ESC_INPUT D4 // usually ROW
+# define QMK_ESC_INPUT D4 // usually ROW
#else
-# define QMK_ESC_INPUT D2 // usually ROW
+# define QMK_ESC_INPUT D2 // usually ROW
#endif
#define QMK_LED B0
#define QMK_SPEAKER C6
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
index bf6b62b41f..2dbe186343 100644
--- a/keyboards/orthodox/keymaps/drashna/keymap.c
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -1,35 +1,12 @@
-/*
-This is the keymap for the keyboard
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-Copyright 2017 Art Ortenburger
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-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 "drashna.h"
-#ifdef INDICATOR_LIGHTS
-extern userspace_config_t userspace_config;
-
-uint8_t last_mod;
-uint8_t last_led;
-uint8_t last_osm;
-#endif
-
+/*
+ * The `LAYOUT_orthodox_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
// clang-format off
#define LAYOUT_orthodox_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -38,7 +15,7 @@ uint8_t last_osm;
) \
LAYOUT_wrapper( \
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \
- KC_TAB, ALT_T(K11), K12, K13, K14, K15, OS_LALT, OS_LGUI, OS_RALT, RAISE, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
+ LALT_T(KC_TAB), K11, K12, K13, K14, K15, OS_LALT, OS_LGUI, OS_RALT, RAISE, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
KC_MLSF, CTL_T(K21), K22, K23, K24, K25, LOWER, KC_SPACE,KC_BSPC, KC_DEL, KC_ENT, RAISE, K26, K27, K28, K29, RCTL_T(K2A), KC_MRSF \
)
#define LAYOUT_orthodox_base_wrapper(...) LAYOUT_orthodox_base(__VA_ARGS__)
diff --git a/keyboards/panc60/config.h b/keyboards/panc60/config.h
index 921d8da303..c565f39bcc 100644
--- a/keyboards/panc60/config.h
+++ b/keyboards/panc60/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER Panc Interactive
#define PRODUCT panc60
diff --git a/keyboards/panc60/panc60.c b/keyboards/panc60/panc60.c
index 16674d30d2..6bd16a4bdc 100644
--- a/keyboards/panc60/panc60.c
+++ b/keyboards/panc60/panc60.c
@@ -13,52 +13,33 @@
* 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 "panc60.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
+#include "panc60.h"
void backlight_init_ports(void) {
- DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ setPinOutput(D0);
+ setPinOutput(D1);
+ setPinOutput(D4);
+ setPinOutput(D6);
+
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
}
void backlight_set(uint8_t level) {
if (level == 0) {
// Turn out the lights
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
} else {
// Turn on the lights
- PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinHigh(D0);
+ writePinHigh(D1);
+ writePinHigh(D4);
+ writePinHigh(D6);
}
}
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/panc60/rules.mk b/keyboards/panc60/rules.mk
index 6ca8d7b78c..d3ed4998bc 100644
--- a/keyboards/panc60/rules.mk
+++ b/keyboards/panc60/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
@@ -31,14 +16,11 @@ BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
-COMMAND_ENABLE = yes
+COMMAND_ENABLE = no
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-# custom matrix setup
-SRC = i2c_master.c
-
LAYOUTS = 60_ansi 60_hhkb
diff --git a/keyboards/panc60/usbconfig.h b/keyboards/panc60/usbconfig.h
index 54a7d20f14..e65d210ace 100644
--- a/keyboards/panc60/usbconfig.h
+++ b/keyboards/panc60/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/pearl/config.h b/keyboards/pearl/config.h
index 3dbe5ee030..0ae69e8e2b 100644
--- a/keyboards/pearl/config.h
+++ b/keyboards/pearl/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0348
+#define DEVICE_VER 0x0200
#define MANUFACTURER Pearl Boards
#define PRODUCT Pearl
#define DESCRIPTION 40% keyboard
diff --git a/keyboards/pearl/pearl.c b/keyboards/pearl/pearl.c
index c8cd8a8609..093b5fdd93 100644
--- a/keyboards/pearl/pearl.c
+++ b/keyboards/pearl/pearl.c
@@ -15,49 +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/>.
*/
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "pearl.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -74,17 +32,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
-} \ No newline at end of file
+ }
+}
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/pearl/rules.mk b/keyboards/pearl/rules.mk
index eacf8bb2c3..79b783e421 100644
--- a/keyboards/pearl/rules.mk
+++ b/keyboards/pearl/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
@@ -34,9 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-SRC = i2c_master.c
diff --git a/keyboards/pearl/usbconfig.h b/keyboards/pearl/usbconfig.h
index 54a7d20f14..e65d210ace 100644
--- a/keyboards/pearl/usbconfig.h
+++ b/keyboards/pearl/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/percent/canoe/canoe.c b/keyboards/percent/canoe/canoe.c
index a7427e1528..e59b0dd7bc 100644
--- a/keyboards/percent/canoe/canoe.c
+++ b/keyboards/percent/canoe/canoe.c
@@ -16,81 +16,43 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "canoe.h"
-#ifdef BACKLIGHT_ENABLE
-#include "backlight.h"
-#endif
-#ifdef RGBLIGHT_ENABLE
-#include "i2c.h"
-#include "rgblight.h"
-#endif
+
+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) {
// Turn out the lights
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
} else {
// Turn on the lights
- PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ writePinHigh(D0);
+ writePinHigh(D1);
+ writePinHigh(D4);
+ writePinHigh(D6);
}
}
void backlight_init_ports(void) {
- DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
- PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
-}
-
-#endif
-
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+ setPinOutput(D0);
+ setPinOutput(D1);
+ setPinOutput(D4);
+ setPinOutput(D6);
+
+ writePinLow(D0);
+ writePinLow(D1);
+ writePinLow(D4);
+ writePinLow(D6);
}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
-void matrix_scan_kb(void) {
#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__((weak)) // overridable
-void matrix_init_user(void) {
-
-}
-
-
-__attribute__((weak)) // overridable
-void matrix_scan_user(void) {
-
-}
diff --git a/keyboards/percent/canoe/canoe.h b/keyboards/percent/canoe/canoe.h
index 2f608598f8..9e1e3e3d6a 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, \
@@ -56,3 +56,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
}
#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 45581b5493..bae6ed20fa 100644
--- a/keyboards/percent/canoe/config.h
+++ b/keyboards/percent/canoe/config.h
@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER NotActuallyPercent
#define PRODUCT CANOE
diff --git a/keyboards/percent/canoe/i2c.c b/keyboards/percent/canoe/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/percent/canoe/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/percent/canoe/i2c.h b/keyboards/percent/canoe/i2c.h
deleted file mode 100644
index 93a69c94da..0000000000
--- a/keyboards/percent/canoe/i2c.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
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/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 e3269b94db..f2f6ee4e5b 100644
--- a/keyboards/percent/canoe/rules.mk
+++ b/keyboards/percent/canoe/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
@@ -34,12 +19,12 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
-LAYOUTS = 65_ansi_blocker \ No newline at end of file
+LAYOUTS = 65_ansi_blocker 65_iso_blocker
diff --git a/keyboards/percent/canoe/usbconfig.h b/keyboards/percent/canoe/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/percent/canoe/usbconfig.h
+++ b/keyboards/percent/canoe/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
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 ed7c558db7..7c68d797d5 100644
--- a/keyboards/percent/skog/config.h
+++ b/keyboards/percent/skog/config.h
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER Percent
#define PRODUCT Skog TKL
diff --git a/keyboards/percent/skog/i2c.c b/keyboards/percent/skog/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/percent/skog/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/percent/skog/rules.mk b/keyboards/percent/skog/rules.mk
index b8439906b8..2b0c1154dd 100644
--- a/keyboards/percent/skog/rules.mk
+++ b/keyboards/percent/skog/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2018 Jumail Mundekkat / MxBlue
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# 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
@@ -34,9 +19,9 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
+WS2812_DRIVER = i2c
BACKLIGHT_CUSTOM_DRIVER = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
OPT_DEFS = -DDEBUG_LEVEL=0
@@ -45,4 +30,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight.c
+SRC = matrix.c backlight.c
diff --git a/keyboards/percent/skog/skog.c b/keyboards/percent/skog/skog.c
index 3d1eb0e1a1..8678d483a7 100644
--- a/keyboards/percent/skog/skog.c
+++ b/keyboards/percent/skog/skog.c
@@ -19,23 +19,18 @@ ps2avrGB support code by Kenneth A. (bminiex/.[ch])
#include "skog.h"
-#include "rgblight.h"
+#include "backlight.h"
+#include "backlight_custom.h"
-#include <avr/pgmspace.h>
+void matrix_init_kb(void) { matrix_init_user(); }
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
+__attribute__ ((weak))
+void matrix_init_user(void) {}
-#include "backlight.h"
-#include "backlight_custom.h"
+void matrix_scan_kb(void) { matrix_scan_user(); }
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
@@ -51,48 +46,3 @@ void backlight_set(uint8_t level) {
b_led_set(level);
}
#endif
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
-void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__((weak)) // overridable
-void matrix_init_user(void) {
-
-}
-
-__attribute__((weak)) // overridable
-void matrix_scan_user(void) {
-
-}
diff --git a/keyboards/percent/skog/usbconfig.h b/keyboards/percent/skog/usbconfig.h
index 481d7c0b14..3a06286588 100644
--- a/keyboards/percent/skog/usbconfig.h
+++ b/keyboards/percent/skog/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'P','e','r','c','e','n','t'
diff --git a/keyboards/percent/skog_lite/config.h b/keyboards/percent/skog_lite/config.h
index 8362139119..97d11238e3 100644
--- a/keyboards/percent/skog_lite/config.h
+++ b/keyboards/percent/skog_lite/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER Percent
#define PRODUCT Skog Lite
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/percent/skog_lite/rules.mk b/keyboards/percent/skog_lite/rules.mk
index ed29c47f2c..1d2372c77f 100644
--- a/keyboards/percent/skog_lite/rules.mk
+++ b/keyboards/percent/skog_lite/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
@@ -34,10 +19,8 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-SRC = i2c_master.c
-
LAYOUTS = tkl_ansi
diff --git a/keyboards/percent/skog_lite/skog_lite.c b/keyboards/percent/skog_lite/skog_lite.c
index a77fc92586..a6c00f5293 100644
--- a/keyboards/percent/skog_lite/skog_lite.c
+++ b/keyboards/percent/skog_lite/skog_lite.c
@@ -13,49 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "skog_lite.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
diff --git a/keyboards/percent/skog_lite/usbconfig.h b/keyboards/percent/skog_lite/usbconfig.h
index 54a7d20f14..e65d210ace 100644
--- a/keyboards/percent/skog_lite/usbconfig.h
+++ b/keyboards/percent/skog_lite/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/pico/config.h b/keyboards/pico/config.h
new file mode 100644
index 0000000000..36c8f68b90
--- /dev/null
+++ b/keyboards/pico/config.h
@@ -0,0 +1,27 @@
+/* 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"
+
+#define USE_SERIAL
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
diff --git a/keyboards/pico/info.json b/keyboards/pico/info.json
new file mode 100644
index 0000000000..c5c9c8a85f
--- /dev/null
+++ b/keyboards/pico/info.json
@@ -0,0 +1,76 @@
+{
+ "keyboard_name": "Pico Keyboard",
+ "url": "https://github.com/kumaokobo/pico-keyboard/",
+ "maintainer": "Kumao Kobo",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":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":"Q", "x":1.25, "y":1},
+ {"label":"W", "x":2.25, "y":1},
+ {"label":"E", "x":3.25, "y":1},
+ {"label":"R", "x":4.25, "y":1},
+ {"label":"T", "x":5.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":"A", "x":1.5, "y":2},
+ {"label":"S", "x":2.5, "y":2},
+ {"label":"D", "x":3.5, "y":2},
+ {"label":"F", "x":4.5, "y":2},
+ {"label":"G", "x":5.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":"Z", "x":1.75, "y":3},
+ {"label":"X", "x":2.75, "y":3},
+ {"label":"C", "x":3.75, "y":3},
+ {"label":"V", "x":4.75, "y":3},
+ {"label":"B", "x":5.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":"Enter", "x":2, "y":4},
+ {"label":"Del", "x":3, "y":4},
+ {"label":"GUI", "x":4, "y":4},
+ {"label":"LANG2", "x":5, "y":4},
+ {"label":"Space", "x":6, "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/keymaps/default/config.h b/keyboards/pico/keymaps/default/config.h
new file mode 100644
index 0000000000..5cbe7609a3
--- /dev/null
+++ b/keyboards/pico/keymaps/default/config.h
@@ -0,0 +1,18 @@
+/*
+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
diff --git a/keyboards/pico/keymaps/default/keymap.c b/keyboards/pico/keymaps/default/keymap.c
new file mode 100644
index 0000000000..17076f20cd
--- /dev/null
+++ b/keyboards/pico/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_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_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_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_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/keymaps/default/readme.md b/keyboards/pico/keymaps/default/readme.md
new file mode 100644
index 0000000000..9f8fa53ebf
--- /dev/null
+++ b/keyboards/pico/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for Pico Keyboard
+
+![Pico Layout Image](https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-layout.png)
diff --git a/keyboards/pico/keymaps/jis/config.h b/keyboards/pico/keymaps/jis/config.h
new file mode 100644
index 0000000000..5cbe7609a3
--- /dev/null
+++ b/keyboards/pico/keymaps/jis/config.h
@@ -0,0 +1,18 @@
+/*
+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
diff --git a/keyboards/pico/keymaps/jis/keymap.c b/keyboards/pico/keymaps/jis/keymap.c
new file mode 100644
index 0000000000..a3d2606613
--- /dev/null
+++ b/keyboards/pico/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_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_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_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_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_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/keymaps/jis/readme.md b/keyboards/pico/keymaps/jis/readme.md
new file mode 100644
index 0000000000..49d2aa7b7a
--- /dev/null
+++ b/keyboards/pico/keymaps/jis/readme.md
@@ -0,0 +1,3 @@
+# The JIS-like keymap for Pico Keyboard
+
+![Pico JIS like Layout Image](https://raw.githubusercontent.com/kumaokobo/pico-keyboard/master/img/pico-jis-like-layout.png)
diff --git a/keyboards/pico/pico.c b/keyboards/pico/pico.c
new file mode 100644
index 0000000000..7a7a7a6457
--- /dev/null
+++ b/keyboards/pico/pico.c
@@ -0,0 +1,16 @@
+/* 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/>.
+ */
+#include "pico.h"
diff --git a/keyboards/pico/pico.h b/keyboards/pico/pico.h
new file mode 100644
index 0000000000..246ed87558
--- /dev/null
+++ b/keyboards/pico/pico.h
@@ -0,0 +1,23 @@
+/* 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
+
+#ifdef KEYBOARD_pico_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/pico/readme.md b/keyboards/pico/readme.md
new file mode 100644
index 0000000000..26bbf1da2e
--- /dev/null
+++ b/keyboards/pico/readme.md
@@ -0,0 +1,17 @@
+# 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.
+
+* Keyboard Maintainer: [Kumao Kobo](https://github.com/kumaokobo)
+* Hardware Supported: Pico PCB rev1.0 w/ Pro Micro
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pico/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/pico/rev1/config.h b/keyboards/pico/rev1/config.h
new file mode 100644
index 0000000000..ab22025256
--- /dev/null
+++ b/keyboards/pico/rev1/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 0x0100
+#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/rev1/rev1.c b/keyboards/pico/rev1/rev1.c
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/pico/rev1/rev1.c
diff --git a/keyboards/pico/rev1/rev1.h b/keyboards/pico/rev1/rev1.h
new file mode 100644
index 0000000000..61e32efd2c
--- /dev/null
+++ b/keyboards/pico/rev1/rev1.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "pico.h"
+#include "quantum.h"
+
+#define LAYOUT( \
+ L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
+) \
+{ \
+ { KC_NO, L01, L02, L03, L04, L05, L06 }, \
+ { KC_NO, L11, L12, L13, L14, L15, L16 }, \
+ { KC_NO, L21, L22, L23, L24, L25, L26 }, \
+ { KC_NO, L31, L32, L33, L34, L35, L36 }, \
+ { KC_NO, 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/rev1/rules.mk b/keyboards/pico/rev1/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/pico/rev1/rules.mk
diff --git a/keyboards/pico/rules.mk b/keyboards/pico/rules.mk
new file mode 100644
index 0000000000..fc6ad1e7eb
--- /dev/null
+++ b/keyboards/pico/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 = 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 = 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 = 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 # Enable WS2812 RGB underlight.
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = pico/rev1
diff --git a/keyboards/plaid/config.h b/keyboards/plaid/config.h
index 9da31d700f..8fa8aa85b6 100644
--- a/keyboards/plaid/config.h
+++ b/keyboards/plaid/config.h
@@ -50,6 +50,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
diff --git a/keyboards/plaid/keymaps/default/keymap.c b/keyboards/plaid/keymaps/default/keymap.c
index 35c22b4983..6a858a4a73 100644
--- a/keyboards/plaid/keymaps/default/keymap.c
+++ b/keyboards/plaid/keymaps/default/keymap.c
@@ -16,7 +16,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
enum plaid_layers {
_QWERTY,
@@ -235,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/plaid/usbconfig.h b/keyboards/plaid/usbconfig.h
index ea9fdd8ea6..ba48a32649 100644
--- a/keyboards/plaid/usbconfig.h
+++ b/keyboards/plaid/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x01
+#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 'd','m','9','r','e','c','o','r','d','s'
diff --git a/keyboards/planck/ez/rules.mk b/keyboards/planck/ez/rules.mk
index 8e1eeeb993..7fb0dec50f 100644
--- a/keyboards/planck/ez/rules.mk
+++ b/keyboards/planck/ez/rules.mk
@@ -1,5 +1,5 @@
-# Cortex version
-MCU = STM32F303
+# MCU name
+MCU = STM32F303
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
index 2a7a53d38d..c6298d247b 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,8 +162,8 @@ 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,
+ caps, grv, pipe, bsls, lcbr, tild, circ, rcbr, ampr, exlm, perc, caps,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
),
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/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index 47394378c5..22ff24c92b 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -17,7 +17,6 @@
#include QMK_KEYBOARD_H
#include "muse.h"
-extern keymap_config_t keymap_config;
enum planck_layers {
_QWERTY,
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 1c4a00b965..f18102ee2b 100644
--- a/keyboards/planck/keymaps/dshields/keymap.c
+++ b/keyboards/planck/keymaps/dshields/keymap.c
@@ -1,12 +1,11 @@
#include QMK_KEYBOARD_H
#include "dshields.h"
-#include "dynamic_macro.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEF] = LAYOUT_planck_grid(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P ,
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_Z, KC_X, KC_C, KC_V, KC_B, OSMLSFT, DM_PLAY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, OSMLSFT, DM_PLY1, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
OSMLCTL, KC_LGUI, OSMLALT, OSL_FUN, OSL_LWR, MT_SPC, MT_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
[LWR] = LAYOUT_planck_grid(
@@ -24,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[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, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3,
+ LGT_TOG, LGT_MOD, LGT_BRT, LGT_INC, LGT_DEC, DM_REC1, DM_RSTP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
)
};
diff --git a/keyboards/planck/rev6/config.h b/keyboards/planck/rev6/config.h
index d8c9d86ae6..3cea2e721e 100644
--- a/keyboards/planck/rev6/config.h
+++ b/keyboards/planck/rev6/config.h
@@ -125,14 +125,17 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-#define WS2812_LED_N 2
-#define RGBLED_NUM WS2812_LED_N
-#define WS2812_TIM_N 2
-#define WS2812_TIM_CH 2
-#define PORT_WS2812 GPIOA
-#define PIN_WS2812 1
-#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
+// #define WS2812_LED_N 2
+// #define RGBLED_NUM WS2812_LED_N
+// #define WS2812_TIM_N 2
+// #define WS2812_TIM_CH 2
+// #define PORT_WS2812 GPIOA
+// #define PIN_WS2812 1
+// #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
//#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP
//#define WS2812_EXTERNAL_PULLUP
+#define RGB_DI_PIN A1
+#define RGBLED_NUM 9
+#define RGBLIGHT_ANIMATIONS
#endif
diff --git a/keyboards/planck/rev6/rules.mk b/keyboards/planck/rev6/rules.mk
index 9cedb17994..429fc50a2c 100644
--- a/keyboards/planck/rev6/rules.mk
+++ b/keyboards/planck/rev6/rules.mk
@@ -1,8 +1,5 @@
-# project specific files
-LAYOUTS += ortho_4x12
-
-# Cortex version
-MCU = STM32F303
+# MCU name
+MCU = STM32F303
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
@@ -20,7 +17,8 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+WS2812_DRIVER = bitbang
API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
@@ -29,7 +27,7 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# SERIAL_LINK_ENABLE = yes
ENCODER_ENABLE = yes
-DIP_SWITCH_ENABLE = yes
+DIP_SWITCH_ENABLE = yes
LAYOUTS = ortho_4x12 planck_mit
LAYOUTS_HAS_RGB = no
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/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/config.h b/keyboards/preonic/rev3/config.h
index 5eac2169e6..b5b2ced5a7 100644
--- a/keyboards/preonic/rev3/config.h
+++ b/keyboards/preonic/rev3/config.h
@@ -112,14 +112,18 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-#define WS2812_LED_N 2
-#define RGBLED_NUM WS2812_LED_N
-#define WS2812_TIM_N 2
-#define WS2812_TIM_CH 2
-#define PORT_WS2812 GPIOA
-#define PIN_WS2812 1
-#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
+// #define WS2812_LED_N 2
+// #define RGBLED_NUM WS2812_LED_N
+// #define WS2812_TIM_N 2
+// #define WS2812_TIM_CH 2
+// #define PORT_WS2812 GPIOA
+// #define PIN_WS2812 1
+// #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
//#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP
//#define WS2812_EXTERNAL_PULLUP
+#define RGB_DI_PIN A1
+#define RGBLED_NUM 9
+#define RGBLIGHT_ANIMATIONS
+
#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/preonic/rev3/rules.mk b/keyboards/preonic/rev3/rules.mk
index 4aaa775e75..ad8a829679 100644
--- a/keyboards/preonic/rev3/rules.mk
+++ b/keyboards/preonic/rev3/rules.mk
@@ -1,5 +1,5 @@
-# Cortex version
-MCU = STM32F303
+# MCU name
+MCU = STM32F303
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
@@ -17,7 +17,8 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+WS2812_DRIVER = bitbang
API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
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/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/keymaps/default/keymap.c b/keyboards/projectkb/alice/keymaps/default/keymap.c
index bad22f9ae4..a56f24f3ff 100644
--- a/keyboards/projectkb/alice/keymaps/default/keymap.c
+++ b/keyboards/projectkb/alice/keymaps/default/keymap.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -42,4 +41,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, RESET
)
};
-
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/qwertyydox/keymaps/default/keymap.c b/keyboards/qwertyydox/keymaps/default/keymap.c
index 5c4dd00e80..2884fcfbce 100644
--- a/keyboards/qwertyydox/keymaps/default/keymap.c
+++ b/keyboards/qwertyydox/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
enum layer_names {
_QWERTY,
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/redox/keymaps/tw1t611/config.h b/keyboards/redox/keymaps/tw1t611/config.h
new file mode 100644
index 0000000000..2110642c54
--- /dev/null
+++ b/keyboards/redox/keymaps/tw1t611/config.h
@@ -0,0 +1,17 @@
+#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
diff --git a/keyboards/redox/keymaps/tw1t611/keymap.c b/keyboards/redox/keymaps/tw1t611/keymap.c
new file mode 100644
index 0000000000..1309831b23
--- /dev/null
+++ b/keyboards/redox/keymaps/tw1t611/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+#include "keymap_german.h"
+
+enum {
+ QWERTZ = 0,
+ MOD,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [QWERTZ] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
+ _______ ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,_______ , _______ ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_AE ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_BSPC , KC_DEL ,KC_H ,KC_J ,KC_K ,KC_L ,DE_EQL ,DE_OE ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ DE_UNDS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_LCTL ,KC_BSPC , KC_DEL ,KC_RCTL ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,DE_SS ,DE_UE ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , KC_LALT , KC_SPC ,KC_LSFT , MO(MOD) ,KC_ENT , KC_LGUI , _______ ,_______ ,_______ ,_______
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+ [MOD] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┠┌────────┬────────┬────────┬────────┬────────┬────────â”
+ KC_F12 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ DE_CIRC ,DE_QUOT ,DE_DQOT ,DE_LCBR ,DE_RCBR ,DE_GRV ,RGB_MOD , RESET ,DE_PERC ,DE_PLUS ,DE_MINS ,DE_ASTR ,DE_SLSH ,DE_BSLS ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ DE_TILD ,DE_EXLM ,DE_DLR ,DE_LPRN ,DE_RPRN ,DE_AMPR ,RGB_TOG , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT ,DE_QST ,DE_PIPE ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┠┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,DE_AT ,DE_EURO ,DE_LBRC ,DE_RBRC ,_______ ,RGB_M_P ,_______ , _______ ,_______ ,DE_HASH ,DE_LESS ,DE_SCLN ,DE_COLN ,DE_MORE ,DE_PARA ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , _______ , _______ ,_______ ,_______ ,_______
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/redox/keymaps/tw1t611/readme.md b/keyboards/redox/keymaps/tw1t611/readme.md
new file mode 100644
index 0000000000..1bb928f58d
--- /dev/null
+++ b/keyboards/redox/keymaps/tw1t611/readme.md
@@ -0,0 +1 @@
+# Keymap for Redox by tw1t611
diff --git a/keyboards/redscarf_iiplus/verd/config.h b/keyboards/redscarf_iiplus/verd/config.h
new file mode 100644
index 0000000000..5c19f2abe5
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 Andy Lee <alee@alittlepeacemusic.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 0x7778
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RedScarf
+#define PRODUCT RedScarfII+
+#define DESCRIPTION QMK Firmware for the RedScarf II+
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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)
+ *
+*/
+#define MATRIX_ROW_PINS { }
+#define MATRIX_COL_PINS { F4, F1, F0, B3, D0, D1, D4, D5, D6, D7, F7, F6, D2, D3, B6, B5, B4, F5 }
+#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
+
+/* 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/redscarf_iiplus/verd/info.json b/keyboards/redscarf_iiplus/verd/info.json
new file mode 100644
index 0000000000..65152a341c
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/info.json
@@ -0,0 +1,190 @@
+{
+ "keyboard_name": "Red Scarf II+ Ver D",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_numpad_split0": {
+ "key_count": 79,
+ "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":"Num Lock", "x":15, "y":0},
+ {"label":"/", "x":16, "y":0},
+ {"label":"*", "x":17, "y":0},
+ {"label":"-", "x":18, "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":"7", "x":15, "y":1},
+ {"label":"8", "x":16, "y":1},
+ {"label":"9", "x":17, "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":"4", "x":15, "y":2},
+ {"label":"5", "x":16, "y":2},
+ {"label":"6", "x":17, "y":2},
+ {"label":"+", "x":18, "y":1, "h":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":2.75},
+ {"label":"1", "x":15, "y":3},
+ {"label":"2", "x":16, "y":3},
+ {"label":"3", "x":17, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25},
+
+ {"label":"0", "x":15, "y":4},
+ {"label":"0", "x":16, "y":4},
+ {"label":".", "x":17, "y":4},
+ {"label":"Enter", "x":18, "y":3, "h":2}
+ ]
+
+ },
+ "LAYOUT_60_ansi_numpad": {
+ "key_count": 78,
+ "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":"Num Lock", "x":15, "y":0},
+ {"label":"/", "x":16, "y":0},
+ {"label":"*", "x":17, "y":0},
+ {"label":"-", "x":18, "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":"7", "x":15, "y":1},
+ {"label":"8", "x":16, "y":1},
+ {"label":"9", "x":17, "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":"4", "x":15, "y":2},
+ {"label":"5", "x":16, "y":2},
+ {"label":"6", "x":17, "y":2},
+ {"label":"+", "x":18, "y":1, "h":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":2.75},
+ {"label":"1", "x":15, "y":3},
+ {"label":"2", "x":16, "y":3},
+ {"label":"3", "x":17, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25},
+
+ {"label":"0", "x":15, "y":4, "w":2},
+ {"label":".", "x":17, "y":4},
+ {"label":"Enter", "x":18, "y":3, "h":2}
+ ]
+ }
+
+ }
+}
diff --git a/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c b/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c
new file mode 100644
index 0000000000..df26eec6cc
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/keymaps/alittlepeace/keymap.c
@@ -0,0 +1,81 @@
+/* Copyright 2019 Andy Lee <alee@alittlepeacemusic.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
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ KC_P00 = SAFE_RANGE,
+
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_ansi_numpad_split0(
+ 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, TG(1), 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_INS, KC_HOME, 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_DEL, KC_END, KC_PGDN, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, C(S(KC_TAB)), KC_UP, LCTL(KC_TAB),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT
+ ),
+
+ [1] = LAYOUT_60_ansi_numpad_split0(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_P00, KC_DOT, _______
+ ),
+
+ [2] = LAYOUT_60_ansi_numpad_split0(
+ _______, 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 KC_P00:
+ if (record->event.pressed) {
+ SEND_STRING("00");
+ }
+ break;
+ case TG(1):
+ if (record->event.pressed) {
+ tap_code(KC_NUMLOCK);
+ return true;
+ }
+ break;
+
+ }
+ return true;
+}
+
+void matrix_init_user (void) {
+ if (!host_keyboard_led_state ().num_lock) {
+ tap_code(KC_NUMLOCK);
+ }
+}
+
+bool led_update_user(led_t led_state) {
+ if (led_state.num_lock) {
+ layer_on(1);
+ } else {
+ layer_off(1);
+ }
+ return true;
+}
diff --git a/keyboards/redscarf_iiplus/verd/keymaps/default/keymap.c b/keyboards/redscarf_iiplus/verd/keymaps/default/keymap.c
new file mode 100644
index 0000000000..7bf7eb7c66
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2019 Andy Lee <alee@alittlepeacemusic.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_60_ansi_numpad(
+ 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
+ KC_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_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_P0, KC_PDOT, KC_PENT
+ ),
+
+ [1] = LAYOUT_60_ansi_numpad(
+ _______, 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/redscarf_iiplus/verd/keymaps/default/readme.md b/keyboards/redscarf_iiplus/verd/keymaps/default/readme.md
new file mode 100644
index 0000000000..cf396a4255
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for the Red Scarf II+ ver D.
diff --git a/keyboards/redscarf_iiplus/verd/matrix.c b/keyboards/redscarf_iiplus/verd/matrix.c
new file mode 100644
index 0000000000..28568653c5
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/matrix.c
@@ -0,0 +1,391 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+Port done by Andy Lee <alee@alittlepeacemusic.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 <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)
+// 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;
+}
+
+
+#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);
+ }
+ }
+ }
+}
+
+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;
+
+ 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);
+ }
+ }
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+#elif (DIODE_DIRECTION == COL2ROW)
+/* Rows 0 - 5
+ * These rows use a 74HC138 3-to-8 demultiplexer.
+ * C B A
+ * row / pin: PB0 PB1 PB2
+ * 0: 0 0 0
+ * 1: 0 0 1
+ * 2: 0 1 0
+ * 3: 0 1 1
+ * 4: 1 0 0
+ * 5: 1 0 1
+ */
+static void select_row(uint8_t col)
+{
+ switch (col) {
+ case 0:
+ writePinLow(B0);
+ writePinLow(B1);
+ writePinLow(B2);
+ break;
+ case 1:
+ writePinLow(B0);
+ writePinLow(B1);
+ break;
+ case 2:
+ writePinLow(B0);
+ writePinLow(B2);
+ break;
+ case 3:
+ writePinLow(B0);
+ break;
+ case 4:
+ writePinLow(B1);
+ writePinLow(B2);
+ break;
+ case 5:
+ writePinLow(B1);
+ break;
+ }
+}
+
+static void unselect_row(uint8_t col)
+{
+ switch (col) {
+ case 0:
+ writePinHigh(B0);
+ writePinHigh(B1);
+ writePinHigh(B2);
+ break;
+ case 1:
+ writePinHigh(B0);
+ writePinHigh(B1);
+ break;
+ case 2:
+ writePinHigh(B0);
+ writePinHigh(B2);
+ break;
+ case 3:
+ writePinHigh(B0);
+ break;
+ case 4:
+ writePinHigh(B1);
+ writePinHigh(B2);
+ break;
+ case 5:
+ writePinHigh(B1);
+ break;
+ }
+}
+
+static void unselect_rows(void)
+{
+ setPinOutput(B0);
+ setPinOutput(B1);
+ setPinOutput(B2);
+ // make all pins high to select Y7, nothing is connected to that (otherwise the first row will act weird)
+ writePinHigh(B0);
+ writePinHigh(B1);
+ writePinHigh(B2);
+}
+
+static void init_pins(void) {
+ 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)
+{
+ // 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]);
+}
+
+#elif (DIODE_DIRECTION == ROW2COL)
+
+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_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)
+{
+ 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; 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)
+ {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+#endif
+
+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;
+
+#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);
+ }
+#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, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return 1;
+}
diff --git a/keyboards/redscarf_iiplus/verd/readme.md b/keyboards/redscarf_iiplus/verd/readme.md
new file mode 100644
index 0000000000..37ca69a669
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/readme.md
@@ -0,0 +1,24 @@
+# Red Scarf II+ Ver.D (RS78)
+
+A 60% keyboard with a numpad on the right
+
+* Keyboard Maintainer: [Andy Lee](https://github.com/alittlepeace)
+* Hardware Supported: Ver.D (RS77)
+* Hardware Availability: [Drop](https://drop.com/buy/red-scarf-ii-plus-ver-d-custom-mechanical-keyboard-kit)
+
+
+Please note that QMK Firmware does not currently support controlling the underglow LEDs; however, if your board came with the remote, it can still be used to change the colour.
+
+## Flashing
+
+The flashing is sub-optimal.
+
+Flashing the Red Scarf involves using Google Chrome, downloading an extension, and then flashing. For more detailed instructions please refer to [kairyu.gitbooks.io](https://kairyu.gitbooks.io/red-scarf-ii-plus-user-guide-how-to-custom-layout/content/online_reflash.html)
+
+---
+
+Make example for this keyboard (after setting up your build environment):
+
+ make redscarf_iiplus/verd: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_iiplus/verd/rules.mk b/keyboards/redscarf_iiplus/verd/rules.mk
new file mode 100644
index 0000000000..89b1a59893
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/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 = halfkay
+
+# 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 = 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
+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
+
+CUSTOM_MATRIX = yes
+SRC += matrix.c
diff --git a/keyboards/redscarf_iiplus/verd/verd.c b/keyboards/redscarf_iiplus/verd/verd.c
new file mode 100644
index 0000000000..c16a5a9740
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/verd.c
@@ -0,0 +1,42 @@
+/* Copyright 2019 Andy Lee <alee@alittlepeacemusic.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 "verd.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();
+ led_init_ports();
+}
+
+void led_init_ports(void) {
+ setPinOutput(C7);
+ writePinHigh(C7);
+ setPinOutput(E6);
+ writePinHigh(E6);
+}
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(C7, !led_state.caps_lock);
+ writePin(E6, !led_state.num_lock);
+ }
+ return true;
+}
diff --git a/keyboards/redscarf_iiplus/verd/verd.h b/keyboards/redscarf_iiplus/verd/verd.h
new file mode 100644
index 0000000000..b96dd0f6b3
--- /dev/null
+++ b/keyboards/redscarf_iiplus/verd/verd.h
@@ -0,0 +1,55 @@
+/* Copyright 2019 Andy Lee <alee@alittlepeacemusic.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_60_ansi_numpad_split0( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, \
+ 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, K213, K214, K215, K216, K217, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, K316, \
+ K400, K401, K402, K409, K410, K411, K412, K413, K414, K415, K416, K417 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K217 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, ____, K213, K214, K215, K216, ____ }, \
+ { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____, K314, K315, K316, ____ }, \
+ { K400, K401, K402, ____, ____, ____, ____, ____, ____, K409, K410, K411, K412, K413, K414, K415, K416, K417 } \
+}
+
+#define LAYOUT_60_ansi_numpad( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, \
+ 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, K213, K214, K215, K216, K217, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, K316, \
+ K400, K401, K402, K409, K410, K411, K412, K413, K414, K416, K417 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K217 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, ____, K213, K214, K215, K216, ____ }, \
+ { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____, K314, K315, K316, ____ }, \
+ { K400, K401, K402, ____, ____, ____, ____, ____, ____, K409, K410, K411, K412, K413, K414, ____, K416, K417 } \
+}
diff --git a/keyboards/retro_75/chconf.h b/keyboards/retro_75/chconf.h
new file mode 100644
index 0000000000..99fa8ce398
--- /dev/null
+++ b/keyboards/retro_75/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/retro_75/config.h b/keyboards/retro_75/config.h
new file mode 100644
index 0000000000..a6b8ec672f
--- /dev/null
+++ b/keyboards/retro_75/config.h
@@ -0,0 +1,249 @@
+/*
+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 0xFEED
+#define PRODUCT_ID 0x5275
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PheonixStarr
+#define PRODUCT Retro75
+#define DESCRIPTION A custom 75% keyboard
+
+/* 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 { A8, B15, B14, B13, B12, B8 }
+#define MATRIX_COL_PINS { A5, A4, A3, F0, C15, C14, C13, A6, B11, B10, B2, B1, B0, A7, A14, A15 }
+#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 A9
+// #ifdef RGB_DI_PIN
+#define RGBLED_NUM 18
+// #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/retro_75/halconf.h b/keyboards/retro_75/halconf.h
new file mode 100644
index 0000000000..8b9724b1a3
--- /dev/null
+++ b/keyboards/retro_75/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/retro_75/info.json b/keyboards/retro_75/info.json
new file mode 100644
index 0000000000..6a6253c375
--- /dev/null
+++ b/keyboards/retro_75/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Retro75",
+ "url": "",
+ "maintainer": "zvecr",
+ "width": 16,
+ "height": 6.25,
+ "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}, {"label":"Prt Sc", "x":15, "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}, {"x":13, "y":1.25, "w":2}, {"label":"Delete", "x":15, "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":"Page Up", "x":15, "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":"Page Down", "x":15, "y":3.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":1.75}, {"label":"\u2191", "x":14, "y":4.25}, {"label":"Fn", "x":15, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Alt", "x":2.25, "y":5.25, "w":1.5}, {"x":3.75, "y":5.25, "w":7}, {"label":"Alt", "x":10.75, "y":5.25, "w":1.5}, {"label":"\u2190", "x":13, "y":5.25}, {"label":"\u2193", "x":14, "y":5.25}, {"label":"\u2192", "x":15, "y":5.25}]
+ },
+ "LAYOUT_split_bs": {
+ "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}, {"label":"Prt Sc", "x":15, "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}, {"x":13, "y":1.25}, {"x":14, "y":1.25}, {"label":"Delete", "x":15, "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":"Page Up", "x":15, "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":"Page Down", "x":15, "y":3.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":1.75}, {"label":"\u2191", "x":14, "y":4.25}, {"label":"Fn", "x":15, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Alt", "x":2.25, "y":5.25, "w":1.5}, {"x":3.75, "y":5.25, "w":7}, {"label":"Alt", "x":10.75, "y":5.25, "w":1.5}, {"label":"\u2190", "x":13, "y":5.25}, {"label":"\u2193", "x":14, "y":5.25}, {"label":"\u2192", "x":15, "y":5.25}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/retro_75/keymaps/default/keymap.c b/keyboards/retro_75/keymaps/default/keymap.c
new file mode 100644
index 0000000000..602eb695ba
--- /dev/null
+++ b/keyboards/retro_75/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,
+ KC_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_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, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/retro_75/keymaps/split_backspace/keymap.c b/keyboards/retro_75/keymaps/split_backspace/keymap.c
new file mode 100644
index 0000000000..58993b8bb3
--- /dev/null
+++ b/keyboards/retro_75/keymaps/split_backspace/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_split_bs(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,
+ KC_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_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_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_split_bs(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/retro_75/mcuconf.h b/keyboards/retro_75/mcuconf.h
new file mode 100644
index 0000000000..faca3defdf
--- /dev/null
+++ b/keyboards/retro_75/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/retro_75/readme.md b/keyboards/retro_75/readme.md
new file mode 100644
index 0000000000..0eb0afff32
--- /dev/null
+++ b/keyboards/retro_75/readme.md
@@ -0,0 +1,15 @@
+# Retro75
+
+![Retro75](https://i.imgur.com/spS7PHo.jpg)
+
+A 75% ARM STM32F072 keyboard, with WS2812 LEDs.
+
+* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
+* Hardware Supported: Retro75 PCB
+* Hardware Availability: Private Group-Buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make retro_75: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/retro_75/retro_75.c b/keyboards/retro_75/retro_75.c
new file mode 100644
index 0000000000..d47def3720
--- /dev/null
+++ b/keyboards/retro_75/retro_75.c
@@ -0,0 +1 @@
+#include "retro_75.h"
diff --git a/keyboards/retro_75/retro_75.h b/keyboards/retro_75/retro_75.h
new file mode 100644
index 0000000000..7a7d10e42e
--- /dev/null
+++ b/keyboards/retro_75/retro_75.h
@@ -0,0 +1,61 @@
+/* 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( \
+ K000, K002, K003, K004, K005, K006, K007, K008, K009, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, 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, K315, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K415, \
+ K500, K501, K505, K509, K511, K512, K515 \
+) \
+{ \
+ { K000, ____, K002, K003, K004, K005, K006, K007, K008, K009, ____, K011, K012, K013, K014, K015}, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, ____, 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, ____, ____, K315}, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, ____, ____, K415}, \
+ { K500, K501, ____, ____, ____, K505, ____, ____, ____, K509, ____, K511, K512, ____, ____, K515}, \
+}
+
+#define LAYOUT_split_bs( \
+ K000, K002, K003, K004, K005, K006, K007, K008, K009, K011, K012, K013, K014, K015, \
+ 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, K315, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K415, \
+ K500, K501, K505, K509, K511, K512, K515 \
+) \
+{ \
+ { K000, ____, K002, K003, K004, K005, K006, K007, K008, K009, ____, K011, K012, K013, K014, K015}, \
+ { 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, ____, ____, K315}, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, ____, ____, K415}, \
+ { K500, K501, ____, ____, ____, K505, ____, ____, ____, K509, ____, K511, K512, ____, ____, K515}, \
+}
diff --git a/keyboards/retro_75/rules.mk b/keyboards/retro_75/rules.mk
new file mode 100644
index 0000000000..82a2cfb06f
--- /dev/null
+++ b/keyboards/retro_75/rules.mk
@@ -0,0 +1,54 @@
+## 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
+
+# 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/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/rgbkb/sol/keymaps/xyverz/keymap.c b/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c
index f5cf9ed3c8..e38663dbb3 100644
--- a/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c
+++ b/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c
@@ -1,13 +1,9 @@
#include QMK_KEYBOARD_H
+
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#include "split_util.h"
#endif
-#ifdef SSD1306OLED
- #include "common/ssd1306.h"
-#endif
-
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -16,10 +12,6 @@ extern rgblight_config_t rgblight_config;
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 {
_DVORAK = 0,
_DESTINY,
@@ -38,13 +30,14 @@ enum custom_keycodes {
LOWER,
RAISE,
ADJUST,
- BACKLIT,
- RGBRST
+ RGBRST,
+ RGB_MENU
};
-enum macro_keycodes {
- KC_SAMPLEMACRO,
-};
+// Aliases to make the keymap clearer.
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_DVORAK] = LAYOUT( \
@@ -53,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL, KC_A, KC_O, KC_E, KC_U, KC_I, XXXXXXX, XXXXXXX, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, XXXXXXX, XXXXXXX, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
KC_GRV, KC_LGUI, KC_LEFT, KC_RGHT, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, \
- KC_BSPC, KC_RGUI, KC_ENT, KC_SPC \
+ KC_BSPC, KC_LGUI, KC_ENT, KC_SPC \
),
@@ -63,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL, KC_A, KC_O, KC_E, KC_U, KC_I, XXXXXXX, XXXXXXX, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, XXXXXXX, XXXXXXX, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
KC_GRV, KC_LGUI, KC_LEFT, KC_RGHT, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, \
- KC_BSPC, KC_RGUI, KC_ENT, KC_SPC \
+ KC_BSPC, KC_DEL, KC_ENT, KC_SPC \
),
@@ -73,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
KC_GRV, KC_LGUI, KC_LEFT, KC_RGHT, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, \
- KC_BSPC, KC_RGUI, KC_ENT, KC_SPC \
+ KC_BSPC, KC_LGUI, KC_ENT, KC_SPC \
),
[_COLEMAK] = LAYOUT( \
@@ -82,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RCTL, KC_A, KC_R, KC_S, KC_T, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, XXXXXXX, XXXXXXX, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
KC_GRV, KC_LGUI, KC_LEFT, KC_RGHT, LOWER, KC_LCTL, KC_LALT, KC_RALT, KC_RCTL, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, \
- KC_BSPC, KC_RGUI, KC_ENT, KC_SPC \
+ KC_BSPC, KC_LGUI, KC_ENT, KC_SPC \
),
[_LOWER] = LAYOUT( \
@@ -103,228 +96,266 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_DEL, _______, _______, KC_INS \
),
- /* ADJUST
- * ,------------------------------------------------. ,------------------------------------------------.
- * | F11 | F1 | F2 | F3 | F4 | F5 | RESET| | | F6 | F7 | F8 | F9 | F10 | F12 |
- * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
- * | | |QWERTY|COLEMK|DVORAK|DESTNY| | | | | PrSc | ScLk | NmLk | | |
- * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
- * | | | Mute | Vol- | Vol+ | | | | |RGBTOG|RGBMOD| HUI | SAI | VAI | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | Prev | Play | Next | | | | | |RGBRMD| HUD | SAD | VAD | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | Home | End | | | | | | PgUp | PgDn | | | |
- * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
- * | Del | | | | Ins |
- * `-------------' `-------------'
- */
-
[_ADJUST] = LAYOUT( \
_______, _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_NLCK, _______, _______, \
KC_CAPS, _______, QWERTY, COLEMAK, DVORAK, DESTINY, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, \
- _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, \
+ _______, _______, _______, RGB_SPI, RGB_SPD, _______, XXXXXXX, XXXXXXX, _______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
KC_DEL, _______, _______, KC_INS \
)
};
-
-
-// define variables for reactive RGB
-bool TOG_STATUS = false;
-int RGB_current_mode;
-
-// Setting ADJ 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)) {
- #ifdef RGBLIGHT_ENABLE
- //rgblight_mode(RGB_current_mode);
- #endif
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
-}
-
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) {
+ if (record->event.pressed) {
+ switch (keycode) {
case DVORAK:
- if (record->event.pressed) {
set_single_persistent_default_layer(_DVORAK);
- }
+ return false;
+ case DESTINY:
+ set_single_persistent_default_layer(_DESTINY);
+ return false;
+ case QWERTY:
+ set_single_persistent_default_layer(_QWERTY);
return false;
case COLEMAK:
- if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
- }
return false;
- case QWERTY:
+ case RGBRST:
+#if defined(RGBLIGHT_ENABLE)
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+#elif defined(RGB_MATRIX_ENABLE)
+ eeconfig_update_rgb_matrix_default();
+#endif
+ return false;
+#if defined(RGB_MATRIX_ENABLE) && defined(KEYBOARD_rgbkb_sol_rev2)
+ case RGB_TOG:
if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
+ rgb_matrix_increase_flags();
}
return false;
-
-/*
- Commenting this out since I removed the layer, but I want this in here for reference.
-
- case FN:
+#endif
+ case RGB_MENU:
+#ifdef RGB_OLED_MENU
if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ if (get_mods() & MOD_MASK_SHIFT) {
+ rgb_encoder_state = (rgb_encoder_state - 1);
+ if (rgb_encoder_state > 5) {
+ rgb_encoder_state = 5;
+ }
} else {
- TOG_STATUS = !TOG_STATUS;
- #ifdef RGBLIGHT_ENABLE
- //rgblight_mode(15);
- #endif
+ rgb_encoder_state = (rgb_encoder_state + 1) % 6;
}
- layer_on(_FN);
- } else {
- #ifdef RGBLIGHT_ENABLE
- //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
- #endif
- layer_off(_FN);
- TOG_STATUS = false;
}
+#endif
return false;
- break;
- */
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
- //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
- 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;
+};
+
+// For RGBRST Keycode
+#if defined(RGB_MATRIX_ENABLE)
+void rgb_matrix_increase_flags(void)
+{
+ 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: {
+ 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;
+ }
}
-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
+void rgb_matrix_decrease_flags(void)
+{
+ switch (rgb_matrix_get_flags()) {
+ case LED_FLAG_ALL: {
+ rgb_matrix_set_flags(LED_FLAG_NONE);
+ rgb_matrix_disable_noeeprom();
+ }
+ break;
+ case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER: {
+ rgb_matrix_set_flags(LED_FLAG_ALL);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ case LED_FLAG_UNDERGLOW: {
+ rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER);
+ rgb_matrix_set_color_all(0, 0, 0);
+ }
+ break;
+ default: {
+ rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
+ rgb_matrix_enable_noeeprom();
+ }
+ break;
+ }
}
+#endif
+#ifdef RGB_OLED_MENU
+uint8_t rgb_encoder_state = 4;
-//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
-#ifdef SSD1306OLED
+typedef void (*rgb_matrix_f)(void);
-// hook point for 'led_test' keymap
-// 'default' keymap's led_test_init() is empty function, do nothing
-// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35);
-__attribute__ ((weak))
-void led_test_init(void) {}
+const rgb_matrix_f rgb_matrix_functions[6][2] = {
+ { rgb_matrix_increase_hue, rgb_matrix_decrease_hue },
+ { rgb_matrix_increase_sat, rgb_matrix_decrease_sat },
+ { rgb_matrix_increase_val, rgb_matrix_decrease_val },
+ { rgb_matrix_increase_speed, rgb_matrix_decrease_speed },
+ { rgb_matrix_step, rgb_matrix_step_reverse },
+ { rgb_matrix_increase_flags, rgb_matrix_decrease_flags }
+};
+#endif
-void matrix_scan_user(void) {
- led_test_init();
- iota_gfx_task(); // this is what updates the display continuously
-}
+#ifdef ENCODER_ENABLE
+
+static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
+#define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a)/sizeof(pin_t))
+
+const uint16_t PROGMEM encoders[][NUMBER_OF_ENCODERS * 2][2] = {
+ [_QWERTY] = ENCODER_LAYOUT( \
+ KC_VOLU, KC_VOLD,
+ KC_VOLU, KC_VOLD
+ ),
+ [_COLEMAK] = ENCODER_LAYOUT( \
+ _______, _______,
+ _______, _______
+ ),
+ [_FN] = ENCODER_LAYOUT( \
+ _______, _______,
+ _______, _______
+ ),
+ [_ADJ] = ENCODER_LAYOUT( \
+ _______, _______,
+ _______, _______
+ )
+};
-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 encoder_update_user(uint8_t index, bool clockwise) {
+ if (!is_keyboard_master())
+ return;
+
+#ifdef RGB_OLED_MENU
+ if (index == RGB_OLED_MENU) {
+ (*rgb_matrix_functions[rgb_encoder_state][clockwise])();
+ } else
+#endif
+ {
+ uint8_t layer = biton32(layer_state);
+ uint16_t keycode = encoders[layer][index][clockwise];
+ while (keycode == KC_TRANSPARENT && layer > 0)
+ {
+ layer--;
+ if ((layer_state & (1 << layer)) != 0)
+ keycode = encoders[layer][index][clockwise];
+ }
+ if (keycode != KC_TRANSPARENT)
+ tap_code16(keycode);
}
}
+#endif
-//assign the right code to your layers for OLED display
-#define L_BASE 0
-#define L_FN (1<<_FN)
-#define L_ADJ (1<<_ADJ)
-
-static void render_logo(struct CharacterMatrix *matrix) {
+// OLED Driver Logic
+#ifdef OLED_DRIVER_ENABLE
+ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (is_keyboard_master())
+ return OLED_ROTATION_270;
+ return rotation;
+}
- static char logo[]={
+static void render_logo(void) {
+ static const char PROGMEM sol_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};
- matrix_write(matrix, logo);
- //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
+ };
+ oled_write_P(sol_logo, false);
}
-
-
-void render_status(struct CharacterMatrix *matrix) {
-
+static void render_status(void) {
// 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 const char PROGMEM sol_icon[] = {
+ 0x9b,0x9c,0x9d,0x9e,0x9f,
+ 0xbb,0xbc,0xbd,0xbe,0xbf,
+ 0xdb,0xdc,0xdd,0xde,0xdf,0
+ };
+ oled_write_P(sol_icon, false);
+
+ // Define layers here
+ oled_write_P(PSTR(" Layer-----"), false);
+ uint8_t layer = layer_state ? biton(layer_state) : biton32(default_layer_state);
+ switch (layer) {
+ case _DVORAK:
+ oled_write_P(PSTR("DVRAK"), false);
+ break;
+ case _DESTINY:
+ oled_write_P(PSTR("DSTNY"), false);
+ break;
+ case _QWERTY:
+ oled_write_P(PSTR("QWRTY"), false);
+ break;
+ case _COLEMAK:
+ oled_write_P(PSTR("COLMK"), false);
+ break;
+ case _LOWER:
+ oled_write_P(PSTR("LOWER"), false);
+ break;
+ case _RAISE:
+ oled_write_P(PSTR("RAISE"), false);
+ break;
+ case _ADJUST:
+ oled_write_P(PSTR("ADJST"), false);
+ break;
+ default:
+ oled_write_P(PSTR("UNDEF"), false);
}
- // 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: "));
- switch (layer_state) {
- case L_BASE:
- matrix_write_P(matrix, PSTR("Default"));
- break;
- /* case L_FN:
- matrix_write_P(matrix, PSTR("FN"));
- break; */
- case L_ADJ:
- /* case L_ADJ_TRI: */
- matrix_write_P(matrix, PSTR("ADJ"));
- break;
- default:
- matrix_write(matrix, buf);
- }
-
// Host Keyboard LED Status
- char led[40];
- snprintf(led, sizeof(led), "\n%s %s %s",
- (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
- (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
- (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
- matrix_write(matrix, led);
-}
-
-
-void iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
-
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
+ uint8_t led_state = host_keyboard_leds();
+ oled_write_P(PSTR("-----"), false);
+ oled_write_P(IS_LED_ON(led_state, USB_LED_NUM_LOCK) ? PSTR("NUMLK") : PSTR(" "), false);
+ oled_write_P(IS_LED_ON(led_state, USB_LED_CAPS_LOCK) ? PSTR("CAPLK") : PSTR(" "), false);
+ oled_write_P(IS_LED_ON(led_state, USB_LED_SCROLL_LOCK) ? PSTR("SCRLK") : PSTR(" "), false);
+
+#ifdef RGB_OLED_MENU
+ static char buffer[31] = { 0 };
+ snprintf(buffer, sizeof(buffer), "h%3d s%3d v%3d s%3d m%3d e%3d ", rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, rgb_matrix_config.speed, rgb_matrix_config.mode, rgb_matrix_get_flags());
+ buffer[4 + rgb_encoder_state * 5] = '<';
+
+ oled_write_P(PSTR("-----"), false);
+ oled_write(buffer, false);
#endif
+}
- matrix_clear(&matrix);
- if(is_master){
- render_status(&matrix);
- }else{
- render_logo(&matrix);
+void oled_task_user(void) {
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_logo();
+ oled_scroll_left();
}
- matrix_update(&display, &matrix);
}
-#endif
+#endif \ No newline at end of file
diff --git a/keyboards/rgbkb/sol/keymaps/xyverz/rules.mk b/keyboards/rgbkb/sol/keymaps/xyverz/rules.mk
index bdec5946d6..903d4619b0 100644
--- a/keyboards/rgbkb/sol/keymaps/xyverz/rules.mk
+++ b/keyboards/rgbkb/sol/keymaps/xyverz/rules.mk
@@ -20,8 +20,11 @@ SWAP_HANDS_ENABLE = no # Enable one-hand typing
ENCODER_ENABLE_CUSTOM = no # Enable rotary encoder
AUDIO_ENABLE = no
-OLED_ENABLE = yes # OLED_ENABLE
+OLED_ENABLE = no # OLED_ENABLE
IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
+DEFAULT_FOLDER = rgbkb/sol/rev1
+ENCODER_ENABLE = no
+OLED_DRIVER_ENABLE = yes
# Do not edit past here
diff --git a/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c b/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c
index 54462ec0ff..23c4168f2b 100644
--- a/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c
+++ b/keyboards/rgbkb/zen/rev1/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -55,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/bfake/i2c.h b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h
index 93a69c94da..d3d1a60ca9 100644
--- a/keyboards/bfake/i2c.h
+++ b/keyboards/rgbkb/zen/rev1/keymaps/starcalleramethyst/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+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
@@ -15,13 +15,24 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-// Please do not modify this file
+#pragma once
-#ifndef __I2C_H__
-#define __I2C_H__
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+/* Use I2C or Serial, not both */
-#endif
+#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/rgbkb/zen/rev2/keymaps/default/keymap.c b/keyboards/rgbkb/zen/rev2/keymaps/default/keymap.c
index dba4a2ddd8..2f0138c8e0 100644
--- a/keyboards/rgbkb/zen/rev2/keymaps/default/keymap.c
+++ b/keyboards/rgbkb/zen/rev2/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/runner3680/3x6/keymaps/default/keymap.c b/keyboards/runner3680/3x6/keymaps/default/keymap.c
index 9ccb2ad235..99ab7ff2d7 100644
--- a/keyboards/runner3680/3x6/keymaps/default/keymap.c
+++ b/keyboards/runner3680/3x6/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/3x7/keymaps/default/keymap.c b/keyboards/runner3680/3x7/keymaps/default/keymap.c
index e5de1efd0b..795999cf5b 100644
--- a/keyboards/runner3680/3x7/keymaps/default/keymap.c
+++ b/keyboards/runner3680/3x7/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/3x8/keymaps/default/keymap.c b/keyboards/runner3680/3x8/keymaps/default/keymap.c
index cad7e859a3..ae5d2ba650 100644
--- a/keyboards/runner3680/3x8/keymaps/default/keymap.c
+++ b/keyboards/runner3680/3x8/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/4x6/keymaps/default/keymap.c b/keyboards/runner3680/4x6/keymaps/default/keymap.c
index 9af15c703e..d0c07ddd04 100644
--- a/keyboards/runner3680/4x6/keymaps/default/keymap.c
+++ b/keyboards/runner3680/4x6/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/4x7/keymaps/default/keymap.c b/keyboards/runner3680/4x7/keymaps/default/keymap.c
index 091d44d815..95e2a67ebe 100644
--- a/keyboards/runner3680/4x7/keymaps/default/keymap.c
+++ b/keyboards/runner3680/4x7/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/4x8/keymaps/default/keymap.c b/keyboards/runner3680/4x8/keymaps/default/keymap.c
index 9b1f9d237b..5ff0c0d691 100644
--- a/keyboards/runner3680/4x8/keymaps/default/keymap.c
+++ b/keyboards/runner3680/4x8/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/5x6/keymaps/default/keymap.c b/keyboards/runner3680/5x6/keymaps/default/keymap.c
index d8f50e49e3..6d78e8a2e8 100644
--- a/keyboards/runner3680/5x6/keymaps/default/keymap.c
+++ b/keyboards/runner3680/5x6/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/5x7/keymaps/default/keymap.c b/keyboards/runner3680/5x7/keymaps/default/keymap.c
index 44c0b20bd2..e04e5fb5fb 100644
--- a/keyboards/runner3680/5x7/keymaps/default/keymap.c
+++ b/keyboards/runner3680/5x7/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/runner3680/5x8/keymaps/default/keymap.c b/keyboards/runner3680/5x8/keymaps/default/keymap.c
index 9f0084e896..b9efd44ef7 100644
--- a/keyboards/runner3680/5x8/keymaps/default/keymap.c
+++ b/keyboards/runner3680/5x8/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/mt40/i2c.h b/keyboards/setta21/config.h
index 27c9d3d050..cfb6bf4ffc 100644
--- a/keyboards/mt40/i2c.h
+++ b/keyboards/setta21/config.h
@@ -1,5 +1,6 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@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
@@ -15,11 +16,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __I2C_H__
-#define __I2C_H__
+#pragma once
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
+#include "config_common.h"
diff --git a/keyboards/setta21/info.json b/keyboards/setta21/info.json
new file mode 100644
index 0000000000..a1143fb03d
--- /dev/null
+++ b/keyboards/setta21/info.json
@@ -0,0 +1,34 @@
+{
+ "keyboard_name": "setta21",
+ "url": "https://salicylic-acid3.hatenablog.com/",
+ "maintainer": "Salicylic_acid3",
+ "width": 18.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_numpad_6x4": {
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"F2", "x":1, "y":0},
+ {"label":"\uff1d", "x":2, "y":0},
+ {"label":"Del", "x":3, "y":0},
+ {"label":"Num Lock", "x":0, "y":1.25},
+ {"label":"/", "x":1, "y":1.25},
+ {"label":"*", "x":2, "y":1.25},
+ {"label":"-", "x":3, "y":1.25},
+ {"label":"7", "x":0, "y":2.25},
+ {"label":"8", "x":1, "y":2.25},
+ {"label":"9", "x":2, "y":2.25},
+ {"label":"+", "x":3, "y":2.25, "h":2},
+ {"label":"4", "x":0, "y":3.25},
+ {"label":"5", "x":1, "y":3.25},
+ {"label":"6", "x":2, "y":3.25},
+ {"label":"1", "x":0, "y":4.25},
+ {"label":"2", "x":1, "y":4.25},
+ {"label":"3", "x":2, "y":4.25},
+ {"label":"Enter", "x":3, "y":4.25, "h":2},
+ {"label":"0", "x":0, "y":5.25, "w":2},
+ {"label":".", "x":2, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/setta21/keymaps/default/config.h b/keyboards/setta21/keymaps/default/config.h
new file mode 100644
index 0000000000..e35fe2ccd7
--- /dev/null
+++ b/keyboards/setta21/keymaps/default/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
+
diff --git a/keyboards/setta21/keymaps/default/keymap.c b/keyboards/setta21/keymaps/default/keymap.c
new file mode 100644
index 0000000000..fa33c08f26
--- /dev/null
+++ b/keyboards/setta21/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+#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 {
+ _BASE,
+ _ARROW,
+ _ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_numpad_6x4(
+ //,-----------------------------------|
+LT(_ADJUST,KC_ESC), KC_F2, KC_EQL, KC_DEL,
+ //|--------+--------+--------+--------|
+ 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,
+ //|--------+--------+--------+--------|
+LT(_ARROW, KC_P0), KC_PDOT,KC_PENT
+ //`-----------------------------------'
+ ),
+
+ [_ARROW] = LAYOUT_numpad_6x4(
+ //,-----------------------------------|
+ KC_ESC, _______, _______, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, _______, _______, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, KC_UP, XXXXXXX,
+ //|--------+--------+--------+--------|
+ KC_LEFT, KC_DOWN,KC_RIGHT, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, KC_DOWN, XXXXXXX,
+ //|--------+--------+--------+--------|
+ MO(_ARROW), _______, _______
+ //`-----------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_numpad_6x4( /* Base */
+ //,-----------------------------------|
+ MO(_ADJUST), _______, _______, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------|
+ RGB_SAD, RGB_SAI, XXXXXXX,
+ //|--------+--------+--------+--------|
+ RGB_HUD, RGB_HUI, XXXXXXX, RGB_TOG,
+ //|--------+--------+--------+--------|
+ RGB_VAD, RGB_VAI, XXXXXXX,
+ //|--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, RGB_MOD
+ //`-----------------------------------'
+ )
+};
diff --git a/keyboards/setta21/keymaps/default/readme.md b/keyboards/setta21/keymaps/default/readme.md
new file mode 100644
index 0000000000..1028d848c5
--- /dev/null
+++ b/keyboards/setta21/keymaps/default/readme.md
@@ -0,0 +1,38 @@
+# The default keymap for setta21
+
+## Base
+| 1 | 2 | 3 | 4 |
+|:----------:|:----:|:----:|:----:|
+|Adjust , ESC| F2 | = | Del |
+| NumLock | / | * | minus|
+| 7 | 8 | 9 | |
+| 4 | 5 | 6 | + |
+| 1 | 2 | 3 | |
+| Arrow , 0 | | . | Ent |
+
+
+
+## Arrow
+| 1 | 2 | 3 | 4 |
+|:----------:|:----:|:----:|:----:|
+| ESC | F2 | = | Del |
+| XXXXX | / | * | minus|
+| XXXXX | UP | XXXXX| |
+| LEFT | DOWN | RIGHT| + |
+| XXXXX | DOWN | XXXXX| |
+| Arrow | | . | Ent |
+
+
+
+
+## Adjust
+| 1 | 2 | 3 | 4 |
+|:----------:|:-----:|:----:|:------:|
+| Adjust | F2 | = | Del |
+| XXXXX | XXXXX | XXXXX| XXXXX |
+| XXXXX |RGB_SAI| XXXXX| |
+| LEFT |RGB_HUI| XXXXX| RGB_TOG|
+| RGB_VAD |RGB_VAI| XXXXX| |
+| XXXXX | | XXXXX| RGB_MOD|
+
+
diff --git a/keyboards/setta21/keymaps/salicylic/config.h b/keyboards/setta21/keymaps/salicylic/config.h
new file mode 100644
index 0000000000..44b34aa2fd
--- /dev/null
+++ b/keyboards/setta21/keymaps/salicylic/config.h
@@ -0,0 +1,40 @@
+/* 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 DRIVER_LED_TOTAL RGBLED_NUM
+
+#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_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 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_LIMIT_VAL 50
+# define RGB_MATRIX_VAL_STEP 5
+# define RGB_MATRIX_SPD_STEP 10
+#endif
+
diff --git a/keyboards/setta21/keymaps/salicylic/keymap.c b/keyboards/setta21/keymaps/salicylic/keymap.c
new file mode 100644
index 0000000000..d1db2ff9a2
--- /dev/null
+++ b/keyboards/setta21/keymaps/salicylic/keymap.c
@@ -0,0 +1,197 @@
+#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;
+
+#ifdef OLED_DRIVER_ENABLE
+static uint32_t oled_timer = 0;
+#endif
+
+// 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 {
+ _BASE = 0,
+ _ARROW,
+ _MACRO,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ RGB_RST = SAFE_RANGE,
+ SEND_SUM,
+ SEND_AVE,
+ SEND_CIF,
+ SEND_MAX,
+ SEND_MIN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_numpad_6x4(
+ //,-----------------------------------|
+ KC_ESC, KC_F2, JP_EQL, KC_DEL,
+ //|--------+--------+--------+--------|
+ 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,
+ //|--------+--------+--------+--------|
+LT(_ARROW, KC_P0),LT(_MACRO, KC_PDOT),KC_PENT
+ //`-----------------------------------'
+ ),
+
+ [_ARROW] = LAYOUT_numpad_6x4(
+ //,-----------------------------------|
+ _______, _______, _______, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, _______, _______, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, KC_UP, XXXXXXX,
+ //|--------+--------+--------+--------|
+ KC_LEFT, KC_DOWN,KC_RIGHT, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, KC_DOWN, XXXXXXX,
+ //|--------+--------+--------+--------|
+ MO(_ARROW), MO(_MACRO), _______
+ //`-----------------------------------'
+ ),
+
+ [_MACRO] = LAYOUT_numpad_6x4(
+ //,-----------------------------------|
+ _______, _______, _______, _______,
+ //|--------+--------+--------+--------|
+ SEND_MIN,SEND_MAX,SEND_CIF,SEND_AVE,
+ //|--------+--------+--------+--------|
+ KC_F7, KC_F8, KC_F9,
+ //|--------+--------+--------+--------|
+ KC_F4, KC_F5, KC_F6,SEND_SUM,
+ //|--------+--------+--------+--------|
+ KC_F11, KC_F12, KC_F3,
+ //|--------+--------+--------+--------|
+ _______, _______, JP_RPRN
+ //`-----------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_numpad_6x4( /* Base */
+ //,-----------------------------------|
+ _______, _______, _______, _______,
+ //|--------+--------+--------+--------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------|
+ RGB_SAD, RGB_SAI, XXXXXXX,
+ //|--------+--------+--------+--------|
+ RGB_HUD, RGB_HUI, XXXXXXX, RGB_TOG,
+ //|--------+--------+--------+--------|
+ RGB_VAD, RGB_VAI, XXXXXXX,
+ //|--------+--------+--------+--------|
+ _______, _______, RGB_MOD
+ //`-----------------------------------'
+ )
+};
+
+
+//A description for expressing the layer position in LED mode.
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _ARROW, _MACRO, _ADJUST);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ bool result = false;
+ if (record->event.pressed) {
+ #ifdef OLED_DRIVER_ENABLE
+ oled_timer = timer_read32();
+ #endif
+ }
+ switch (keycode) {
+ case SEND_SUM:
+ if (record->event.pressed) {
+ SEND_STRING("_SUM*");
+ }
+ break;
+ case SEND_AVE:
+ if (record->event.pressed) {
+ SEND_STRING("_AVERAGE*");
+ }
+ break;
+ case SEND_CIF:
+ if (record->event.pressed) {
+ SEND_STRING("_COUNTIF*");
+ }
+ break;
+ case SEND_MAX:
+ if (record->event.pressed) {
+ SEND_STRING("_MAX*");
+ }
+ break;
+ case SEND_MIN:
+ if (record->event.pressed) {
+ SEND_STRING("_MIN*");
+ }
+ 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 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;
+}
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_0; }
+
+
+void render_layer_state(void) {
+ oled_write_P(PSTR("LAYER: "), false);
+ oled_write_P(PSTR(" Arrow "), layer_state_is(_ARROW));
+ oled_write_P(PSTR(" Macro "), layer_state_is(_MACRO));
+}
+
+void render_keylock_status(uint8_t led_usb_state) {
+ oled_write_P(PSTR("NumLock"), led_usb_state & (1 << USB_LED_NUM_LOCK));
+ oled_write_P(PSTR(" "), false);
+}
+
+void render_layer_messages(void) {
+ oled_write_P(PSTR("Setta21 For Your Good Job. "), false);
+}
+
+
+void render_status(void) {
+ /* Show Keyboard Layout */
+ render_layer_messages();
+ render_keylock_status(host_keyboard_leds());
+ render_layer_state();
+}
+
+void oled_task_user(void) {
+ render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+}
+
+#endif
diff --git a/keyboards/setta21/keymaps/salicylic/readme.md b/keyboards/setta21/keymaps/salicylic/readme.md
new file mode 100644
index 0000000000..ad27736d2b
--- /dev/null
+++ b/keyboards/setta21/keymaps/salicylic/readme.md
@@ -0,0 +1,49 @@
+# The salicylic keymap for setta21
+
+## Base
+| 1 | 2 | 3 | 4 |
+|:----------:|:----:|:---------:|:----:|
+| ESC | F2 | = | Del |
+| NumLock | / | * | minus|
+| 7 | 8 | 9 | |
+| 4 | 5 | 6 | + |
+| 1 | 2 | 3 | |
+| Arrow , 0 | | Macro , . | Ent |
+
+
+
+## Arrow
+| 1 | 2 | 3 | 4 |
+|:----------:|:----:|:-----:|:----:|
+| ESC | F2 | = | Del |
+| XXXXX | / | * | minus|
+| XXXXX | UP | XXXXX | |
+| LEFT | DOWN | RIGHT | + |
+| XXXXX | DOWN | XXXXX | |
+| Arrow | | Macro | Ent |
+
+
+
+## Macro
+| 1 | 2 | 3 | 4 |
+|:----------:|:------:|:---------:|:--------:|
+| ESC | F2 | = | Del |
+| =MIN( | =MAX( | =COUNTIF( | =AVERAGE(|
+| F7 | F8 | F9 | |
+| F4 | F5 | F6 | =SUM( |
+| F11 | F12 | F3 | |
+| Arrow | | Macro | ) |
+
+
+
+## Adjust
+| 1 | 2 | 3 | 4 |
+|:----------:|:-----:|:----:|:------:|
+| Adjust | F2 | = | Del |
+| XXXXX | XXXXX | XXXXX| XXXXX |
+| XXXXX |RGB_SAI| XXXXX| |
+| LEFT |RGB_HUI| XXXXX| RGB_TOG|
+| RGB_VAD |RGB_VAI| XXXXX| |
+| Arrow | | Macro| RGB_MOD|
+
+
diff --git a/keyboards/setta21/keymaps/salicylic/rules.mk b/keyboards/setta21/keymaps/salicylic/rules.mk
new file mode 100644
index 0000000000..be8d10c9a6
--- /dev/null
+++ b/keyboards/setta21/keymaps/salicylic/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = WS2812
+
diff --git a/keyboards/setta21/readme.md b/keyboards/setta21/readme.md
new file mode 100644
index 0000000000..c940079997
--- /dev/null
+++ b/keyboards/setta21/readme.md
@@ -0,0 +1,17 @@
+# setta21
+
+![setta21](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190315/20190315022018.jpg)
+
+This is 21 keys tenkeypad.
+
+* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+* Hardware Supported: setta21 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1271667)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make setta21: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/setta21-build-guide)
diff --git a/keyboards/setta21/rev1/config.h b/keyboards/setta21/rev1/config.h
new file mode 100644
index 0000000000..57451a7e30
--- /dev/null
+++ b/keyboards/setta21/rev1/config.h
@@ -0,0 +1,67 @@
+/*
+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 0x0011
+#define MANUFACTURER Salicylic_Acid
+#define PRODUCT setta21
+#define DESCRIPTION A custom tenkeypad
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+/* 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
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 21 // Number of LEDs
+#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)
+ #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/setta21/rev1/rev1.c b/keyboards/setta21/rev1/rev1.c
new file mode 100644
index 0000000000..3c0823870b
--- /dev/null
+++ b/keyboards/setta21/rev1/rev1.c
@@ -0,0 +1,25 @@
+#include "rev1.h"
+
+#ifdef RGB_MATRIX_ENABLE
+ led_config_t g_led_config = { {
+ // Key Matrix to LED Index
+ { 14,13, 7, 6, 0,20 },
+ { 12, 8, 5, 1,19 },
+ { 15,11, 9, 4, 2,18 },
+ { 16, 10, 3,17 }
+ }, {
+ // LED Index to Physical Position
+ { 0, 179 }, { 21, 179 }, { 43, 179 }, { 64, 179 }, { 43, 134 }, { 21, 134 }, { 0, 134 }, { 0, 90 }, { 21, 90 }, { 43, 90 },
+ { 64, 112 }, { 43, 45 }, { 21, 45 }, { 0, 45 }, { 11, 0 }, { 43, 0 }, { 64, 23 }, { 64, 224 }, { 43, 224 }, { 21, 224 },
+ { 0, 224 }
+ }, {
+ // LED Index to Flag
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4
+} };
+#endif
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+};
diff --git a/keyboards/setta21/rev1/rev1.h b/keyboards/setta21/rev1/rev1.h
new file mode 100644
index 0000000000..772c843c57
--- /dev/null
+++ b/keyboards/setta21/rev1/rev1.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "setta21.h"
+
+#define LAYOUT_numpad_6x4( \
+ L05, L15, L25, L35, \
+ L04, L14, L24, L34, \
+ L03, L13, L23, \
+ L02, L12, L22, L32, \
+ L01, L11, L21, \
+ L00, L20, L30 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ {KC_NO, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30,KC_NO, L32,KC_NO, L34, L35 } \
+ }
diff --git a/keyboards/setta21/rev1/rules.mk b/keyboards/setta21/rev1/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/setta21/rev1/rules.mk
diff --git a/keyboards/setta21/rules.mk b/keyboards/setta21/rules.mk
new file mode 100644
index 0000000000..f9c4106343
--- /dev/null
+++ b/keyboards/setta21/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 = caterina
+
+# 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
+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.
+TAP_DANCE_ENABLE = no
+OLED_DRIVER_ENABLE = yes
+USE_I2C = no
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+DEFAULT_FOLDER = setta21/rev1
+
+LAYOUTS = numpad_6x4
diff --git a/keyboards/setta21/setta21.c b/keyboards/setta21/setta21.c
new file mode 100644
index 0000000000..73c07682f7
--- /dev/null
+++ b/keyboards/setta21/setta21.c
@@ -0,0 +1 @@
+#include "setta21.h"
diff --git a/keyboards/setta21/setta21.h b/keyboards/setta21/setta21.h
new file mode 100644
index 0000000000..0409f6cbc2
--- /dev/null
+++ b/keyboards/setta21/setta21.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_setta21_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/shiro/keymaps/default_mac/config.h b/keyboards/shiro/keymaps/default_mac/config.h
new file mode 100644
index 0000000000..369388adad
--- /dev/null
+++ b/keyboards/shiro/keymaps/default_mac/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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/shiro/keymaps/default_mac/keymap.c b/keyboards/shiro/keymaps/default_mac/keymap.c
new file mode 100644
index 0000000000..58ee063704
--- /dev/null
+++ b/keyboards/shiro/keymaps/default_mac/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_number {
+ _NUMBER = 0,
+ _CURSOL,
+ _MOUSE
+};
+
+#define NUMBER TO(_NUMBER)
+#define CURSOL TO(_CURSOL)
+#define MOUSE TO(_MOUSE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NUMBER] = LAYOUT(
+ NUMBER, CURSOL, MOUSE,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_BSPC, KC_ENT
+ ),
+ [_CURSOL] = LAYOUT(
+ NUMBER, CURSOL, MOUSE,
+ KC_HOME, KC_UP, KC_PGUP,
+ KC_LEFT, KC_ESC, KC_RIGHT,
+ KC_END, KC_DOWN, KC_PGDN,
+ KC_DEL, KC_BSPC, KC_ENT
+ ),
+ [_MOUSE] = LAYOUT(
+ NUMBER, CURSOL, MOUSE,
+ LGUI(KC_X), LGUI(KC_C), LGUI(KC_V),
+ LGUI(KC_Z), LGUI(KC_F), KC_AGIN,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_DEL, KC_BSPC, KC_ENT
+ ),
+};
diff --git a/keyboards/shiro/keymaps/default_mac/readme.md b/keyboards/shiro/keymaps/default_mac/readme.md
new file mode 100644
index 0000000000..715ddd3358
--- /dev/null
+++ b/keyboards/shiro/keymaps/default_mac/readme.md
@@ -0,0 +1 @@
+# The default keymap for Shiro \ No newline at end of file
diff --git a/keyboards/singa/config.h b/keyboards/singa/config.h
index dda54ccf4c..badaef5136 100644
--- a/keyboards/singa/config.h
+++ b/keyboards/singa/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER Singa Keyboards
#define PRODUCT Singa
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/singa/rules.mk b/keyboards/singa/rules.mk
index df2a59e905..54328d248d 100644
--- a/keyboards/singa/rules.mk
+++ b/keyboards/singa/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
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC = i2c_master.c
diff --git a/keyboards/singa/singa.c b/keyboards/singa/singa.c
index ee49ba65c1..144065d029 100644
--- a/keyboards/singa/singa.c
+++ b/keyboards/singa/singa.c
@@ -13,49 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "singa.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
diff --git a/keyboards/singa/usbconfig.h b/keyboards/singa/usbconfig.h
index 54a7d20f14..e65d210ace 100644
--- a/keyboards/singa/usbconfig.h
+++ b/keyboards/singa/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
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/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/tg4x/config.h b/keyboards/tg4x/config.h
new file mode 100644
index 0000000000..ae66b8c9f4
--- /dev/null
+++ b/keyboards/tg4x/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0021
+#define MANUFACTURER MythosMann
+#define PRODUCT TG4x
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+ // 0 1 2 3 4 5 6 7
+#define MATRIX_ROW_PINS { B5, B4, E6, D7, C6, D4, D0, D1 }
+#define MATRIX_COL_PINS { D3, 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 D2
+#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
+
+/* 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/tg4x/info.json b/keyboards/tg4x/info.json
new file mode 100644
index 0000000000..13b23c1c31
--- /dev/null
+++ b/keyboards/tg4x/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "TG4x",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":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, "w":1.25}, {"x":3.75, "y":3, "w":2.25}, {"x":6, "y":3, "w":2.75}, {"x":8.75, "y":3, "w":1.25}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/tg4x/keymaps/default/config.h b/keyboards/tg4x/keymaps/default/config.h
new file mode 100644
index 0000000000..26c6d6ade1
--- /dev/null
+++ b/keyboards/tg4x/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/tg4x/keymaps/default/keymap.c b/keyboards/tg4x/keymaps/default/keymap.c
new file mode 100644
index 0000000000..b1b35a24bb
--- /dev/null
+++ b/keyboards/tg4x/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* 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( /* Base */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_DEL,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, 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_SPACE, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL, KC_RCTL
+ ),
+};
+
+
+
diff --git a/keyboards/tg4x/keymaps/default/readme.md b/keyboards/tg4x/keymaps/default/readme.md
new file mode 100644
index 0000000000..83a96bee22
--- /dev/null
+++ b/keyboards/tg4x/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for tg4x
diff --git a/keyboards/tg4x/readme.md b/keyboards/tg4x/readme.md
new file mode 100644
index 0000000000..b1ce799512
--- /dev/null
+++ b/keyboards/tg4x/readme.md
@@ -0,0 +1,17 @@
+# TG4x v2.1
+
+40% sandwich keyboard driven by a pro micro.
+
+For more info please refer to [MythosMann's Github](www.github.com/MythosMann/tg4x).
+
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: TG4x v2.1 PCB
+* Hardware Availability: [Geekhack](https://geekhack.org/index.php?topic=99163.0)
+
+If soldering in a RGB underglow strip, please use pin D2, the pin labeled RXI on the pro micro.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tg4x: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/tg4x/rules.mk b/keyboards/tg4x/rules.mk
new file mode 100644
index 0000000000..41988177d3
--- /dev/null
+++ b/keyboards/tg4x/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 = 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 = 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
+
+LINK_TIME_OPTIMIZATION_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/tg4x/tg4x.c b/keyboards/tg4x/tg4x.c
new file mode 100644
index 0000000000..9452d4d956
--- /dev/null
+++ b/keyboards/tg4x/tg4x.c
@@ -0,0 +1,51 @@
+/* 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 "tg4x.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/tg4x/tg4x.h b/keyboards/tg4x/tg4x.h
new file mode 100644
index 0000000000..80dc40238f
--- /dev/null
+++ b/keyboards/tg4x/tg4x.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k40, k41, k42, k43, k44, k45, \
+ k10, k11, k12, k13, k14, k15, k16, k50, k51, k52, k53, k54, \
+ k20, k21, k22, k23, k24, k25, k26, k60, k61, k62, k63, k64, \
+ k30, k31, k32, k34, k35, k71, k72, k73, k74 \
+){ \
+ { k00, k01, k02, k03, k04, k05, k06 }, \
+ { k10, k11, k12, k13, k14, k15, k16 }, \
+ { k20, k21, k22, k23, k24, k25, k26 }, \
+ { k30, k31, k32, ___, k34, k35, ___ }, \
+ { k40, k41, k42, k43, k44, k45, ___ }, \
+ { k50, k51, k52, k53, k54, ___, ___ }, \
+ { k60, k61, k62, k63, k64, ___, ___ }, \
+ { ___, k71, k72, k73, k74, ___, ___ } \
+}
diff --git a/keyboards/tgr/alice/alice.c b/keyboards/tgr/alice/alice.c
index adb88fef0a..39aed2cf56 100644
--- a/keyboards/tgr/alice/alice.c
+++ b/keyboards/tgr/alice/alice.c
@@ -15,41 +15,4 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <string.h>
-
-#include "rgblight.h"
-
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void matrix_init_kb(void) {
- i2c_init();
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-// custom RGB driver
-void rgblight_set(void) {
- if (!rgblight_config.enable) {
- memset(led, 0, 3 * RGBLED_NUM);
- }
-
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- rgb_init = true;
- }
-
- rgblight_task();
- matrix_scan_user();
-}
-#endif
+#include "alice.h"
diff --git a/keyboards/tgr/alice/config.h b/keyboards/tgr/alice/config.h
index 2200fbbe46..4c36896b70 100644
--- a/keyboards/tgr/alice/config.h
+++ b/keyboards/tgr/alice/config.h
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422E
+#define DEVICE_VER 0x0200
// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
#define MANUFACTURER TGR
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/alice/rules.mk b/keyboards/tgr/alice/rules.mk
index aa141f7c3b..530e8ea329 100644
--- a/keyboards/tgr/alice/rules.mk
+++ b/keyboards/tgr/alice/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
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC += i2c_master.c
diff --git a/keyboards/tgr/alice/usbconfig.h b/keyboards/tgr/alice/usbconfig.h
index df7a88e3ab..d2955d0621 100644
--- a/keyboards/tgr/alice/usbconfig.h
+++ b/keyboards/tgr/alice/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'T', 'G', 'R'
diff --git a/keyboards/tgr/jane/config.h b/keyboards/tgr/jane/config.h
index a5d63f621b..dd119d3b04 100644
--- a/keyboards/tgr/jane/config.h
+++ b/keyboards/tgr/jane/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER TGR
#define PRODUCT Jane
diff --git a/keyboards/tgr/jane/jane.c b/keyboards/tgr/jane/jane.c
index c17cb00848..4ab0b30073 100644
--- a/keyboards/tgr/jane/jane.c
+++ b/keyboards/tgr/jane/jane.c
@@ -13,49 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "i2c_master.h"
-#include "quantum.h"
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "jane.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
-} \ No newline at end of file
+ }
+}
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/tgr/jane/rules.mk b/keyboards/tgr/jane/rules.mk
index f2b4883066..c6a26d4a40 100644
--- a/keyboards/tgr/jane/rules.mk
+++ b/keyboards/tgr/jane/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
@@ -34,10 +19,8 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = no
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-QUANTUM_LIB_SRC = i2c_master.c
-
LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/tgr/jane/usbconfig.h b/keyboards/tgr/jane/usbconfig.h
index 54a7d20f14..e65d210ace 100644
--- a/keyboards/tgr/jane/usbconfig.h
+++ b/keyboards/tgr/jane/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/the_ruler/keymaps/default/keymap.c b/keyboards/the_ruler/keymaps/default/keymap.c
index 8b0f44b5ed..e6740b0584 100644
--- a/keyboards/the_ruler/keymaps/default/keymap.c
+++ b/keyboards/the_ruler/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/thedogkeyboard/config.h b/keyboards/thedogkeyboard/config.h
new file mode 100644
index 0000000000..1a67a3f172
--- /dev/null
+++ b/keyboards/thedogkeyboard/config.h
@@ -0,0 +1,246 @@
+/*
+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 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER kakunpc
+#define PRODUCT thedogkeyboard
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 20
+#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, B4, B5 }
+#define MATRIX_COL_PINS { D1, D0, D4, C6, D7, E6 }
+#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 111
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 50 /* 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/thedogkeyboard/info.json b/keyboards/thedogkeyboard/info.json
new file mode 100644
index 0000000000..517aae221b
--- /dev/null
+++ b/keyboards/thedogkeyboard/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "TheDogKeyboard",
+ "url": "https://kakunpc.booth.pm/",
+ "maintainer": "kakunpc",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"1", "x":0, "y":0}, {"label":"7", "x":2, "y":0}, {"label":"13", "x":3, "y":0}, {"label":"19", "x":4, "y":0}, {"label":"24", "x":5, "y":0}, {"label":"29", "x":6.5, "y":0}, {"label":"35", "x":7.5, "y":0}, {"label":"40", "x":8.5, "y":0}, {"label":"45", "x":9.5, "y":0}, {"label":"50", "x":11, "y":0}, {"label":"56", "x":12, "y":0}, {"label":"62", "x":13, "y":0}, {"label":"66", "x":14, "y":0}, {"label":"70", "x":15.25, "y":0}, {"label":"76", "x":16.25, "y":0}, {"label":"82", "x":17.25, "y":0}, {"label":"2", "x":0, "y":1.5}, {"label":"8", "x":1, "y":1.5}, {"label":"14", "x":2, "y":1.5}, {"label":"20", "x":3, "y":1.5}, {"label":"25", "x":4, "y":1.5}, {"label":"30", "x":5, "y":1.5}, {"label":"36", "x":6, "y":1.5}, {"label":"41", "x":7, "y":1.5}, {"label":"46", "x":8, "y":1.5}, {"label":"51", "x":9, "y":1.5}, {"label":"57", "x":10, "y":1.5}, {"label":"63", "x":11, "y":1.5}, {"label":"67", "x":12, "y":1.5}, {"label":"71", "x":13, "y":1.5, "w":2}, {"label":"77", "x":15.25, "y":1.5}, {"label":"84", "x":16.25, "y":1.5}, {"label":"83", "x":17.25, "y":1.5}, {"label":"88", "x":18.5, "y":1.5}, {"label":"93", "x":19.5, "y":1.5}, {"label":"97", "x":20.5, "y":1.5}, {"label":"102", "x":21.5, "y":1.5}, {"label":"3", "x":0, "y":2.5, "w":1.5}, {"label":"9", "x":1.5, "y":2.5}, {"label":"15", "x":2.5, "y":2.5}, {"label":"21", "x":3.5, "y":2.5}, {"label":"26", "x":4.5, "y":2.5}, {"label":"31", "x":5.5, "y":2.5}, {"label":"37", "x":6.5, "y":2.5}, {"label":"42", "x":7.5, "y":2.5}, {"label":"47", "x":8.5, "y":2.5}, {"label":"52", "x":9.5, "y":2.5}, {"label":"58", "x":10.5, "y":2.5}, {"label":"64", "x":11.5, "y":2.5}, {"label":"68", "x":12.5, "y":2.5}, {"label":"72", "x":13.5, "y":2.5, "w":1.5}, {"label":"78", "x":15.25, "y":2.5}, {"label":"86", "x":16.25, "y":2.5}, {"label":"85", "x":17.25, "y":2.5}, {"label":"89", "x":18.5, "y":2.5}, {"label":"94", "x":19.5, "y":2.5}, {"label":"98", "x":20.5, "y":2.5}, {"label":"103", "x":21.5, "y":2.5}, {"label":"4", "x":0, "y":3.5, "w":1.75}, {"label":"10", "x":1.75, "y":3.5}, {"label":"16", "x":2.75, "y":3.5}, {"label":"22", "x":3.75, "y":3.5}, {"label":"27", "x":4.75, "y":3.5}, {"label":"32", "x":5.75, "y":3.5}, {"label":"38", "x":6.75, "y":3.5}, {"label":"43", "x":7.75, "y":3.5}, {"label":"48", "x":8.75, "y":3.5}, {"label":"53", "x":9.75, "y":3.5}, {"label":"59", "x":10.75, "y":3.5}, {"label":"65", "x":11.75, "y":3.5}, {"label":"73", "x":12.75, "y":3.5, "w":2.25}, {"label":"90", "x":18.5, "y":3.5}, {"label":"95", "x":19.5, "y":3.5}, {"label":"99", "x":20.5, "y":3.5}, {"label":"110", "x":21.5, "y":3.5}, {"label":"5", "x":0, "y":4.5, "w":2.25}, {"label":"11", "x":2.25, "y":4.5}, {"label":"17", "x":3.25, "y":4.5}, {"label":"23", "x":4.25, "y":4.5}, {"label":"28", "x":5.25, "y":4.5}, {"label":"33", "x":6.25, "y":4.5}, {"label":"39", "x":7.25, "y":4.5}, {"label":"44", "x":8.25, "y":4.5}, {"label":"49", "x":9.25, "y":4.5}, {"label":"54", "x":10.25, "y":4.5}, {"label":"60", "x":11.25, "y":4.5}, {"label":"74", "x":12.25, "y":4.5, "w":2.75}, {"label":"87", "x":16.25, "y":4.5}, {"label":"91", "x":18.5, "y":4.5}, {"label":"96", "x":19.5, "y":4.5}, {"label":"100", "x":20.5, "y":4.5}, {"label":"104", "x":21.5, "y":4.5}, {"label":"6", "x":0, "y":5.5, "w":1.25}, {"label":"12", "x":1.25, "y":5.5, "w":1.25}, {"label":"18", "x":2.5, "y":5.5, "w":1.25}, {"label":"105", "x":3.75, "y":5.5, "w":1.25}, {"label":"106", "x":5, "y":5.5, "w":1.25}, {"label":"34", "x":6.25, "y":5.5, "w":1.25}, {"label":"107", "x":7.5, "y":5.5, "w":1.25}, {"label":"108", "x":8.75, "y":5.5, "w":1.25}, {"label":"55", "x":10, "y":5.5, "w":1.25}, {"label":"61", "x":11.25, "y":5.5, "w":1.25}, {"label":"69", "x":12.5, "y":5.5, "w":1.25}, {"label":"75", "x":13.75, "y":5.5, "w":1.25}, {"label":"79", "x":15.25, "y":5.5}, {"label":"80", "x":16.25, "y":5.5}, {"label":"81", "x":17.25, "y":5.5}, {"label":"92", "x":18.5, "y":5.5}, {"label":"109", "x":19.5, "y":5.5}, {"label":"101", "x":20.5, "y":5.5}, {"label":"111", "x":21.5, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/thedogkeyboard/keymaps/default/keymap.c b/keyboards/thedogkeyboard/keymaps/default/keymap.c
new file mode 100644
index 0000000000..7632f81b93
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* 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( /* 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_PSCREEN,KC_SCROLLLOCK,KC_PAUSE,
+
+ 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_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, KC_P4, KC_P5, KC_P6, KC_NO,
+ KC_LSHIFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSHIFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL,KC_LGUI,KC_LALT,KC_NO,KC_NO,KC_SPC,KC_NO,KC_NO,KC_RALT,KC_RGUI,KC_SPC,KC_RCTL, KC_LEFT,KC_DOWN,KC_RIGHT, KC_P0, KC_NO, KC_PDOT, KC_NO
+ )
+};
diff --git a/keyboards/thedogkeyboard/keymaps/default/readme.md b/keyboards/thedogkeyboard/keymaps/default/readme.md
new file mode 100644
index 0000000000..045729a7a5
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for thedogkeyboard
diff --git a/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c b/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c
new file mode 100644
index 0000000000..cc3ba84d87
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/kakunpc/keymap.c
@@ -0,0 +1,43 @@
+/* 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_F13)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = 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_PSCREEN,KC_SCROLLLOCK,KC_PAUSE,
+
+ 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_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT ,KC_ENT, KC_P4, KC_P5, KC_P6, KC_NO,
+ KC_LSHIFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSHIFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL,KC_LGUI,KC_LALT,KC_COMMAND,KC_SPC,KC_SPC,KC_SPC,KC_F14,KC_RALT,KC_NO,KC_NO,KC_COMMAND, KC_LEFT,KC_DOWN,KC_RIGHT, KC_P0, KC_NO, KC_PDOT, KC_NO ),
+ [COMMAND] = LAYOUT_all( /* COMMAND */
+ 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_SCROLLLOCK,KC_PAUSE,
+
+ 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_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, KC_P4, KC_P5, KC_P6, KC_NO,
+ KC_LSHIFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSHIFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL,KC_LGUI,KC_LALT,_______,KC_SPC,KC_SPC,KC_SPC,KC_F14,KC_RALT,KC_NO,KC_NO,_______, KC_LEFT,KC_DOWN,KC_RIGHT, KC_P0, KC_NO, KC_PDOT, KC_NO ),
+};
diff --git a/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md b/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md
new file mode 100644
index 0000000000..66eab07b94
--- /dev/null
+++ b/keyboards/thedogkeyboard/keymaps/kakunpc/readme.md
@@ -0,0 +1 @@
+# The kakunpc keymap for thedogkeyboard
diff --git a/keyboards/thedogkeyboard/matrix.c b/keyboards/thedogkeyboard/matrix.c
new file mode 100644
index 0000000000..e06fc15dc4
--- /dev/null
+++ b/keyboards/thedogkeyboard/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/thedogkeyboard/readme.md b/keyboards/thedogkeyboard/readme.md
new file mode 100644
index 0000000000..789149ca82
--- /dev/null
+++ b/keyboards/thedogkeyboard/readme.md
@@ -0,0 +1,15 @@
+# thedogkeyboard
+
+![thedogkeyboard](https://i.gyazo.com/70ac677c1e75c04b812e5dce311f7901.jpg)
+
+ProMicro 100% Keyboard.
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: thedogkeyboard_rev1, promicro
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make thedogkeyboard: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/thedogkeyboard/rules.mk b/keyboards/thedogkeyboard/rules.mk
new file mode 100644
index 0000000000..31e3aa83af
--- /dev/null
+++ b/keyboards/thedogkeyboard/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 = 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 = 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
+CUSTOM_MATRIX = yes
+
+SRC += matrix.c
diff --git a/keyboards/thedogkeyboard/thedogkeyboard.c b/keyboards/thedogkeyboard/thedogkeyboard.c
new file mode 100644
index 0000000000..a1808324c8
--- /dev/null
+++ b/keyboards/thedogkeyboard/thedogkeyboard.c
@@ -0,0 +1,16 @@
+/* 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 "thedogkeyboard.h"
diff --git a/keyboards/thedogkeyboard/thedogkeyboard.h b/keyboards/thedogkeyboard/thedogkeyboard.h
new file mode 100644
index 0000000000..3f4b72c2be
--- /dev/null
+++ b/keyboards/thedogkeyboard/thedogkeyboard.h
@@ -0,0 +1,59 @@
+/* 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, k07,k13,k19,k24, k29,k35,k40,k45, k50,k56,k62,k66, k70,k76,k82,\
+ \
+ k02,k08,k14,k20,k25,k30,k36,k41,k46,k51,k57,k63,k67, k71, k77,k84,k83, k88,k93,k97,k102, \
+ k03, k09,k15,k21,k26,k31,k37,k42,k47,k52,k58,k64,k68, k72, k78,k86,k85, k89,k94,k98,k103, \
+ k04, k10,k16,k22,k27,k32,k38,k43,k48,k53,k59,k65, k73, k90,k95,k99,k110, \
+ k05, k11,k17,k23,k28,k33,k39,k44,k49,k54,k60, k74, k87, k91,k96,k100,k104, \
+ k06, k12, k18, k105, k106, k34, k107, k108, k55, k61, k69, k75, k79,k80,k81, k92,k109,k101,k111 \
+ \
+) \
+{ \
+ { k01, k02, k03, k04, k05, k06 }, \
+ { k07, k08, k09, k10, k11, k12 }, \
+ { k13, k14, k15, k16, k17, k18 }, \
+ { k19, k20, k21, k22, k23, k105 }, \
+ { k24, k25, k26, k27, k28, k106 }, \
+ { k29, k30, k31, k32, k33, k34 }, \
+ { k35, k36, k37, k38, k39, k107 }, \
+ { k40, k41, k42, k43, k44, k108 }, \
+ { k45, k46, k47, k48, k49, KC_NO }, \
+ { k50, k51, k52, k53, k54, k55 }, \
+ { k56, k57, k58, k59, k60, k61 }, \
+ { k62, k63, k64, k65, KC_NO, KC_NO }, \
+ { k66, k67, k68, k69, KC_NO, KC_NO }, \
+ { k70, k71, k72, k73, k74, k75 }, \
+ { k76, k77, k78, k79, k80, k81 }, \
+ { k82, k83, k84, k85, k86, k87 }, \
+ { k88, k89, k90, k91, k92, KC_NO }, \
+ { k93, k94, k95, k96, k109, KC_NO }, \
+ { k97, k98, k99, k100, k101, KC_NO }, \
+ { k102, k103, k104, k110, k111, KC_NO } \
+}
diff --git a/keyboards/thevankeyboards/minivan/keymaps/danbee/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/danbee/keymap.c
new file mode 100644
index 0000000000..b675b09b4f
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/danbee/keymap.c
@@ -0,0 +1,62 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QW,
+ _L1,
+ _L2,
+};
+
+#define CTL_TAB LCTL_T(KC_TAB)
+#define L2_QUOT LT(_L2, KC_QUOT)
+#define SFT_GRV LSFT_T(KC_GRV)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────â”
+ │Esc│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Bcksp│
+ ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─────┤
+ │Ctrl│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ Fn 2│
+ ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ │Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shf│
+ ├────┬─┴───┼───┴┬──┴───┴─┬─┴───┴─┬─┴──┬┴───┴┬──┴───┤
+ │Fn │ Alt│ Cmd│ Return │ Space │Cmd │Hyper│ Ctrl│
+ └────┴─────┴────┴────────┴───────┴────┴─────┴──────┘*/
+ [_QW] = LAYOUT( /* Qwerty */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CTL_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, L2_QUOT,
+ SFT_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ MO(_L1), KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_HYPR, KC_RCTL
+ ),
+ /* 1: fn */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ Del│
+ ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─────┤
+ │ │ │ │ │ │ │ ◀ │ ▼ │ ▲ │ ▶ │ │ │
+ ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ │ │ │ │ │ │ │ │ │ [ │ ] │ \ │ │
+ ├────┬─┴───┼───┴┬──┴───┴─┬─┴───┴─┬─┴──┬┴───┴┬──┴───┤
+ │ │ │ │ │ │ │ │ │
+ └────┴─────┴────┴────────┴───────┴────┴─────┴──────┘*/
+ [_L1] = LAYOUT( /* 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_DEL,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ /* 2: fn 2 */
+ /*┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────â”
+ │ § │Br-│Br+│ │ │ │ │ │ │ - │ = │ Eject│
+ ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬─────┤
+ │ │ │ │ │ │ │Hom│PgD│PgU│End│Ins│ │
+ ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ │ │ │ │ │ │Prv│Nxt│Mut│Vo-│Vo+│ │ │
+ ├────┬─┴───┼───┴┬──┴───┴─┬─┴───┴─┬─┴──┬┴───┴┬──┴───┤
+ │ │ │ │ │ Pause │ │ │ │
+ └────┴─────┴────┴────────┴───────┴────┴─────┴──────┘*/
+ [_L2] = LAYOUT( /* LAYER 2 */
+ KC_NUBS, KC_BRID, KC_BRIU, _______, RESET, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_EJCT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, _______,
+ _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ _______, _______, _______, _______, KC_MPLY, _______, _______, _______
+ ),
+};
diff --git a/keyboards/thevankeyboards/minivan/keymaps/danbee/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/danbee/rules.mk
new file mode 100644
index 0000000000..b1434f75c8
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/danbee/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = no
+KEYBOARD_LOCK_ENABLE = yes
diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
index ac19f8ccd9..fec08cea3e 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/roadkit/keymaps/default/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
index af1a94cc2e..9c045d7451 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
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/treadstone32/keymaps/default/keymap.c b/keyboards/treadstone32/keymaps/default/keymap.c
index a7b908c9de..b49e55f27c 100644
--- a/keyboards/treadstone32/keymaps/default/keymap.c
+++ b/keyboards/treadstone32/keymaps/default/keymap.c
@@ -1,7 +1,6 @@
#include QMK_KEYBOARD_H
#include "keymap_jp.h"
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
diff --git a/keyboards/treadstone48/keymaps/default/config.h b/keyboards/treadstone48/keymaps/default/config.h
index 3f63a0cfbb..e22040cdd6 100644
--- a/keyboards/treadstone48/keymaps/default/config.h
+++ b/keyboards/treadstone48/keymaps/default/config.h
@@ -26,7 +26,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
diff --git a/keyboards/treadstone48/keymaps/default/keymap.c b/keyboards/treadstone48/keymaps/default/keymap.c
index 406f112921..6143307528 100644
--- a/keyboards/treadstone48/keymaps/default/keymap.c
+++ b/keyboards/treadstone48/keymaps/default/keymap.c
@@ -2,7 +2,6 @@
#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
diff --git a/keyboards/treadstone48/rev1/config.h b/keyboards/treadstone48/rev1/config.h
index 09fb621545..a46951c71a 100644
--- a/keyboards/treadstone48/rev1/config.h
+++ b/keyboards/treadstone48/rev1/config.h
@@ -27,7 +27,6 @@ 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
diff --git a/keyboards/ua62/config.h b/keyboards/ua62/config.h
new file mode 100644
index 0000000000..a6590d3685
--- /dev/null
+++ b/keyboards/ua62/config.h
@@ -0,0 +1,250 @@
+/*
+Copyright 2019 NaCly
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 0xBEEF
+#define PRODUCT_ID 0xFFFF
+#define DEVICE_VER 0x0001
+#define MANUFACTURER NaCly
+#define PRODUCT UA62
+#define DESCRIPTION A Keyboard Used for Input.
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { D3, D2, D1, D0, D4 }
+#define MATRIX_COL_PINS { C6, D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/*
+ * 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
+
+#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/ua62/info.json b/keyboards/ua62/info.json
new file mode 100644
index 0000000000..f50ec854ff
--- /dev/null
+++ b/keyboards/ua62/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "ua62",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5.7,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0.6}, {"x":1, "y":0.6}, {"x":2, "y":0.35}, {"x":3, "y":0}, {"x":4, "y":0.35}, {"x":5, "y":0.7}, {"x":9, "y":0.7}, {"x":10, "y":0.35}, {"x":11, "y":0}, {"x":12, "y":0.35}, {"x":13, "y":0.6}, {"x":14, "y":0.6}, {"x":0, "y":1.6}, {"x":1, "y":1.6}, {"x":2, "y":1.35}, {"x":3, "y":1}, {"x":4, "y":1.35}, {"x":5, "y":1.7}, {"x":9, "y":1.7}, {"x":10, "y":1.35}, {"x":11, "y":1}, {"x":12, "y":1.35}, {"x":13, "y":1.6}, {"x":14, "y":1.6}, {"x":0, "y":2.6}, {"x":1, "y":2.6}, {"x":2, "y":2.35}, {"x":3, "y":2}, {"x":4, "y":2.35}, {"x":5, "y":2.7}, {"x":9, "y":2.7}, {"x":10, "y":2.35}, {"x":11, "y":2}, {"x":12, "y":2.35}, {"x":13, "y":2.6}, {"x":14, "y":2.6}, {"x":0, "y":3.6}, {"x":1, "y":3.6}, {"x":2, "y":3.35}, {"x":3, "y":3}, {"x":4, "y":3.35}, {"x":5, "y":3.7}, {"x":9, "y":3.7}, {"x":10, "y":3.35}, {"x":11, "y":3}, {"x":12, "y":3.35}, {"x":13, "y":3.6}, {"x":14, "y":3.6}, {"x":0, "y":4.6}, {"x":1, "y":4.6}, {"x":2, "y":4.35}, {"x":3, "y":4}, {"x":4, "y":4.35}, {"x":5, "y":4.7}, {"x":6, "y":3.95, "h":1.5}, {"x":8, "y":3.95, "h":1.5}, {"x":9, "y":4.7}, {"x":10, "y":4.35}, {"x":11, "y":4}, {"x":12, "y":4.35}, {"x":13, "y":4.6}, {"x":14, "y":4.6}]
+ }
+ }
+ }
diff --git a/keyboards/ua62/keymaps/default/keymap.c b/keyboards/ua62/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5488fdfdc1
--- /dev/null
+++ b/keyboards/ua62/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2019 NaCly
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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_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, LT(1, KC_F), KC_G, KC_H, LT(2, 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_LCTRL, KC_LGUI, KC_LALT, KC_GRV, KC_EQL, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, KC_LBRC, KC_RBRC, KC_HOME, KC_END, KC_ESC
+ ),
+ //Holding F
+ [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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_LCTRL, KC_NO, KC_NO, KC_NO, _______, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, 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_RSFT,
+ KC_LCTRL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ //Holding J
+ [2] = LAYOUT(
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_LCTRL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, KC_SPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
+
diff --git a/keyboards/ua62/readme.md b/keyboards/ua62/readme.md
new file mode 100644
index 0000000000..62523e2146
--- /dev/null
+++ b/keyboards/ua62/readme.md
@@ -0,0 +1,14 @@
+# UA62
+
+* A Universal pcb for the atreus62
+* atreus62 by profet23
+* Original atreus by Phil Hagelberg
+* Keyboard Maintainer: [NaCly](https://github.com/na-cly)
+* Hardware Supported: UA62 PCB
+* Hardware Availability: https://github.com/na-cly/UA62 (Order PCBS)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ua62: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/ua62/rules.mk b/keyboards/ua62/rules.mk
new file mode 100644
index 0000000000..eaca3310b0
--- /dev/null
+++ b/keyboards/ua62/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 = yes # 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/ua62/ua62.c b/keyboards/ua62/ua62.c
new file mode 100644
index 0000000000..cac45f3fbf
--- /dev/null
+++ b/keyboards/ua62/ua62.c
@@ -0,0 +1,17 @@
+/* Copyright 2019 NaCly
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 "ua62.h"
+
diff --git a/keyboards/ua62/ua62.h b/keyboards/ua62/ua62.h
new file mode 100644
index 0000000000..4509bbff3d
--- /dev/null
+++ b/keyboards/ua62/ua62.h
@@ -0,0 +1,41 @@
+/* Copyright 2019 NaCly
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k47, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k46, k48, k49, k4a, k4b, k4c, k4d }, \
+}
diff --git a/keyboards/unikorn/config.h b/keyboards/unikorn/config.h
index a871c0e276..1c4f3431a0 100644
--- a/keyboards/unikorn/config.h
+++ b/keyboards/unikorn/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER Singa and TGR
#define PRODUCT Unikorn 60
diff --git a/keyboards/unikorn/readme.md b/keyboards/unikorn/readme.md
index 3175cddc2d..1383e18518 100644
--- a/keyboards/unikorn/readme.md
+++ b/keyboards/unikorn/readme.md
@@ -2,60 +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
-RGBLIGHT_CUSTOM_DRIVER = 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/unikorn/rules.mk b/keyboards/unikorn/rules.mk
index d4f4d2aaf3..e57c21c856 100644
--- a/keyboards/unikorn/rules.mk
+++ b/keyboards/unikorn/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
@@ -34,8 +19,6 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no
-RGBLIGHT_CUSTOM_DRIVER = no
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-SRC = i2c_master.c
diff --git a/keyboards/unikorn/unikorn.c b/keyboards/unikorn/unikorn.c
index 1bd47ef9e1..70bc5a988f 100644
--- a/keyboards/unikorn/unikorn.c
+++ b/keyboards/unikorn/unikorn.c
@@ -14,49 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "i2c_master.h"
-#include "quantum.h"
-
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "unikorn.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -73,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
diff --git a/keyboards/unikorn/usbconfig.h b/keyboards/unikorn/usbconfig.h
index 41ce167a87..3dcd1ccde7 100644
--- a/keyboards/unikorn/usbconfig.h
+++ b/keyboards/unikorn/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 's', 'i', 'n', 'g', 'a', 't', 'g', 'r'
diff --git a/keyboards/ut472/keymaps/hvp/config.h b/keyboards/ut472/keymaps/hvp/config.h
new file mode 100644
index 0000000000..4ade43cdcd
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/config.h
@@ -0,0 +1,22 @@
+/* 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
+
+// place overrides here
diff --git a/keyboards/ut472/keymaps/hvp/keymap.c b/keyboards/ut472/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..c37718ddab
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/keymap.c
@@ -0,0 +1,99 @@
+/* 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)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+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,
+ LT3_ESC, KC_A, KC_S, KC_D, 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), MT(MOD_LSFT, KC_SPC), MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* FN Layer 1
+ * ,-------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | - | = | [ | ] | \ |
+ * |-------------------------------------------------------------------------+
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+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, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, _______, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______,
+ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | _ | + | { | } | | |
+ * |-------------------------------------------------------------------------+
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| 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_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | |MousL|MousD|MousU|MousR|
+ * `-------------------------------------------------------------------------'
+ */
+
+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,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PSCR,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ RESET, _______, _______, _______, KC_MUTE, KC_MPLY, KC_MSTP, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+}; \ 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..e3dcee467e
--- /dev/null
+++ b/keyboards/ut472/keymaps/hvp/readme.md
@@ -0,0 +1,5 @@
+# UT47 default keymap
+
+![UT47 layout image](https://i.imgur.com/Tsz5qsF.png)
+
+[KLE](http://www.keyboard-layout-editor.com/##@@_y:0%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_w:1.5%3B&=Back%20Space&_x:0.25&a:4&f:4&w:4&h:4&d:true%3B&=%3Cb%3EGNAP!%3C%2F%2Fb%3E%3Cp%3E%3Cp%3EMinimum%20stagger%3Cp%3E47%20key%20layout%3B&@_a:7&f:3&w:1.25%3B&=Tab&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F%3B&_w:1.25%3B&=%27%3B&@_w:1.5%3B&=Shift&=Z&=X&=C&=V&=B&=N&=M&=,&=.&=%2F%2F&=Return%3B&@=Ctrl&=Alt&=Super&=Menu&_w:1.25%3B&=%2F&dArr%2F%3B&_w:2%3B&=&_w:1.25%3B&=%2F&uArr%2F%3B&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&uarr%2F%3B&=%2F&rarr%2F%3B%3B&=undefined)
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/uzu42/keymaps/default/keymap.c b/keyboards/uzu42/keymaps/default/keymap.c
index bb439971dc..393f7c3eae 100644
--- a/keyboards/uzu42/keymaps/default/keymap.c
+++ b/keyboards/uzu42/keymaps/default/keymap.c
@@ -8,7 +8,6 @@
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
#include <stdio.h>
diff --git a/keyboards/v60_type_r/config.h b/keyboards/v60_type_r/config.h
index 51ca6def94..d1a788a858 100644
--- a/keyboards/v60_type_r/config.h
+++ b/keyboards/v60_type_r/config.h
@@ -53,14 +53,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_ON_STATE 0
-#define RGBLIGHT_CUSTOM_DRIVER
-#define RGBLIGHT_ANIMATIONS
+//#define RGB_DI_PIN 0
#define RGBLED_NUM 1
+#define RGBLIGHT_ANIMATIONS
+#define RGB_STEP 16
+
#define RGB_RED_PIN PF6
#define RGB_GREEN_PIN PF5
#define RGB_BLUE_PIN PF4
-#define RGB_DI_PIN 0
-#define RGB_STEP 16
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
diff --git a/keyboards/v60_type_r/rules.mk b/keyboards/v60_type_r/rules.mk
index 7533dff3db..37acd03d1a 100644
--- a/keyboards/v60_type_r/rules.mk
+++ b/keyboards/v60_type_r/rules.mk
@@ -17,18 +17,21 @@ BOOTLOADER = atmel-dfu
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)
+CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_ENABLE = yes # Enable the RGB Underglow
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable the RGB Underglow
+RGBLIGHT_CUSTOM_DRIVER = yes
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
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+
LAYOUTS = 60_ansi 60_iso
diff --git a/keyboards/v60_type_r/v60_type_r.c b/keyboards/v60_type_r/v60_type_r.c
index 5caa149b45..871d9915d3 100644
--- a/keyboards/v60_type_r/v60_type_r.c
+++ b/keyboards/v60_type_r/v60_type_r.c
@@ -18,13 +18,7 @@
#include "quantum.h"
// if we've got an RGB underglow!
-#ifdef V60_POLESTAR
-
-#include "rgblight.h"
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
+#ifdef RGBLIGHT_ENABLE
#define SOFTPWM_LED_TIMER_TOP F_CPU/(256*64)
@@ -191,4 +185,4 @@ ISR(TIMER3_COMPA_vect)
softpwm_buff[2] = led[0].b;
}
}
-#endif // V60_POLESTAR
+#endif // RGBLIGHT_ENABLE
diff --git a/keyboards/v60_type_r/v60_type_r.h b/keyboards/v60_type_r/v60_type_r.h
index c33a2840b0..78b6561ba5 100644
--- a/keyboards/v60_type_r/v60_type_r.h
+++ b/keyboards/v60_type_r/v60_type_r.h
@@ -17,7 +17,7 @@
#include "quantum.h"
-#ifdef V60_POLESTAR
+#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
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/default/keymap.c b/keyboards/vitamins_included/keymaps/default/keymap.c
index 9ee0d1a353..52780d6468 100644
--- a/keyboards/vitamins_included/keymaps/default/keymap.c
+++ b/keyboards/vitamins_included/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
diff --git a/keyboards/waldo/keymaps/default/keymap.c b/keyboards/waldo/keymaps/default/keymap.c
index 2fcb3a1afb..f8041a3f85 100644
--- a/keyboards/waldo/keymaps/default/keymap.c
+++ b/keyboards/waldo/keymaps/default/keymap.c
@@ -16,7 +16,6 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
enum waldo_layers {
_BASE,
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/bface.c b/keyboards/winkeyless/bface/bface.c
index 1c83be4b8d..8cb5b600cd 100644
--- a/keyboards/winkeyless/bface/bface.c
+++ b/keyboards/winkeyless/bface/bface.c
@@ -13,49 +13,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "rgblight.h"
-#include "i2c_master.h"
-#include "quantum.h"
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
-}
-#endif
-
-void matrix_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- if (rgblight_config.enable) {
- i2c_init();
- i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
- }
-#endif
- // call user level keymaps, if any
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-#ifdef RGBLIGHT_ENABLE
- rgblight_task();
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
+#include "bface.h"
void backlight_init_ports(void) {
// initialize pins D0, D1, D4 and D6 as output
@@ -72,17 +31,17 @@ void backlight_init_ports(void) {
}
void backlight_set(uint8_t level) {
- if (level == 0) {
+ if (level == 0) {
// turn backlight LEDs off
writePinLow(D0);
writePinLow(D1);
writePinLow(D4);
writePinLow(D6);
- } else {
+ } else {
// turn backlight LEDs on
writePinHigh(D0);
writePinHigh(D1);
writePinHigh(D4);
writePinHigh(D6);
- }
+ }
}
diff --git a/keyboards/winkeyless/bface/bface.h b/keyboards/winkeyless/bface/bface.h
index f7a3b9521f..bca0c24c1a 100644
--- a/keyboards/winkeyless/bface/bface.h
+++ b/keyboards/winkeyless/bface/bface.h
@@ -18,9 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-#include "quantum_keycodes.h"
-#include "keycode.h"
-#include "action.h"
+#include "quantum.h"
#define LAYOUT_60_ansi( \
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, \
diff --git a/keyboards/winkeyless/bface/config.h b/keyboards/winkeyless/bface/config.h
index 20f3642dc8..9d90e16a3d 100644
--- a/keyboards/winkeyless/bface/config.h
+++ b/keyboards/winkeyless/bface/config.h
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#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 winkeyless.kr
diff --git a/keyboards/winkeyless/bface/rules.mk b/keyboards/winkeyless/bface/rules.mk
index 12b5027855..506e37ac9c 100644
--- a/keyboards/winkeyless/bface/rules.mk
+++ b/keyboards/winkeyless/bface/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
@@ -36,9 +21,6 @@ BACKLIGHT_ENABLE = yes
BACKLIGHT_CUSTOM_DRIVER = yes
BACKLIGHT_BREATHING = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
-
-# custom matrix setup
-SRC = i2c_master.c
diff --git a/keyboards/winkeyless/bface/usbconfig.h b/keyboards/winkeyless/bface/usbconfig.h
index 192d80d916..5ff26399b0 100644
--- a/keyboards/winkeyless/bface/usbconfig.h
+++ b/keyboards/winkeyless/bface/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/winkeyless/bmini/bmini.c b/keyboards/winkeyless/bmini/bmini.c
index 35800358cf..87a31d0520 100644
--- a/keyboards/winkeyless/bmini/bmini.c
+++ b/keyboards/winkeyless/bmini/bmini.c
@@ -16,30 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "bmini.h"
-#include "rgblight.h"
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
-
-extern rgblight_config_t rgblight_config;
-
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
__attribute__ ((weak))
-void matrix_scan_user(void) {
- rgblight_task();
-}
+void matrix_scan_user(void) {}
diff --git a/keyboards/winkeyless/bmini/config.h b/keyboards/winkeyless/bmini/config.h
index 96acd9bf16..37df80f80a 100644
--- a/keyboards/winkeyless/bmini/config.h
+++ b/keyboards/winkeyless/bmini/config.h
@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
#define MANUFACTURER winkeyless.kr
#define PRODUCT B.mini
diff --git a/keyboards/winkeyless/bmini/i2c.c b/keyboards/winkeyless/bmini/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/winkeyless/bmini/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/winkeyless/bmini/i2c.h b/keyboards/winkeyless/bmini/i2c.h
deleted file mode 100644
index 93a69c94da..0000000000
--- a/keyboards/winkeyless/bmini/i2c.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
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 8cfc810566..7822bd8301 100644
--- a/keyboards/winkeyless/bmini/rules.mk
+++ b/keyboards/winkeyless/bmini/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
@@ -34,10 +19,10 @@ CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = matrix.c
diff --git a/keyboards/winkeyless/bmini/usbconfig.h b/keyboards/winkeyless/bmini/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/winkeyless/bmini/usbconfig.h
+++ b/keyboards/winkeyless/bmini/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/winkeyless/bminiex/bminiex.c b/keyboards/winkeyless/bminiex/bminiex.c
index d9b05aba51..11315b9210 100644
--- a/keyboards/winkeyless/bminiex/bminiex.c
+++ b/keyboards/winkeyless/bminiex/bminiex.c
@@ -16,24 +16,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "bminiex.h"
-#include "rgblight.h"
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
#include "backlight.h"
#include "backlight_custom.h"
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
-
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
void backlight_init_ports(void) {
@@ -48,50 +34,3 @@ void backlight_set(uint8_t level) {
b_led_set(level);
}
#endif
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
-void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__((weak)) // overridable
-void matrix_init_user(void) {
-
-}
-
-__attribute__((weak)) // overridable
-void matrix_scan_user(void) {
-
-}
-
-
diff --git a/keyboards/winkeyless/bminiex/config.h b/keyboards/winkeyless/bminiex/config.h
index ebd33ad61e..35c8ce933d 100644
--- a/keyboards/winkeyless/bminiex/config.h
+++ b/keyboards/winkeyless/bminiex/config.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422E
+#define DEVICE_VER 0x0200
#define MANUFACTURER winkeyless.kr
#define PRODUCT B.mini Ex
diff --git a/keyboards/winkeyless/bminiex/i2c.c b/keyboards/winkeyless/bminiex/i2c.c
deleted file mode 100644
index a4f9521352..0000000000
--- a/keyboards/winkeyless/bminiex/i2c.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-// Please do not modify this file
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
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 24e4348795..39a77bda12 100644
--- a/keyboards/winkeyless/bminiex/rules.mk
+++ b/keyboards/winkeyless/bminiex/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
@@ -36,7 +21,7 @@ COMMAND_ENABLE = no
BACKLIGHT_ENABLE = yes
BACKLIGHT_CUSTOM_DRIVER = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
TAP_DANCE_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
@@ -46,4 +31,4 @@ OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight.c
+SRC = matrix.c backlight.c
diff --git a/keyboards/winkeyless/bminiex/usbconfig.h b/keyboards/winkeyless/bminiex/usbconfig.h
index d2d848fcdc..85a915bb46 100644
--- a/keyboards/winkeyless/bminiex/usbconfig.h
+++ b/keyboards/winkeyless/bminiex/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/xbows/knight/config.h b/keyboards/xbows/knight/config.h
index 6dc32db48e..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
@@ -24,8 +24,10 @@
/* number of backlight levels */
// #define BACKLIGHT_LEVELS 3
#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
#define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
+#endif
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
diff --git a/keyboards/xbows/knight/keymaps/default/keymap.c b/keyboards/xbows/knight/keymaps/default/keymap.c
index a6a65437aa..c7db8f3ca9 100644
--- a/keyboards/xbows/knight/keymaps/default/keymap.c
+++ b/keyboards/xbows/knight/keymaps/default/keymap.c
@@ -2,17 +2,17 @@
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_DEL, KC_PSCR, KC_ESC, KC_TAB, KC_BSPC, MO(1),
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, KC_ESC , KC_TAB, KC_BSPC, MO(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_NLCK, KC_PSLS, KC_PAST, 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_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_P7, KC_P8, KC_P9, KC_PMNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_BSPC,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
- KC_LCTL, KC_LGUI, KC_LALT,KC_SPC, KC_LCTL, KC_LSFT,KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT,KC_SPC, KC_LCTL, KC_LSFT,KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[1] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, KC_ESC, KC_TAB, KC_BSPC,KC_TRNS,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, RESET, KC_TAB, KC_BSPC,KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK,KC_PSLS,KC_PAST,KC_EQL,
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_P7, KC_P8, KC_P9, KC_PMNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, BL_STEP,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, RESET, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
- KC_LCTL, KC_LGUI, KC_SPC,KC_LALT, KC_LCTL, KC_LSFT,KC_SPC, KC_RALT, KC_TRNS,KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_0, KC_PDOT,KC_ENT )
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, RESET, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_SPC,KC_LALT, KC_LCTL, KC_LSFT,KC_SPC, KC_RALT, KC_TRNS,KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_0, KC_PDOT)
};
diff --git a/keyboards/xbows/knight/knight.c b/keyboards/xbows/knight/knight.c
index 1b8adc8c2a..dcc5035d51 100644
--- a/keyboards/xbows/knight/knight.c
+++ b/keyboards/xbows/knight/knight.c
@@ -1,19 +1,23 @@
#include "knight.h"
+
void matrix_init_kb(void) {
- setPinOutput(D1);
- setPinOutput(E2);
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
matrix_init_user();
-};
-void led_set_kb(uint8_t usb_led) {
- if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- writePinHigh(D1);
- } else {
- writePinLow(D1);
- }
- if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
- writePinHigh(E2);
- } else {
- writePinLow(E2);
+ led_init_ports();
+}
+
+void led_init_ports(void) {
+ setPinOutput(D1);
+ writePinHigh(D1);
+ setPinOutput(C7);
+ writePinHigh(C7);
+}
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(C7, !led_state.caps_lock);
+ writePin(D1, !led_state.num_lock);
}
- led_set_user(usb_led);
+ return true;
}
diff --git a/keyboards/xbows/knight/knight.h b/keyboards/xbows/knight/knight.h
index 0f252789fc..952d5a3114 100644
--- a/keyboards/xbows/knight/knight.h
+++ b/keyboards/xbows/knight/knight.h
@@ -16,8 +16,8 @@
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K111, K112, K113, K114, K115, K116, K117, K118, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, K218, \
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, \
- K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, K416, K417, \
- K500, K501, K502, K503, K505, K506, K507, K509, K510, K511, K512, K513, K514, K516, K517, K518 \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, K416, K417, K518, \
+ K500, K501, K502, K503, K505, K506, K507, K509, K510, K511, K512, K513, K514, K516, K517 \
) \
{ \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
diff --git a/keyboards/xbows/woody/config.h b/keyboards/xbows/woody/config.h
index bf59031376..985f3acb16 100644
--- a/keyboards/xbows/woody/config.h
+++ b/keyboards/xbows/woody/config.h
@@ -12,7 +12,7 @@
#define MATRIX_ROW_PINS {B3, B2, B1, B0, B5 }
#define MATRIX_COL_PINS {B6, C6, C7, F4, F5, F6, F7, B7, D2, D3, D5, D4, D6, D7, B4 }
#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
@@ -41,3 +41,4 @@
#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 \ No newline at end of file
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/xd60/info.json b/keyboards/xd60/info.json
index ba3c4b5413..c69e8a7887 100644
--- a/keyboards/xd60/info.json
+++ b/keyboards/xd60/info.json
@@ -10,6 +10,10 @@
"LAYOUT_60_ansi": {
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+
+ "LAYOUT_60_iso": {
+ "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":"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":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
}
}
}
diff --git a/keyboards/xd60/keymaps/default/readme.md b/keyboards/xd60/keymaps/default/readme.md
index 248e0a6067..7d6bc75365 100644
--- a/keyboards/xd60/keymaps/default/readme.md
+++ b/keyboards/xd60/keymaps/default/readme.md
@@ -6,4 +6,8 @@
Default Keymap for XD60 as indicated on the original sale page.
## Build
-To build the default keymap, simply run `make xd60:default`.
+
+To build the default keymap, simply run:
+
+ make xd60/rev2:default # XD60 rev2
+ make xd60/rev3:default # XD60 rev3
diff --git a/keyboards/xd60/keymaps/iso/keymap.c b/keyboards/xd60/keymaps/iso/keymap.c
index bb4f8eff84..0f4694ca63 100644
--- a/keyboards/xd60/keymaps/iso/keymap.c
+++ b/keyboards/xd60/keymaps/iso/keymap.c
@@ -1,30 +1,33 @@
#include QMK_KEYBOARD_H
-#include "action_layer.h"
-#define _BL 0
-#define _FL 1
+enum layer_names {
+ _BL,
+ _FL,
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- // 0: Base Layer
- [_BL] = LAYOUT_all(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_NUHS, KC_ENT, \
- KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,KC_DEL, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+ //,: Base Layer
+ [_BL] = 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_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, MO(1), KC_RCTL
+ ),
- // 1: Function Layer
- [_FL] = 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, KC_DEL, KC_NO, \
- KC_NO, KC_VOLD, KC_MUTE, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_TOGG, BL_DEC, BL_INC, KC_NO, \
- KC_NO, KC_MPLY, KC_MSTP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, \
- KC_LSFT, RGB_TOG, RGB_MOD, KC_CUT, KC_COPY,KC_PASTE,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_HOME, KC_PGUP, KC_END, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_NO, KC_PGDOWN, KC_NO),
+ //,: Function Layer
+ [_FL] = LAYOUT_60_iso(
+ 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,
+ XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, BL_DEC, BL_INC,
+ XXXXXXX, KC_MPLY, KC_MSTP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT,
+ KC_LSFT, RGB_TOG, RGB_MOD, KC_CUT, KC_COPY, KC_PSTE, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
+ )
};
// Loop
void matrix_scan_user(void) {
- // Empty
+ // Empty
};
diff --git a/keyboards/xd60/keymaps/iso/readme.md b/keyboards/xd60/keymaps/iso/readme.md
index 82c575d981..84374fa185 100644
--- a/keyboards/xd60/keymaps/iso/readme.md
+++ b/keyboards/xd60/keymaps/iso/readme.md
@@ -1,9 +1,20 @@
# iso Keymap for XIUDI's 60% XD60 PCB
-![iso Keymap for XD60]()
-
-## Additional Notes
iso Keymap for XD60.
+## Keymap
+
+### Base Layer
+
+![Layer 0](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/xd60/keymaps/iso/layer0.png)
+
+### Function Layer
+
+![Layer 1](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/xd60/keymaps/iso/layer1.png)
+
## Build
-To build the default keymap, simply run `make xd60:iso`.
+
+To build the default keymap, simply run:
+
+ make xd60/rev2:iso # XD60 rev2
+ make xd60/rev3:iso # XD60 rev3
diff --git a/keyboards/xd60/readme.md b/keyboards/xd60/readme.md
index b9862428c7..4280414827 100644
--- a/keyboards/xd60/readme.md
+++ b/keyboards/xd60/readme.md
@@ -1,21 +1,16 @@
-XD60
-==
+# XD60
Compact 60% with arrows.
![Top View of a pair of XD60 Keyboard](https://i.imgur.com/3Jq2743.jpg)
-Keyboard Maintainer: QMK Community
-Hardware Supported: XD60 PCB rev2 & rev3
-Hardware Availability: https://www.massdrop.com/buy/xd60-xd64-custom-mechanical-keyboard-kit?mode=guest_open
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: XD60 PCB rev2 & rev3
+* Hardware Availability: [Drop.com](https://www.drop.com/buy/xd60-xd64-custom-mechanical-keyboard-kit?mode=guest_open), [KPRepublic on AliExpress](https://www.aliexpress.com/item/32814945677.html)
-With the implementation of Rev3 you need to specify the Rev you want to build.
-To build for a Rev2 with a default keymap:
+Make example for this keyboard (after setting up your build environment):
-```make xd60/rev2:default```
-
-To build for a Rev3 with a default keymap:
-
-```make xd60/rev3:default```
+ make xd60/rev2:default # rev2
+ make xd60/rev3:default # rev3
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/xd60/rev2/config.h b/keyboards/xd60/rev2/config.h
index 5f23f6eac3..26dbb50e30 100644
--- a/keyboards/xd60/rev2/config.h
+++ b/keyboards/xd60/rev2/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"
@@ -70,5 +69,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-#endif
diff --git a/keyboards/xd60/rev2/rules.mk b/keyboards/xd60/rev2/rules.mk
index 37f281b0cc..b6a8c05d2f 100644
--- a/keyboards/xd60/rev2/rules.mk
+++ b/keyboards/xd60/rev2/rules.mk
@@ -26,4 +26,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = 60_ansi
+LAYOUTS = 60_ansi 60_iso
diff --git a/keyboards/xd60/rev3/rules.mk b/keyboards/xd60/rev3/rules.mk
index 8e1fd415b1..7cff162c9f 100644
--- a/keyboards/xd60/rev3/rules.mk
+++ b/keyboards/xd60/rev3/rules.mk
@@ -26,4 +26,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = 60_ansi
+LAYOUTS = 60_ansi 60_iso
diff --git a/keyboards/xd60/xd60.h b/keyboards/xd60/xd60.h
index 579d67dd34..3946138c38 100644
--- a/keyboards/xd60/xd60.h
+++ b/keyboards/xd60/xd60.h
@@ -1,8 +1,6 @@
-#ifndef XD60_H
-#define XD60_H
+#pragma once
#include "quantum.h"
-#include "led.h"
/* XD60 LEDs
* GPIO pads
@@ -48,4 +46,16 @@ inline void xd60_bl_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
-#endif
+#define LAYOUT_60_iso( \
+ 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, \
+ 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, K45, 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, KC_NO }, \
+ { 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, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+}
diff --git a/keyboards/xd68/config.h b/keyboards/xd68/config.h
new file mode 100644
index 0000000000..41ede7b6c0
--- /dev/null
+++ b/keyboards/xd68/config.h
@@ -0,0 +1,110 @@
+/*
+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
+
+/* 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/keymaps/default/config.h b/keyboards/xd68/keymaps/default/config.h
new file mode 100644
index 0000000000..9ff66e3cf6
--- /dev/null
+++ b/keyboards/xd68/keymaps/default/config.h
@@ -0,0 +1,5 @@
+
+#pragma once
+
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6 \ No newline at end of file
diff --git a/keyboards/xd68/keymaps/default/keymap.c b/keyboards/xd68/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5ce09cde53
--- /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_RCTRL, 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_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ 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/config.h b/keyboards/xd68/keymaps/default_iso/config.h
new file mode 100644
index 0000000000..0d06365361
--- /dev/null
+++ b/keyboards/xd68/keymaps/default_iso/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6 \ No newline at end of file
diff --git a/keyboards/xd68/keymaps/default_iso/keymap.c b/keyboards/xd68/keymaps/default_iso/keymap.c
new file mode 100644
index 0000000000..6edcf748f1
--- /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..91f9a48f3d
--- /dev/null
+++ b/keyboards/xd68/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
+
+# QMK 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 = 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
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI support
+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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+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/matrix.c b/keyboards/xd84/matrix.c
index 4cb5544ca4..a4ddbee9a0 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);
+ 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 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/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 6afd077b0a..a56a1b54b8 100644
--- a/keyboards/ymd75/config.h
+++ b/keyboards/ymd75/config.h
@@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
diff --git a/keyboards/ymd75/i2c.c b/keyboards/ymd75/i2c.c
deleted file mode 100644
index c27f3e3d17..0000000000
--- a/keyboards/ymd75/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 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/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/ymd75/i2c.h b/keyboards/ymd75/i2c.h
deleted file mode 100644
index 27c9d3d050..0000000000
--- a/keyboards/ymd75/i2c.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
diff --git a/keyboards/ymd75/rules.mk b/keyboards/ymd75/rules.mk
index 7bee201738..0c1c9110ca 100644
--- a/keyboards/ymd75/rules.mk
+++ b/keyboards/ymd75/rules.mk
@@ -1,19 +1,3 @@
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-# Modified 2018 Wayne Jones (WarmCatUK) <waynekjones@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
@@ -35,7 +19,7 @@ CONSOLE_ENABLE = no
COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
NKRO_ENABLE = no
# Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
@@ -51,4 +35,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight.c
+SRC = matrix.c backlight.c
diff --git a/keyboards/ymd75/usbconfig.h b/keyboards/ymd75/usbconfig.h
index 73afb18e67..0e570b9ec1 100644
--- a/keyboards/ymd75/usbconfig.h
+++ b/keyboards/ymd75/usbconfig.h
@@ -109,20 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -238,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'Y', 'M', 'D', 'K'
diff --git a/keyboards/ymd75/ymd75.c b/keyboards/ymd75/ymd75.c
index 2259dfa5f0..74f7c6a493 100644
--- a/keyboards/ymd75/ymd75.c
+++ b/keyboards/ymd75/ymd75.c
@@ -16,23 +16,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ymd75.h"
-//#include "rgblight.h"
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
-#include "quantum.h"
#include "backlight.h"
#include "backlight_custom.h"
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
+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`
@@ -48,48 +44,3 @@ void backlight_set(uint8_t level) {
b_led_set(level);
}
#endif
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
- void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
- }
-
- __attribute__((weak)) // overridable
- void matrix_init_user(void) {
-
- }
-
- __attribute__((weak)) // overridable
- void matrix_scan_user(void) {
-
- }
diff --git a/keyboards/ymd96/config.h b/keyboards/ymd96/config.h
index 58169196b4..5c496d8d25 100644
--- a/keyboards/ymd96/config.h
+++ b/keyboards/ymd96/config.h
@@ -23,6 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
// Edit usbconfig.h to change these.
#define MANUFACTURER ymdkey
#define PRODUCT ymd96
@@ -42,6 +43,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TOGGLE 3
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
/* RGB underglow */
// The RGB_DI_PIN value seems to be shared between all PS2AVRGB boards.
diff --git a/keyboards/ymd96/i2c.c b/keyboards/ymd96/i2c.c
deleted file mode 100644
index c27f3e3d17..0000000000
--- a/keyboards/ymd96/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 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/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/ymd96/i2c.h b/keyboards/ymd96/i2c.h
deleted file mode 100644
index 27c9d3d050..0000000000
--- a/keyboards/ymd96/i2c.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
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 96441e1b3f..19d9fd81ab 100644
--- a/keyboards/ymd96/rules.mk
+++ b/keyboards/ymd96/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
@@ -37,7 +22,7 @@ BACKLIGHT_ENABLE = yes
BACKLIGHT_CUSTOM_DRIVER = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
+WS2812_DRIVER = i2c
KEY_LOCK_ENABLE = yes
@@ -48,4 +33,4 @@ OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight.c
+SRC = matrix.c backlight.c
diff --git a/keyboards/ymd96/usbconfig.h b/keyboards/ymd96/usbconfig.h
index a90a36f082..83613384d7 100644
--- a/keyboards/ymd96/usbconfig.h
+++ b/keyboards/ymd96/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'y','m','d','k','e','y'
diff --git a/keyboards/ymd96/ymd96.c b/keyboards/ymd96/ymd96.c
index b0bf6128fa..546a4c6e3a 100644
--- a/keyboards/ymd96/ymd96.c
+++ b/keyboards/ymd96/ymd96.c
@@ -18,22 +18,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "ymd96.h"
-#include <avr/pgmspace.h>
+#include "backlight.h"
+#include "backlight_custom.h"
-#include "action_layer.h"
-#include "quantum.h"
+void matrix_init_kb(void) { matrix_init_user(); }
-#include "i2c.h"
+__attribute__ ((weak))
+void matrix_init_user(void) {}
-#include "backlight.h"
-#include "backlight_custom.h"
+void matrix_scan_kb(void) { matrix_scan_user(); }
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
@@ -49,49 +45,3 @@ void backlight_set(uint8_t level) {
b_led_set(level);
}
#endif
-
-#ifdef RGBLIGHT_ENABLE
-extern rgblight_config_t rgblight_config;
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
-#else
-void matrix_scan_kb(void) {
-#endif
- matrix_scan_user();
- /* Nothing else for now. */
-}
-
-__attribute__((weak)) // overridable
-void matrix_init_user(void) {
-
-}
-
-
-__attribute__((weak)) // overridable
-void matrix_scan_user(void) {
-
-}
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 8eaa1188ee..9e5a9134ff 100644
--- a/keyboards/ymdk/bface/config.h
+++ b/keyboards/ymdk/bface/config.h
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#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 YMDK
diff --git a/keyboards/ymdk/bface/usbconfig.h b/keyboards/ymdk/bface/usbconfig.h
index c9d0fe4d97..7768c5cae5 100644
--- a/keyboards/ymdk/bface/usbconfig.h
+++ b/keyboards/ymdk/bface/usbconfig.h
@@ -108,20 +108,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -237,7 +227,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'Y', 'M', 'D', 'K'
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 5982b6c530..4a846f5e94 100644
--- a/keyboards/ymdk_np21/config.h
+++ b/keyboards/ymdk_np21/config.h
@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
+#define DEVICE_VER 0x0200
// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
#define MANUFACTURER ymdk
@@ -41,6 +42,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_UART 1
+#define USB_MAX_POWER_CONSUMPTION 100
+
/* RGB underglow */
// The RGB_DI_PIN value seems to be shared between all PS2AVRGB boards.
// The same pin is used on the JJ40, at least.
diff --git a/keyboards/ymdk_np21/i2c.c b/keyboards/ymdk_np21/i2c.c
deleted file mode 100644
index c27f3e3d17..0000000000
--- a/keyboards/ymdk_np21/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 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/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/ymdk_np21/i2c.h b/keyboards/ymdk_np21/i2c.h
deleted file mode 100644
index 27c9d3d050..0000000000
--- a/keyboards/ymdk_np21/i2c.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright 2016 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/>.
-*/
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
diff --git a/keyboards/ymdk_np21/rules.mk b/keyboards/ymdk_np21/rules.mk
index 634b9c69c4..2bab3043e8 100644
--- a/keyboards/ymdk_np21/rules.mk
+++ b/keyboards/ymdk_np21/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
@@ -37,8 +22,7 @@ BACKLIGHT_ENABLE = yes
BACKLIGHT_CUSTOM_DRIVER = yes
RGBLIGHT_ENABLE = yes
-RGBLIGHT_CUSTOM_DRIVER = yes
-# DISABLE_WS2812 = no
+WS2812_DRIVER = i2c
KEY_LOCK_ENABLE = yes
@@ -49,4 +33,4 @@ OPT_DEFS = -DDEBUG_LEVEL=0
# custom matrix setup
CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight.c
+SRC = matrix.c backlight.c
diff --git a/keyboards/ymdk_np21/usbconfig.h b/keyboards/ymdk_np21/usbconfig.h
index ad97e7f0a3..4599c03dc9 100644
--- a/keyboards/ymdk_np21/usbconfig.h
+++ b/keyboards/ymdk_np21/usbconfig.h
@@ -109,21 +109,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-// max power draw with maxed white underglow measured at 120 mA (peaks)
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -239,7 +228,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/keyboards/ymdk_np21/ymdk_np21.c b/keyboards/ymdk_np21/ymdk_np21.c
index c1b11b4046..f2b3d46dab 100644
--- a/keyboards/ymdk_np21/ymdk_np21.c
+++ b/keyboards/ymdk_np21/ymdk_np21.c
@@ -18,25 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "ymdk_np21.h"
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "quantum.h"
-
-#include "i2c.h"
-
#include "backlight.h"
#include "backlight_custom.h"
-extern rgblight_config_t rgblight_config;
-
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
- // call user level keymaps, if any
- matrix_init_user();
-}
-
#ifdef BACKLIGHT_ENABLE
/// Overrides functions in `quantum.c`
void backlight_init_ports(void) {
@@ -51,32 +35,3 @@ void backlight_set(uint8_t level) {
b_led_set(level);
}
#endif
-
-// custom RGB driver
-void rgblight_set(void) {
- 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;
- }
- }
-
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
-}
-
-bool rgb_init = false;
-void matrix_scan_kb(void) {
- // if LEDs were previously on before poweroff, turn them back on
- if (rgb_init == false && rgblight_config.enable) {
- i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
- rgb_init = true;
- }
-
- rgblight_task();
- /* Nothing else for now. */
-
- matrix_scan_user();
-}
diff --git a/keyboards/yosino58/keymaps/default/keymap.c b/keyboards/yosino58/keymaps/default/keymap.c
index 79b5075696..2f55dc8e1b 100644
--- a/keyboards/yosino58/keymaps/default/keymap.c
+++ b/keyboards/yosino58/keymaps/default/keymap.c
@@ -7,7 +7,6 @@
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -85,9 +84,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | F1 | F2 | F3 | F4 | F5 | F6 | | | ª | | | | |
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | ª | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | F7 | F8 | F9 | F10 | F11 | F12 |-------.-------. ,---------------| © | « | ¨ | | | |
+ * | F7 | F8 | F9 | F10 | F11 | F12 |-------.-------. ,---------------| © | « | ¨ | | | |
* `-----------------------------------------/ / / \ \ \----------------------------------------'
* | | | /-------/ Space / \ Enter \-------\ | | |
* | | |/ / / \ \ RAISE \ | | |
@@ -334,4 +333,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
-
diff --git a/keyboards/zinc/keymaps/default/keymap.c b/keyboards/zinc/keymaps/default/keymap.c
index 7729914ecc..0f08d21ee7 100644
--- a/keyboards/zinc/keymaps/default/keymap.c
+++ b/keyboards/zinc/keymaps/default/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -302,5 +301,3 @@ void matrix_init_user(void) {
RGB_current_config = rgblight_config;
#endif
}
-
-
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/ergodox/drashna/config.h b/layouts/community/ergodox/drashna/config.h
index 4943832990..0091ebcde8 100644
--- a/layouts/community/ergodox/drashna/config.h
+++ b/layouts/community/ergodox/drashna/config.h
@@ -1,18 +1,19 @@
#pragma once
#ifdef RGBLIGHT_ENABLE
-# undef RGBLIGHT_SAT_STEP
-# define RGBLIGHT_SAT_STEP 12
-
-# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3
-# define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
-#endif // RGBLIGHT_ENABLE
+# undef RGBLIGHT_SAT_STEP
+# define RGBLIGHT_SAT_STEP 12
+# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3
+# define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
+#endif // RGBLIGHT_ENABLE
#undef PRODUCT
-#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Shine
+#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Shine
#undef DEBOUNCE
#define DEBOUNCE 30
#define TAPPING_TERM_PER_KEY
+
+#define ERGODOX_LED_30
diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c
index 6ed4558e27..8308bfdaa1 100644
--- a/layouts/community/ergodox/drashna/keymap.c
+++ b/layouts/community/ergodox/drashna/keymap.c
@@ -1,20 +1,3 @@
-/*
-This is the keymap for the keyboard
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-Copyright 2017 Art Ortenburger
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-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 "drashna.h"
#ifdef UNICODEMAP_ENABLE
@@ -32,6 +15,13 @@ enum more_custom_keycodes { KC_SWAP_NUM = NEW_SAFE_RANGE };
// define layer change stuff for underglow indicator
bool skip_leds = false;
+/*
+ * The `LAYOUT_ergodox_pretty_base` macro is a template to allow the use of
+ * identical modifiers for the default layouts (eg QWERTY, Colemak, Dvorak,
+ * etc), so that there is no need to set them up for each layout, and modify
+ * all of them if I want to change them. This helps to keep consistency and
+ * ease of use. K## is a placeholder to pass through the individual keycodes
+ */
// clang-format off
#define LAYOUT_ergodox_pretty_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -40,8 +30,8 @@ bool skip_leds = false;
) \
LAYOUT_ergodox_pretty_wrapper( \
KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, \
- KC_TAB, K01, K02, K03, K04, K05, TG(_DIABLO), TG(_DIABLO), K06, K07, K08, K09, K0A, KC_BSLS, \
- KC_C1R3, ALT_T(K11), K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
+ LALT_T(KC_TAB), K01, K02, K03, K04, K05, TG(_DIABLO), TG(_DIABLO), K06, K07, K08, K09, K0A, KC_BSLS, \
+ KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
KC_MLSF, CTL_T(K21), K22, K23, K24, K25, TG(_GAMEPAD), TG(_GAMEPAD), K26, K27, K28, K29, RCTL_T(K2A), KC_MRSF, \
KC_GRV, OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, UC(0x2E2E), \
OS_LALT, OS_LGUI, OS_RGUI, CTL_T(KC_ESCAPE), \
@@ -402,7 +392,7 @@ void rgb_matrix_indicators_user(void) {
rgb_matrix_config.enable
# endif
) {
- switch (biton32(layer_state)) {
+ 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
@@ -432,7 +422,7 @@ void rgb_matrix_indicators_user(void) {
break;
default: {
bool mods_enabled = IS_LAYER_ON(_MODS);
- switch (biton32(default_layer_state)) {
+ switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
break;
@@ -466,7 +456,6 @@ void rgb_matrix_indicators_user(void) {
#endif // RGB_MATRIX_INIT
-
uint16_t get_tapping_term(uint16_t keycode) {
if (keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) {
if (mod_config(keycode & 0xf) & MOD_MASK_ALT) {
diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk
index f9f9ea2bab..3aee59df6c 100644
--- a/layouts/community/ergodox/drashna/rules.mk
+++ b/layouts/community/ergodox/drashna/rules.mk
@@ -3,8 +3,8 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
COMMAND_ENABLE = no # Commands for debug and configuration
SPACE_CADET_ENABLE = no
ifeq ($(strip $(KEYBOARD)), ergodox_ez)
- RGBLIGHT_ENABLE = yes
- RGB_MATRIX_ENABLE = no
+ RGBLIGHT_ENABLE = yes
+ RGB_MATRIX_ENABLE = no
endif
CONSOLE_ENABLE = no
BOOTMAGIC_ENABLE = yes
diff --git a/layouts/community/ergodox/issmirnov/README.md b/layouts/community/ergodox/issmirnov/README.md
new file mode 100644
index 0000000000..564edfe31d
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/README.md
@@ -0,0 +1,49 @@
+# Ivan's Ergodox Config
+
+
+## Details about the layout
+
+- Shift and Cmd are One Shot Modifiers, so tapping them once will apply them to the next key. When tapped twice they will lock, until tapped again to clear.
+- When switching to other layers, any stuck modifiers are cleared in order to avoid unintended key combos
+- There are a few leader key combinations. Right now, `KC_LEAD` + `s` will open my wiki homepage.
+- All transparent keys have been replaced with noops to avoid layer bleeding.
+
+## Initial Setup
+
+### QMK
+
+```
+brew tap osx-cross/avr
+brew tap PX4/homebrew-px4
+brew update
+brew install avr-gcc
+brew install dfu-programmer
+brew install gcc-arm-none-eabi
+brew install avrdude
+
+git clone https://github.com/qmk/qmk_firmware.git
+git clone https://github.com/issmirnov/ergodox-layout.git \
+ layouts/community/ergodox/ismirnov
+```
+
+### Teensy utils
+
+Download and add both of these to $PATH
+
+- [hid_listen](https://www.pjrc.com/teensy/hid_listen.html)
+- [teensy loader cli](https://www.pjrc.com/teensy/loader_cli.html)
+
+## Flashing
+
+```
+make ergodox_ez:ismirnov
+teensy_loader_cli -mmcu=atmega32u4 -w -v ergodox_ez_ismirnov.hex
+
+# or just
+make ergodox_ez:ismirnov:flash
+```
+
+## Gotchas
+
+- If you get error: `dyld: Library not loaded: /usr/local/opt/isl/lib/libisl.15.dylib` then do `brew reinstall avr-gcc`
+- If `hid_listen` just prints out a ton of dots, update makefile with `CONSOLE_ENABLE = yes`
diff --git a/layouts/community/ergodox/issmirnov/asci-keymap.txt b/layouts/community/ergodox/issmirnov/asci-keymap.txt
new file mode 100644
index 0000000000..9b023f6641
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/asci-keymap.txt
@@ -0,0 +1,95 @@
+ Qwerty
+,--------------------------------------------. ,--------------------------------------------.
+| Escape | 1 | 2 | 3 | 4 | 5 | ! | | = | 6 | 7 | 8 | 9 | 0 | Escape |
+|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
+|Lctl(Spa| Q | W | E | R | T | * | | + | Y | U | I | O | P |Lgui(Spa|
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| Tab | A | S | D | F | G |-----| |-----| H | J | K | L |TapTo|Mo(Navi)|
+|--------+-----+-----+-----+-----+-----| / | | - |-----+-----+-----+-----+-----+--------|
+|Osm(ModL| Z | X | C | V | B | | | | N | M | . |Comma|Tg(Nu| ' |
+`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
+ |Ctrl |Lsft(|Lsft(| Alt | Mod | |Escap| : | % | |Lgui(|
+ `-----------------------------' ,-----------. ,-----------. `-----------------------------'
+ | | | | ↠| → |
+ ,-----|-----|-----| |-----+-----+-----.
+ | | | | | ↑ | | |
+ | ⎵ | ⌫ |-----| |-----| Tab |Enter|
+ | | | Del | | ↓ | | |
+ `-----------------' `-----------------'
+
+ Symb
+,--------------------------------------------. ,--------------------------------------------.
+| Escape | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
+|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
+| | - | @ | { | } | ` | * | | + | * | ! | | | % | + |Mo(Navi)|
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| Tab | ^ | _ | ( | ) | $ |-----| |-----| # | = | : | ; |TapTo| Dquo |
+|--------+-----+-----+-----+-----+-----| / | | - |-----+-----+-----+-----+-----+--------|
+| Lshift | < | > | [ | ] | ~ | | | | & | ? | / | \ |Tg(Nu| ' |
+`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
+ |Ctrl |Lsft(|Lsft(| Alt |WkspL| |Escap| : | % | | |
+ `-----------------------------' ,-----------. ,-----------. `-----------------------------'
+ | | | | ↠| → |
+ ,-----|-----|-----| |-----+-----+-----.
+ | | | | | ↑ | | |
+ |WkspR| ⌫ |-----| |-----| Tab |Enter|
+ | | | Del | | ↓ | | |
+ `-----------------' `-----------------'
+
+ Nump
+,--------------------------------------------. ,--------------------------------------------.
+| | | | | | | | | = | | | | | | Reset |
+|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
+| | No | No |Lgui(| | | * | | + | , | 7 | 8 | 9 | | |
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| Tab | |Lgui(|Lgui(|Lgui(| |-----| |-----| 0 | 4 | 5 | 6 |To(Sy| |
+|--------+-----+-----+-----+-----+-----| / | | - |-----+-----+-----+-----+-----+--------|
+| | | | |Audio|Audio| | | | . | 1 | 2 | 3 |To(Qw| |
+`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
+ |To(0)| | | | | | 0 | | |To(3)| |
+ `-----------------------------' ,-----------. ,-----------. `-----------------------------'
+ | | | | ↠| → |
+ ,-----|-----|-----| |-----+-----+-----.
+ | | | | | ↑ | | |
+ | ⎵ | ⌫ |-----| |-----| Alt |Shift|
+ | | | Del | | ↓ | | |
+ `-----------------' `-----------------'
+
+ Overwatch
+,--------------------------------------------. ,--------------------------------------------.
+| Escape | 1 | 2 | 3 | 4 | 5 |To(0)| | | | | | | | |
+|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
+| Tab | Q | W | E | R | T | | | | | | | | | |
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| Ctrl | A | S | D | F | P |-----| |-----| | | | | | |
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| Lshift | Z | X | C | V |Grave| | | | | | | | | |
+`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
+ |Ctrl | F9 |Pscre| H | R | | | | | | |
+ `-----------------------------' ,-----------. ,-----------. `-----------------------------'
+ | | | | | |
+ ,-----|-----|-----| |-----+-----+-----.
+ | | | | | | | |
+ | ⎵ | |-----| |-----| | |
+ | | | | | | | |
+ `-----------------' `-----------------'
+
+ Navi
+,--------------------------------------------. ,--------------------------------------------.
+| Escape | 1 | 2 | 3 | 4 | 5 | 6 | | | | | | | | |
+|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
+| | | | ↑ | | | | | | | | | | | |
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| | | ↠| ↓ | → | |-----| |-----| |Ctrl | | | | |
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| | | | | | | | | | | | | | | |
+`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
+ | | | | |WkspL| | ⌘⇧ | | | | |
+ `-----------------------------' ,-----------. ,-----------. `-----------------------------'
+ | | | | | |
+ ,-----|-----|-----| |-----+-----+-----.
+ | | | | | | | |
+ |WkspR| |-----| |-----| | Mod |
+ | | | | | | | |
+ `-----------------' `-----------------'
+
diff --git a/layouts/community/ergodox/issmirnov/build.sh b/layouts/community/ergodox/issmirnov/build.sh
new file mode 100755
index 0000000000..7bb694d8a7
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/build.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+make ergodox_ez:issmirnov
diff --git a/layouts/community/ergodox/issmirnov/config.h b/layouts/community/ergodox/issmirnov/config.h
new file mode 100644
index 0000000000..fe62a7d1df
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/config.h
@@ -0,0 +1,3 @@
+// Reference: https://beta.docs.qmk.fm/reference/config-options
+// and https://github.com/qmk/qmk_firmware/blob/master/docs/config_options.md
+#include QMK_KEYBOARD_CONFIG_H
diff --git a/layouts/community/ergodox/issmirnov/keymap.c b/layouts/community/ergodox/issmirnov/keymap.c
new file mode 100644
index 0000000000..ce853f3d32
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/keymap.c
@@ -0,0 +1,250 @@
+#include QMK_KEYBOARD_H
+
+// Custom user includes
+#include "issmirnov.h"
+#include "tap_tog.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = LAYOUT_ergodox_wrapper(
+KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM,
+LCTL(KC_SPACE), _________________QWERTY_L1_________________, KC_ASTR,
+KC_TAB, _________________QWERTY_L2_________________,
+OSM(MOD_LSFT), _________________QWERTY_L3_________________, KC_SLASH,
+KC_LCTL, LSFT(KC_LGUI), LSFT(KC_LALT), KC_LALT, KC_LGUI,
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ KC_SPACE, KC_BSPACE, KC_DEL,
+
+KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESCAPE ,
+KC_PLUS , _________________QWERTY_R1_________________ , LGUI(KC_SPACE) ,
+ _________________QWERTY_R2_________________ , MO(_NAVI) ,
+KC_MINS , _________________QWERTY_R3_________________ , KC_QUOTE ,
+KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , LGUI(KC_L) ,
+
+KC_LEFT, KC_RGHT,
+KC_UP,
+KC_DOWN, KC_TAB, KC_ENTER
+),
+
+ // layer 1
+[_SYMB] = LAYOUT_ergodox_wrapper(
+KC_ESCAPE , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
+XXXXXXX , _________________SYMB_L1___________________ ,KC_ASTR ,
+KC_TAB , _________________SYMB_L2___________________,
+KC_LSHIFT , _________________SYMB_L3___________________, KC_SLASH ,
+KC_LCTL , LSFT(KC_LGUI) , LSFT(KC_LALT) , KC_LALT , WKSP_LEFT ,
+
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ WKSP_RIGHT, KC_BSPACE, KC_DEL,
+
+KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , XXXXXXX ,
+KC_PLUS , _________________SYMB_R1___________________ , MO(_NAVI) ,
+ _________________SYMB_R2___________________ , KC_DQUO ,
+KC_MINS , _________________SYMB_R3___________________ , KC_QUOTE ,
+KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , XXXXXXX ,
+
+KC_LEFT, KC_RGHT,
+KC_UP,
+KC_DOWN, KC_TAB, KC_ENTER
+),
+
+ // layer 2
+[_NUMP] = LAYOUT_ergodox_wrapper(
+XXXXXXX , ___________________XXXXX___________________, XXXXXXX ,
+XXXXXXX , _________________NUMP_L1___________________ , KC_ASTR ,
+KC_TAB , _________________NUMP_L2___________________ ,
+XXXXXXX , _________________NUMP_L3___________________ , KC_SLASH ,
+TO(0) , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX , XXXXXXX ,
+ XXXXXXX ,
+ KC_SPACE , KC_BSPACE , KC_DEL ,
+
+KC_EQL , ___________________XXXXX___________________ , RESET ,
+KC_PLUS , _________________NUMP_R1___________________ , XXXXXXX ,
+ _________________NUMP_R2___________________ , XXXXXXX ,
+KC_MINS , _________________NUMP_R3___________________ , XXXXXXX ,
+ KC_0 , XXXXXXX , XXXXXXX , TO(3) , XXXXXXX ,
+
+KC_LEFT, KC_RGHT,
+KC_UP,
+KC_DOWN, KC_LALT, KC_LSFT
+),
+
+ // layer 3
+[_OVERWATCH] = LAYOUT_ergodox_wrapper(
+KC_ESCAPE, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , TO(0) ,
+______________OVERWATCH_L1_________________ , XXXXXXX ,
+______________OVERWATCH_L2_________________ ,
+______________OVERWATCH_L3_________________ , XXXXXXX ,
+______________OVERWATCH_L4_________________ ,
+
+XXXXXXX , XXXXXXX ,
+XXXXXXX ,
+KC_SPACE , XXXXXXX , XXXXXXX ,
+
+
+_______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______,
+
+_______, _______,
+_______,
+_______, _______, _______
+
+),
+// layer 4
+[_NAVI] = LAYOUT_ergodox_wrapper(
+KC_ESCAPE, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 ,
+XXXXXXX, _________________NAVI_L1___________________ , XXXXXXX ,
+XXXXXXX, _________________NAVI_L2___________________ ,
+XXXXXXX, _________________NAVI_L3___________________ , XXXXXXX ,
+XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_LEFT,
+
+XXXXXXX , XXXXXXX ,
+XXXXXXX ,
+WKSP_RIGHT , XXXXXXX , XXXXXXX ,
+
+
+_______, _______, _______, _______, _______, _______, _______,
+_______, _________________NAVI_R1___________________, _______,
+ _________________NAVI_R2___________________, _______,
+_______, _________________NAVI_R3___________________, _______,
+MODSFT, _______, _______, _______, _______,
+
+_______, _______,
+_______,
+_______, _______, KC_LGUI
+
+),
+};
+
+
+// called by QMK during key processing before the actual key event is handled. Useful for macros.
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint8_t layer = biton32(layer_state);
+ switch (keycode) {
+ case TAP_TOG_LAYER:
+ process_tap_tog(_SYMB,record);
+ return false;
+ break;
+
+ case WKSP_LEFT:
+ // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
+ if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
+ tap_code16(LGUI(LSFT(KC_Z)));
+ tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
+ }
+ break;
+ case WKSP_RIGHT:
+ // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
+ if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
+ tap_code16(LGUI(LSFT(KC_X)));
+ tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
+ }
+ break;
+ default:
+ tap_tog_count = 0; // reset counter.
+ tap_tog_layer_other_key_pressed = true; // always set this to true, TAP_TOG_LAYER handlers will handle interpreting this
+ break;
+ }
+ return true;
+}
+
+// Runs constantly in the background, in a loop every 100ms or so.
+// Best used for LED status output triggered when user isn't actively typing.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+ if (layer == 0) {
+ // Set up LED indicators for stuck modifier keys.
+ // https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/report.h#L118
+ switch (keyboard_report->mods) {
+ case MOD_BIT(KC_LSFT): // LSHIFT
+ ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
+ ergodox_right_led_1_on ();
+ ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
+ ergodox_right_led_2_on ();
+ ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_3_off ();
+ break;
+
+ case MOD_BIT(KC_LGUI): // LGUI
+ ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_1_off ();
+ ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
+ ergodox_right_led_2_on ();
+ ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
+ ergodox_right_led_3_on ();
+ break;
+
+ case MOD_BIT(KC_LSFT) ^ MOD_BIT(KC_LGUI):
+ ergodox_right_led_1_set (70);
+ ergodox_right_led_1_on ();
+ ergodox_right_led_2_set (70);
+ ergodox_right_led_2_on ();
+ ergodox_right_led_3_set (70);
+ ergodox_right_led_3_on ();
+ break;
+
+ default: // reset leds
+ ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_1_off ();
+ ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_2_off ();
+ ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_3_off ();
+ }
+ }
+}
+
+// only runs when when the layer is changed, good for updating LED's and clearing sticky state
+uint32_t layer_state_set_user(uint32_t state) {
+ uint8_t layer = biton32(state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+
+ combo_enable(); // by default, enable combos.
+ switch (layer) {
+ case 0:
+ break;
+ case 1:
+ clear_mods();
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ clear_mods();
+ ergodox_right_led_2_on();
+ break;
+ case _OVERWATCH:
+ clear_mods();
+ combo_disable(); // We don't want combos in overwatch
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ case 5:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ case 6:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case 7:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ default:
+ break;
+ }
+ return state;
+};
diff --git a/layouts/community/ergodox/issmirnov/push.sh b/layouts/community/ergodox/issmirnov/push.sh
new file mode 100755
index 0000000000..1a6c7c4478
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/push.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+make ergodox_ez:issmirnov:teensy
diff --git a/layouts/community/ergodox/issmirnov/template.txt b/layouts/community/ergodox/issmirnov/template.txt
new file mode 100644
index 0000000000..35c7920a11
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/template.txt
@@ -0,0 +1,17 @@
+,--------------------------------------------. ,--------------------------------------------.
+| 0 | 1 | 2 | 3 | 4 | 5 | 6 | | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
+|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
+| 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
+|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
+| 14 | 15 | 16 | 17 | 18 | 19 |-----| |-----| 52 | 53 | 54 | 55 | 56 | 57 |
+|--------+-----+-----+-----+-----+-----| 26 | | 58 |-----+-----+-----+-----+-----+--------|
+| 20 | 21 | 22 | 23 | 24 | 25 | | | | 59 | 60 | 61 | 62 | 63 | 64 |
+`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
+ | 27 | 28 | 29 | 30 | 31 | | 65 | 66 | 67 | 68 | 69 |
+ `-----------------------------' ,-----------. ,-----------. `-----------------------------'
+ | 32 | 33 | | 70 | 71 |
+ ,-----|-----|-----| |-----+-----+-----.
+ | | | 34 | | 72 | | |
+ | 35 | 36 |-----| |-----| 74 | 75 |
+ | | | 37 | | 73 | | |
+ `-----------------' `-----------------'
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/ergodox/qwerty_code_friendly/keymap.c b/layouts/community/ergodox/qwerty_code_friendly/keymap.c
index f2aa255a4c..bf20e76a53 100644
--- a/layouts/community/ergodox/qwerty_code_friendly/keymap.c
+++ b/layouts/community/ergodox/qwerty_code_friendly/keymap.c
@@ -24,34 +24,37 @@
#define CFQ_USE_DYNAMIC_MACRO
-
#if !defined(CFQ_USER_KEY0)
-# define CFQ_USER_KEY0 KC_BSPC
+# define CFQ_USER_KEY0 KC_APP
#endif
#if !defined(CFQ_USER_KEY1)
-# define CFQ_USER_KEY1 CFQ_KC_FN1
+# define CFQ_USER_KEY1 KC_MENU
#endif
#if !defined(CFQ_USER_KEY2)
-# define CFQ_USER_KEY2 KC_INS
+# define CFQ_USER_KEY2 KC_BSPC
#endif
#if !defined(CFQ_USER_KEY3)
-# define CFQ_USER_KEY3 KC_NLCK
+# define CFQ_USER_KEY3 KC_DEL
#endif
#if !defined(CFQ_USER_KEY4)
-# define CFQ_USER_KEY4 KC_BSPC
+# define CFQ_USER_KEY4 KC_SPC
#endif
#if !defined(CFQ_USER_KEY5)
-# define CFQ_USER_KEY5 KC_DEL
+# define CFQ_USER_KEY5 CFQ_KC_FN1
#endif
#if !defined(CFQ_USER_KEY6)
# define CFQ_USER_KEY6 KC_CAPS
#endif
#if !defined(CFQ_USER_KEY7)
-# define CFQ_USER_KEY7 CFQ_KC_FN3
+# define CFQ_USER_KEY7 KC_INS
#endif
#if !defined(CFQ_USER_KEY8)
# define CFQ_USER_KEY8 KC_DEL
#endif
+#if !defined(CFQ_USER_KEY9)
+# define CFQ_USER_KEY9 KC_BSPC
+#endif
+
#ifdef CFQ_USE_80_KEYS
# define LAYOUT_ergodox_76_or_80 LAYOUT_ergodox_80
@@ -240,10 +243,10 @@ static char cfq_word_lut_title_caps[
sizeof(CFQ_WORD_Y) + sizeof(CFQ_WORD_Z)
];
-#define LAYER_BASE 0 /* default layer */
-#define LAYER_KPAD 1 /* keypad */
-#define LAYER_MDIA 2 /* media keys */
-#define LAYER_FKEY 3 /* F-Keys & Words */
+#define LAYER_BASE 0 /* Default Layer. */
+#define LAYER_KPAD 1 /* Keypad, Bracket Pairs & Macro Record. */
+#define LAYER_FKEY 2 /* Function Keys, Media & Mouse Keys. */
+#define LAYER_WORD 3 /* Entire Words (one for each key) & Numbers. */
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, /* can always be here */
@@ -307,20 +310,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
- * | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del |
+ * | LCtl |Super | Alt | App | Menu | | Left | Down | Up |Right | Del |
* '----------------------------------' '----------------------------------'
* .-------------. .-------------.
- * | Ins |NumClk| | Home | End |
+ * |BSpace| Del | | Home | End |
* .------+------+------| |------+------+------.
* | | |CapsLk| | PgUp | | |
- * |BSpace| Del |------| |------| ~L2 |Enter |
- * | | | ~L3 | | PgDn | | |
+ * |Space | ~L1 |------| |------| ~L2 |Enter |
+ * | | |Insert| | PgDn | | |
* '--------------------' '--------------------'
*
* Optional overrides: see CFQ_USER_KEY# defines.
- *
* .--------------------------------------------------. .--------------------------------------------------.
- * | | | | | | | | | | | | | | | USR0 |
+ * | | | | | | | | | | | | | | | USR9 |
* |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -328,7 +330,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
- * | | | | USR1 | | | | | | | USR8 |
+ * | | | | USR0 | USR1 | | | | | | USR8 |
* '----------------------------------' '----------------------------------'
* .-------------. .-------------.
* | USR2 | USR3 | | | |
@@ -347,12 +349,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN,
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_LBRC,
- KC_LCTL, KC_LGUI, KC_LALT, CFQ_USER_KEY1, KC_SPC,
+ KC_LCTL, KC_LGUI, KC_LALT, CFQ_USER_KEY0, CFQ_USER_KEY1,
CFQ_USER_KEY2, CFQ_USER_KEY3,
K80(L0K0), K80(L0K1), CFQ_USER_KEY6,
CFQ_USER_KEY4, CFQ_USER_KEY5, CFQ_USER_KEY7,
/* right hand */
- KC_RCBR, KC_CIRC, KC_AMPR, KC_ASTR,KC_MINS, KC_EQL, CFQ_USER_KEY0,
+ KC_RCBR, KC_CIRC, KC_AMPR, KC_ASTR,KC_MINS, KC_EQL, CFQ_USER_KEY9,
KC_RPRN, 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_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
@@ -361,7 +363,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PGUP, K80(L0K2), K80(L0K3),
KC_PGDN, CFQ_KC_FN2, KC_ENT
),
-/* Keymap 1: KeyPad, Macro Record
+/* Keymap 1: Keypad, Bracket Pairs & Macro Record
*
* .--------------------------------------------------. .--------------------------------------------------.
* | | | | | | | {} | | }{ | |NumLck| / | * | - | |
@@ -377,12 +379,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* .-------------. .-------------.
* |Start1|Start2| | | |
* .------+------+------| |------+------+------.
- * | | | Stop | | | | |
- * |Play1 |Play2 |------| |------| | |
- * | | | | | | | |
+ * | | |Play1 | | | | |
+ * | Stop | |------| |------| | |
+ * | | |Play2 | | | | |
* '--------------------' '--------------------'
*/
-/* KEYPAD & MACRO */
[LAYER_KPAD] = LAYOUT_ergodox_76_or_80(
/* left hand */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_BRACKET_IN_CBR,
@@ -391,8 +392,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_BRACKET_IN_ANG, M_BRACKET_IN_BRC,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
DYN_REC_START1, DYN_REC_START2,
- K80(L1K0), K80(L1K1), DYN_REC_STOP,
- DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_TRNS,
+ K80(L1K0), K80(L1K1), DYN_MACRO_PLAY1,
+ DYN_REC_STOP, KC_TRNS, DYN_MACRO_PLAY2,
/* right hand */
M_BRACKET_OUT_CBR, KC_TRNS, KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS,
M_BRACKET_OUT_PRN, M_ARROW_LEQL, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS,
@@ -403,7 +404,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, K80(L1K2), K80(L1K3),
KC_TRNS, KC_TRNS, KC_TRNS
),
-/* Keymap 2: FKeys, media & mouse keys
+/* Keymap 2: Function Keys, Media & Mouse Keys
*
* .--------------------------------------------------. .--------------------------------------------------.
* | | | | | | | | | Mute | | F10 | F11 | F12 | | |
@@ -424,8 +425,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | MNxt | | |
* '--------------------' '--------------------'
*/
-/* MEDIA, MOUSE & NUMBERS */
-[LAYER_MDIA] = LAYOUT_ergodox_76_or_80(
+[LAYER_FKEY] = LAYOUT_ergodox_76_or_80(
/* left hand */
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_WH_U,
@@ -447,6 +447,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* Keymap 3: Entire Words (one for each key) & Numbers
*
+ * Activate by holding L1 & L2.
+ *
* .--------------------------------------------------. .--------------------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
* |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
@@ -466,9 +468,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* '--------------------' '--------------------'
*/
-
-/* FKEY & WORDS */
-[LAYER_FKEY] = LAYOUT_ergodox_76_or_80(
+[LAYER_WORD] = LAYOUT_ergodox_76_or_80(
/* left hand */
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
KC_TRNS, M_WORD_Q, M_WORD_W, M_WORD_E, M_WORD_R, M_WORD_T, KC_TRNS,
@@ -490,6 +490,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
+uint32_t layer_state_set_user(uint32_t state) {
+ /* Use layer 3 when 1 & 2 are pressed. */
+ state = update_tri_layer_state(state, LAYER_KPAD, LAYER_FKEY, LAYER_WORD);
+ return state;
+}
+
#define WITHOUT_MODS(...) \
do { \
uint8_t _real_mods = get_mods(); \
diff --git a/layouts/community/ergodox/qwerty_code_friendly/readme.md b/layouts/community/ergodox/qwerty_code_friendly/readme.md
index 319ea50b9a..e615fa28f0 100644
--- a/layouts/community/ergodox/qwerty_code_friendly/readme.md
+++ b/layouts/community/ergodox/qwerty_code_friendly/readme.md
@@ -61,20 +61,20 @@ using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make.
|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
- | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del |
+ | LCtl |Super | Alt | App | Menu | | Left | Down | Up |Right | Del |
'----------------------------------' '----------------------------------'
.-------------. .-------------.
- | Ins |NumClk| | Home | End |
+ |BSpace| Del | | Home | End |
.------+------+------| |------+------+------.
| | |CapsLk| | PgUp | | |
- |BSpace| Del |------| |------| ~L2 |Enter |
- | | | ~L3 | | PgDn | | |
+ |Space | ~L1 |------| |------| ~L2 |Enter |
+ | | |Insert| | PgDn | | |
'--------------------' '--------------------'
Optional overrides: see CFQ_USER_KEY# defines.
.--------------------------------------------------. .--------------------------------------------------.
-| | | | | | | | | | | | | | | USR0 |
+| | | | | | | | | | | | | | | USR9 |
|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
| | | | | | | | | | | | | | | |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -82,7 +82,7 @@ Optional overrides: see CFQ_USER_KEY# defines.
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | | | | | | | | | | | | | | |
'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
- | | | | USR1 | | | | | | | USR8 |
+ | | | | USR0 | USR1 | | | | | | USR8 |
'----------------------------------' '----------------------------------'
.-------------. .-------------.
| USR2 | USR3 | | | |
@@ -93,7 +93,7 @@ Optional overrides: see CFQ_USER_KEY# defines.
'--------------------' '--------------------'
```
-## Keymap 1: KeyPad, Macro Record
+## Keymap 1: KeyPad, Bracket Pairs & Macro Record
Notes:
@@ -115,9 +115,9 @@ Notes:
.-------------. .-------------.
|Start1|Start2| | | |
.------+------+------| |------+------+------.
- | | | Stop | | | | |
- |Play1 |Play2 |------| |------| | |
- | | | | | | | |
+ | | |Play1 | | | | |
+ | Stop | |------| |------| | |
+ | | |Play2 | | | | |
'--------------------' '--------------------'
```
@@ -146,6 +146,8 @@ Notes:
## Keymap 3: User Defined Words & Numbers
+Activate by holding L1 & L2.
+
This is for assigning whole words to single keys.
You can define the arguments (which must be quoted) using: `CFQ_WORD_[A-Z]`
eg: `-DCFQ_WORD_E=\"my@email.com\"`
@@ -178,6 +180,12 @@ Notes:
## Changelog
+- 2019/11/20
+ Move space to thumb cluster
+ Make L1 and L2 symmetrical.
+ Activate L3 by holding L1 & L2.
+ Add App & Menu keys.
+
- 2018/10/19
Move F-Keys to key-pad like layout.
diff --git a/layouts/community/numpad_5x6/drashna/config.h b/layouts/community/numpad_5x6/drashna/config.h
index 2fc5ab6588..29045148e3 100644
--- a/layouts/community/numpad_5x6/drashna/config.h
+++ b/layouts/community/numpad_5x6/drashna/config.h
@@ -3,17 +3,17 @@
// #define B6_AUDIO
#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
-# define RGB_DI_PIN B1
-# define RGBLED_NUM 16 // Number of LEDs
+# define RGB_DI_PIN B1
+# define RGBLED_NUM 16 // Number of LEDs
-# define RGBLIGHT_HUE_STEP 12
-# define RGBLIGHT_SAT_STEP 12
-# define RGBLIGHT_VAL_STEP 12
-# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
-# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
-#endif // RGBLIGHT_ENABLE
+# define RGBLIGHT_HUE_STEP 12
+# define RGBLIGHT_SAT_STEP 12
+# define RGBLIGHT_VAL_STEP 12
+# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
+#endif // RGBLIGHT_ENABLE
#if defined(KEYBOARD_primekb_prime_m)
-# undef PRODUCT
-# define PRODUCT Drashna Hacked Prime_M Macro Pad
+# undef PRODUCT
+# define PRODUCT Drashna Hacked Prime_M Macro Pad
#endif
diff --git a/layouts/community/numpad_5x6/drashna/keymap.c b/layouts/community/numpad_5x6/drashna/keymap.c
index 81710221d3..3d325a4c11 100644
--- a/layouts/community/numpad_5x6/drashna/keymap.c
+++ b/layouts/community/numpad_5x6/drashna/keymap.c
@@ -1,4 +1,3 @@
-#include QMK_KEYBOARD_H
#include "drashna.h"
#define F2_MCRO LT(_GAMEPAD, KC_F2)
diff --git a/layouts/community/ortho_4x12/drashna/config.h b/layouts/community/ortho_4x12/drashna/config.h
index d8ac5e6d11..663708afa6 100644
--- a/layouts/community/ortho_4x12/drashna/config.h
+++ b/layouts/community/ortho_4x12/drashna/config.h
@@ -1,9 +1,10 @@
#pragma once
#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
-# define RGB_DI_PIN A0
-# define RGBLED_NUM 13 // Number of LEDs
-# define RGBLIGHT_ANIMATIONS
+# if defined(KEYBOARD_planck_light)
+# define RGB_DI_PIN A0
+# define RGBLED_NUM 13 // Number of LEDs
+# endif
# define RGBLIGHT_HUE_STEP 12
# define RGBLIGHT_SAT_STEP 12
# define RGBLIGHT_VAL_STEP 12
@@ -23,6 +24,9 @@
# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
# undef RGB_MATRIX_LED_PROCESS_LIMIT
# undef RGB_MATRIX_LED_FLUSH_LIMIT
+# ifdef KEYBOARD_planck_rev6
+# define DRIVER_LED_TOTAL RGBLED_NUM
+# endif
#endif
#if defined(KEYBOARD_lets_split_rev2)
@@ -34,7 +38,7 @@
#if !defined(KEYBOARD_planck_light)
# ifdef RGBLIGHT_ENABLE
# define NO_MUSIC_MODE
-# endif // RGBLIGHT_ENABLE
+# endif // RGBLIGHT_ENABLE
#else
# undef QMK_ESC_OUTPUT
# define QMK_ESC_OUTPUT E6 // usually COL
@@ -45,7 +49,7 @@
# undef QMK_SPEAKER
# define QMK_SPEAKER B5
# define SOLENOID_PIN A1
-#endif // KEYBOARD_planck_light
+#endif // KEYBOARD_planck_light
#if defined(KEYBOARD_planck)
# undef PRODUCT
@@ -58,6 +62,7 @@
# endif
#endif
+#define ENCODER_DIRECTION_FLIP
/*
* MIDI options
*/
@@ -82,26 +87,26 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
-#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/
+#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/
#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
-#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
+#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* default 3V ERM vibration motor voltage and library*/
#if FB_ERM_LRA == 0
-#define RATED_VOLTAGE 3
-#define V_RMS 2.3
-#define V_PEAK 3.30
+# define RATED_VOLTAGE 3
+# define V_RMS 2.3
+# define V_PEAK 3.30
/* Library Selection */
-#define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
+# define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
/* default 2V LRA voltage and library */
#elif FB_ERM_LRA == 1
-#define RATED_VOLTAGE 2
-#define V_RMS 2.0
-#define V_PEAK 2.85
-#define F_LRA 200
+# define RATED_VOLTAGE 2
+# define V_RMS 2.0
+# define V_PEAK 2.85
+# define F_LRA 200
/* Library Selection */
-#define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
+# define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
#endif
diff --git a/layouts/community/ortho_4x12/drashna/keymap.c b/layouts/community/ortho_4x12/drashna/keymap.c
index 1c894c7649..c3899cd036 100644
--- a/layouts/community/ortho_4x12/drashna/keymap.c
+++ b/layouts/community/ortho_4x12/drashna/keymap.c
@@ -1,20 +1,3 @@
-/* Copyright 2015-2017 Jack Humbert
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include QMK_KEYBOARD_H
#include "drashna.h"
#ifdef RGBLIGHT_ENABLE
@@ -46,6 +29,13 @@ enum planck_keycodes {
# define PLNK_4 ET_RAIS
#endif
+/*
+ * The `LAYOUT_ortho_4x12_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
// clang-format off
#define LAYOUT_ortho_4x12_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -54,7 +44,7 @@ enum planck_keycodes {
) \
LAYOUT_ortho_4x12_wrapper( \
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_DEL, \
- KC_TAB, ALT_T(K11), K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
+ LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(KC_QUOT), \
KC_MLSF, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), KC_ENT, \
BACKLIT, OS_LCTL, OS_LALT, OS_LGUI, PLNK_1, PLNK_2, PLNK_3, PLNK_4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
)
@@ -159,14 +149,14 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
#ifdef KEYBOARD_planck_ez
case TH_LVL:
if (record->event.pressed) {
- keyboard_config.led_level++;
- if (keyboard_config.led_level > 4) {
+ keyboard_config.led_level++;
+ if (keyboard_config.led_level > 4) {
keyboard_config.led_level = 0;
- }
- planck_ez_right_led_level((uint8_t)keyboard_config.led_level * 255 / 4 );
- planck_ez_left_led_level((uint8_t)keyboard_config.led_level * 255 / 4 );
- eeconfig_update_kb(keyboard_config.raw);
- layer_state_set_kb(layer_state);
+ }
+ planck_ez_right_led_level((uint8_t)keyboard_config.led_level * 255 / 4);
+ planck_ez_left_led_level((uint8_t)keyboard_config.led_level * 255 / 4);
+ eeconfig_update_kb(keyboard_config.raw);
+ layer_state_set_kb(layer_state);
}
break;
#endif
@@ -190,6 +180,31 @@ bool music_mask_user(uint16_t keycode) {
#ifdef RGB_MATRIX_ENABLE
+# ifdef KEYBOARD_planck_rev6
+// clang-format off
+led_config_t g_led_config = {
+ {
+ // Key Matrix to LED Index
+ { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 },
+ { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED },
+ { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }
+ }, {
+ // LED Index to Physical Position
+ {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60}
+ }, {
+ // LED Index to Flag
+ LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL,
+ LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL
+ }
+};
+// clange-format on
+# endif
+
// clang-format off
void suspend_power_down_keymap(void) {
rgb_matrix_set_suspend_state(true);
@@ -219,7 +234,7 @@ void rgb_matrix_indicators_user(void) {
rgb_matrix_config.enable
# endif
) {
- switch (biton32(layer_state)) {
+ switch (get_highest_layer(layer_state)) {
case _GAMEPAD:
rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
break;
@@ -237,7 +252,7 @@ void rgb_matrix_indicators_user(void) {
break;
default: {
bool mods_enabled = IS_LAYER_ON(_MODS);
- switch (biton32(default_layer_state)) {
+ switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
break;
@@ -268,7 +283,7 @@ void rgb_matrix_indicators_user(void) {
}
}
- switch (biton32(default_layer_state)) {
+ switch (get_highest_layer(default_layer_state)) {
case _QWERTY:
rgb_matrix_set_color(is_ez ? 41 : 42, 0x00, 0xFF, 0xFF);
break;
@@ -283,7 +298,9 @@ void rgb_matrix_indicators_user(void) {
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); }
+ if (!layer_state_cmp(layer_state, _ADJUST)) {
+ rgb_matrix_set_color(24, 0x00, 0xFF, 0x00);
+ }
rgb_matrix_set_color(36, 0x00, 0xFF, 0x00);
}
if ((this_mod | this_osm) & MOD_MASK_CTRL) {
@@ -320,7 +337,7 @@ void matrix_init_keymap(void) {
#ifdef ENCODER_ENABLE
void encoder_update(bool clockwise) {
- switch (biton32(layer_state)) {
+ switch (get_highest_layer(layer_state)) {
case _RAISE:
clockwise ? tap_code(KC_VOLD) : tap_code(KC_VOLU);
break;
@@ -363,7 +380,7 @@ void dip_update(uint8_t index, bool active) {
}
break;
case 2:
- keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = active;
+ keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = active;
break;
case 3:
userspace_config.nuke_switch = active;
@@ -376,7 +393,7 @@ void dip_update(uint8_t index, bool active) {
layer_state_t layer_state_set_keymap(layer_state_t state) {
planck_ez_left_led_off();
planck_ez_right_led_off();
- switch (biton32(state)) {
+ switch (get_highest_layer(state)) {
case _LOWER:
planck_ez_left_led_on();
break;
diff --git a/layouts/community/ortho_4x12/drashna/rules.mk b/layouts/community/ortho_4x12/drashna/rules.mk
index d4726b7a84..38d0d45176 100644
--- a/layouts/community/ortho_4x12/drashna/rules.mk
+++ b/layouts/community/ortho_4x12/drashna/rules.mk
@@ -1,36 +1,40 @@
-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
-TAP_DANCE_ENABLE = no
-AUDIO_ENABLE = yes
+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
ifneq ($(strip $(KEYBOARD)), planck/rev6)
- RGBLIGHT_ENABLE = yes
- INDICATOR_LIGHTS = yes
- RGBLIGHT_TWINKLE = yes
- RGBLIGHT_STARTUP_ANIMATION = yes
+ CONSOLE_ENABLE = no
+ COMMAND_ENABLE = no
+ ifeq ($(strip $(LAYOUT_HAS_RGB)), yes)
+ RGBLIGHT_ENABLE = yes
+ endif
+ INDICATOR_LIGHTS = yes
+ RGBLIGHT_TWINKLE = yes
+ RGBLIGHT_STARTUP_ANIMATION = yes
+else
+ CONSOLE_ENABLE = yes
+ COMMAND_ENABLE = yes
+ RGBLIGHT_ENABLE = no
+ RGB_MATRIX_ENABLE = WS2812
endif
ifeq ($(strip $(KEYBOARD)), planck/light)
- RGB_MATRIX_ENABLE = yes
- RGBLIGHT_ENABLE = no
- RGBLIGHT_STARTUP_ANIMATION = no
- HAPTIC_ENABLE += SOLENOID
+ RGB_MATRIX_ENABLE = yes
+ RGBLIGHT_ENABLE = no
+ RGBLIGHT_STARTUP_ANIMATION = no
+ # HAPTIC_ENABLE += SOLENOID
endif
ifeq ($(strip $(KEYBOARD)), planck/ez)
- RGBLIGHT_ENABLE = no
- # SERIAL_LINK_ENABLE = yes
- ENCODER_ENABLE = yes
- RGB_MATRIX_ENABLE = IS31FL3737
- INDICATOR_LIGHTS = yes
- RGBLIGHT_TWINKLE = yes
- RGBLIGHT_STARTUP_ANIMATION = yes
-endif
-
-ifeq ($(strip $(PROTOCOL)), VUSB)
- NKRO_ENABLE = no
-else
- NKRO_ENABLE = yes
+ RGBLIGHT_ENABLE = no
+ # SERIAL_LINK_ENABLE = yes
+ ENCODER_ENABLE = yes
+ RGB_MATRIX_ENABLE = IS31FL3737
+ INDICATOR_LIGHTS = yes
+ RGBLIGHT_TWINKLE = yes
+ RGBLIGHT_STARTUP_ANIMATION = yes
+ CONSOLE_ENABLE = yes
+ COMMAND_ENABLE = yes
endif
diff --git a/layouts/community/ortho_4x12/jotix/keymap.c b/layouts/community/ortho_4x12/jotix/keymap.c
index 1ba235e3a9..9d7727de89 100644
--- a/layouts/community/ortho_4x12/jotix/keymap.c
+++ b/layouts/community/ortho_4x12/jotix/keymap.c
@@ -4,13 +4,11 @@ enum layers {
_QWERTY,
_LOWER,
_RAISE,
- _GAME
};
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
#define TGLOWER TG(_LOWER)
-#define TGGAME TG(_GAME)
static bool is_ctl_pressed;
static bool is_esc_pressed;
@@ -20,23 +18,23 @@ 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_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_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM, KC_DOT,KC_SLSH, KC_ENT,
+ 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_LGUI,KC_LALT,KC_RALT, LOWER , KC_SPC, KC_SPC, RAISE ,KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT
+ KC_LCTL,KC_LGUI,KC_LALT,KC_RALT,LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
[_LOWER] = 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_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,_______, TGGAME,_______,_______,_______,_______,_______,_______,
+ _______,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_LCBR,KC_RCBR,KC_PIPE,KC_BTN1,KC_BTN2,_______,_______,_______,_______,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
@@ -44,61 +42,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RAISE] = 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_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- KC_CAPS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,KC_MINS, KC_EQL,KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_CAPS,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_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,
+ _______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
_______,_______,_______,_______,TGLOWER,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
-[_GAME] = LAYOUT_ortho_4x12 (
-// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────â”
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
-// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
-// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_UP ,_______,
-// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
- _______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH,KC_LEFT,KC_DOWN,KC_RGHT
-// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
-),
-
};
uint32_t layer_state_set_user(uint32_t state) {
#ifdef JOTANCK_LEDS
- switch (biton32(state)) {
- case _LOWER:
- writePinHigh(JOTANCK_LED1);
- writePinLow(JOTANCK_LED2);
- break;
- case _RAISE:
- writePinLow(JOTANCK_LED1);
- writePinHigh(JOTANCK_LED2);
- break;
- case _GAME:
+ if (biton32(state) == _LOWER) {
writePinHigh(JOTANCK_LED1);
- writePinHigh(JOTANCK_LED2);
- break;
- default:
+ } else {
writePinLow(JOTANCK_LED1);
- writePinLow(JOTANCK_LED2);
- break;
- };
+ }
#endif
return state;
}
-/*
-void led_set_user(uint8_t usb_led) {
- if (!(IS_LED_ON(usb_led, USB_LED_NUM_LOCK))) {
+bool led_update_user(led_t led_state) {
+
+ // NumLock allways on
+ if (!led_state.num_lock) {
tap_code(KC_NUMLOCK);
}
+
+ #ifdef JOTANCK_LEDS
+ // CapsLock led
+ if (led_state.caps_lock) {
+ writePinHigh(JOTANCK_LED2);
+ } else {
+ writePinLow(JOTANCK_LED2);
+ }
+ #endif
+ return true;
}
-*/
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
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/keymap.c b/layouts/community/ortho_5x12/drashna/keymap.c
index 86a78336c8..0ee9dfb10c 100644
--- a/layouts/community/ortho_5x12/drashna/keymap.c
+++ b/layouts/community/ortho_5x12/drashna/keymap.c
@@ -1,24 +1,12 @@
-/* Copyright 2015-2017 Jack Humbert
- * Modified by KeyPCB for the Fractal keyboard
- * Backlight isn't on the Fractal, so I've removed the keycode from the keymaps
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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 "drashna.h"
+/*
+ * The `LAYOUT_ortho_5x12_base` macro is a template to allow the use of identical
+ * modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, etc), so
+ * that there is no need to set them up for each layout, and modify all of
+ * them if I want to change them. This helps to keep consistency and ease
+ * of use. K## is a placeholder to pass through the individual keycodes
+ */
// clang-format off
#define LAYOUT_ortho_5x12_base( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
@@ -27,9 +15,9 @@
K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A \
) \
LAYOUT_ortho_5x12_wrapper( \
- KC_GRV, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \
- KC_TAB, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_BSPC, \
- KC_ESC, ALT_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, K2A, RALT_T(KC_QUOT), \
+ KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \
+ LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_BSPC, \
+ KC_C1R3, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, RALT_T(KC_QUOT), \
KC_MLSF, CTL_T(K31), K32, K33, K34, K35, K36, K37, K38, K39, RCTL_T(K3A), KC_ENT, \
KC_NO, OS_LCTL, OS_LALT, OS_LGUI, SP_LWER, BK_LWER, DL_RAIS, ET_RAIS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
)
diff --git a/layouts/community/ortho_5x12/drashna/rules.mk b/layouts/community/ortho_5x12/drashna/rules.mk
index 75affedd12..cae4b27bab 100644
--- a/layouts/community/ortho_5x12/drashna/rules.mk
+++ b/layouts/community/ortho_5x12/drashna/rules.mk
@@ -5,16 +5,12 @@ CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
TAP_DANCE_ENABLE = no
AUDIO_ENABLE = yes
-ifeq ($(strip $(KEYBOARD)), fractal)
- RGB_MATRIX_ENABLE = no
- AUDIO_ENABLE = yes
- RGBLIGHT_ENABLE = yes
- RGBLIGHT_TWINKLE = yes
- BOOTLOADER = qmk-dfu
-endif
-
-ifeq ($(strip $(PROTOCOL)), VUSB)
-NKRO_ENABLE = no
-else
NKRO_ENABLE = yes
+
+ifeq ($(strip $(KEYBOARD)), fractal)
+ RGB_MATRIX_ENABLE = no
+ AUDIO_ENABLE = yes
+ RGBLIGHT_ENABLE = yes
+ RGBLIGHT_TWINKLE = yes
+ BOOTLOADER = qmk-dfu
endif
diff --git a/layouts/default/60_abnt2/default_60_abnt2/keymap.c b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
new file mode 100644
index 0000000000..e1e4a5a7e1
--- /dev/null
+++ b/layouts/default/60_abnt2/default_60_abnt2/keymap.c
@@ -0,0 +1,47 @@
+#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_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, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/layouts/default/60_abnt2/info.json b/layouts/default/60_abnt2/info.json
new file mode 100644
index 0000000000..4e371abdc9
--- /dev/null
+++ b/layouts/default/60_abnt2/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "60% ABNT2 layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_abnt2": {
+ "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":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},
+ {"x":13.25, "y":3, "w":1.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/layouts/default/60_abnt2/layout.json b/layouts/default/60_abnt2/layout.json
new file mode 100644
index 0000000000..0a4d8fd58b
--- /dev/null
+++ b/layouts/default/60_abnt2/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},"","","","","","","","","","","","",""],
+[{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_abnt2/readme.md b/layouts/default/60_abnt2/readme.md
new file mode 100644
index 0000000000..d363e0d5cb
--- /dev/null
+++ b/layouts/default/60_abnt2/readme.md
@@ -0,0 +1,3 @@
+# 60_abnt2
+
+![60% ABNT2 layout](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/layouts/default/60_abnt2/keyboard-layout.png)
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/info.json b/layouts/default/60_ansi/info.json
new file mode 100644
index 0000000000..a5c9b5f567
--- /dev/null
+++ b/layouts/default/60_ansi/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "60% ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_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":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/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/info.json b/layouts/default/60_ansi_split_bs_rshift/info.json
new file mode 100644
index 0000000000..c42c3b047e
--- /dev/null
+++ b/layouts/default/60_ansi_split_bs_rshift/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "60% ANSI layout with split Backspace and Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_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":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.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_ansi_split_bs_rshift/layout.json b/layouts/default/60_ansi_split_bs_rshift/layout.json
index ebad5d89dc..55bd4531c9 100644
--- a/layouts/default/60_ansi_split_bs_rshift/layout.json
+++ b/layouts/default/60_ansi_split_bs_rshift/layout.json
@@ -1,5 +1,5 @@
[{a:7},"","","","","","","","","","","","","","",""],
[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
-[{w:2.25},"","","","","","","","","","","",{w:1.75},"",{w:1},""],
+[{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},""]
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_ansi_tsangan/info.json b/layouts/default/60_ansi_tsangan/info.json
new file mode 100644
index 0000000000..9c21043dbc
--- /dev/null
+++ b/layouts/default/60_ansi_tsangan/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "60% ANSI Tsangan layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_tsangan": {
+ "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.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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_ansi_tsangan/layout.json b/layouts/default/60_ansi_tsangan/layout.json
index f6a65beb34..6cdacf8de4 100644
--- a/layouts/default/60_ansi_tsangan/layout.json
+++ b/layouts/default/60_ansi_tsangan/layout.json
@@ -2,4 +2,4 @@
[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
[{w:2.25},"","","","","","","","","","","",{w:2.75},""],
-[{w:1.5},"",{w:1},"",{w:1.5},"",{w:7},"",{w:1.5},"",{w:1},"",{w:1.5},""]
+[{w:1.5},"","",{w:1.5},"",{w:7},"",{w:1.5},"","",{w:1.5},""]
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/info.json b/layouts/default/60_hhkb/info.json
new file mode 100644
index 0000000000..0d9594affc
--- /dev/null
+++ b/layouts/default/60_hhkb/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "60% HHKB layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_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":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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_hhkb/layout.json b/layouts/default/60_hhkb/layout.json
index 9dce76a2e4..5d02648dd7 100644
--- a/layouts/default/60_hhkb/layout.json
+++ b/layouts/default/60_hhkb/layout.json
@@ -1,5 +1,5 @@
-["Esc","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=","|\n\\","~\n`"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"Delete"],
-[{w:1.75},"Control","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter"],
-[{w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:1.75},"Shift","Fn"],
-[{x:1.5},"Os",{w:1.5},"Alt",{a:7,w:7},"",{a:4,w:1.5},"Alt","Os"]
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:1.75},"",""],
+[{x:1.5},"",{w:1.5},"",{w:7},"",{w:1.5},"",""]
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/info.json b/layouts/default/60_iso/info.json
new file mode 100644
index 0000000000..4e5b485ba2
--- /dev/null
+++ b/layouts/default/60_iso/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "60% ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_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":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":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/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_iso_tsangan/info.json b/layouts/default/60_iso_tsangan/info.json
new file mode 100644
index 0000000000..91a51f2852
--- /dev/null
+++ b/layouts/default/60_iso_tsangan/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "60% ISO Tsangan layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_iso_tsangan": {
+ "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":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":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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_tsangan/layout.json b/layouts/default/60_iso_tsangan/layout.json
index e231859353..776a5c0dbf 100644
--- a/layouts/default/60_iso_tsangan/layout.json
+++ b/layouts/default/60_iso_tsangan/layout.json
@@ -2,4 +2,4 @@
[{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:2.75},""],
-[{w:1.5},"",{w:1},"",{w:1.5},"",{w:7},"",{w:1.5},"",{w:1},"",{w:1.5},""]
+[{w:1.5},"","",{w:1.5},"",{w:7},"",{w:1.5},"","",{w:1.5},""]
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/info.json b/layouts/default/60_tsangan_hhkb/info.json
new file mode 100644
index 0000000000..6a7451f88c
--- /dev/null
+++ b/layouts/default/60_tsangan_hhkb/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "60% ANSI Tsangan HHKB layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_tsangan_hhkb/layout.json b/layouts/default/60_tsangan_hhkb/layout.json
index 117d26d419..c387347d9e 100644
--- a/layouts/default/60_tsangan_hhkb/layout.json
+++ b/layouts/default/60_tsangan_hhkb/layout.json
@@ -1,5 +1,5 @@
[{a:7},"","","","","","","","","","","","","","",""],
[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
-[{w:2.25},"","","","","","","","","","","",{w:1.75},"",{w:1},""],
-[{w:1.5},"",{w:1},"",{w:1.5},"",{w:7},"",{w:1.5},"",{w:1},"",{w:1.5},""]
+[{w:2.25},"","","","","","","","","","","",{w:1.75},"",""],
+[{w:1.5},"","",{w:1.5},"",{w:7},"",{w:1.5},"","",{w:1.5},""]
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/info.json b/layouts/default/65_ansi/info.json
new file mode 100644
index 0000000000..86fbc3ca77
--- /dev/null
+++ b/layouts/default/65_ansi/info.json
@@ -0,0 +1,85 @@
+{
+ "keyboard_name": "65% ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/65_ansi/layout.json b/layouts/default/65_ansi/layout.json
index 0fa92b0f2e..d8b752ba54 100644
--- a/layouts/default/65_ansi/layout.json
+++ b/layouts/default/65_ansi/layout.json
@@ -1,4 +1,4 @@
-["","","","","","","","","","","","","",{w:2},"",""],
+[{a:7},"","","","","","","","","","","","","",{w:2},"",""],
[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",""],
[{w:1.75},"","","","","","","","","","","","",{w:2.25},"",""],
[{w:2.25},"","","","","","","","","","","",{w:1.75},"","",""],
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/info.json b/layouts/default/65_ansi_blocker/info.json
new file mode 100644
index 0000000000..bbe1c8c3a5
--- /dev/null
+++ b/layouts/default/65_ansi_blocker/info.json
@@ -0,0 +1,84 @@
+{
+ "keyboard_name": "65% ANSI layout with blocker",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_ansi_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":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/65_ansi_blocker/layout.json b/layouts/default/65_ansi_blocker/layout.json
index 312ce188a7..5586e2d0ed 100644
--- a/layouts/default/65_ansi_blocker/layout.json
+++ b/layouts/default/65_ansi_blocker/layout.json
@@ -3,4 +3,3 @@
[{w:1.75},"","","","","","","","","","","","",{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},"",{x:0.5},"","",""]
- \ No newline at end of file
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/info.json b/layouts/default/65_iso/info.json
new file mode 100644
index 0000000000..f5bf439341
--- /dev/null
+++ b/layouts/default/65_iso/info.json
@@ -0,0 +1,86 @@
+{
+ "keyboard_name": "65% ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_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, "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},
+ {"x":11, "y":4},
+ {"x":12, "y":4},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/65_iso/layout.json b/layouts/default/65_iso/layout.json
index 6496e93634..9f95429261 100644
--- a/layouts/default/65_iso/layout.json
+++ b/layouts/default/65_iso/layout.json
@@ -1,4 +1,4 @@
-["","","","","","","","","","","","","",{w:2},"",""],
+[{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},"","",""],
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_ansi/info.json b/layouts/default/66_ansi/info.json
new file mode 100644
index 0000000000..07f5913f0a
--- /dev/null
+++ b/layouts/default/66_ansi/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "66% ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_66_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.5, "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.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, "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.25},
+ {"x":14.5, "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},
+ {"x":12.25, "y":4, "w":1.25},
+ {"x":13.5, "y":4},
+ {"x":14.5, "y":4},
+ {"x":15.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/66_ansi/layout.json b/layouts/default/66_ansi/layout.json
index 60a3a47c00..5ab33eb2f6 100644
--- a/layouts/default/66_ansi/layout.json
+++ b/layouts/default/66_ansi/layout.json
@@ -1,5 +1,5 @@
-["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.5},"Page Up"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{x:0.5},"Page Down"],
-[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter"],
-[{w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.25},"Shift","Up"],
-[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"Alt","Fn",{w:1.25},"Ctrl","Left","Down","Right"]
+[{a:7},"","","","","","","","","","","","","",{w:2},"",{x:0.5},""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.5},""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:2.25},"",""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"","",{w:1.25},"","","",""]
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/66_iso/info.json b/layouts/default/66_iso/info.json
new file mode 100644
index 0000000000..df20bebc36
--- /dev/null
+++ b/layouts/default/66_iso/info.json
@@ -0,0 +1,84 @@
+{
+ "keyboard_name": "66% ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_66_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.5, "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.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":2.25},
+ {"x":14.5, "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},
+ {"x":12.25, "y":4, "w":1.25},
+ {"x":13.5, "y":4},
+ {"x":14.5, "y":4},
+ {"x":15.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/66_iso/layout.json b/layouts/default/66_iso/layout.json
index 1397b37eeb..046226fbcc 100644
--- a/layouts/default/66_iso/layout.json
+++ b/layouts/default/66_iso/layout.json
@@ -1,5 +1,5 @@
-["~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.5},"Page Up"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"Enter",{x:0.5},"Page Down"],
-[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'","~\n#"],
-[{w:1.25},"Shift","|\n\\","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.25},"Shift","↑"],
-[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"Alt","Fn",{w:1.25},"Ctrl","â†","↓","→"]
+[{a:7},"","","","","","","","","","","","","",{w:2},"",{x:0.5},""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.5},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:2.25},"",""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"","",{w:1.25},"","","",""]
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
new file mode 100644
index 0000000000..8dc17fd9e8
--- /dev/null
+++ b/layouts/default/68_ansi/info.json
@@ -0,0 +1,85 @@
+{
+ "keyboard_name": "68-key ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_68_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.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":13.5, "y":1, "w":1.5},
+ {"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, "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":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_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/info.json b/layouts/default/75_ansi/info.json
new file mode 100644
index 0000000000..4f670fc59d
--- /dev/null
+++ b/layouts/default/75_ansi/info.json
@@ -0,0 +1,102 @@
+{
+ "keyboard_name": "75% ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_75_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},
+ {"x":14, "y":0},
+ {"x":15, "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":12, "y":1},
+ {"x":13, "y":1, "w":2},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.5},
+ {"x":1.5, "y":2},
+ {"x":2.5, "y":2},
+ {"x":3.5, "y":2},
+ {"x":4.5, "y":2},
+ {"x":5.5, "y":2},
+ {"x":6.5, "y":2},
+ {"x":7.5, "y":2},
+ {"x":8.5, "y":2},
+ {"x":9.5, "y":2},
+ {"x":10.5, "y":2},
+ {"x":11.5, "y":2},
+ {"x":12.5, "y":2},
+ {"x":13.5, "y":2, "w":1.5},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.75},
+ {"x":1.75, "y":3},
+ {"x":2.75, "y":3},
+ {"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, "w":2.25},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":2.25},
+ {"x":2.25, "y":4},
+ {"x":3.25, "y":4},
+ {"x":4.25, "y":4},
+ {"x":5.25, "y":4},
+ {"x":6.25, "y":4},
+ {"x":7.25, "y":4},
+ {"x":8.25, "y":4},
+ {"x":9.25, "y":4},
+ {"x":10.25, "y":4},
+ {"x":11.25, "y":4},
+ {"x":12.25, "y":4, "w":1.75},
+ {"x":14, "y":4},
+ {"x":15, "y":4},
+
+ {"x":0, "y":5, "w":1.25},
+ {"x":1.25, "y":5, "w":1.25},
+ {"x":2.5, "y":5, "w":1.25},
+ {"x":3.75, "y":5, "w":6.25},
+ {"x":10, "y":5},
+ {"x":11, "y":5},
+ {"x":12, "y":5},
+ {"x":13, "y":5},
+ {"x":14, "y":5},
+ {"x":15, "y":5}
+ ]
+ }
+ }
+}
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/info.json b/layouts/default/75_iso/info.json
new file mode 100644
index 0000000000..14820d6a77
--- /dev/null
+++ b/layouts/default/75_iso/info.json
@@ -0,0 +1,103 @@
+{
+ "keyboard_name": "75% ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_75_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},
+ {"x":14, "y":0},
+ {"x":15, "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":12, "y":1},
+ {"x":13, "y":1, "w":2},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.5},
+ {"x":1.5, "y":2},
+ {"x":2.5, "y":2},
+ {"x":3.5, "y":2},
+ {"x":4.5, "y":2},
+ {"x":5.5, "y":2},
+ {"x":6.5, "y":2},
+ {"x":7.5, "y":2},
+ {"x":8.5, "y":2},
+ {"x":9.5, "y":2},
+ {"x":10.5, "y":2},
+ {"x":11.5, "y":2},
+ {"x":12.5, "y":2},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.75},
+ {"x":1.75, "y":3},
+ {"x":2.75, "y":3},
+ {"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":2, "w":1.25, "h":2},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4},
+ {"x":2.25, "y":4},
+ {"x":3.25, "y":4},
+ {"x":4.25, "y":4},
+ {"x":5.25, "y":4},
+ {"x":6.25, "y":4},
+ {"x":7.25, "y":4},
+ {"x":8.25, "y":4},
+ {"x":9.25, "y":4},
+ {"x":10.25, "y":4},
+ {"x":11.25, "y":4},
+ {"x":12.25, "y":4, "w":1.75},
+ {"x":14, "y":4},
+ {"x":15, "y":4},
+
+ {"x":0, "y":5, "w":1.25},
+ {"x":1.25, "y":5, "w":1.25},
+ {"x":2.5, "y":5, "w":1.25},
+ {"x":3.75, "y":5, "w":6.25},
+ {"x":10, "y":5},
+ {"x":11, "y":5},
+ {"x":12, "y":5},
+ {"x":13, "y":5},
+ {"x":14, "y":5},
+ {"x":15, "y":5}
+ ]
+ }
+ }
+}
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/info.json b/layouts/default/ergodox/info.json
new file mode 100644
index 0000000000..49a1f119a8
--- /dev/null
+++ b/layouts/default/ergodox/info.json
@@ -0,0 +1,104 @@
+{
+ "keyboard_name": "Ergodox layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19.75,
+ "height": 7.25,
+ "layouts": {
+ "LAYOUT_ergodox": {
+ "layout": [
+ {"x":0, "y":0.375, "w":1.5},
+ {"x":1.5, "y":0.375},
+ {"x":2.5, "y":0.125},
+ {"x":3.5, "y":0},
+ {"x":4.5, "y":0.125},
+ {"x":5.5, "y":0.25},
+ {"x":6.5, "y":0.25},
+
+ {"x":0, "y":1.375, "w":1.5},
+ {"x":1.5, "y":1.375},
+ {"x":2.5, "y":1.125},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1.125},
+ {"x":5.5, "y":1.25},
+ {"x":6.5, "y":1.25, "h":1.5},
+
+ {"x":0, "y":2.375, "w":1.5},
+ {"x":1.5, "y":2.375},
+ {"x":2.5, "y":2.125},
+ {"x":3.5, "y":2},
+ {"x":4.5, "y":2.125},
+ {"x":5.5, "y":2.25},
+
+ {"x":0, "y":3.375, "w":1.5},
+ {"x":1.5, "y":3.375},
+ {"x":2.5, "y":3.125},
+ {"x":3.5, "y":3},
+ {"x":4.5, "y":3.125},
+ {"x":5.5, "y":3.25},
+ {"x":6.5, "y":2.75, "h":1.5},
+
+ {"x":0.5, "y":4.375},
+ {"x":1.5, "y":4.375},
+ {"x":2.5, "y":4.125},
+ {"x":3.5, "y":4},
+ {"x":4.5, "y":4.125},
+
+ {"x":7.75, "y":4.25},
+ {"x":8.75, "y":4.25},
+
+ {"x":8.75, "y":5.25},
+
+ {"x":6.75, "y":5.25, "h":2},
+ {"x":7.75, "y":5.25, "h":2},
+ {"x":8.75, "y":6.25},
+
+ {"x":12.25, "y":0.25},
+ {"x":13.25, "y":0.25},
+ {"x":14.25, "y":0.125},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0.125},
+ {"x":17.25, "y":0.375},
+ {"x":18.25, "y":0.375, "w":1.5},
+
+ {"x":12.25, "y":1.25, "h":1.5},
+ {"x":13.25, "y":1.25},
+ {"x":14.25, "y":1.125},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1.125},
+ {"x":17.25, "y":1.375},
+ {"x":18.25, "y":1.375, "w":1.5},
+
+ {"x":13.25, "y":2.25},
+ {"x":14.25, "y":2.125},
+ {"x":15.25, "y":2},
+ {"x":16.25, "y":2.125},
+ {"x":17.25, "y":2.375},
+ {"x":18.25, "y":2.375, "w":1.5},
+
+ {"x":12.25, "y":2.75, "h":1.5},
+ {"x":13.25, "y":3.25},
+ {"x":14.25, "y":3.125},
+ {"x":15.25, "y":3},
+ {"x":16.25, "y":3.125},
+ {"x":17.25, "y":3.375},
+ {"x":18.25, "y":3.375, "w":1.5},
+
+ {"x":14.25, "y":4.125},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4.125},
+ {"x":17.25, "y":4.375},
+ {"x":18.25, "y":4.375},
+
+ {"x":10, "y":4.25},
+ {"x":11, "y":4.25},
+
+ {"x":10, "y":5.25},
+
+ {"x":10, "y":6.25},
+ {"x":11, "y":5.25, "h":2},
+ {"x":12, "y":5.25, "h":2}
+ ]
+ }
+ }
+}
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/info.json b/layouts/default/fullsize_ansi/info.json
new file mode 100644
index 0000000000..ba67fbd4cc
--- /dev/null
+++ b/layouts/default/fullsize_ansi/info.json
@@ -0,0 +1,122 @@
+{
+ "keyboard_name": "Fullsize ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_fullsize_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":18.5, "y":1.25},
+ {"x":19.5, "y":1.25},
+ {"x":20.5, "y":1.25},
+ {"x":21.5, "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":18.5, "y":2.25},
+ {"x":19.5, "y":2.25},
+ {"x":20.5, "y":2.25},
+ {"x":21.5, "y":2.25, "h": 2},
+
+ {"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":18.5, "y":3.25},
+ {"x":19.5, "y":3.25},
+ {"x":20.5, "y":3.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":18.5, "y":4.25},
+ {"x":19.5, "y":4.25},
+ {"x":20.5, "y":4.25},
+ {"x":21.5, "y":4.25, "h":2},
+
+ {"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},
+ {"x":18.5, "y":5.25, "w":2},
+ {"x":20.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/fullsize_ansi/layout.json b/layouts/default/fullsize_ansi/layout.json
index 38db30dfcd..bd98daba69 100644
--- a/layouts/default/fullsize_ansi/layout.json
+++ b/layouts/default/fullsize_ansi/layout.json
@@ -1,6 +1,6 @@
-["Esc",{x:1},"F1","F2","F3","F4",{x:0.5},"F5","F6","F7","F8",{x:0.5},"F9","F10","F11","F12",{x:0.25},"PrtSc","Scroll Lock","Pause\nBreak"],
-[{y:0.5},"~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.25},"Insert","Home","PgUp",{x:0.25},"Num Lock","/","*","-"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{x:0.25},"Delete","End","PgDn",{x:0.25},"7\nHome","8\n↑","9\nPgUp",{h:2},"+"],
-[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter",{x:3.5},"4\nâ†","5","6\n→"],
-[{w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.75},"Shift",{x:1.25},"↑",{x:1.25},"1\nEnd","2\n↓","3\nPgDn",{h:2},"Enter"],
-[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"Alt",{w:1.25},"Win",{w:1.25},"Menu",{w:1.25},"Ctrl",{x:0.25},"â†","↓","→",{x:0.25,w:2},"0\nIns",".\nDel"]
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","","",{x:0.25},"","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.25},"","","",{x:0.25},"","","",{h:2},""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},"",{x:3.5},"","",""],
+[{w:2.25},"","","","","","","","","","","",{w:2.75},"",{x:1.25},"",{x:1.25},"","","",{h:2},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","","",{x:0.25,w:2},"",""]
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/info.json b/layouts/default/fullsize_iso/info.json
new file mode 100644
index 0000000000..403797a31d
--- /dev/null
+++ b/layouts/default/fullsize_iso/info.json
@@ -0,0 +1,123 @@
+{
+ "keyboard_name": "Fullsize ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_fullsize_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":18.5, "y":1.25},
+ {"x":19.5, "y":1.25},
+ {"x":20.5, "y":1.25},
+ {"x":21.5, "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":18.5, "y":2.25},
+ {"x":19.5, "y":2.25},
+ {"x":20.5, "y":2.25},
+ {"x":21.5, "y":2.25, "h": 2},
+
+ {"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":18.5, "y":3.25},
+ {"x":19.5, "y":3.25},
+ {"x":20.5, "y":3.25},
+
+ {"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":18.5, "y":4.25},
+ {"x":19.5, "y":4.25},
+ {"x":20.5, "y":4.25},
+ {"x":21.5, "y":4.25, "h":2},
+
+ {"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},
+ {"x":18.5, "y":5.25, "w":2},
+ {"x":20.5, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/fullsize_iso/layout.json b/layouts/default/fullsize_iso/layout.json
index 1cead8293b..38e197475c 100644
--- a/layouts/default/fullsize_iso/layout.json
+++ b/layouts/default/fullsize_iso/layout.json
@@ -1,6 +1,6 @@
-["Esc",{x:1},"F1","F2","F3","F4",{x:0.5},"F5","F6","F7","F8",{x:0.5},"F9","F10","F11","F12",{x:0.25},"PrtSc","Scroll Lock","Pause\nBreak"],
-[{y:0.5},"¬\n`","!\n1","\"\n2","£\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.25},"Insert","Home","PgUp",{x:0.25},"Num Lock","/","*","-"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"Enter",{x:0.25},"Delete","End","PgDn",{x:0.25},"7\nHome","8\n↑","9\nPgUp",{h:2},"+"],
-[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","@\n'","~\n#",{x:4.75},"4\nâ†","5","6\n→"],
-[{w:1.25},"Shift","|\n\\","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.75},"Shift",{x:1.25},"↑",{x:1.25},"1\nEnd","2\n↓","3\nPgDn",{h:2},"Enter"],
-[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"AltGr",{w:1.25},"Win",{w:1.25},"Menu",{w:1.25},"Ctrl",{x:0.25},"â†","↓","→",{x:0.25,w:2},"0\nIns",".\nDel"]
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","","",{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},"","","",{x:0.25},"","","",{h:2},""],
+[{w:1.75},"","","","","","","","","","","","","",{x:4.75},"","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:2.75},"",{x:1.25},"",{x:1.25},"","","",{h:2},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","","",{x:0.25,w:2},"",""]
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/info.json b/layouts/default/numpad_4x4/info.json
new file mode 100644
index 0000000000..79a6af7712
--- /dev/null
+++ b/layouts/default/numpad_4x4/info.json
@@ -0,0 +1,29 @@
+{
+ "keyboard_name": "4x4 number pad layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_numpad_4x4": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0, "h":2},
+
+ {"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":2, "h":2},
+
+ {"x":0, "y":3, "w":2},
+ {"x":2, "y":3}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/numpad_4x4/layout.json b/layouts/default/numpad_4x4/layout.json
index a39ed6f46d..68ecbc5ce4 100644
--- a/layouts/default/numpad_4x4/layout.json
+++ b/layouts/default/numpad_4x4/layout.json
@@ -1,4 +1,4 @@
-["","","",{h:2},""],
+[{a:7},"","","",{h:2},""],
["","",""],
["","","",{h:2},""],
[{w:2},"",""]
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/info.json b/layouts/default/numpad_5x4/info.json
new file mode 100644
index 0000000000..f14a7d7c3c
--- /dev/null
+++ b/layouts/default/numpad_5x4/info.json
@@ -0,0 +1,34 @@
+{
+ "keyboard_name": "5x4 number pad layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":1, "h":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+
+ {"x":0, "y":4, "w":2},
+ {"x":2, "y":4},
+ {"x":3, "y":3, "h":2}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/numpad_5x4/layout.json b/layouts/default/numpad_5x4/layout.json
index deec0abf36..ea3a3dafa4 100644
--- a/layouts/default/numpad_5x4/layout.json
+++ b/layouts/default/numpad_5x4/layout.json
@@ -1,4 +1,4 @@
-["","","",""],
+[{a:7},"","","",""],
["","","",{h:2},""],
["","",""],
["","","",{h:2},""],
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_5x6/info.json b/layouts/default/numpad_5x6/info.json
new file mode 100644
index 0000000000..fa88c5e97e
--- /dev/null
+++ b/layouts/default/numpad_5x6/info.json
@@ -0,0 +1,44 @@
+{
+ "keyboard_name": "5x6 number pad layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 6,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_numpad_5x6": {
+ "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":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+ {"x":4, "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":1, "h":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3},
+ {"x":4, "y":3},
+
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4, "w":2},
+ {"x":4, "y":4},
+ {"x":5, "y":3, "h":2}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/numpad_5x6/layout.json b/layouts/default/numpad_5x6/layout.json
index 7264cd5a6d..7a4f715de0 100644
--- a/layouts/default/numpad_5x6/layout.json
+++ b/layouts/default/numpad_5x6/layout.json
@@ -1,6 +1,5 @@
-["","","",""],
-[{y:0.5},"","","",""],
-["","","",{h:2},""],
-["","",""],
-["","","",{h:2},""],
-[{w:2},"",""]
+[{a:7},"","","","","",""],
+["","","","","",{h:2},""],
+["","","","",""],
+["","","","","",{h:2},""],
+["","",{w:2},"",""]
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/info.json b/layouts/default/numpad_6x4/info.json
new file mode 100644
index 0000000000..f8548621f1
--- /dev/null
+++ b/layouts/default/numpad_6x4/info.json
@@ -0,0 +1,39 @@
+{
+ "keyboard_name": "6x4 number pad layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_numpad_6x4": {
+ "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/layouts/default/numpad_6x4/layout.json b/layouts/default/numpad_6x4/layout.json
index 7264cd5a6d..ee6f4fc969 100644
--- a/layouts/default/numpad_6x4/layout.json
+++ b/layouts/default/numpad_6x4/layout.json
@@ -1,5 +1,5 @@
+[{a:7},"","","",""],
["","","",""],
-[{y:0.5},"","","",""],
["","","",{h:2},""],
["","",""],
["","","",{h:2},""],
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_3x10/info.json b/layouts/default/ortho_3x10/info.json
new file mode 100644
index 0000000000..f28e70a3f0
--- /dev/null
+++ b/layouts/default/ortho_3x10/info.json
@@ -0,0 +1,45 @@
+{
+ "keyboard_name": "3x10 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 3,
+ "layouts": {
+ "LAYOUT_ortho_3x10": {
+ "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":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":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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_3x10/layout.json b/layouts/default/ortho_3x10/layout.json
index 6600f32a6a..352a422630 100644
--- a/layouts/default/ortho_3x10/layout.json
+++ b/layouts/default/ortho_3x10/layout.json
@@ -1,3 +1,3 @@
-["","","","","","","","","",""],
+[{a:7},"","","","","","","","","",""],
["","","","","","","","","",""],
["","","","","","","","","",""]
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_4x10/info.json b/layouts/default/ortho_4x10/info.json
new file mode 100644
index 0000000000..0e17121c63
--- /dev/null
+++ b/layouts/default/ortho_4x10/info.json
@@ -0,0 +1,56 @@
+{
+ "keyboard_name": "4x10 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x10": {
+ "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":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":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":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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_4x10/layout.json b/layouts/default/ortho_4x10/layout.json
index 86f098e27e..c6f72eb778 100644
--- a/layouts/default/ortho_4x10/layout.json
+++ b/layouts/default/ortho_4x10/layout.json
@@ -1,4 +1,4 @@
-["","","","","","","","","",""],
+[{a:7},"","","","","","","","","",""],
["","","","","","","","","",""],
["","","","","","","","","",""],
["","","","","","","","","",""]
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/info.json b/layouts/default/ortho_4x12/info.json
new file mode 100644
index 0000000000..b642cc6b44
--- /dev/null
+++ b/layouts/default/ortho_4x12/info.json
@@ -0,0 +1,64 @@
+{
+ "keyboard_name": "4x12 ortholinear layout",
+ "url": "",
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_4x12/layout.json b/layouts/default/ortho_4x12/layout.json
index 9439b6e0be..48fb475400 100644
--- a/layouts/default/ortho_4x12/layout.json
+++ b/layouts/default/ortho_4x12/layout.json
@@ -1,4 +1,4 @@
+[{a:7},"","","","","","","","","","","",""],
["","","","","","","","","","","",""],
["","","","","","","","","","","",""],
-["","","","","","","","","","","",""],
-["","","","","","","","","","","",""] \ 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/info.json b/layouts/default/ortho_4x4/info.json
new file mode 100644
index 0000000000..2bf6376dbd
--- /dev/null
+++ b/layouts/default/ortho_4x4/info.json
@@ -0,0 +1,32 @@
+{
+ "keyboard_name": "4x4 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x4": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_4x4/layout.json b/layouts/default/ortho_4x4/layout.json
index ef2a095267..acecc8ab6c 100644
--- a/layouts/default/ortho_4x4/layout.json
+++ b/layouts/default/ortho_4x4/layout.json
@@ -1,4 +1,4 @@
-["","","",""],
+[{a:7},"","","",""],
["","","",""],
["","","",""],
["","","",""]
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/info.json b/layouts/default/ortho_5x12/info.json
new file mode 100644
index 0000000000..9579bf98bd
--- /dev/null
+++ b/layouts/default/ortho_5x12/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "5x12 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x12": {
+ "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},
+
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4},
+ {"x":3, "y":4},
+ {"x":4, "y":4},
+ {"x":5, "y":4},
+ {"x":6, "y":4},
+ {"x":7, "y":4},
+ {"x":8, "y":4},
+ {"x":9, "y":4},
+ {"x":10, "y":4},
+ {"x":11, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_5x12/layout.json b/layouts/default/ortho_5x12/layout.json
index 9b12fa1825..c67e8470df 100644
--- a/layouts/default/ortho_5x12/layout.json
+++ b/layouts/default/ortho_5x12/layout.json
@@ -1,4 +1,4 @@
-["","","","","","","","","","","",""],
+[{a:7},"","","","","","","","","","","",""],
["","","","","","","","","","","",""],
["","","","","","","","","","","",""],
["","","","","","","","","","","",""],
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_5x14/info.json b/layouts/default/ortho_5x14/info.json
new file mode 100644
index 0000000000..c9e403d631
--- /dev/null
+++ b/layouts/default/ortho_5x14/info.json
@@ -0,0 +1,87 @@
+{
+ "keyboard_name": "5x14 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 14,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x14": {
+ "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":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":12, "y":1},
+ {"x":13, "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":12, "y":2},
+ {"x":13, "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},
+ {"x":12, "y":3},
+ {"x":13, "y":3},
+
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4},
+ {"x":3, "y":4},
+ {"x":4, "y":4},
+ {"x":5, "y":4},
+ {"x":6, "y":4},
+ {"x":7, "y":4},
+ {"x":8, "y":4},
+ {"x":9, "y":4},
+ {"x":10, "y":4},
+ {"x":11, "y":4},
+ {"x":12, "y":4},
+ {"x":13, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_5x14/layout.json b/layouts/default/ortho_5x14/layout.json
index e7703827e8..f67e197d53 100644
--- a/layouts/default/ortho_5x14/layout.json
+++ b/layouts/default/ortho_5x14/layout.json
@@ -1,5 +1,5 @@
-["","","","","","","","","","","","","","",""],
-["","","","","","","","","","","","","","",""],
-["","","","","","","","","","","","","","",""],
-["","","","","","","","","","","","","","",""],
-["","","","","","","","","","","","","","",""]
+[{a:7},"","","","","","","","","","","","","",""],
+["","","","","","","","","","","","","",""],
+["","","","","","","","","","","","","",""],
+["","","","","","","","","","","","","",""],
+["","","","","","","","","","","","","",""]
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/info.json b/layouts/default/ortho_5x15/info.json
new file mode 100644
index 0000000000..0286fd25af
--- /dev/null
+++ b/layouts/default/ortho_5x15/info.json
@@ -0,0 +1,92 @@
+{
+ "keyboard_name": "5x15 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x15": {
+ "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},
+ {"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":12, "y":1},
+ {"x":13, "y":1},
+ {"x":14, "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":12, "y":2},
+ {"x":13, "y":2},
+ {"x":14, "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},
+ {"x":12, "y":3},
+ {"x":13, "y":3},
+ {"x":14, "y":3},
+
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4},
+ {"x":3, "y":4},
+ {"x":4, "y":4},
+ {"x":5, "y":4},
+ {"x":6, "y":4},
+ {"x":7, "y":4},
+ {"x":8, "y":4},
+ {"x":9, "y":4},
+ {"x":10, "y":4},
+ {"x":11, "y":4},
+ {"x":12, "y":4},
+ {"x":13, "y":4},
+ {"x":14, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_5x15/layout.json b/layouts/default/ortho_5x15/layout.json
index e7703827e8..42a20657a2 100644
--- a/layouts/default/ortho_5x15/layout.json
+++ b/layouts/default/ortho_5x15/layout.json
@@ -1,4 +1,4 @@
-["","","","","","","","","","","","","","",""],
+[{a:7},"","","","","","","","","","","","","","",""],
["","","","","","","","","","","","","","",""],
["","","","","","","","","","","","","","",""],
["","","","","","","","","","","","","","",""],
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/info.json b/layouts/default/ortho_5x4/info.json
new file mode 100644
index 0000000000..c85ad02d63
--- /dev/null
+++ b/layouts/default/ortho_5x4/info.json
@@ -0,0 +1,37 @@
+{
+ "keyboard_name": "5x4 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x4": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3},
+
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"x":2, "y":4},
+ {"x":3, "y":4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_5x4/layout.json b/layouts/default/ortho_5x4/layout.json
index 8616344774..67a96a7beb 100644
--- a/layouts/default/ortho_5x4/layout.json
+++ b/layouts/default/ortho_5x4/layout.json
@@ -1,4 +1,4 @@
-["","","",""],
+[{a:7},"","","",""],
["","","",""],
["","","",""],
["","","",""],
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/info.json b/layouts/default/ortho_6x4/info.json
new file mode 100644
index 0000000000..d9a937e735
--- /dev/null
+++ b/layouts/default/ortho_6x4/info.json
@@ -0,0 +1,42 @@
+{
+ "keyboard_name": "6x4 ortholinear layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_ortho_6x4": {
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/ortho_6x4/layout.json b/layouts/default/ortho_6x4/layout.json
index 4db1bb0fde..a575306d2c 100644
--- a/layouts/default/ortho_6x4/layout.json
+++ b/layouts/default/ortho_6x4/layout.json
@@ -1,6 +1,6 @@
+[{a:7},"","","",""],
["","","",""],
["","","",""],
["","","",""],
["","","",""],
-["","","",""],
-["","","",""],
+["","","",""]
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/info.json b/layouts/default/planck_mit/info.json
new file mode 100644
index 0000000000..9ac260cb6e
--- /dev/null
+++ b/layouts/default/planck_mit/info.json
@@ -0,0 +1,63 @@
+{
+ "keyboard_name": "Planck MIT (4x12) layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/planck_mit/layout.json b/layouts/default/planck_mit/layout.json
index 91250bb7bd..b214e073c5 100644
--- a/layouts/default/planck_mit/layout.json
+++ b/layouts/default/planck_mit/layout.json
@@ -1,4 +1,4 @@
-["","","","","","","","","","","",""],
+[{a:7},"","","","","","","","","","","",""],
["","","","","","","","","","","",""],
["","","","","","","","","","","",""],
["","","","","",{w:2},"","","","","",""]
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/info.json b/layouts/default/tkl_ansi/info.json
new file mode 100644
index 0000000000..944f93d396
--- /dev/null
+++ b/layouts/default/tkl_ansi/info.json
@@ -0,0 +1,105 @@
+{
+ "keyboard_name": "Tenkeyless ANSI layout",
+ "url": "",
+ "maintainer": "qmk",
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_ansi/layout.json b/layouts/default/tkl_ansi/layout.json
index 54492b98ff..dda9ae58ab 100644
--- a/layouts/default/tkl_ansi/layout.json
+++ b/layouts/default/tkl_ansi/layout.json
@@ -1,6 +1,6 @@
-["Esc",{x:1},"F1","F2","F3","F4",{x:0.5},"F5","F6","F7","F8",{x:0.5},"F9","F10","F11","F12",{x:0.25},"PrtSc","Scroll Lock","Pause\nBreak"],
-[{y:0.5},"~\n`","!\n1","@\n2","#\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.25},"Insert","Home","PgUp"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{x:0.25},"Delete","End","PgDn"],
-[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{w:2.25},"Enter"],
-[{w:2.25},"Shift","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.75},"Shift",{x:1.25},"↑"],
-[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"Alt",{w:1.25},"Win",{w:1.25},"Menu",{w:1.25},"Ctrl",{x:0.25},"â†","↓","→"]
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:2.75},"",{x:1.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
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/info.json b/layouts/default/tkl_iso/info.json
new file mode 100644
index 0000000000..524f28c88e
--- /dev/null
+++ b/layouts/default/tkl_iso/info.json
@@ -0,0 +1,106 @@
+{
+ "keyboard_name": "Tenkeyless ISO layout",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.25,
+ "layouts": {
+ "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}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_iso/layout.json b/layouts/default/tkl_iso/layout.json
index d0b8d5d3d9..b551da6c00 100644
--- a/layouts/default/tkl_iso/layout.json
+++ b/layouts/default/tkl_iso/layout.json
@@ -1,6 +1,6 @@
-["Esc",{x:1},"F1","F2","F3","F4",{x:0.5},"F5","F6","F7","F8",{x:0.5},"F9","F10","F11","F12",{x:0.25},"PrtSc","Scroll Lock","Pause\nBreak"],
-[{y:0.5},"¬\n`","!\n1","\"\n2","£\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace",{x:0.25},"Insert","Home","PgUp"],
-[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"Enter",{x:0.25},"Delete","End","PgDn"],
-[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","@\n'","~\n#"],
-[{w:1.25},"Shift","|\n\\","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.75},"Shift",{x:1.25},"↑"],
-[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"AltGr",{w:1.25},"Win",{w:1.25},"Menu",{w:1.25},"Ctrl",{x:0.25},"â†","↓","→"]
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{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:1.25},""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{x:0.25},"","",""]
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/kle2xy.py b/lib/python/kle2xy.py
new file mode 100644
index 0000000000..bff1d025b7
--- /dev/null
+++ b/lib/python/kle2xy.py
@@ -0,0 +1,146 @@
+""" Original code from https://github.com/skullydazed/kle2xy
+"""
+
+import hjson
+from decimal import Decimal
+
+
+class KLE2xy(list):
+ """Abstract interface for interacting with a KLE layout.
+ """
+ def __init__(self, layout=None, name='', invert_y=True):
+ super(KLE2xy, self).__init__()
+
+ self.name = name
+ self.invert_y = invert_y
+ self.key_width = Decimal('19.05')
+ self.key_skel = {'decal': False, 'border_color': 'none', 'keycap_profile': '', 'keycap_color': 'grey', 'label_color': 'black', 'label_size': 3, 'label_style': 4, 'width': Decimal('1'), 'height': Decimal('1'), 'x': Decimal('0'), 'y': Decimal('0')}
+ self.rows = Decimal(0)
+ self.columns = Decimal(0)
+
+ if layout:
+ self.parse_layout(layout)
+
+ @property
+ def width(self):
+ """Returns the width of the keyboard plate.
+ """
+ return (Decimal(self.columns) * self.key_width) + self.key_width / 2
+
+ @property
+ def height(self):
+ """Returns the height of the keyboard plate.
+ """
+ return (self.rows * self.key_width) + self.key_width / 2
+
+ @property
+ def size(self):
+ """Returns the size of the keyboard plate.
+ """
+ return (self.width, self.height)
+
+ def attrs(self, properties):
+ """Parse the keyboard properties dictionary.
+ """
+ # FIXME: Store more than just the keyboard name.
+ if 'name' in properties:
+ self.name = properties['name']
+
+ def parse_layout(self, layout): # noqa FIXME(skullydazed): flake8 says this has a complexity of 25, it should be refactored.
+ # Wrap this in a dictionary so hjson will parse KLE raw data
+ layout = '{"layout": [' + layout + ']}'
+ layout = hjson.loads(layout)['layout']
+
+ # Initialize our state machine
+ current_key = self.key_skel.copy()
+ current_row = Decimal(0)
+ current_col = Decimal(0)
+ current_x = 0
+ current_y = self.key_width / 2
+
+ if isinstance(layout[0], dict):
+ self.attrs(layout[0])
+ layout = layout[1:]
+
+ for row_num, row in enumerate(layout):
+ self.append([])
+
+ # Process the current row
+ for key in row:
+ if isinstance(key, dict):
+ if 'w' in key and key['w'] != Decimal(1):
+ current_key['width'] = Decimal(key['w'])
+ if 'w2' in key and 'h2' in key and key['w2'] == 1.5 and key['h2'] == 1:
+ # FIXME: ISO Key uses these params: {x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25}
+ current_key['isoenter'] = True
+ if 'h' in key and key['h'] != Decimal(1):
+ current_key['height'] = Decimal(key['h'])
+ if 'a' in key:
+ current_key['label_style'] = self.key_skel['label_style'] = int(key['a'])
+ if current_key['label_style'] < 0:
+ current_key['label_style'] = 0
+ elif current_key['label_style'] > 9:
+ current_key['label_style'] = 9
+ if 'f' in key:
+ font_size = int(key['f'])
+ if font_size > 9:
+ font_size = 9
+ elif font_size < 1:
+ font_size = 1
+ current_key['label_size'] = self.key_skel['label_size'] = font_size
+ if 'p' in key:
+ current_key['keycap_profile'] = self.key_skel['keycap_profile'] = key['p']
+ if 'c' in key:
+ current_key['keycap_color'] = self.key_skel['keycap_color'] = key['c']
+ if 't' in key:
+ # FIXME: Need to do better validation, plus figure out how to support multiple colors
+ if '\n' in key['t']:
+ key['t'] = key['t'].split('\n')[0]
+ if key['t'] == "0":
+ key['t'] = "#000000"
+ current_key['label_color'] = self.key_skel['label_color'] = key['t']
+ if 'x' in key:
+ current_col += Decimal(key['x'])
+ current_x += Decimal(key['x']) * self.key_width
+ if 'y' in key:
+ current_row += Decimal(key['y'])
+ current_y += Decimal(key['y']) * self.key_width
+ if 'd' in key:
+ current_key['decal'] = True
+
+ else:
+ current_key['name'] = key
+ current_key['row'] = current_row
+ current_key['column'] = current_col
+
+ # Determine the X center
+ x_center = (current_key['width'] * self.key_width) / 2
+ current_x += x_center
+ current_key['x'] = current_x
+ current_x += x_center
+
+ # Determine the Y center
+ y_center = (current_key['height'] * self.key_width) / 2
+ y_offset = y_center - (self.key_width / 2)
+ current_key['y'] = (current_y + y_offset)
+
+ # Tend to our row/col count
+ current_col += current_key['width']
+ if current_col > self.columns:
+ self.columns = current_col
+
+ # Invert the y-axis if neccesary
+ if self.invert_y:
+ current_key['y'] = -current_key['y']
+
+ # Store this key
+ self[-1].append(current_key)
+ current_key = self.key_skel.copy()
+
+ # Move to the next row
+ current_x = 0
+ current_y += self.key_width
+ current_col = Decimal(0)
+ current_row += Decimal(1)
+ if current_row > self.rows:
+ self.rows = Decimal(current_row)
diff --git a/lib/python/milc.py b/lib/python/milc.py
index 7b130bdea6..4392c8376a 100644
--- a/lib/python/milc.py
+++ b/lib/python/milc.py
@@ -20,6 +20,7 @@ import re
import shlex
import sys
from decimal import Decimal
+from pathlib import Path
from tempfile import NamedTemporaryFile
from time import sleep
@@ -39,7 +40,7 @@ import colorama
from appdirs import user_config_dir
# Disable logging until we can configure it how the user wants
-logging.basicConfig(filename='/dev/null')
+logging.basicConfig(stream=os.devnull)
# Log Level Representations
EMOJI_LOGLEVELS = {
@@ -96,7 +97,6 @@ def format_ansi(text):
class ANSIFormatter(logging.Formatter):
"""A log formatter that inserts ANSI color.
"""
-
def format(self, record):
msg = super(ANSIFormatter, self).format(record)
return format_ansi(msg)
@@ -105,7 +105,6 @@ class ANSIFormatter(logging.Formatter):
class ANSIEmojiLoglevelFormatter(ANSIFormatter):
"""A log formatter that makes the loglevel an emoji on UTF capable terminals.
"""
-
def format(self, record):
if UNICODE_SUPPORT:
record.levelname = EMOJI_LOGLEVELS[record.levelname].format(**ansi_colors)
@@ -115,7 +114,6 @@ class ANSIEmojiLoglevelFormatter(ANSIFormatter):
class ANSIStrippingFormatter(ANSIFormatter):
"""A log formatter that strips ANSI.
"""
-
def format(self, record):
msg = super(ANSIStrippingFormatter, self).format(record)
return ansi_escape.sub('', msg)
@@ -127,7 +125,6 @@ class Configuration(object):
This class never raises IndexError, instead it will return None if a
section or option does not yet exist.
"""
-
def __contains__(self, key):
return self._config.__contains__(key)
@@ -214,9 +211,8 @@ def handle_store_boolean(self, *args, **kwargs):
class SubparserWrapper(object):
- """Wrap subparsers so we can populate the normal and the shadow parser.
+ """Wrap subparsers so we can track what options the user passed.
"""
-
def __init__(self, cli, submodule, subparser):
self.cli = cli
self.submodule = submodule
@@ -232,26 +228,30 @@ class SubparserWrapper(object):
self.subparser.completer = completer
def add_argument(self, *args, **kwargs):
+ """Add an argument for this subcommand.
+
+ This also stores the default for the argument in `self.cli.default_arguments`.
+ """
if 'action' in kwargs and kwargs['action'] == 'store_boolean':
+ # Store boolean will call us again with the enable/disable flag arguments
return handle_store_boolean(self, *args, **kwargs)
self.cli.acquire_lock()
self.subparser.add_argument(*args, **kwargs)
-
- if 'default' in kwargs:
- del kwargs['default']
- if 'action' in kwargs and kwargs['action'] == 'store_false':
- kwargs['action'] == 'store_true'
- self.cli.subcommands_default[self.submodule].add_argument(*args, **kwargs)
+ if self.submodule not in self.cli.default_arguments:
+ self.cli.default_arguments[self.submodule] = {}
+ self.cli.default_arguments[self.submodule][self.cli.get_argument_name(*args, **kwargs)] = kwargs.get('default')
self.cli.release_lock()
class MILC(object):
"""MILC - An Opinionated Batteries Included Framework
"""
-
def __init__(self):
"""Initialize the MILC object.
+
+ version
+ The version string to associate with your CLI program
"""
# Setup a lock for thread safety
self._lock = threading.RLock() if thread else None
@@ -263,9 +263,10 @@ class MILC(object):
self._inside_context_manager = False
self.ansi = ansi_colors
self.arg_only = []
- self.config = Configuration()
+ self.config = None
self.config_file = None
- self.version = os.environ.get('QMK_VERSION', 'unknown')
+ self.default_arguments = {}
+ self.version = 'unknown'
self.release_lock()
# Figure out our program name
@@ -273,6 +274,7 @@ class MILC(object):
self.prog_name = self.prog_name.split('/')[-1]
# Initialize all the things
+ self.read_config_file()
self.initialize_argparse()
self.initialize_logging()
@@ -282,7 +284,7 @@ class MILC(object):
@description.setter
def description(self, value):
- self._description = self._arg_parser.description = self._arg_defaults.description = value
+ self._description = self._arg_parser.description = value
def echo(self, text, *args, **kwargs):
"""Print colorized text to stdout.
@@ -311,12 +313,9 @@ class MILC(object):
self.acquire_lock()
self.subcommands = {}
- self.subcommands_default = {}
self._subparsers = None
- self._subparsers_default = None
self.argwarn = argcomplete.warn
self.args = None
- self._arg_defaults = argparse.ArgumentParser(**kwargs)
self._arg_parser = argparse.ArgumentParser(**kwargs)
self.set_defaults = self._arg_parser.set_defaults
self.print_usage = self._arg_parser.print_usage
@@ -329,25 +328,18 @@ class MILC(object):
self._arg_parser.completer = completer
def add_argument(self, *args, **kwargs):
- """Wrapper to add arguments to both the main and the shadow argparser.
+ """Wrapper to add arguments and track whether they were passed on the command line.
"""
if 'action' in kwargs and kwargs['action'] == 'store_boolean':
return handle_store_boolean(self, *args, **kwargs)
- if kwargs.get('add_dest', True) and args[0][0] == '-':
- kwargs['dest'] = 'general_' + self.get_argument_name(*args, **kwargs)
- if 'add_dest' in kwargs:
- del kwargs['add_dest']
-
self.acquire_lock()
+
self._arg_parser.add_argument(*args, **kwargs)
+ if 'general' not in self.default_arguments:
+ self.default_arguments['general'] = {}
+ self.default_arguments['general'][self.get_argument_name(*args, **kwargs)] = kwargs.get('default')
- # Populate the shadow parser
- if 'default' in kwargs:
- del kwargs['default']
- if 'action' in kwargs and kwargs['action'] == 'store_false':
- kwargs['action'] == 'store_true'
- self._arg_defaults.add_argument(*args, **kwargs)
self.release_lock()
def initialize_logging(self):
@@ -374,15 +366,14 @@ class MILC(object):
self.add_argument('--log-file-fmt', default='[%(levelname)s] [%(asctime)s] [file:%(pathname)s] [line:%(lineno)d] %(message)s', help='Format string for log file.')
self.add_argument('--log-file', help='File to write log messages to')
self.add_argument('--color', action='store_boolean', default=True, help='color in output')
- self.add_argument('-c', '--config-file', help='The config file to read and/or write')
- self.add_argument('--save-config', action='store_true', help='Save the running configuration to the config file')
+ self.add_argument('--config-file', help='The location for the configuration file')
+ self.arg_only.append('config_file')
def add_subparsers(self, title='Sub-commands', **kwargs):
if self._inside_context_manager:
raise RuntimeError('You must run this before the with statement!')
self.acquire_lock()
- self._subparsers_default = self._arg_defaults.add_subparsers(title=title, dest='subparsers', **kwargs)
self._subparsers = self._arg_parser.add_subparsers(title=title, dest='subparsers', **kwargs)
self.release_lock()
@@ -404,10 +395,12 @@ class MILC(object):
if self.config_file:
return self.config_file
- if self.args and self.args.general_config_file:
- return self.args.general_config_file
+ if '--config-file' in sys.argv:
+ return Path(sys.argv[sys.argv.index('--config-file') + 1]).expanduser().resolve()
- return os.path.join(user_config_dir(appname='qmk', appauthor='QMK'), '%s.ini' % self.prog_name)
+ filedir = user_config_dir(appname='qmk', appauthor='QMK')
+ filename = '%s.ini' % self.prog_name
+ return Path(filedir) / filename
def get_argument_name(self, *args, **kwargs):
"""Takes argparse arguments and returns the dest name.
@@ -446,7 +439,7 @@ class MILC(object):
def arg_passed(self, arg):
"""Returns True if arg was passed on the command line.
"""
- return self.args_passed[arg] in (None, False)
+ return self.default_arguments.get(arg) != self.args[arg]
def parse_args(self):
"""Parse the CLI args.
@@ -459,25 +452,22 @@ class MILC(object):
self.acquire_lock()
self.args = self._arg_parser.parse_args()
- self.args_passed = self._arg_defaults.parse_args()
if 'entrypoint' in self.args:
self._entrypoint = self.args.entrypoint
- if self.args.general_config_file:
- self.config_file = self.args.general_config_file
-
self.release_lock()
- def read_config(self):
- """Parse the configuration file and determine the runtime configuration.
+ def read_config_file(self):
+ """Read in the configuration file and store it in self.config.
"""
self.acquire_lock()
+ self.config = Configuration()
self.config_file = self.find_config_file()
- if self.config_file and os.path.exists(self.config_file):
+ if self.config_file and self.config_file.exists():
config = RawConfigParser(self.config)
- config.read(self.config_file)
+ config.read(str(self.config_file))
# Iterate over the config file options and write them into self.config
for section in config.sections():
@@ -487,8 +477,10 @@ class MILC(object):
# Coerce values into useful datatypes
if value.lower() in ['1', 'yes', 'true', 'on']:
value = True
- elif value.lower() in ['0', 'no', 'false', 'none', 'off']:
+ elif value.lower() in ['0', 'no', 'false', 'off']:
value = False
+ elif value.lower() in ['none']:
+ continue
elif value.replace('.', '').isdigit():
if '.' in value:
value = Decimal(value)
@@ -497,32 +489,44 @@ class MILC(object):
self.config[section][option] = value
- # Fold the CLI args into self.config
+ self.release_lock()
+
+ def merge_args_into_config(self):
+ """Merge CLI arguments into self.config to create the runtime configuration.
+ """
+ self.acquire_lock()
for argument in vars(self.args):
if argument in ('subparsers', 'entrypoint'):
continue
- if '_' in argument:
- section, option = argument.split('_', 1)
- else:
- section = self._entrypoint.__name__
- option = argument
-
- if option not in self.arg_only:
- if hasattr(self.args_passed, argument):
+ if argument not in self.arg_only:
+ # Find the argument's section
+ if self._entrypoint.__name__ in self.default_arguments and argument in self.default_arguments[self._entrypoint.__name__]:
+ argument_found = True
+ section = self._entrypoint.__name__
+ if argument in self.default_arguments['general']:
+ argument_found = True
+ section = 'general'
+
+ if not argument_found:
+ raise RuntimeError('Could not find argument in `self.default_arguments`. This should be impossible!')
+ exit(1)
+
+ # Merge this argument into self.config
+ if argument in self.default_arguments:
arg_value = getattr(self.args, argument)
if arg_value:
- self.config[section][option] = arg_value
+ self.config[section][argument] = arg_value
else:
- if option not in self.config[section]:
- self.config[section][option] = getattr(self.args, argument)
+ if argument not in self.config[section]:
+ self.config[section][argument] = getattr(self.args, argument)
self.release_lock()
def save_config(self):
"""Save the current configuration to the config file.
"""
- self.log.debug("Saving config file to '%s'", self.config_file)
+ self.log.debug("Saving config file to '%s'", str(self.config_file))
if not self.config_file:
self.log.warning('%s.config_file file not set, not saving config!', self.__class__.__name__)
@@ -530,31 +534,34 @@ class MILC(object):
self.acquire_lock()
+ # Generate a sanitized version of our running configuration
config = RawConfigParser()
- config_dir = os.path.dirname(self.config_file)
-
for section_name, section in self.config._config.items():
config.add_section(section_name)
for option_name, value in section.items():
if section_name == 'general':
- if option_name in ['save_config']:
+ if option_name in ['config_file']:
continue
- config.set(section_name, option_name, str(value))
+ if value is not None:
+ config.set(section_name, option_name, str(value))
- if not os.path.exists(config_dir):
- os.makedirs(config_dir)
+ # Write out the config file
+ config_dir = self.config_file.parent
+ if not config_dir.exists():
+ config_dir.mkdir(parents=True, exist_ok=True)
- with NamedTemporaryFile(mode='w', dir=config_dir, delete=False) as tmpfile:
+ with NamedTemporaryFile(mode='w', dir=str(config_dir), delete=False) as tmpfile:
config.write(tmpfile)
# Move the new config file into place atomically
if os.path.getsize(tmpfile.name) > 0:
- os.rename(tmpfile.name, self.config_file)
+ os.rename(tmpfile.name, str(self.config_file))
else:
- self.log.warning('Config file saving failed, not replacing %s with %s.', self.config_file, tmpfile.name)
+ self.log.warning('Config file saving failed, not replacing %s with %s.', str(self.config_file), tmpfile.name)
+ # Housekeeping
self.release_lock()
- cli.log.info('Wrote configuration to %s', shlex.quote(self.config_file))
+ cli.log.info('Wrote configuration to %s', shlex.quote(str(self.config_file)))
def __call__(self):
"""Execute the entrypoint function.
@@ -588,41 +595,37 @@ 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
- self.subcommands_default[name] = self._subparsers_default.add_parser(name, **kwargs)
+ 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)
- if name not in self.__dict__:
- self.__dict__[name] = self.subcommands[name]
- else:
- self.log.debug("Could not add subcommand '%s' to attributes, key already exists!", name)
-
self.release_lock()
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
@@ -644,9 +647,9 @@ class MILC(object):
self.log_format = self.config['general']['log_fmt']
if self.config.general.color:
- self.log_format = ANSIEmojiLoglevelFormatter(self.args.general_log_fmt, self.config.general.datetime_fmt)
+ self.log_format = ANSIEmojiLoglevelFormatter(self.args.log_fmt, self.config.general.datetime_fmt)
else:
- self.log_format = ANSIStrippingFormatter(self.args.general_log_fmt, self.config.general.datetime_fmt)
+ self.log_format = ANSIStrippingFormatter(self.args.log_fmt, self.config.general.datetime_fmt)
if self.log_file:
self.log_file_handler = logging.FileHandler(self.log_file, self.log_file_mode)
@@ -673,13 +676,9 @@ class MILC(object):
colorama.init()
self.parse_args()
- self.read_config()
+ self.merge_args_into_config()
self.setup_logging()
- if 'save_config' in self.config.general and self.config.general.save_config:
- self.save_config()
- exit(0)
-
return self
def __exit__(self, exc_type, exc_val, exc_tb):
diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py
index e41cc3dcb2..72ee38f562 100644
--- a/lib/python/qmk/cli/__init__.py
+++ b/lib/python/qmk/cli/__init__.py
@@ -7,9 +7,11 @@ from . import compile
from . import config
from . import docs
from . import doctor
+from . import flash
from . import hello
from . import json
from . import list
+from . import kle2json
from . import new
from . import pyformat
from . import pytest
diff --git a/lib/python/qmk/cli/cformat.py b/lib/python/qmk/cli/cformat.py
index d2382bdbde..17ca91b3b5 100644
--- a/lib/python/qmk/cli/cformat.py
+++ b/lib/python/qmk/cli/cformat.py
@@ -2,6 +2,7 @@
"""
import os
import subprocess
+from shutil import which
from milc import cli
@@ -11,10 +12,18 @@ from milc import cli
def cformat(cli):
"""Format C code according to QMK's style.
"""
+ # Determine which version of clang-format to use
clang_format = ['clang-format', '-i']
+ for clang_version in [10, 9, 8, 7]:
+ binary = 'clang-format-%d' % clang_version
+ if which(binary):
+ clang_format[0] = binary
+ break
# Find the list of files to format
- if not cli.args.files:
+ if cli.args.files:
+ cli.args.files = [os.path.join(os.environ['ORIG_CWD'], file) for file in cli.args.files]
+ else:
for dir in ['drivers', 'quantum', 'tests', 'tmk_core']:
for dirpath, dirnames, filenames in os.walk(dir):
if 'tmk_core/protocol/usb_hid' in dirpath:
diff --git a/lib/python/qmk/cli/compile.py b/lib/python/qmk/cli/compile.py
index 6646891b30..8e2d0cdbf4 100755
--- a/lib/python/qmk/cli/compile.py
+++ b/lib/python/qmk/cli/compile.py
@@ -2,13 +2,13 @@
You can compile a keymap already in the repo or using a QMK Configurator export.
"""
-import json
-import os
-import sys
import subprocess
from argparse import FileType
from milc import cli
+from qmk.commands import create_make_command
+from qmk.commands import parse_configurator_json
+from qmk.commands import compile_configurator_json
import qmk.keymap
import qmk.path
@@ -30,20 +30,20 @@ def compile(cli):
"""
if cli.args.filename:
# Parse the configurator json
- user_keymap = json.load(cli.args.filename)
+ user_keymap = parse_configurator_json(cli.args.filename)
# Generate the keymap
keymap_path = qmk.path.keymap(user_keymap['keyboard'])
cli.log.info('Creating {fg_cyan}%s{style_reset_all} keymap in {fg_cyan}%s', user_keymap['keymap'], keymap_path)
- qmk.keymap.write(user_keymap['keyboard'], user_keymap['keymap'], user_keymap['layout'], user_keymap['layers'])
- cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
# Compile the keymap
- command = ['make', ':'.join((user_keymap['keyboard'], user_keymap['keymap']))]
+ command = compile_configurator_json(user_keymap)
+
+ cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
elif cli.config.compile.keyboard and cli.config.compile.keymap:
# Generate the make command for a specific keyboard/keymap.
- command = ['make', ':'.join((cli.config.compile.keyboard, cli.config.compile.keymap))]
+ command = create_make_command(cli.config.compile.keyboard, cli.config.compile.keymap)
else:
cli.log.error('You must supply a configurator export or both `--keyboard` and `--keymap`.')
diff --git a/lib/python/qmk/cli/config.py b/lib/python/qmk/cli/config.py
index d6c774e651..e17d8bb9ba 100644
--- a/lib/python/qmk/cli/config.py
+++ b/lib/python/qmk/cli/config.py
@@ -1,8 +1,5 @@
"""Read and write configuration settings
"""
-import os
-import subprocess
-
from milc import cli
@@ -12,7 +9,55 @@ def print_config(section, key):
cli.echo('%s.%s{fg_cyan}={fg_reset}%s', section, key, cli.config[section][key])
-@cli.argument('-ro', '--read-only', action='store_true', help='Operate in read-only mode.')
+def show_config():
+ """Print the current configuration to stdout.
+ """
+ for section in cli.config:
+ for key in cli.config[section]:
+ print_config(section, key)
+
+
+def parse_config_token(config_token):
+ """Split a user-supplied configuration-token into its components.
+ """
+ section = option = value = None
+
+ if '=' in config_token and '.' not in config_token:
+ cli.log.error('Invalid configuration token, the key must be of the form <section>.<option>: %s', config_token)
+ return section, option, value
+
+ # Separate the key (<section>.<option>) from the value
+ if '=' in config_token:
+ key, value = config_token.split('=')
+ else:
+ key = config_token
+
+ # Extract the section and option from the key
+ if '.' in key:
+ section, option = key.split('.', 1)
+ else:
+ section = key
+
+ return section, option, value
+
+
+def set_config(section, option, value):
+ """Set a config key in the running config.
+ """
+ log_string = '%s.%s{fg_cyan}:{fg_reset} %s {fg_cyan}->{fg_reset} %s'
+ if cli.args.read_only:
+ log_string += ' {fg_red}(change not written)'
+
+ cli.echo(log_string, section, option, cli.config[section][option], value)
+
+ if not cli.args.read_only:
+ if value == 'None':
+ del cli.config[section][option]
+ else:
+ cli.config[section][option] = value
+
+
+@cli.argument('-ro', '--read-only', arg_only=True, action='store_true', help='Operate in read-only mode.')
@cli.argument('configs', nargs='*', arg_only=True, help='Configuration options to read or write.')
@cli.subcommand("Read and write configuration settings.")
def config(cli):
@@ -33,12 +78,7 @@ def config(cli):
No validation is done to ensure that the supplied section.key is actually used by qmk scripts.
"""
if not cli.args.configs:
- # Walk the config tree
- for section in cli.config:
- for key in cli.config[section]:
- print_config(section, key)
-
- return True
+ return show_config()
# Process config_tokens
save_config = False
@@ -46,43 +86,23 @@ def config(cli):
for argument in cli.args.configs:
# Split on space in case they quoted multiple config tokens
for config_token in argument.split(' '):
- # Extract the section, config_key, and value to write from the supplied config_token.
- if '=' in config_token:
- key, value = config_token.split('=')
- else:
- key = config_token
- value = None
-
- if '.' in key:
- section, config_key = key.split('.', 1)
- else:
- section = key
- config_key = None
+ section, option, value = parse_config_token(config_token)
# Validation
- if config_key and '.' in config_key:
- cli.log.error('Config keys may not have more than one period! "%s" is not valid.', key)
+ if option and '.' in option:
+ cli.log.error('Config keys may not have more than one period! "%s" is not valid.', config_token)
return False
# Do what the user wants
- if section and config_key and value:
- # Write a config key
- log_string = '%s.%s{fg_cyan}:{fg_reset} %s {fg_cyan}->{fg_reset} %s'
- if cli.args.read_only:
- log_string += ' {fg_red}(change not written)'
-
- cli.echo(log_string, section, config_key, cli.config[section][config_key], value)
-
+ if section and option and value:
+ # Write a configuration option
+ set_config(section, option, value)
if not cli.args.read_only:
- if value == 'None':
- del cli.config[section][config_key]
- else:
- cli.config[section][config_key] = value
save_config = True
- elif section and config_key:
+ elif section and option:
# Display a single key
- print_config(section, config_key)
+ print_config(section, option)
elif section:
# Display an entire section
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 309de0c671..2421e520e0 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -2,11 +2,9 @@
Check up for QMK environment.
"""
-import os
import platform
import shutil
import subprocess
-from glob import glob
from milc import cli
@@ -24,8 +22,7 @@ def doctor(cli):
cli.log.info('QMK Doctor is checking your environment.')
# Make sure the basic CLI tools we need are available and can be executed.
- binaries = ['dfu-programmer', 'avrdude', 'dfu-util', 'avr-gcc', 'arm-none-eabi-gcc']
- binaries += glob('bin/qmk-*')
+ binaries = ['dfu-programmer', 'avrdude', 'dfu-util', 'avr-gcc', 'arm-none-eabi-gcc', 'bin/qmk']
ok = True
for binary in binaries:
@@ -34,15 +31,15 @@ def doctor(cli):
cli.log.error("{fg_red}QMK can't find %s in your path.", binary)
ok = False
else:
- try:
- subprocess.run([binary, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=5, check=True)
+ check = subprocess.run([binary, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=5)
+ if check.returncode in [0, 1]:
cli.log.info('Found {fg_cyan}%s', binary)
- except subprocess.CalledProcessError:
+ else:
cli.log.error("{fg_red}Can't run `%s --version`", binary)
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.")
diff --git a/lib/python/qmk/cli/flash.py b/lib/python/qmk/cli/flash.py
new file mode 100644
index 0000000000..e897174a20
--- /dev/null
+++ b/lib/python/qmk/cli/flash.py
@@ -0,0 +1,83 @@
+"""Compile and flash QMK Firmware
+
+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
+from qmk.commands import compile_configurator_json, create_make_command, parse_configurator_json
+
+
+def print_bootloader_help():
+ """Prints the available bootloaders listed in docs.qmk.fm.
+ """
+ cli.log.info('Here are the available bootloaders:')
+ cli.echo('\tdfu')
+ cli.echo('\tdfu-ee')
+ cli.echo('\tdfu-split-left')
+ cli.echo('\tdfu-split-right')
+ cli.echo('\tavrdude')
+ cli.echo('\tBootloadHID')
+ cli.echo('\tdfu-util')
+ cli.echo('\tdfu-util-split-left')
+ cli.echo('\tdfu-util-split-right')
+ cli.echo('\tst-link-cli')
+ cli.echo('For more info, visit https://docs.qmk.fm/#/flashing')
+
+
+@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, 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.')
+@cli.subcommand('QMK Flash.')
+def flash(cli):
+ """Compile and or flash QMK Firmware or keyboard/layout
+
+ If a Configurator JSON export is supplied this command will create a new keymap. Keymap and Keyboard arguments
+ will be ignored.
+
+ If no file is supplied, keymap and keyboard are expected.
+
+ If bootloader is omitted, the one according to the rules.mk will be used.
+
+ """
+ command = []
+ if cli.args.bootloaders:
+ # Provide usage and list bootloaders
+ cli.echo('usage: qmk flash [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
+ print_bootloader_help()
+ return False
+
+ elif cli.args.keymap and not cli.args.keyboard:
+ # If only a keymap was given but no keyboard, suggest listing keyboards
+ cli.echo('usage: qmk flash [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
+ cli.log.error('run \'qmk list_keyboards\' to find out the supported keyboards')
+ return False
+
+ elif cli.args.filename:
+ # Get keymap path to log info
+ user_keymap = parse_configurator_json(cli.args.filename)
+ keymap_path = qmk.path.keymap(user_keymap['keyboard'])
+
+ 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(user_keymap, cli.args.bootloader)
+
+ cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
+
+ elif cli.args.keyboard and cli.args.keymap:
+ # Generate the make command for a specific keyboard/keymap.
+ command = create_make_command(cli.config.flash.keyboard, cli.config.flash.keymap, cli.args.bootloader)
+
+ else:
+ cli.echo('usage: qmk flash [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
+ cli.log.error('You must supply a configurator export or both `--keyboard` and `--keymap`. You can also specify a bootloader with --bootloader. Use --bootloaders to list the available bootloaders.')
+ return False
+
+ cli.log.info('Flashing keymap with {fg_cyan}%s\n\n', ' '.join(command))
+ subprocess.run(command)
diff --git a/lib/python/qmk/cli/json/keymap.py b/lib/python/qmk/cli/json/keymap.py
index 207ac278ca..a030ab53d6 100755
--- a/lib/python/qmk/cli/json/keymap.py
+++ b/lib/python/qmk/cli/json/keymap.py
@@ -2,7 +2,6 @@
"""
import json
import os
-import sys
from milc import cli
@@ -10,6 +9,7 @@ import qmk.keymap
@cli.argument('-o', '--output', arg_only=True, help='File to write to')
+@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
@cli.argument('filename', arg_only=True, help='Configurator JSON file')
@cli.subcommand('Creates a keymap.c from a QMK Configurator export.')
def json_keymap(cli):
@@ -48,7 +48,8 @@ def json_keymap(cli):
with open(output_file, 'w') as keymap_fd:
keymap_fd.write(keymap_c)
- cli.log.info('Wrote keymap to %s.', cli.args.output)
+ if not cli.args.quiet:
+ cli.log.info('Wrote keymap to %s.', cli.args.output)
else:
print(keymap_c)
diff --git a/lib/python/qmk/cli/kle2json.py b/lib/python/qmk/cli/kle2json.py
new file mode 100755
index 0000000000..00f63d3622
--- /dev/null
+++ b/lib/python/qmk/cli/kle2json.py
@@ -0,0 +1,75 @@
+"""Convert raw KLE to JSON
+"""
+import json
+import os
+from pathlib import Path
+from decimal import Decimal
+from collections import OrderedDict
+
+from milc import cli
+from kle2xy import KLE2xy
+
+from qmk.converter import kle2qmk
+
+
+class CustomJSONEncoder(json.JSONEncoder):
+ def default(self, obj):
+ try:
+ if isinstance(obj, Decimal):
+ if obj % 2 in (Decimal(0), Decimal(1)):
+ return int(obj)
+ return float(obj)
+ except TypeError:
+ pass
+ return json.JSONEncoder.default(self, obj)
+
+
+@cli.argument('filename', help='The KLE raw txt to convert')
+@cli.argument('-f', '--force', action='store_true', help='Flag to overwrite current info.json')
+@cli.subcommand('Convert a KLE layout to a Configurator JSON')
+def kle2json(cli):
+ """Convert a KLE layout to QMK's layout format.
+ """ # If filename is a path
+ if cli.args.filename.startswith("/") or cli.args.filename.startswith("./"):
+ file_path = Path(cli.args.filename)
+ # Otherwise assume it is a file name
+ else:
+ file_path = Path(os.environ['ORIG_CWD'], cli.args.filename)
+ # Check for valid file_path for more graceful failure
+ if not file_path.exists():
+ return cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', str(file_path))
+ out_path = file_path.parent
+ raw_code = file_path.open().read()
+ # Check if info.json exists, allow overwrite with force
+ if Path(out_path, "info.json").exists() and not cli.args.force:
+ cli.log.error('File {fg_cyan}%s/info.json{style_reset_all} already exists, use -f or --force to overwrite.', str(out_path))
+ return False
+ try:
+ # Convert KLE raw to x/y coordinates (using kle2xy package from skullydazed)
+ kle = KLE2xy(raw_code)
+ except Exception as e:
+ cli.log.error('Could not parse KLE raw data: %s', raw_code)
+ cli.log.exception(e)
+ # FIXME: This should be better
+ return cli.log.error('Could not parse KLE raw data.')
+ keyboard = OrderedDict(
+ keyboard_name=kle.name,
+ url='',
+ maintainer='qmk',
+ width=kle.columns,
+ height=kle.rows,
+ layouts={'LAYOUT': {
+ 'layout': 'LAYOUT_JSON_HERE'
+ }},
+ )
+ # Initialize keyboard with json encoded from ordered dict
+ keyboard = json.dumps(keyboard, indent=4, separators=(', ', ': '), sort_keys=False, cls=CustomJSONEncoder)
+ # Initialize layout with kle2qmk from converter module
+ layout = json.dumps(kle2qmk(kle), separators=(', ', ':'), cls=CustomJSONEncoder)
+ # Replace layout in keyboard json
+ keyboard = keyboard.replace('"LAYOUT_JSON_HERE"', layout)
+ # Write our info.json
+ file = open(str(out_path) + "/info.json", "w")
+ file.write(keyboard)
+ file.close()
+ cli.log.info('Wrote out {fg_cyan}%s/info.json', str(out_path))
diff --git a/lib/python/qmk/cli/list/keyboards.py b/lib/python/qmk/cli/list/keyboards.py
index 53a7af75c6..76e7760e84 100644
--- a/lib/python/qmk/cli/list/keyboards.py
+++ b/lib/python/qmk/cli/list/keyboards.py
@@ -1,26 +1,27 @@
"""List the keyboards currently defined within QMK
"""
import os
-import re
import glob
from milc import cli
+BASE_PATH = os.path.join(os.getcwd(), "keyboards") + os.path.sep
+KB_WILDCARD = os.path.join(BASE_PATH, "**", "rules.mk")
+
+
+def find_name(path):
+ """Determine the keyboard name by stripping off the base_path and rules.mk.
+ """
+ return path.replace(BASE_PATH, "").replace(os.path.sep + "rules.mk", "")
+
+
@cli.subcommand("List the keyboards currently defined within QMK")
def list_keyboards(cli):
"""List the keyboards currently defined within QMK
"""
-
- base_path = os.path.join(os.getcwd(), "keyboards") + os.path.sep
- kb_path_wildcard = os.path.join(base_path, "**", "rules.mk")
-
# find everywhere we have rules.mk where keymaps isn't in the path
- paths = [path for path in glob.iglob(kb_path_wildcard, recursive=True) if 'keymaps' not in path]
-
- # strip the keyboard directory path prefix and rules.mk suffix and alphabetize
- find_name = lambda path: path.replace(base_path, "").replace(os.path.sep + "rules.mk", "")
- names = sorted(map(find_name, paths))
+ paths = [path for path in glob.iglob(KB_WILDCARD, recursive=True) if 'keymaps' not in path]
- for name in names:
- # We echo instead of cli.log.info to allow easier piping of this output
- cli.echo(name)
+ # Extract the keyboard name from the path and print it
+ for keyboard_name in sorted(map(find_name, paths)):
+ print(keyboard_name)
diff --git a/lib/python/qmk/cli/pytest.py b/lib/python/qmk/cli/pytest.py
index 14613e1d96..09611d750f 100644
--- a/lib/python/qmk/cli/pytest.py
+++ b/lib/python/qmk/cli/pytest.py
@@ -2,19 +2,15 @@
QMK script to run unit and integration tests against our python code.
"""
-import sys
+import subprocess
+
from milc import cli
@cli.subcommand('QMK Python Unit Tests')
def pytest(cli):
- """Use nose2 to run unittests
+ """Run several linting/testing commands.
"""
- try:
- import nose2
-
- except ImportError:
- cli.log.error('Could not import nose2! Please install it with {fg_cyan}pip3 install nose2')
- return False
-
- nose2.discover(argv=['nose2', '-v'])
+ flake8 = subprocess.run(['flake8', 'lib/python', 'bin/qmk'])
+ nose2 = subprocess.run(['nose2', '-v'])
+ return flake8.returncode | nose2.returncode
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py
new file mode 100644
index 0000000000..6067d49ae7
--- /dev/null
+++ b/lib/python/qmk/commands.py
@@ -0,0 +1,54 @@
+"""Functions that build make commands
+"""
+import json
+import qmk.keymap
+
+
+def create_make_command(keyboard, keymap, target=None):
+ """Create a make compile command
+
+ Args:
+ keyboard
+ The path of the keyboard, for example 'plank'
+
+ keymap
+ The name of the keymap, for example 'algernon'
+
+ target
+ Usually a bootloader.
+
+ Returns:
+ A command that can be run to make the specified keyboard and keymap
+ """
+ if target is None:
+ return ['make', ':'.join((keyboard, keymap))]
+ return ['make', ':'.join((keyboard, keymap, target))]
+
+
+def parse_configurator_json(configurator_file):
+ """Open and parse a configurator json export
+ """
+ user_keymap = json.load(configurator_file)
+ return user_keymap
+
+
+def compile_configurator_json(user_keymap, bootloader=None):
+ """Convert a configurator export JSON file into a C file
+
+ Args:
+ configurator_filename
+ The configurator JSON export file
+
+ bootloader
+ A bootloader to flash
+
+ Returns:
+ A command to run to compile and flash the C file.
+ """
+ # Write the keymap C file
+ qmk.keymap.write(user_keymap['keyboard'], user_keymap['keymap'], user_keymap['layout'], user_keymap['layers'])
+
+ # Return a command that can be run to make the keymap and flash if given
+ if bootloader is None:
+ return create_make_command(user_keymap['keyboard'], user_keymap['keymap'])
+ return create_make_command(user_keymap['keyboard'], user_keymap['keymap'], bootloader)
diff --git a/lib/python/qmk/converter.py b/lib/python/qmk/converter.py
new file mode 100644
index 0000000000..bbd3531317
--- /dev/null
+++ b/lib/python/qmk/converter.py
@@ -0,0 +1,33 @@
+"""Functions to convert to and from QMK formats
+"""
+from collections import OrderedDict
+
+
+def kle2qmk(kle):
+ """Convert a KLE layout to QMK's layout format.
+ """
+ layout = []
+
+ for row in kle:
+ for key in row:
+ if key['decal']:
+ continue
+
+ qmk_key = OrderedDict(
+ label="",
+ x=key['column'],
+ y=key['row'],
+ )
+
+ if key['width'] != 1:
+ qmk_key['w'] = key['width']
+ if key['height'] != 1:
+ qmk_key['h'] = key['height']
+ if 'name' in key and key['name']:
+ qmk_key['label'] = key['name'].split('\n', 1)[0]
+ else:
+ del (qmk_key['label'])
+
+ layout.append(qmk_key)
+
+ return layout
diff --git a/lib/python/qmk/errors.py b/lib/python/qmk/errors.py
index f9bf5b9af9..4a8a91556b 100644
--- a/lib/python/qmk/errors.py
+++ b/lib/python/qmk/errors.py
@@ -1,6 +1,5 @@
class NoSuchKeyboardError(Exception):
"""Raised when we can't find a keyboard/keymap directory.
"""
-
def __init__(self, message):
self.message = message
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py
index 396b53a6f5..f4a2893f38 100644
--- a/lib/python/qmk/keymap.py
+++ b/lib/python/qmk/keymap.py
@@ -1,12 +1,8 @@
"""Functions that help you work with QMK keymaps.
"""
-import json
-import logging
import os
-from traceback import format_exc
import qmk.path
-from qmk.errors import NoSuchKeyboardError
# The `keymap.c` template to use when a keyboard doesn't have its own
DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H
diff --git a/lib/python/qmk/path.py b/lib/python/qmk/path.py
index 2149625cc6..cf087265fb 100644
--- a/lib/python/qmk/path.py
+++ b/lib/python/qmk/path.py
@@ -2,7 +2,6 @@
"""
import logging
import os
-from pkgutil import walk_packages
from qmk.errors import NoSuchKeyboardError
diff --git a/lib/python/qmk/tests/attrdict.py b/lib/python/qmk/tests/attrdict.py
index 391c75c4e1..a2584b9233 100644
--- a/lib/python/qmk/tests/attrdict.py
+++ b/lib/python/qmk/tests/attrdict.py
@@ -3,7 +3,6 @@ class AttrDict(dict):
This should only be used to mock objects for unit testing. Please do not use this outside of qmk.tests.
"""
-
def __init__(self, *args, **kwargs):
super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
diff --git a/lib/python/qmk/tests/kle.txt b/lib/python/qmk/tests/kle.txt
new file mode 100644
index 0000000000..862a899ab9
--- /dev/null
+++ b/lib/python/qmk/tests/kle.txt
@@ -0,0 +1,5 @@
+["¬\n`","!\n1","\"\n2","£\n3","$\n4","%\n5","^\n6","&\n7","*\n8","(\n9",")\n0","_\n-","+\n=",{w:2},"Backspace"],
+[{w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"Enter"],
+[{w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","@\n'","~\n#"],
+[{w:1.25},"Shift","|\n\\","Z","X","C","V","B","N","M","<\n,",">\n.","?\n/",{w:2.75},"Shift"],
+[{w:1.25},"Ctrl",{w:1.25},"Win",{w:1.25},"Alt",{a:7,w:6.25},"",{a:4,w:1.25},"AltGr",{w:1.25},"Win",{w:1.25},"Menu",{w:1.25},"Ctrl"]
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py
index 9a9dc4b958..3f75cef3e1 100644
--- a/lib/python/qmk/tests/test_cli_commands.py
+++ b/lib/python/qmk/tests/test_cli_commands.py
@@ -7,19 +7,28 @@ def check_subcommand(command, *args):
def test_cformat():
- assert check_subcommand('cformat', 'tmk_core/common/backlight.c').returncode == 0
+ assert check_subcommand('cformat', 'tmk_core/common/keyboard.c').returncode == 0
def test_compile():
assert check_subcommand('compile', '-kb', 'handwired/onekey/pytest', '-km', 'default').returncode == 0
+def test_flash():
+ assert check_subcommand('flash', '-b').returncode == 1
+ assert check_subcommand('flash').returncode == 1
+
+
def test_config():
result = check_subcommand('config')
assert result.returncode == 0
assert 'general.color' in result.stdout
+def test_kle2json():
+ assert check_subcommand('kle2json', 'kle.txt', '-f').returncode == 0
+
+
def test_doctor():
result = check_subcommand('doctor')
assert result.returncode == 0
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/lib/python/qmk/tests/test_qmk_path.py b/lib/python/qmk/tests/test_qmk_path.py
index 94dbf3a6a6..d6961a0f65 100644
--- a/lib/python/qmk/tests/test_qmk_path.py
+++ b/lib/python/qmk/tests/test_qmk_path.py
@@ -10,4 +10,4 @@ def test_keymap_onekey_pytest():
def test_normpath():
path = qmk.path.normpath('lib/python')
- assert path == os.environ['ORIG_CWD'] + '/lib/python'
+ assert path == os.path.join(os.environ['ORIG_CWD'], 'lib/python')
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index 648a37adf3..edda6ea0b6 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -191,7 +191,7 @@ void backlight_off(pin_t backlight_pin) {
# define FOR_EACH_LED(x) \
for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) { \
- pin_t backlight_pin = backlight_pins[i]; \
+ pin_t backlight_pin = backlight_pins[i]; \
{ x } \
}
diff --git a/quantum/config_common.h b/quantum/config_common.h
index f42df6357d..c1c1d4bd42 100644
--- a/quantum/config_common.h
+++ b/quantum/config_common.h
@@ -303,25 +303,26 @@
UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
sei(); \
} while (0)
-# elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
-# define SERIAL_UART_BAUD 115200
-# define SERIAL_UART_DATA UDR1
- /* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */
-# define SERIAL_UART_UBRR (F_CPU / (8UL * SERIAL_UART_BAUD) - 1)
-# define SERIAL_UART_RXD_VECT USART1_RX_vect
-# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
-# define SERIAL_UART_INIT() do { \
- UCSR1A = _BV(U2X1); \
- /* baud rate */ \
- UBRR1L = SERIAL_UART_UBRR; \
- /* baud rate */ \
- UBRR1H = SERIAL_UART_UBRR >> 8; \
- /* enable TX */ \
- UCSR1B = _BV(TXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
- sei(); \
- } while(0)
+# elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
+# define SERIAL_UART_BAUD 115200
+# define SERIAL_UART_DATA UDR1
+/* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */
+# define SERIAL_UART_UBRR (F_CPU / (8UL * SERIAL_UART_BAUD) - 1)
+# define SERIAL_UART_RXD_VECT USART1_RX_vect
+# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+# define SERIAL_UART_INIT() \
+ do { \
+ UCSR1A = _BV(U2X1); \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX */ \
+ UCSR1B = _BV(TXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ sei(); \
+ } while (0)
# else
# error "USART configuration is needed."
# endif
diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c
index 3b5a8dadc9..ab74222d10 100644
--- a/quantum/dip_switch.c
+++ b/quantum/dip_switch.c
@@ -21,40 +21,33 @@
// for memcpy
#include <string.h>
-
#if !defined(DIP_SWITCH_PINS)
-# error "No DIP switch pads defined by DIP_SWITCH_PINS"
+# error "No DIP switch pads defined by DIP_SWITCH_PINS"
#endif
-#define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad)/sizeof(pin_t))
-static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
-static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = { 0 };
-static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = { 0 };
-
+#define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t))
+static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
+static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
+static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
-__attribute__((weak))
-void dip_switch_update_user(uint8_t index, bool active) {}
+__attribute__((weak)) void dip_switch_update_user(uint8_t index, bool active) {}
-__attribute__((weak))
-void dip_switch_update_kb(uint8_t index, bool active) { dip_switch_update_user(index, active); }
+__attribute__((weak)) void dip_switch_update_kb(uint8_t index, bool active) { dip_switch_update_user(index, active); }
-__attribute__((weak))
-void dip_switch_update_mask_user(uint32_t state) {}
+__attribute__((weak)) void dip_switch_update_mask_user(uint32_t state) {}
-__attribute__((weak))
-void dip_switch_update_mask_kb(uint32_t state) { dip_switch_update_mask_user(state); }
+__attribute__((weak)) void dip_switch_update_mask_kb(uint32_t state) { dip_switch_update_mask_user(state); }
void dip_switch_init(void) {
- for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
- setPinInputHigh(dip_switch_pad[i]);
- }
- dip_switch_read(true);
+ for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
+ setPinInputHigh(dip_switch_pad[i]);
+ }
+ dip_switch_read(true);
}
-
void dip_switch_read(bool forced) {
- bool has_dip_state_changed = false;
- uint32_t dip_switch_mask = 0;
+ bool has_dip_state_changed = false;
+ uint32_t dip_switch_mask = 0;
for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
dip_switch_state[i] = !readPin(dip_switch_pad[i]);
diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h
index c7632c004b..fe9de6fa65 100644
--- a/quantum/dynamic_macro.h
+++ b/quantum/dynamic_macro.h
@@ -15,8 +15,10 @@
*/
/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */
-#ifndef DYNAMIC_MACROS_H
-#define DYNAMIC_MACROS_H
+#pragma once
+
+/* Warn users that this is now deprecated and they should use the core feature instead. */
+#pragma message "Dynamic Macros is now a core feature. See updated documentation to see how to configure it: https://docs.qmk.fm/#/feature_dynamic_macros"
#include "action_layer.h"
@@ -33,18 +35,6 @@
# define DYNAMIC_MACRO_SIZE 128
#endif
-/* DYNAMIC_MACRO_RANGE must be set as the last element of user's
- * "planck_keycodes" enum prior to including this header. This allows
- * us to 'extend' it.
- */
-enum dynamic_macro_keycodes {
- DYN_REC_START1 = DYNAMIC_MACRO_RANGE,
- DYN_REC_START2,
- DYN_REC_STOP,
- DYN_MACRO_PLAY1,
- DYN_MACRO_PLAY2,
-};
-
/* Blink the LEDs to notify the user about some event. */
void dynamic_macro_led_blink(void) {
#ifdef BACKLIGHT_ENABLE
@@ -272,5 +262,3 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) {
#undef DYNAMIC_MACRO_CURRENT_SLOT
#undef DYNAMIC_MACRO_CURRENT_LENGTH
#undef DYNAMIC_MACRO_CURRENT_CAPACITY
-
-#endif
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 36a6403b36..c41b89f495 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -38,14 +38,15 @@ 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};
#ifdef SPLIT_KEYBOARD
// right half encoders come over as second set of encoders
-static int8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0};
+static uint8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0};
// row offsets for each hand
static uint8_t thisHand, thatHand;
#else
-static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0};
+static uint8_t encoder_value[NUMBER_OF_ENCODERS] = {0};
#endif
__attribute__((weak)) void encoder_update_user(int8_t index, bool clockwise) {}
@@ -78,34 +79,47 @@ void encoder_init(void) {
}
static void encoder_update(int8_t index, uint8_t state) {
- encoder_value[index] += encoder_LUT[state & 0xF];
- if (encoder_value[index] >= ENCODER_RESOLUTION) {
- encoder_update_kb(index, false);
- }
- if (encoder_value[index] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
+ 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);
}
- encoder_value[index] %= ENCODER_RESOLUTION;
+ if (encoder_pulses[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
+ encoder_value[index]--;
+ encoder_update_kb(index, false);
+ }
+ 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
}
}
#ifdef SPLIT_KEYBOARD
-void encoder_state_raw(uint8_t* slave_state) { memcpy(slave_state, encoder_state, sizeof(encoder_state)); }
+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++) {
- encoder_update(i + thatHand, slave_state[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];
+ while (delta > 0) {
+ delta--;
+ encoder_value[index]++;
+ encoder_update_kb(index, true);
+ }
+ while (delta < 0) {
+ delta++;
+ encoder_value[index]--;
+ encoder_update_kb(index, false);
+ }
}
}
#endif
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/keymap_extras/keymap_italian.h b/quantum/keymap_extras/keymap_italian.h
index a8c03b884f..063700aa0b 100644
--- a/quantum/keymap_extras/keymap_italian.h
+++ b/quantum/keymap_extras/keymap_italian.h
@@ -78,36 +78,36 @@
#define IT_MINS KC_SLSH // - and _
// shifted characters
-#define IT_DEGR LSFT(IT_AACC) // °
-#define IT_EXLM LSFT(KC_1) // !
-#define IT_DQOT LSFT(KC_2) // "
-#define IT_STRL LSFT(KC_3) // £
-#define IT_DLR LSFT(KC_4) // $
-#define IT_PERC LSFT(KC_5) // %
-#define IT_AMPR LSFT(KC_6) // &
-#define IT_SLSH LSFT(KC_7) // /
-#define IT_LPRN LSFT(KC_8) // (
-#define IT_RPRN LSFT(KC_9) // )
-#define IT_EQL LSFT(KC_0) // =
-#define IT_QST LSFT(IT_APOS) // ?
-#define IT_CRC LSFT(IT_IACC) // ^
-#define IT_ASTR LSFT(IT_PLUS) // *
-#define IT_MORE LSFT(IT_LESS) // >
-#define IT_COLN LSFT(IT_DOT) // :
-#define IT_SCLN LSFT(IT_COMM) // ;
-#define IT_UNDS LSFT(IT_MINS) // _
+#define IT_DEGR LSFT(IT_AACC) // °
+#define IT_EXLM LSFT(KC_1) // !
+#define IT_DQOT LSFT(KC_2) // "
+#define IT_STRL LSFT(KC_3) // £
+#define IT_DLR LSFT(KC_4) // $
+#define IT_PERC LSFT(KC_5) // %
+#define IT_AMPR LSFT(KC_6) // &
+#define IT_SLSH LSFT(KC_7) // /
+#define IT_LPRN LSFT(KC_8) // (
+#define IT_RPRN LSFT(KC_9) // )
+#define IT_EQL LSFT(KC_0) // =
+#define IT_QST LSFT(IT_APOS) // ?
+#define IT_CRC LSFT(IT_IACC) // ^
+#define IT_ASTR LSFT(IT_PLUS) // *
+#define IT_MORE LSFT(IT_LESS) // >
+#define IT_COLN LSFT(IT_DOT) // :
+#define IT_SCLN LSFT(IT_COMM) // ;
+#define IT_UNDS LSFT(IT_MINS) // _
// Alt Gr-ed characters
-#define IT_LCBR ALGR(KC_7) // {
-#define IT_LBRC ALGR(IT_EACC) // [
-#define IT_RBRC ALGR(IT_PLUS) // ]
-#define IT_RCBR ALGR(KC_0) // }
-#define IT_AT ALGR(IT_OACC) // @
-#define IT_EURO ALGR(KC_E) // €
-#define IT_PIPE LSFT(IT_BSLS) // |
-#define IT_SHRP ALGR(IT_AACC) // #
+#define IT_LCBR ALGR(KC_7) // {
+#define IT_LBRC ALGR(IT_EACC) // [
+#define IT_RBRC ALGR(IT_PLUS) // ]
+#define IT_RCBR ALGR(KC_0) // }
+#define IT_AT ALGR(IT_OACC) // @
+#define IT_EURO ALGR(KC_E) // €
+#define IT_PIPE LSFT(IT_BSLS) // |
+#define IT_SHRP ALGR(IT_AACC) // #
// Deprecated
-#define IT_X_PLUS X_RBRACKET // #
+#define IT_X_PLUS X_RBRACKET // #
#endif
diff --git a/quantum/keymap_extras/keymap_italian_osx_ansi.h b/quantum/keymap_extras/keymap_italian_osx_ansi.h
index 2b7160ff33..fa12d05dce 100644
--- a/quantum/keymap_extras/keymap_italian_osx_ansi.h
+++ b/quantum/keymap_extras/keymap_italian_osx_ansi.h
@@ -65,7 +65,7 @@
#define IT_COMM KC_COMM // , and ;
#define IT_APOS KC_MINS // ' and ?
#define IT_BSLS KC_NUBS // \ and |
-#define IT_LESS KC_GRV // < and >
+#define IT_LESS KC_GRV // < and >
#define IT_MINS KC_SLSH // - and _
// accented vowels (regular, with shift, with option, with option and shift)
@@ -77,37 +77,37 @@
#define IT_IACC KC_EQL // ì, ^, ˆ, ±
// shifted characters
-#define IT_EXLM LSFT(KC_1) // !
-#define IT_DQOT LSFT(KC_2) // "
-#define IT_STRL LSFT(KC_3) // £
-#define IT_DLR LSFT(KC_4) // $
-#define IT_PERC LSFT(KC_5) // %
-#define IT_AMPR LSFT(KC_6) // &
-#define IT_SLSH LSFT(KC_7) // /
-#define IT_LPRN LSFT(KC_8) // (
-#define IT_RPRN LSFT(KC_9) // )
-#define IT_EQL LSFT(KC_0) // =
-#define IT_DEGR LSFT(IT_AACC) // °
-#define IT_QST LSFT(IT_APOS) // ?
-#define IT_CRC LSFT(IT_IACC) // ^
-#define IT_ASTR LSFT(IT_PLUS) // *
-#define IT_MORE LSFT(IT_LESS) // >
-#define IT_COLN LSFT(IT_DOT) // :
-#define IT_SCLN LSFT(IT_COMM) // ;
-#define IT_UNDS LSFT(IT_MINS) // _
-#define IT_LCBR LSFT(IT_LBRC) // {
-#define IT_RCBR LSFT(IT_RBRC) // }
-#define IT_PIPE LSFT(IT_BSLS) // |
+#define IT_EXLM LSFT(KC_1) // !
+#define IT_DQOT LSFT(KC_2) // "
+#define IT_STRL LSFT(KC_3) // £
+#define IT_DLR LSFT(KC_4) // $
+#define IT_PERC LSFT(KC_5) // %
+#define IT_AMPR LSFT(KC_6) // &
+#define IT_SLSH LSFT(KC_7) // /
+#define IT_LPRN LSFT(KC_8) // (
+#define IT_RPRN LSFT(KC_9) // )
+#define IT_EQL LSFT(KC_0) // =
+#define IT_DEGR LSFT(IT_AACC) // °
+#define IT_QST LSFT(IT_APOS) // ?
+#define IT_CRC LSFT(IT_IACC) // ^
+#define IT_ASTR LSFT(IT_PLUS) // *
+#define IT_MORE LSFT(IT_LESS) // >
+#define IT_COLN LSFT(IT_DOT) // :
+#define IT_SCLN LSFT(IT_COMM) // ;
+#define IT_UNDS LSFT(IT_MINS) // _
+#define IT_LCBR LSFT(IT_LBRC) // {
+#define IT_RCBR LSFT(IT_RBRC) // }
+#define IT_PIPE LSFT(IT_BSLS) // |
// Alt -ed characters
-#define IT_LBRC LALT(IT_EACC) // [
-#define IT_RBRC LALT(IT_PLUS) // ]
-#define IT_AT LALT(IT_OACC) // @
-#define IT_EURO LALT(KC_E) // €
-#define IT_SHRP LALT(IT_AACC ) // #
-#define IT_ACUT LALT(KC_8) // ´
-#define IT_GRAVE LALT(KC_9) // `
-#define IT_TILDE LALT(KC_5) // ~
+#define IT_LBRC LALT(IT_EACC) // [
+#define IT_RBRC LALT(IT_PLUS) // ]
+#define IT_AT LALT(IT_OACC) // @
+#define IT_EURO LALT(KC_E) // €
+#define IT_SHRP LALT(IT_AACC) // #
+#define IT_ACUT LALT(KC_8) // ´
+#define IT_GRAVE LALT(KC_9) // `
+#define IT_TILDE LALT(KC_5) // ~
#define IT_PLMN LALT(LSFT(IT_IACC)) // ±
#endif
diff --git a/quantum/keymap_extras/keymap_italian_osx_iso.h b/quantum/keymap_extras/keymap_italian_osx_iso.h
index 5c920014a1..a9b36f16e6 100644
--- a/quantum/keymap_extras/keymap_italian_osx_iso.h
+++ b/quantum/keymap_extras/keymap_italian_osx_iso.h
@@ -65,7 +65,7 @@
#define IT_COMM KC_COMM // , and ;
#define IT_APOS KC_MINS // ' and ?
#define IT_BSLS KC_GRV // \ and |
-#define IT_LESS KC_NUBS// < and >
+#define IT_LESS KC_NUBS // < and >
#define IT_MINS KC_SLSH // - and _
// accented vowels (regular, with shift, with option, with option and shift)
@@ -77,37 +77,37 @@
#define IT_IACC KC_EQL // ì, ^, ˆ, ±
// shifted characters
-#define IT_EXLM LSFT(KC_1) // !
-#define IT_DQOT LSFT(KC_2) // "
-#define IT_STRL LSFT(KC_3) // £
-#define IT_DLR LSFT(KC_4) // $
-#define IT_PERC LSFT(KC_5) // %
-#define IT_AMPR LSFT(KC_6) // &
-#define IT_SLSH LSFT(KC_7) // /
-#define IT_LPRN LSFT(KC_8) // (
-#define IT_RPRN LSFT(KC_9) // )
-#define IT_EQL LSFT(KC_0) // =
-#define IT_DEGR LSFT(IT_AACC) // °
-#define IT_QST LSFT(IT_APOS) // ?
-#define IT_CRC LSFT(IT_IACC) // ^
-#define IT_ASTR LSFT(IT_PLUS) // *
-#define IT_MORE LSFT(IT_LESS) // >
-#define IT_COLN LSFT(IT_DOT) // :
-#define IT_SCLN LSFT(IT_COMM) // ;
-#define IT_UNDS LSFT(IT_MINS) // _
-#define IT_LCBR LSFT(IT_LBRC) // {
-#define IT_RCBR LSFT(IT_RBRC) // }
-#define IT_PIPE LSFT(IT_BSLS) // |
+#define IT_EXLM LSFT(KC_1) // !
+#define IT_DQOT LSFT(KC_2) // "
+#define IT_STRL LSFT(KC_3) // £
+#define IT_DLR LSFT(KC_4) // $
+#define IT_PERC LSFT(KC_5) // %
+#define IT_AMPR LSFT(KC_6) // &
+#define IT_SLSH LSFT(KC_7) // /
+#define IT_LPRN LSFT(KC_8) // (
+#define IT_RPRN LSFT(KC_9) // )
+#define IT_EQL LSFT(KC_0) // =
+#define IT_DEGR LSFT(IT_AACC) // °
+#define IT_QST LSFT(IT_APOS) // ?
+#define IT_CRC LSFT(IT_IACC) // ^
+#define IT_ASTR LSFT(IT_PLUS) // *
+#define IT_MORE LSFT(IT_LESS) // >
+#define IT_COLN LSFT(IT_DOT) // :
+#define IT_SCLN LSFT(IT_COMM) // ;
+#define IT_UNDS LSFT(IT_MINS) // _
+#define IT_LCBR LSFT(IT_LBRC) // {
+#define IT_RCBR LSFT(IT_RBRC) // }
+#define IT_PIPE LSFT(IT_BSLS) // |
// Alt -ed characters
-#define IT_LBRC LALT(IT_EACC) // [
-#define IT_RBRC LALT(IT_PLUS) // ]
-#define IT_AT LALT(IT_OACC) // @
-#define IT_EURO LALT(KC_E) // €
-#define IT_SHRP LALT(IT_AACC ) // #
-#define IT_ACUT LALT(KC_8) // ´
-#define IT_GRAVE LALT(KC_9) // `
-#define IT_TILDE LALT(KC_5) // ~
+#define IT_LBRC LALT(IT_EACC) // [
+#define IT_RBRC LALT(IT_PLUS) // ]
+#define IT_AT LALT(IT_OACC) // @
+#define IT_EURO LALT(KC_E) // €
+#define IT_SHRP LALT(IT_AACC) // #
+#define IT_ACUT LALT(KC_8) // ´
+#define IT_GRAVE LALT(KC_9) // `
+#define IT_TILDE LALT(KC_5) // ~
#define IT_PLMN LALT(LSFT(IT_IACC)) // ±
#endif
diff --git a/quantum/mcu_selection.mk b/quantum/mcu_selection.mk
index 5102010c7b..24b2b2abd9 100644
--- a/quantum/mcu_selection.mk
+++ b/quantum/mcu_selection.mk
@@ -7,15 +7,15 @@ ifneq ($(findstring STM32F303, $(MCU)),)
# Linker script to use
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
- # or <this_dir>/ld/
+ # or <keyboard_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: it should exist either in <chibios>/os/hal/boards/,
+ # <keyboard_dir>/boards/, or drivers/boards/
BOARD ?= GENERIC_STM32_F303XC
# Cortex version
@@ -27,7 +27,7 @@ ifneq ($(findstring STM32F303, $(MCU)),)
USE_FPU = yes
# Vector table for application
- # 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+ # 0x00000000-0x00001000 area is occupied by bootloader.*/
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
@@ -75,6 +75,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 +90,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_dynamic_macro.c b/quantum/process_keycode/process_dynamic_macro.c
new file mode 100644
index 0000000000..2065f242db
--- /dev/null
+++ b/quantum/process_keycode/process_dynamic_macro.c
@@ -0,0 +1,257 @@
+/* Copyright 2016 Jack Humbert
+ * Copyright 2019 Drashna Jael're (@drashna, aka Christopher Courtney)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */
+#include "process_dynamic_macro.h"
+
+// default feedback method
+void dynamic_macro_led_blink(void) {
+#ifdef BACKLIGHT_ENABLE
+ backlight_toggle();
+ wait_ms(100);
+ backlight_toggle();
+#endif
+}
+
+/* User hooks for Dynamic Macros */
+
+__attribute__((weak)) void dynamic_macro_record_start_user(void) { dynamic_macro_led_blink(); }
+
+__attribute__((weak)) void dynamic_macro_play_user(int8_t direction) { dynamic_macro_led_blink(); }
+
+__attribute__((weak)) void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) { dynamic_macro_led_blink(); }
+
+__attribute__((weak)) void dynamic_macro_record_end_user(int8_t direction) { dynamic_macro_led_blink(); }
+
+/* Convenience macros used for retrieving the debug info. All of them
+ * need a `direction` variable accessible at the call site.
+ */
+#define DYNAMIC_MACRO_CURRENT_SLOT() (direction > 0 ? 1 : 2)
+#define DYNAMIC_MACRO_CURRENT_LENGTH(BEGIN, POINTER) ((int)(direction * ((POINTER) - (BEGIN))))
+#define DYNAMIC_MACRO_CURRENT_CAPACITY(BEGIN, END2) ((int)(direction * ((END2) - (BEGIN)) + 1))
+
+/**
+ * Start recording of the dynamic macro.
+ *
+ * @param[out] macro_pointer The new macro buffer iterator.
+ * @param[in] macro_buffer The macro buffer used to initialize macro_pointer.
+ */
+void dynamic_macro_record_start(keyrecord_t **macro_pointer, keyrecord_t *macro_buffer) {
+ dprintln("dynamic macro recording: started");
+
+ dynamic_macro_record_start_user();
+
+ clear_keyboard();
+ layer_clear();
+ *macro_pointer = macro_buffer;
+}
+
+/**
+ * Play the dynamic macro.
+ *
+ * @param macro_buffer[in] The beginning of the macro buffer being played.
+ * @param macro_end[in] The element after the last macro buffer element.
+ * @param direction[in] Either +1 or -1, which way to iterate the buffer.
+ */
+void dynamic_macro_play(keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) {
+ dprintf("dynamic macro: slot %d playback\n", DYNAMIC_MACRO_CURRENT_SLOT());
+
+ layer_state_t saved_layer_state = layer_state;
+
+ clear_keyboard();
+ layer_clear();
+
+ while (macro_buffer != macro_end) {
+ process_record(macro_buffer);
+ macro_buffer += direction;
+ }
+
+ clear_keyboard();
+
+ layer_state = saved_layer_state;
+
+ dynamic_macro_play_user(direction);
+}
+
+/**
+ * Record a single key in a dynamic macro.
+ *
+ * @param macro_buffer[in] The start of the used macro buffer.
+ * @param macro_pointer[in,out] The current buffer position.
+ * @param macro2_end[in] The end of the other macro.
+ * @param direction[in] Either +1 or -1, which way to iterate the buffer.
+ * @param record[in] The current keypress.
+ */
+void dynamic_macro_record_key(keyrecord_t *macro_buffer, keyrecord_t **macro_pointer, keyrecord_t *macro2_end, int8_t direction, keyrecord_t *record) {
+ /* If we've just started recording, ignore all the key releases. */
+ if (!record->event.pressed && *macro_pointer == macro_buffer) {
+ dprintln("dynamic macro: ignoring a leading key-up event");
+ return;
+ }
+
+ /* The other end of the other macro is the last buffer element it
+ * is safe to use before overwriting the other macro.
+ */
+ if (*macro_pointer - direction != macro2_end) {
+ **macro_pointer = *record;
+ *macro_pointer += direction;
+ } else {
+ dynamic_macro_record_key_user(direction, record);
+ }
+
+ dprintf("dynamic macro: slot %d length: %d/%d\n", DYNAMIC_MACRO_CURRENT_SLOT(), DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, *macro_pointer), DYNAMIC_MACRO_CURRENT_CAPACITY(macro_buffer, macro2_end));
+}
+
+/**
+ * End recording of the dynamic macro. Essentially just update the
+ * pointer to the end of the macro.
+ */
+void dynamic_macro_record_end(keyrecord_t *macro_buffer, keyrecord_t *macro_pointer, int8_t direction, keyrecord_t **macro_end) {
+ dynamic_macro_record_end_user(direction);
+
+ /* Do not save the keys being held when stopping the recording,
+ * i.e. the keys used to access the layer DYN_REC_STOP is on.
+ */
+ while (macro_pointer != macro_buffer && (macro_pointer - direction)->event.pressed) {
+ dprintln("dynamic macro: trimming a trailing key-down event");
+ macro_pointer -= direction;
+ }
+
+ dprintf("dynamic macro: slot %d saved, length: %d\n", DYNAMIC_MACRO_CURRENT_SLOT(), DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, macro_pointer));
+
+ *macro_end = macro_pointer;
+}
+
+/* Handle the key events related to the dynamic macros. Should be
+ * called from process_record_user() like this:
+ *
+ * bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ * if (!process_record_dynamic_macro(keycode, record)) {
+ * return false;
+ * }
+ * <...THE REST OF THE FUNCTION...>
+ * }
+ */
+bool process_dynamic_macro(uint16_t keycode, keyrecord_t *record) {
+ /* Both macros use the same buffer but read/write on different
+ * ends of it.
+ *
+ * Macro1 is written left-to-right starting from the beginning of
+ * the buffer.
+ *
+ * Macro2 is written right-to-left starting from the end of the
+ * buffer.
+ *
+ * &macro_buffer macro_end
+ * v v
+ * +------------------------------------------------------------+
+ * |>>>>>> MACRO1 >>>>>> <<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<|
+ * +------------------------------------------------------------+
+ * ^ ^
+ * r_macro_end r_macro_buffer
+ *
+ * During the recording when one macro encounters the end of the
+ * other macro, the recording is stopped. Apart from this, there
+ * are no arbitrary limits for the macros' length in relation to
+ * each other: for example one can either have two medium sized
+ * macros or one long macro and one short macro. Or even one empty
+ * and one using the whole buffer.
+ */
+ static keyrecord_t macro_buffer[DYNAMIC_MACRO_SIZE];
+
+ /* Pointer to the first buffer element after the first macro.
+ * Initially points to the very beginning of the buffer since the
+ * macro is empty. */
+ static keyrecord_t *macro_end = macro_buffer;
+
+ /* The other end of the macro buffer. Serves as the beginning of
+ * the second macro. */
+ static keyrecord_t *const r_macro_buffer = macro_buffer + DYNAMIC_MACRO_SIZE - 1;
+
+ /* Like macro_end but for the second macro. */
+ static keyrecord_t *r_macro_end = r_macro_buffer;
+
+ /* A persistent pointer to the current macro position (iterator)
+ * used during the recording. */
+ static keyrecord_t *macro_pointer = NULL;
+
+ /* 0 - no macro is being recorded right now
+ * 1,2 - either macro 1 or 2 is being recorded */
+ static uint8_t macro_id = 0;
+
+ if (macro_id == 0) {
+ /* No macro recording in progress. */
+ if (!record->event.pressed) {
+ switch (keycode) {
+ case DYN_REC_START1:
+ dynamic_macro_record_start(&macro_pointer, macro_buffer);
+ macro_id = 1;
+ return false;
+ case DYN_REC_START2:
+ dynamic_macro_record_start(&macro_pointer, r_macro_buffer);
+ macro_id = 2;
+ return false;
+ case DYN_MACRO_PLAY1:
+ dynamic_macro_play(macro_buffer, macro_end, +1);
+ return false;
+ case DYN_MACRO_PLAY2:
+ dynamic_macro_play(r_macro_buffer, r_macro_end, -1);
+ return false;
+ }
+ }
+ } else {
+ /* A macro is being recorded right now. */
+ switch (keycode) {
+ case DYN_REC_STOP:
+ /* Stop the macro recording. */
+ if (record->event.pressed) { /* Ignore the initial release
+ * just after the recoding
+ * starts. */
+ switch (macro_id) {
+ case 1:
+ dynamic_macro_record_end(macro_buffer, macro_pointer, +1, &macro_end);
+ break;
+ case 2:
+ dynamic_macro_record_end(r_macro_buffer, macro_pointer, -1, &r_macro_end);
+ break;
+ }
+ macro_id = 0;
+ }
+ return false;
+#ifdef DYNAMIC_MACRO_NO_NESTING
+ case DYN_MACRO_PLAY1:
+ case DYN_MACRO_PLAY2:
+ dprintln("dynamic macro: ignoring macro play key while recording");
+ return false;
+#endif
+ default:
+ /* Store the key in the macro buffer and process it normally. */
+ switch (macro_id) {
+ case 1:
+ dynamic_macro_record_key(macro_buffer, &macro_pointer, r_macro_end, +1, record);
+ break;
+ case 2:
+ dynamic_macro_record_key(r_macro_buffer, &macro_pointer, macro_end, -1, record);
+ break;
+ }
+ return true;
+ break;
+ }
+ }
+
+ return true;
+}
diff --git a/quantum/process_keycode/process_dynamic_macro.h b/quantum/process_keycode/process_dynamic_macro.h
new file mode 100644
index 0000000000..39036541b8
--- /dev/null
+++ b/quantum/process_keycode/process_dynamic_macro.h
@@ -0,0 +1,41 @@
+/* Copyright 2016 Jack Humbert
+ * Copyright 2019 Drashna Jael're (@drashna, aka Christopher Courtney)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */
+#pragma once
+
+#include "quantum.h"
+
+/* May be overridden with a custom value. Be aware that the effective
+ * macro length is half of this value: each keypress is recorded twice
+ * because of the down-event and up-event. This is not a bug, it's the
+ * intended behavior.
+ *
+ * Usually it should be fine to set the macro size to at least 256 but
+ * there have been reports of it being too much in some users' cases,
+ * so 128 is considered a safe default.
+ */
+#ifndef DYNAMIC_MACRO_SIZE
+# define DYNAMIC_MACRO_SIZE 128
+#endif
+
+void dynamic_macro_led_blink(void);
+bool process_dynamic_macro(uint16_t keycode, keyrecord_t *record);
+void dynamic_macro_record_start_user(void);
+void dynamic_macro_play_user(int8_t direction);
+void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record);
+void dynamic_macro_record_end_user(int8_t direction);
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_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index 8f3f3ff3c6..09ceef74d8 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -63,10 +63,10 @@ typedef struct {
{ .fn = {qk_tap_dance_pair_on_each_tap, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset}, .user_data = (void *)&((qk_tap_dance_pair_t){kc1, kc2}), }
# define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) \
- { .fn = { qk_tap_dance_dual_role_on_each_tap, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, .user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer, layer_move }), }
+ { .fn = {qk_tap_dance_dual_role_on_each_tap, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset}, .user_data = (void *)&((qk_tap_dance_dual_role_t){kc, layer, layer_move}), }
# define ACTION_TAP_DANCE_LAYER_TOGGLE(kc, layer) \
- { .fn = { NULL, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, .user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer, layer_invert }), }
+ { .fn = {NULL, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset}, .user_data = (void *)&((qk_tap_dance_dual_role_t){kc, layer, layer_invert}), }
# define ACTION_TAP_DANCE_LAYER_MOVE(kc, layer) ACTION_TAP_DANCE_DUAL_ROLE(kc, layer)
@@ -79,8 +79,6 @@ typedef struct {
# define ACTION_TAP_DANCE_FN_ADVANCED_TIME(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, tap_specific_tapping_term) \
{ .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset}, .user_data = NULL, .custom_tapping_term = tap_specific_tapping_term, }
-
-
extern qk_tap_dance_action_t tap_dance_actions[];
/* To be used internally */
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 571dda4c5b..2def99ac84 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -26,7 +26,7 @@
#ifdef BACKLIGHT_ENABLE
# include "backlight.h"
- extern backlight_config_t backlight_config;
+extern backlight_config_t backlight_config;
#endif
#ifdef FAUXCLICKY_ENABLE
@@ -57,23 +57,7 @@
# 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
@@ -89,7 +73,7 @@ static void do_code16(uint16_t code, void (*f)(uint8_t)) {
uint8_t mods_to_send = 0;
- if (code & QK_RMODS_MIN) { // Right mod flag is set
+ if (code & QK_RMODS_MIN) { // Right mod flag is set
if (code & QK_LCTL) mods_to_send |= MOD_BIT(KC_RCTL);
if (code & QK_LSFT) mods_to_send |= MOD_BIT(KC_RSFT);
if (code & QK_LALT) mods_to_send |= MOD_BIT(KC_RALT);
@@ -164,11 +148,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); }
@@ -222,6 +201,10 @@ bool process_record_quantum(keyrecord_t *record) {
// Must run first to be able to mask key_up events.
process_key_lock(&keycode, record) &&
#endif
+#if defined(DYNAMIC_MACRO_ENABLE) && !defined(DYNAMIC_MACRO_USER_CALL)
+ // Must run asap to ensure all keypresses are recorded.
+ process_dynamic_macro(keycode, record) &&
+#endif
#if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY)
process_clicky(keycode, record) &&
#endif // AUDIO_CLICKY
@@ -268,402 +251,226 @@ 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
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
+#ifdef VELOCIKEY_ENABLE
+ case VLK_TOG:
+ velocikey_toggle();
+ return false;
+#endif
+#ifdef BLUETOOTH_ENABLE
+ case OUT_AUTO:
+ set_output(OUTPUT_AUTO);
+ return false;
+ case OUT_USB:
+ set_output(OUTPUT_USB);
+ return false;
+ case OUT_BT:
+ set_output(OUTPUT_BLUETOOTH);
+ return false;
+#endif
+#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
+ case BL_BRTG:
+ backlight_toggle_breathing();
+ 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) {
+ if (record->event.pressed) {
# else
- if (!record->event.pressed) {
+ // 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:
- if (record->event.pressed) {
- uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
+ return false;
+ case RGB_MODE_FORWARD:
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));
+ return false;
+ case RGB_MODE_REVERSE:
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) {
+ return false;
+ case RGB_HUI:
+ if (shifted) {
+ rgblight_decrease_hue();
+ } else {
+ rgblight_increase_hue();
+ }
+ return false;
+ case RGB_HUD:
+ if (shifted) {
+ rgblight_increase_hue();
+ } else {
+ rgblight_decrease_hue();
+ }
+ return false;
+ case RGB_SAI:
+ if (shifted) {
+ rgblight_decrease_sat();
+ } else {
+ rgblight_increase_sat();
+ }
+ return false;
+ case RGB_SAD:
+ if (shifted) {
+ rgblight_increase_sat();
+ } else {
+ rgblight_decrease_sat();
+ }
+ return false;
+ case RGB_VAI:
+ if (shifted) {
+ rgblight_decrease_val();
+ } else {
+ rgblight_increase_val();
+ }
+ return false;
+ case RGB_VAD:
+ if (shifted) {
+ rgblight_increase_val();
+ } else {
+ rgblight_decrease_val();
+ }
+ return false;
+ case RGB_SPI:
+ if (shifted) {
+ rgblight_decrease_speed();
+ } else {
+ rgblight_increase_speed();
+ }
+ return false;
+ case RGB_SPD:
+ if (shifted) {
+ rgblight_increase_speed();
+ } else {
+ rgblight_decrease_speed();
+ }
+ return false;
+ case RGB_MODE_PLAIN:
rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
- }
- return false;
- case RGB_MODE_BREATHE:
+ 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;
+ 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:
+ 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:
+ 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:
+ 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:
+ 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:
+ 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:
+ 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) {
- velocikey_toggle();
- }
- return false;
-#endif
-#ifdef PROTOCOL_LUFA
- case OUT_AUTO:
- if (record->event.pressed) {
- set_output(OUTPUT_AUTO);
- }
- return false;
- case OUT_USB:
- if (record->event.pressed) {
- set_output(OUTPUT_USB);
- }
- return false;
-# ifdef BLUETOOTH_ENABLE
- case OUT_BT:
- if (record->event.pressed) {
- 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);
-#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
-
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
@@ -707,14 +514,6 @@ bool process_record_quantum(keyrecord_t *record) {
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);
@@ -1066,10 +865,30 @@ void api_send_unicode(uint32_t unicode) {
#endif
}
+/** \brief Lock LED set callback - keymap/user level
+ *
+ * \deprecated Use led_update_user() instead.
+ */
__attribute__((weak)) void led_set_user(uint8_t usb_led) {}
+/** \brief Lock LED set callback - keyboard level
+ *
+ * \deprecated Use led_update_kb() instead.
+ */
__attribute__((weak)) void led_set_kb(uint8_t usb_led) { led_set_user(usb_led); }
+/** \brief Lock LED update callback - keymap/user level
+ *
+ * \return True if led_update_kb() should run its own code, false otherwise.
+ */
+__attribute__((weak)) bool led_update_user(led_t led_state) { return true; }
+
+/** \brief Lock LED update callback - keyboard level
+ *
+ * \return Ignored for now.
+ */
+__attribute__((weak)) bool led_update_kb(led_t led_state) { return led_update_user(led_state); }
+
__attribute__((weak)) void led_init_ports(void) {}
__attribute__((weak)) void led_set(uint8_t usb_led) {
@@ -1092,6 +911,7 @@ __attribute__((weak)) void led_set(uint8_t usb_led) {
#endif
led_set_kb(usb_led);
+ led_update_kb((led_t)usb_led);
}
//------------------------------------------------------------------------------
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 01abe1c0a1..2ee261e60d 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -133,6 +133,10 @@ extern layer_state_t layer_state;
# include "process_space_cadet.h"
#endif
+#ifdef MAGIC_KEYCODE_ENABLE
+# include "process_magic.h"
+#endif
+
#ifdef HD44780_ENABLE
# include "hd44780.h"
#endif
@@ -146,9 +150,12 @@ extern layer_state_t layer_state;
#endif
#ifdef DIP_SWITCH_ENABLE
- #include "dip_switch.h"
+# include "dip_switch.h"
#endif
+#ifdef DYNAMIC_MACRO_ENABLE
+# include "process_dynamic_macro.h"
+#endif
// Function substitutions to ease GPIO manipulation
#if defined(__AVR__)
@@ -179,30 +186,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];
@@ -285,5 +270,7 @@ uint16_t hex_to_keycode(uint8_t hex);
void led_set_user(uint8_t usb_led);
void led_set_kb(uint8_t usb_led);
+bool led_update_user(led_t led_state);
+bool led_update_kb(led_t led_state);
void api_send_unicode(uint32_t unicode);
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 5fac6a5cae..c8d0e354b0 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -505,6 +505,13 @@ enum quantum_keycodes {
MAGIC_EE_HANDS_LEFT,
MAGIC_EE_HANDS_RIGHT,
+ // Dynamic Macros
+ DYN_REC_START1,
+ DYN_REC_START2,
+ DYN_REC_STOP,
+ DYN_MACRO_PLAY1,
+ DYN_MACRO_PLAY2,
+
// always leave at the end
SAFE_RANGE
};
@@ -648,14 +655,43 @@ 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 AG_SWAP MAGIC_SWAP_ALT_GUI
-#define AG_NORM MAGIC_UNSWAP_ALT_GUI
-#define AG_TOGG MAGIC_TOGGLE_ALT_GUI
+#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 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:
// ON_PRESS = 1
@@ -757,4 +793,11 @@ enum quantum_keycodes {
# define SH_OFF (QK_SWAP_HANDS | OP_SH_OFF)
#endif
+// Dynamic Macros aliases
+#define DM_REC1 DYN_REC_START1
+#define DM_REC2 DYN_REC_START2
+#define DM_RSTP DYN_REC_STOP
+#define DM_PLY1 DYN_MACRO_PLAY1
+#define DM_PLY2 DYN_MACRO_PLAY2
+
#endif // QUANTUM_KEYCODES_H
diff --git a/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h b/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h
index 4f69456c3a..1cd4ed2acf 100644
--- a/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h
+++ b/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h
@@ -1,13 +1,13 @@
#ifndef DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-RGB_MATRIX_EFFECT(PINWHEELS)
+RGB_MATRIX_EFFECT(RAINBOW_PINWHEELS)
# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static HSV PINWHEELS_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
+static HSV RAINBOW_PINWHEELS_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
hsv.h += ((g_led_config.point[i].y - k_rgb_matrix_center.y) * 3 * cos + (56 - abs8(g_led_config.point[i].x - k_rgb_matrix_center.x)) * 3 * sin) / 128;
return hsv;
}
-bool PINWHEELS(effect_params_t* params) { return effect_runner_sin_cos_i(params, &PINWHEELS_math); }
+bool RAINBOW_PINWHEELS(effect_params_t* params) { return effect_runner_sin_cos_i(params, &RAINBOW_PINWHEELS_math); }
# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
#endif // DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
diff --git a/quantum/rgb_matrix_drivers.c b/quantum/rgb_matrix_drivers.c
index 503f97014f..9729a3064e 100644
--- a/quantum/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix_drivers.c
@@ -112,6 +112,9 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
led[i].r = r;
led[i].g = g;
led[i].b = b;
+# ifdef RGBW
+ led[i].w = 0;
+# endif
}
static void setled_all(uint8_t r, uint8_t g, uint8_t b) {
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 1c197827f2..7949bb688e 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -126,6 +126,9 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
(*led1).r = r;
(*led1).g = g;
(*led1).b = b;
+#ifdef RGBW
+ (*led1).w = 0;
+#endif
}
void rgblight_check_config(void) {
@@ -186,7 +189,6 @@ void rgblight_init(void) {
return;
}
- debug_enable = 1; // Debug ON!
dprintf("rgblight_init called.\n");
dprintf("rgblight_init start!\n");
if (!eeconfig_is_enabled()) {
@@ -514,6 +516,9 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
led[i].r = r;
led[i].g = g;
led[i].b = b;
+#ifdef RGBW
+ led[i].w = 0;
+#endif
}
rgblight_set();
}
@@ -526,6 +531,9 @@ void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index) {
led[index].r = r;
led[index].g = g;
led[index].b = b;
+#ifdef RGBW
+ led[index].w = 0;
+#endif
rgblight_set();
}
@@ -560,6 +568,9 @@ void rgblight_setrgb_range(uint8_t r, uint8_t g, uint8_t b, uint8_t start, uint8
led[i].r = r;
led[i].g = g;
led[i].b = b;
+#ifdef RGBW
+ led[i].w = 0;
+#endif
}
rgblight_set();
wait_ms(1);
@@ -595,6 +606,9 @@ void rgblight_set(void) {
led[i].r = 0;
led[i].g = 0;
led[i].b = 0;
+# ifdef RGBW
+ led[i].w = 0;
+# endif
}
}
# ifdef RGBLIGHT_LED_MAP
@@ -606,11 +620,7 @@ void rgblight_set(void) {
# else
start_led = led + clipping_start_pos;
# endif
-# ifdef RGBW
- ws2812_setleds_rgbw(start_led, num_leds);
-# else
ws2812_setleds(start_led, num_leds);
-# endif
}
#endif
@@ -908,6 +918,9 @@ void rgblight_effect_snake(animation_status_t *anim) {
ledp->r = 0;
ledp->g = 0;
ledp->b = 0;
+# ifdef RGBW
+ ledp->w = 0;
+# endif
for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
k = pos + j * increment;
if (k > RGBLED_NUM) {
@@ -965,6 +978,9 @@ void rgblight_effect_knight(animation_status_t *anim) {
led[i].r = 0;
led[i].g = 0;
led[i].b = 0;
+# ifdef RGBW
+ led[i].w = 0;
+# endif
}
// Determine which LEDs should be lit up
for (i = 0; i < RGBLIGHT_EFFECT_KNIGHT_LED_NUM; i++) {
@@ -976,6 +992,9 @@ void rgblight_effect_knight(animation_status_t *anim) {
led[cur].r = 0;
led[cur].g = 0;
led[cur].b = 0;
+# ifdef RGBW
+ led[cur].w = 0;
+# endif
}
}
rgblight_set();
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/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/chconf.h b/quantum/stm32/chconf.h
index f7b1b077d3..6b691950a6 100644
--- a/quantum/stm32/chconf.h
+++ b/quantum/stm32/chconf.h
@@ -419,34 +419,39 @@
* @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.*/ }
+# 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.*/ }
+# 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.*/ }
+ { /* Context switch code here.*/ \
+ }
/**
* @brief ISR enter hook.
*/
# define CH_CFG_IRQ_PROLOGUE_HOOK() \
- { /* IRQ prologue code here.*/ }
+ { /* IRQ prologue code here.*/ \
+ }
/**
* @brief ISR exit hook.
*/
# define CH_CFG_IRQ_EPILOGUE_HOOK() \
- { /* IRQ epilogue code here.*/ }
+ { /* IRQ epilogue code here.*/ \
+ }
/**
* @brief Idle thread enter hook.
@@ -455,7 +460,8 @@
* @note This macro can be used to activate a power saving mode.
*/
# define CH_CFG_IDLE_ENTER_HOOK() \
- { /* Idle-enter code here.*/ }
+ { /* Idle-enter code here.*/ \
+ }
/**
* @brief Idle thread leave hook.
@@ -464,22 +470,25 @@
* @note This macro can be used to deactivate a power saving mode.
*/
# define CH_CFG_IDLE_LEAVE_HOOK() \
- { /* Idle-leave code here.*/ }
+ { /* 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.*/ }
+ { /* 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.*/ }
+# define CH_CFG_SYSTEM_TICK_HOOK() \
+ { /* System tick event code here.*/ \
+ }
/**
* @brief System halt hook.
@@ -487,7 +496,8 @@
* the system is halted.
*/
# define CH_CFG_SYSTEM_HALT_HOOK(reason) \
- { /* System halt code here.*/ }
+ { /* System halt code here.*/ \
+ }
/**
* @brief Trace hook.
@@ -495,7 +505,8 @@
* trace buffer.
*/
# define CH_CFG_TRACE_HOOK(tep) \
- { /* Trace code here.*/ }
+ { /* Trace code here.*/ \
+ }
/** @} */
diff --git a/quantum/stm32/proton_c.mk b/quantum/stm32/proton_c.mk
index 193e09ca1e..ff28a4cb5d 100644
--- a/quantum/stm32/proton_c.mk
+++ b/quantum/stm32/proton_c.mk
@@ -2,7 +2,7 @@
# These are defaults based on what has been implemented for ARM boards
AUDIO_ENABLE = yes
-RGBLIGHT_ENABLE = no
+WS2812_DRIVER = bitbang
# Force task driven PWM until ARM can provide automatic configuration
ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h
index 304a54ae59..7e4a014495 100644
--- a/quantum/template/avr/config.h
+++ b/quantum/template/avr/config.h
@@ -190,9 +190,12 @@ 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
+/* disable these deprecated features by default */
+#ifndef LINK_TIME_OPTIMIZATION_ENABLE
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#endif
/*
* MIDI options
*/
diff --git a/quantum/template/base/keyboard.c b/quantum/template/base/keyboard.c
index 55e4fffd3a..fc31c294a2 100644
--- a/quantum/template/base/keyboard.c
+++ b/quantum/template/base/keyboard.c
@@ -42,9 +42,9 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
return process_record_user(keycode, record);
}
-void led_set_kb(uint8_t usb_led) {
+bool led_update_kb(led_t led_state) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
- led_set_user(usb_led);
+ return led_update_user(led_state);
}
*/
diff --git a/quantum/template/base/keymaps/default/keymap.c b/quantum/template/base/keymaps/default/keymap.c
index 4d5bac7b2f..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
}
@@ -70,7 +70,7 @@ void matrix_scan_user(void) {
}
-void led_set_user(uint8_t usb_led) {
-
+bool led_update_user(led_t led_state) {
+ return true;
}
*/
diff --git a/quantum/template/ps2avrgb/config.h b/quantum/template/ps2avrgb/config.h
index f6d7c25e04..d93512bca6 100644
--- a/quantum/template/ps2avrgb/config.h
+++ b/quantum/template/ps2avrgb/config.h
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
#define DEVICE_VER 0x0001
-#define MANUFACTURER You
+#define MANUFACTURER %YOUR_NAME%
#define PRODUCT %KEYBOARD%
#define DESCRIPTION A custom keyboard
@@ -44,6 +44,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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)
diff --git a/quantum/template/ps2avrgb/usbconfig.h b/quantum/template/ps2avrgb/usbconfig.h
index 9ef232f045..83ad06544d 100644
--- a/quantum/template/ps2avrgb/usbconfig.h
+++ b/quantum/template/ps2avrgb/usbconfig.h
@@ -98,20 +98,10 @@ section at the end of this file).
* (e.g. HID), but never want to send any data. This option saves a couple
* of bytes in flash memory and the transmit buffers in RAM.
*/
-#define USB_CFG_INTR_POLL_INTERVAL 1
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
#define USB_CFG_IS_SELF_POWERED 0
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
* device is powered from the USB bus.
*/
-#define USB_CFG_MAX_BUS_POWER 500
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
#define USB_CFG_IMPLEMENT_FN_WRITE 1
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
* transfers. Set it to 0 if you don't need it and want to save a couple of
@@ -227,7 +217,7 @@ section at the end of this file).
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
* the implications!
*/
-#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+#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 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
diff --git a/readme.md b/readme.md
index 2641e2c2ef..5a9166c044 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 Document" link at the bottom of any page.
## Supported Keyboards
diff --git a/requirements.txt b/requirements.txt
index f6257e399e..074b11a8ce 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,3 +3,7 @@
appdirs
argcomplete
colorama
+hjson
+nose2
+flake8
+pep8-naming
diff --git a/setup.cfg b/setup.cfg
index 528512ac6f..9e178ad659 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,4 +1,13 @@
# Python settings for QMK
+[flake8]
+ignore =
+ # QMK is ok with long lines.
+ E501
+per_file_ignores =
+ **/__init__.py:F401
+
+# Let's slowly crank this down
+max_complexity=16
[yapf]
# Align closing bracket with visual indentation.
diff --git a/shell.nix b/shell.nix
index df5aff3508..d7c3b61744 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,17 +1,33 @@
-# dfu-programmer doesn't have darwin on it's list of supported platforms
-{ pkgs ? import <nixpkgs> { config = { allowUnsupportedSystem = true; }; }
-, avr ? true, arm ? true, teensy ? true }:
+{ avr ? true, arm ? true, teensy ? true }:
-with pkgs;
let
- avrbinutils = pkgsCross.avr.buildPackages.binutils;
- avrlibc = pkgsCross.avr.libcCross;
- gcc-arm-embedded = (import (builtins.fetchTarball {
- url = "https://github.com/NixOS/nixpkgs-channels/archive/87f146a41c463a64c93022b11cf19716b3a22037.tar.gz";
- sha256 = "0rk8haf19plw6vyvq0am99rik0hrrysknjw0f2vs7985awngy3q2";
- }) {}).gcc-arm-embedded;
+ overlay = self: super:
+ let addDarwinSupport = pkg: pkg.overrideAttrs (oldAttrs: {
+ meta.platforms = (oldAttrs.meta.platforms or []) ++ self.lib.platforms.darwin;
+ });
+ in {
+ dfu-programmer = addDarwinSupport super.dfu-programmer;
+ teensy-loader-cli = addDarwinSupport super.teensy-loader-cli;
+
+ avrgcc = super.avrgcc.overrideAttrs (oldAttrs: rec {
+ name = "avr-gcc-8.1.0";
+ src = super.fetchurl {
+ url = "mirror://gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.xz";
+ sha256 = "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x";
+ };
+ });
+ };
- avr_incflags = [
+ nixpkgs = builtins.fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs/archive/0260747427737b980f0.tar.gz";
+ sha256 = "1p2yc6b40xvvxvmlqd9wb440pkrimnlc2wsbpa5rddlpx1dn8qmf";
+ };
+
+ pkgs = import nixpkgs { overlays = [ overlay ]; };
+in
+
+with pkgs;
+let avr_incflags = [
"-isystem ${avrlibc}/avr/include"
"-B${avrlibc}/avr/lib/avr5"
"-L${avrlibc}/avr/lib/avr5"
@@ -20,15 +36,7 @@ let
"-B${avrlibc}/avr/lib/avr51"
"-L${avrlibc}/avr/lib/avr51"
];
- avrgcc = pkgsCross.avr.buildPackages.gcc.overrideAttrs (oldAttrs: rec {
- name = "avr-gcc-8.1.0";
- src = fetchurl {
- url = "mirror://gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.xz";
- sha256 = "0lxil8x0jjx7zbf90cy1rli650akaa6hpk8wk8s62vk2jbwnc60x";
- };
- });
in
-
stdenv.mkDerivation {
name = "qmk-firmware";
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 db55353465..d43950299b 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -203,6 +203,9 @@ ifeq ($(strip $(SHARED_EP_ENABLE)), yes)
TMK_COMMON_DEFS += -DSHARED_EP_ENABLE
endif
+ifeq ($(strip $(LTO_ENABLE)), yes)
+ LINK_TIME_OPTIMIZATION_ENABLE = yes
+endif
ifeq ($(strip $(LINK_TIME_OPTIMIZATION_ENABLE)), yes)
EXTRAFLAGS += -flto
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c
index 07d78c56d4..4c7d15cd50 100644
--- a/tmk_core/common/action_layer.c
+++ b/tmk_core/common/action_layer.c
@@ -268,7 +268,7 @@ uint8_t layer_switch_get_layer(keypos_t key) {
/* fall back to layer 0 */
return 0;
#else
- return biton32(default_layer_state);
+ return get_highest_layer(default_layer_state);
#endif
}
diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h
index fee9b244df..b8562f5a46 100644
--- a/tmk_core/common/action_layer.h
+++ b/tmk_core/common/action_layer.h
@@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#if defined(LAYER_STATE_8BIT)
typedef uint8_t layer_state_t;
-# define get_highest_layer(state) biton8(state)
+# define get_highest_layer(state) biton(state)
#elif defined(LAYER_STATE_16BIT)
typedef uint16_t layer_state_t;
# define get_highest_layer(state) biton16(state)
diff --git a/tmk_core/common/arm_atsam/suspend.c b/tmk_core/common/arm_atsam/suspend.c
index 2dad005706..d1077be4c2 100644
--- a/tmk_core/common/arm_atsam/suspend.c
+++ b/tmk_core/common/arm_atsam/suspend.c
@@ -7,7 +7,8 @@
*
* FIXME: needs doc
*/
-void suspend_idle(uint8_t time) { /* Note: Not used anywhere currently */ }
+void suspend_idle(uint8_t time) { /* Note: Not used anywhere currently */
+}
/** \brief Run user level Power down
*
diff --git a/tmk_core/common/chibios/suspend.c b/tmk_core/common/chibios/suspend.c
index c0f9c28d44..5be1b76777 100644
--- a/tmk_core/common/chibios/suspend.c
+++ b/tmk_core/common/chibios/suspend.c
@@ -15,6 +15,13 @@
# include "backlight.h"
#endif
+#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
+# include "rgblight.h"
+extern rgblight_config_t rgblight_config;
+static bool rgblight_enabled;
+static bool is_suspended;
+#endif
+
/** \brief suspend idle
*
* FIXME: needs doc
@@ -43,6 +50,16 @@ void suspend_power_down(void) {
// TODO: figure out what to power down and how
// shouldn't power down TPM/FTM if we want a breathing LED
// also shouldn't power down USB
+#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
+# ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_disable();
+# endif
+ if (!is_suspended) {
+ is_suspended = true;
+ rgblight_enabled = rgblight_config.enable;
+ rgblight_disable_noeeprom();
+ }
+#endif
suspend_power_down_kb();
// on AVR, this enables the watchdog for 15ms (max), and goes to
@@ -104,5 +121,14 @@ void suspend_wakeup_init(void) {
#ifdef BACKLIGHT_ENABLE
backlight_init();
#endif /* BACKLIGHT_ENABLE */
+#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
+ is_suspended = false;
+ if (rgblight_enabled) {
+ rgblight_enable_noeeprom();
+ }
+# ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_enable();
+# endif
+#endif
suspend_wakeup_init_kb();
}
diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c
index 4cf4ca3ace..7cec4bd7df 100644
--- a/tmk_core/common/eeconfig.c
+++ b/tmk_core/common/eeconfig.c
@@ -2,13 +2,13 @@
#include <stdbool.h>
#include "eeprom.h"
#include "eeconfig.h"
+#include "action_layer.h"
#ifdef STM32_EEPROM_ENABLE
# include "hal.h"
# include "eeprom_stm32.h"
#endif
-extern uint32_t default_layer_state;
/** \brief eeconfig enable
*
* FIXME: needs doc
@@ -51,10 +51,10 @@ void eeconfig_init_quantum(void) {
// TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
// within the emulated eeprom via dfu-util or another tool
#if defined INIT_EE_HANDS_LEFT
- #pragma message "Faking EE_HANDS for left hand"
+# pragma message "Faking EE_HANDS for left hand"
eeprom_update_byte(EECONFIG_HANDEDNESS, 1);
#elif defined INIT_EE_HANDS_RIGHT
- #pragma message "Faking EE_HANDS for right hand"
+# pragma message "Faking EE_HANDS for right hand"
eeprom_update_byte(EECONFIG_HANDEDNESS, 0);
#endif
diff --git a/tmk_core/common/host.c b/tmk_core/common/host.c
index ce39760a5b..e7d92cfac6 100644
--- a/tmk_core/common/host.c
+++ b/tmk_core/common/host.c
@@ -39,6 +39,12 @@ uint8_t host_keyboard_leds(void) {
if (!driver) return 0;
return (*driver->keyboard_leds)();
}
+
+led_t host_keyboard_led_state(void) {
+ if (!driver) return (led_t){0};
+ return (led_t)((*driver->keyboard_leds)());
+}
+
/* send report */
void host_keyboard_send(report_keyboard_t *report) {
if (!driver) return;
diff --git a/tmk_core/common/host.h b/tmk_core/common/host.h
index b2a7f98427..2cffef6e15 100644
--- a/tmk_core/common/host.h
+++ b/tmk_core/common/host.h
@@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdbool.h>
#include "report.h"
#include "host_driver.h"
+#include "led.h"
#define IS_LED_ON(leds, led_name) ((leds) & (1 << (led_name)))
#define IS_LED_OFF(leds, led_name) (~(leds) & (1 << (led_name)))
@@ -41,6 +42,7 @@ host_driver_t *host_get_driver(void);
/* host driver interface */
uint8_t host_keyboard_leds(void);
+led_t host_keyboard_led_state(void);
void host_keyboard_send(report_keyboard_t *report);
void host_mouse_send(report_mouse_t *report);
void host_system_send(uint16_t data);
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index 63ace9793c..af2b2fd48b 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -254,6 +254,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 +297,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)
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/led.h b/tmk_core/common/led.h
index 2c28fe5401..990282862b 100644
--- a/tmk_core/common/led.h
+++ b/tmk_core/common/led.h
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef LED_H
#define LED_H
#include "stdint.h"
+#include "stdbool.h"
/* FIXME: Add doxygen comments here. */
@@ -32,6 +33,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
extern "C" {
#endif
+typedef union {
+ uint8_t raw;
+ struct {
+ bool num_lock : 1;
+ bool caps_lock : 1;
+ bool scroll_lock : 1;
+ bool compose : 1;
+ bool kana : 1;
+ uint8_t reserved : 3;
+ };
+} led_t;
+
void led_set(uint8_t usb_led);
void led_init_ports(void);
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/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/arm_atsam/usb/usb_protocol_hid.h b/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
index 2f8a39bdd8..fb97f63cef 100644
--- a/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
+++ b/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
@@ -186,9 +186,10 @@ COMPILER_PACK_RESET()
#define USB_HID_COUNTRY_UK 32 // UK
#define USB_HID_COUNTRY_US 33 // US
#define USB_HID_COUNTRY_YUGOSLAVIA 34 // Yugoslavia
-#define USB_HID_COUNTRY_TURKISH_F 35 // Turkish-F
- //! @}
- //! @}
+#define USB_HID_COUNTRY_TURKISH_F \
+ 35 // Turkish-F
+ //! @}
+ //! @}
//! @}
//! \name HID KEYS values
diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c
index de2b493b84..c304f4d795 100644
--- a/tmk_core/protocol/chibios/main.c
+++ b/tmk_core/protocol/chibios/main.c
@@ -32,6 +32,11 @@
#include "sendchar.h"
#include "debug.h"
#include "printf.h"
+#include "rgblight_reconfig.h"
+
+#if (defined(RGB_MIDI) || defined(RGBLIGHT_ANIMATIONS)) && defined(RGBLIGHT_ENABLE)
+# include "rgblight.h"
+#endif
#ifdef SLEEP_LED_ENABLE
# include "sleep_led.h"
#endif
@@ -215,5 +220,8 @@ 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 c8a6bbb43f..740763de2f 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 {
@@ -310,7 +324,7 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) {
case USB_EVENT_SUSPEND:
#ifdef SLEEP_LED_ENABLE
sleep_led_enable();
-#endif /* SLEEP_LED_ENABLE */
+#endif /* SLEEP_LED_ENABLE */
/* Falls into.*/
case USB_EVENT_UNCONFIGURED:
/* Falls into.*/
@@ -379,7 +393,6 @@ static void set_led_transfer_cb(USBDriver *usbp) {
/* Callback for SETUP request on the endpoint 0 (control) */
static bool usb_request_hook_cb(USBDriver *usbp) {
const USBDescriptor *dp;
- int has_report_id;
/* usbp->setup fields:
* 0: bmRequestType (bitmask)
@@ -432,26 +445,17 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
switch (usbp->setup[1]) { /* bRequest */
case HID_SET_REPORT:
switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0 and wLength==1?) */
- case KEYBOARD_INTERFACE:
#if defined(SHARED_EP_ENABLE) && !defined(KEYBOARD_SHARED_EP)
case SHARED_INTERFACE:
+ usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb);
+ return TRUE;
+ break;
#endif
+
+ case KEYBOARD_INTERFACE:
/* keyboard_led_stats = <read byte from next OUT report>
* keyboard_led_stats needs be word (or dword), otherwise we get an exception on F0 */
- has_report_id = 0;
-#if defined(SHARED_EP_ENABLE)
- if (usbp->setup[4] == SHARED_INTERFACE) {
- has_report_id = 1;
- }
-#endif
- if (usbp->setup[4] == KEYBOARD_INTERFACE && !keyboard_protocol) {
- has_report_id = 0;
- }
- if (has_report_id) {
- usbSetupTransfer(usbp, set_report_buf, sizeof(set_report_buf), set_led_transfer_cb);
- } else {
- usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL);
- }
+ usbSetupTransfer(usbp, (uint8_t *)&keyboard_led_stats, 1, NULL);
return TRUE;
break;
}
@@ -463,9 +467,9 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
#ifdef NKRO_ENABLE
keymap_config.nkro = !!keyboard_protocol;
if (!keymap_config.nkro && keyboard_idle) {
-#else /* NKRO_ENABLE */
+#else /* NKRO_ENABLE */
if (keyboard_idle) {
-#endif /* NKRO_ENABLE */
+#endif /* NKRO_ENABLE */
/* arm the idle timer if boot protocol & idle */
osalSysLockFromISR();
chVTSetI(&keyboard_idle_timer, 4 * MS2ST(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp);
diff --git a/tmk_core/protocol/iwrap/iwrap.c b/tmk_core/protocol/iwrap/iwrap.c
index 05e632da38..4d0ca5756b 100644
--- a/tmk_core/protocol/iwrap/iwrap.c
+++ b/tmk_core/protocol/iwrap/iwrap.c
@@ -320,7 +320,8 @@ static void send_mouse(report_mouse_t *report) {
#endif
}
-static void send_system(uint16_t data) { /* not supported */ }
+static void send_system(uint16_t data) { /* not supported */
+}
static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
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/adafruit_ble.cpp b/tmk_core/protocol/lufa/adafruit_ble.cpp
index 505794a80c..7b3ffdef7a 100644
--- a/tmk_core/protocol/lufa/adafruit_ble.cpp
+++ b/tmk_core/protocol/lufa/adafruit_ble.cpp
@@ -31,9 +31,9 @@
#define ConnectionUpdateInterval 1000 /* milliseconds */
#ifdef SAMPLE_BATTERY
-#ifndef BATTERY_LEVEL_PIN
-# define BATTERY_LEVEL_PIN 7
-#endif
+# ifndef BATTERY_LEVEL_PIN
+# define BATTERY_LEVEL_PIN 7
+# endif
#endif
static struct {
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index eb166c828e..8319b34e94 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
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/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c
index ffcf0957f3..70032d69fa 100644
--- a/tmk_core/protocol/usb_descriptor.c
+++ b/tmk_core/protocol/usb_descriptor.c
@@ -40,6 +40,8 @@
#include "report.h"
#include "usb_descriptor.h"
+// clang-format off
+
/*
* HID report descriptors
*/
@@ -49,46 +51,46 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
#else
const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = {
#endif
- HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
- HID_RI_USAGE(8, 0x06), // Keyboard
- HID_RI_COLLECTION(8, 0x01), // Application
+ HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
+ HID_RI_USAGE(8, 0x06), // Keyboard
+ HID_RI_COLLECTION(8, 0x01), // Application
#ifdef KEYBOARD_SHARED_EP
- HID_RI_REPORT_ID(8, REPORT_ID_KEYBOARD),
+ HID_RI_REPORT_ID(8, REPORT_ID_KEYBOARD),
#endif
- // Modifiers (8 bits)
- HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
- HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control
- HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, 0x08),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- // Reserved (1 byte)
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_CONSTANT),
- // Keycodes (6 bytes)
- HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
- HID_RI_USAGE_MINIMUM(8, 0x00),
- HID_RI_USAGE_MAXIMUM(8, 0xFF),
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, 0x06),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
-
- // Status LEDs (5 bits)
- HID_RI_USAGE_PAGE(8, 0x08), // LED
- HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock
- HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana
- HID_RI_REPORT_COUNT(8, 0x05),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
- // LED padding (3 bits)
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x03),
- HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
+ // Modifiers (8 bits)
+ HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
+ HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control
+ HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(8, 0x01),
+ HID_RI_REPORT_COUNT(8, 0x08),
+ HID_RI_REPORT_SIZE(8, 0x01),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ // Reserved (1 byte)
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_CONSTANT),
+ // Keycodes (6 bytes)
+ HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
+ HID_RI_USAGE_MINIMUM(8, 0x00),
+ HID_RI_USAGE_MAXIMUM(8, 0xFF),
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, 0x06),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+
+ // Status LEDs (5 bits)
+ HID_RI_USAGE_PAGE(8, 0x08), // LED
+ HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock
+ HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana
+ HID_RI_REPORT_COUNT(8, 0x05),
+ HID_RI_REPORT_SIZE(8, 0x01),
+ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
+ // LED padding (3 bits)
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x03),
+ HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
HID_RI_END_COLLECTION(0),
#ifndef KEYBOARD_SHARED_EP
};
@@ -101,54 +103,54 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = {
const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
# define SHARED_REPORT_STARTED
# endif
- HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
- HID_RI_USAGE(8, 0x02), // Mouse
- HID_RI_COLLECTION(8, 0x01), // Application
+ HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
+ HID_RI_USAGE(8, 0x02), // Mouse
+ HID_RI_COLLECTION(8, 0x01), // Application
# ifdef MOUSE_SHARED_EP
- HID_RI_REPORT_ID(8, REPORT_ID_MOUSE),
+ HID_RI_REPORT_ID(8, REPORT_ID_MOUSE),
# endif
- HID_RI_USAGE(8, 0x01), // Pointer
- HID_RI_COLLECTION(8, 0x00), // Physical
- // Buttons (5 bits)
- HID_RI_USAGE_PAGE(8, 0x09), // Button
- HID_RI_USAGE_MINIMUM(8, 0x01), // Button 1
- HID_RI_USAGE_MAXIMUM(8, 0x05), // Button 5
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, 0x05),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- // Button padding (3 bits)
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x03),
- HID_RI_INPUT(8, HID_IOF_CONSTANT),
-
- // X/Y position (2 bytes)
- HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
- HID_RI_USAGE(8, 0x30), // X
- HID_RI_USAGE(8, 0x31), // Y
- HID_RI_LOGICAL_MINIMUM(8, -127),
- HID_RI_LOGICAL_MAXIMUM(8, 127),
- HID_RI_REPORT_COUNT(8, 0x02),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
-
- // Vertical wheel (1 byte)
- HID_RI_USAGE(8, 0x38), // Wheel
- HID_RI_LOGICAL_MINIMUM(8, -127),
- HID_RI_LOGICAL_MAXIMUM(8, 127),
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
- // Horizontal wheel (1 byte)
- HID_RI_USAGE_PAGE(8, 0x0C), // Consumer
- HID_RI_USAGE(16, 0x0238), // AC Pan
- HID_RI_LOGICAL_MINIMUM(8, -127),
- HID_RI_LOGICAL_MAXIMUM(8, 127),
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
- HID_RI_END_COLLECTION(0),
+ HID_RI_USAGE(8, 0x01), // Pointer
+ HID_RI_COLLECTION(8, 0x00), // Physical
+ // Buttons (5 bits)
+ HID_RI_USAGE_PAGE(8, 0x09), // Button
+ HID_RI_USAGE_MINIMUM(8, 0x01), // Button 1
+ HID_RI_USAGE_MAXIMUM(8, 0x05), // Button 5
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(8, 0x01),
+ HID_RI_REPORT_COUNT(8, 0x05),
+ HID_RI_REPORT_SIZE(8, 0x01),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ // Button padding (3 bits)
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x03),
+ HID_RI_INPUT(8, HID_IOF_CONSTANT),
+
+ // X/Y position (2 bytes)
+ HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
+ HID_RI_USAGE(8, 0x30), // X
+ HID_RI_USAGE(8, 0x31), // Y
+ HID_RI_LOGICAL_MINIMUM(8, -127),
+ HID_RI_LOGICAL_MAXIMUM(8, 127),
+ HID_RI_REPORT_COUNT(8, 0x02),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+
+ // Vertical wheel (1 byte)
+ HID_RI_USAGE(8, 0x38), // Wheel
+ HID_RI_LOGICAL_MINIMUM(8, -127),
+ HID_RI_LOGICAL_MAXIMUM(8, 127),
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+ // Horizontal wheel (1 byte)
+ HID_RI_USAGE_PAGE(8, 0x0C), // Consumer
+ HID_RI_USAGE(16, 0x0238), // AC Pan
+ HID_RI_LOGICAL_MINIMUM(8, -127),
+ HID_RI_LOGICAL_MAXIMUM(8, 127),
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+ HID_RI_END_COLLECTION(0),
HID_RI_END_COLLECTION(0),
# ifndef MOUSE_SHARED_EP
};
@@ -160,68 +162,68 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
#endif
#ifdef EXTRAKEY_ENABLE
- HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
- HID_RI_USAGE(8, 0x80), // System Control
- HID_RI_COLLECTION(8, 0x01), // Application
- HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
- HID_RI_USAGE_MINIMUM(16, 0x0081), // System Power Down
- HID_RI_USAGE_MAXIMUM(16, 0x0083), // System Wake Up
- HID_RI_LOGICAL_MINIMUM(16, 0x0001),
- HID_RI_LOGICAL_MAXIMUM(16, 0x0003),
- HID_RI_REPORT_COUNT(8, 1),
- HID_RI_REPORT_SIZE(8, 16),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+ HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
+ HID_RI_USAGE(8, 0x80), // System Control
+ HID_RI_COLLECTION(8, 0x01), // Application
+ HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
+ HID_RI_USAGE_MINIMUM(16, 0x0081), // System Power Down
+ HID_RI_USAGE_MAXIMUM(16, 0x0083), // System Wake Up
+ HID_RI_LOGICAL_MINIMUM(16, 0x0001),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x0003),
+ HID_RI_REPORT_COUNT(8, 1),
+ HID_RI_REPORT_SIZE(8, 16),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
HID_RI_END_COLLECTION(0),
- HID_RI_USAGE_PAGE(8, 0x0C), // Consumer
- HID_RI_USAGE(8, 0x01), // Consumer Control
- HID_RI_COLLECTION(8, 0x01), // Application
- HID_RI_REPORT_ID(8, REPORT_ID_CONSUMER),
- HID_RI_USAGE_MINIMUM(16, 0x0001), // Consumer Control
- HID_RI_USAGE_MAXIMUM(16, 0x029C), // AC Distribute Vertically
- HID_RI_LOGICAL_MINIMUM(16, 0x0001),
- HID_RI_LOGICAL_MAXIMUM(16, 0x029C),
- HID_RI_REPORT_COUNT(8, 1),
- HID_RI_REPORT_SIZE(8, 16),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+ HID_RI_USAGE_PAGE(8, 0x0C), // Consumer
+ HID_RI_USAGE(8, 0x01), // Consumer Control
+ HID_RI_COLLECTION(8, 0x01), // Application
+ HID_RI_REPORT_ID(8, REPORT_ID_CONSUMER),
+ HID_RI_USAGE_MINIMUM(16, 0x0001), // Consumer Control
+ HID_RI_USAGE_MAXIMUM(16, 0x029C), // AC Distribute Vertically
+ HID_RI_LOGICAL_MINIMUM(16, 0x0001),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x029C),
+ HID_RI_REPORT_COUNT(8, 1),
+ HID_RI_REPORT_SIZE(8, 16),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
HID_RI_END_COLLECTION(0),
#endif
#ifdef NKRO_ENABLE
- HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
- HID_RI_USAGE(8, 0x06), // Keyboard
- HID_RI_COLLECTION(8, 0x01), // Application
- HID_RI_REPORT_ID(8, REPORT_ID_NKRO),
- // Modifiers (8 bits)
- HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
- HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control
- HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, 0x08),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- // Keycodes
- HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
- HID_RI_USAGE_MINIMUM(8, 0x00),
- HID_RI_USAGE_MAXIMUM(8, KEYBOARD_REPORT_BITS * 8 - 1),
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0x01),
- HID_RI_REPORT_COUNT(8, KEYBOARD_REPORT_BITS * 8),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
-
- // Status LEDs (5 bits)
- HID_RI_USAGE_PAGE(8, 0x08), // LED
- HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock
- HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana
- HID_RI_REPORT_COUNT(8, 0x05),
- HID_RI_REPORT_SIZE(8, 0x01),
- HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
- // LED padding (3 bits)
- HID_RI_REPORT_COUNT(8, 0x01),
- HID_RI_REPORT_SIZE(8, 0x03),
- HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
+ HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
+ HID_RI_USAGE(8, 0x06), // Keyboard
+ HID_RI_COLLECTION(8, 0x01), // Application
+ HID_RI_REPORT_ID(8, REPORT_ID_NKRO),
+ // Modifiers (8 bits)
+ HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
+ HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control
+ HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(8, 0x01),
+ HID_RI_REPORT_COUNT(8, 0x08),
+ HID_RI_REPORT_SIZE(8, 0x01),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ // Keycodes
+ HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad
+ HID_RI_USAGE_MINIMUM(8, 0x00),
+ HID_RI_USAGE_MAXIMUM(8, KEYBOARD_REPORT_BITS * 8 - 1),
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(8, 0x01),
+ HID_RI_REPORT_COUNT(8, KEYBOARD_REPORT_BITS * 8),
+ HID_RI_REPORT_SIZE(8, 0x01),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+
+ // Status LEDs (5 bits)
+ HID_RI_USAGE_PAGE(8, 0x08), // LED
+ HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock
+ HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana
+ HID_RI_REPORT_COUNT(8, 0x05),
+ HID_RI_REPORT_SIZE(8, 0x01),
+ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
+ // LED padding (3 bits)
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x03),
+ HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
HID_RI_END_COLLECTION(0),
#endif
#ifdef SHARED_EP_ENABLE
@@ -230,46 +232,48 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
#ifdef RAW_ENABLE
const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = {
- HID_RI_USAGE_PAGE(16, 0xFF60), // Vendor Defined
- HID_RI_USAGE(8, 0x61), // Vendor Defined
- HID_RI_COLLECTION(8, 0x01), // Application
- // Data to host
- HID_RI_USAGE(8, 0x62), // Vendor Defined
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- // Data from host
- HID_RI_USAGE(8, 0x63), // Vendor Defined
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
+ HID_RI_USAGE_PAGE(16, 0xFF60), // Vendor Defined
+ HID_RI_USAGE(8, 0x61), // Vendor Defined
+ HID_RI_COLLECTION(8, 0x01), // Application
+ // Data to host
+ HID_RI_USAGE(8, 0x62), // Vendor Defined
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+
+ // Data from host
+ HID_RI_USAGE(8, 0x63), // Vendor Defined
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
HID_RI_END_COLLECTION(0),
};
#endif
#ifdef CONSOLE_ENABLE
const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = {
- HID_RI_USAGE_PAGE(16, 0xFF31), // Vendor Defined (PJRC Teensy compatible)
- HID_RI_USAGE(8, 0x74), // Vendor Defined (PJRC Teensy compatible)
- HID_RI_COLLECTION(8, 0x01), // Application
- // Data to host
- HID_RI_USAGE(8, 0x75), // Vendor Defined
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- // Data from host
- HID_RI_USAGE(8, 0x76), // Vendor Defined
- HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
- HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE),
- HID_RI_REPORT_SIZE(8, 0x08),
- HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
+ HID_RI_USAGE_PAGE(16, 0xFF31), // Vendor Defined (PJRC Teensy compatible)
+ HID_RI_USAGE(8, 0x74), // Vendor Defined (PJRC Teensy compatible)
+ HID_RI_COLLECTION(8, 0x01), // Application
+ // Data to host
+ HID_RI_USAGE(8, 0x75), // Vendor Defined
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+
+ // Data from host
+ HID_RI_USAGE(8, 0x76), // Vendor Defined
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
HID_RI_END_COLLECTION(0),
};
#endif
@@ -277,26 +281,33 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = {
/*
* Device descriptor
*/
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
- .USBSpecification = VERSION_BCD(1, 1, 0),
+const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Device_t),
+ .Type = DTYPE_Device
+ },
+ .USBSpecification = VERSION_BCD(1, 1, 0),
+
#if VIRTSER_ENABLE
- .Class = USB_CSCP_IADDeviceClass,
- .SubClass = USB_CSCP_IADDeviceSubclass,
- .Protocol = USB_CSCP_IADDeviceProtocol,
+ .Class = USB_CSCP_IADDeviceClass,
+ .SubClass = USB_CSCP_IADDeviceSubclass,
+ .Protocol = USB_CSCP_IADDeviceProtocol,
#else
- .Class = USB_CSCP_NoDeviceClass,
- .SubClass = USB_CSCP_NoDeviceSubclass,
- .Protocol = USB_CSCP_NoDeviceProtocol,
+ .Class = USB_CSCP_NoDeviceClass,
+ .SubClass = USB_CSCP_NoDeviceSubclass,
+ .Protocol = USB_CSCP_NoDeviceProtocol,
#endif
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
- // Specified in config.h
- .VendorID = VENDOR_ID,
- .ProductID = PRODUCT_ID,
- .ReleaseNumber = DEVICE_VER,
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = 0x03,
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS};
+
+ .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
+ // Specified in config.h
+ .VendorID = VENDOR_ID,
+ .ProductID = PRODUCT_ID,
+ .ReleaseNumber = DEVICE_VER,
+ .ManufacturerStrIndex = 0x01,
+ .ProductStrIndex = 0x02,
+ .SerialNumStrIndex = 0x03,
+ .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
+};
#ifndef USB_MAX_POWER_CONSUMPTION
# define USB_MAX_POWER_CONSUMPTION 500
@@ -309,197 +320,540 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {.Header = {.
/*
* Configuration descriptors
*/
-const USB_Descriptor_Configuration_t PROGMEM
- ConfigurationDescriptor =
- {
- .Config = {.Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), .TotalInterfaces = TOTAL_INTERFACES, .ConfigurationNumber = 1, .ConfigurationStrIndex = NO_DESCRIPTOR, .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP), .MaxPowerConsumption = USB_CONFIG_POWER_MA(USB_MAX_POWER_CONSUMPTION)},
-
+const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = {
+ .Config = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Configuration_Header_t),
+ .Type = DTYPE_Configuration
+ },
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
+ .TotalInterfaces = TOTAL_INTERFACES,
+ .ConfigurationNumber = 1,
+ .ConfigurationStrIndex = NO_DESCRIPTOR,
+ .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP),
+ .MaxPowerConsumption = USB_CONFIG_POWER_MA(USB_MAX_POWER_CONSUMPTION)
+ },
#ifndef KEYBOARD_SHARED_EP
- /*
- * Keyboard
- */
- .Keyboard_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
- .InterfaceNumber = KEYBOARD_INTERFACE,
- .AlternateSetting = 0x00,
- .TotalEndpoints = 1,
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_BootSubclass,
- .Protocol = HID_CSCP_KeyboardBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR},
- .Keyboard_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(KeyboardReport)},
- .Keyboard_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = KEYBOARD_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS},
+ /*
+ * Keyboard
+ */
+ .Keyboard_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = KEYBOARD_INTERFACE,
+ .AlternateSetting = 0x00,
+ .TotalEndpoints = 1,
+ .Class = HID_CSCP_HIDClass,
+ .SubClass = HID_CSCP_BootSubclass,
+ .Protocol = HID_CSCP_KeyboardBootProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Keyboard_HID = {
+ .Header = {
+ .Size = sizeof(USB_HID_Descriptor_HID_t),
+ .Type = HID_DTYPE_HID
+ },
+ .HIDSpec = VERSION_BCD(1, 1, 1),
+ .CountryCode = 0x00,
+ .TotalReportDescriptors = 1,
+ .HIDReportType = HID_DTYPE_Report,
+ .HIDReportLength = sizeof(KeyboardReport)
+ },
+ .Keyboard_INEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = KEYBOARD_EPSIZE,
+ .PollingIntervalMS = USB_POLLING_INTERVAL_MS
+ },
#endif
#ifdef RAW_ENABLE
- /*
- * Raw HID
- */
- .Raw_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = RAW_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 2, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_NonBootSubclass, .Protocol = HID_CSCP_NonBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR},
- .Raw_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(RawReport)},
- .Raw_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = RAW_EPSIZE, .PollingIntervalMS = 0x01},
- .Raw_OUTEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = RAW_EPSIZE, .PollingIntervalMS = 0x01},
+ /*
+ * Raw HID
+ */
+ .Raw_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = RAW_INTERFACE,
+ .AlternateSetting = 0x00,
+ .TotalEndpoints = 2,
+ .Class = HID_CSCP_HIDClass,
+ .SubClass = HID_CSCP_NonBootSubclass,
+ .Protocol = HID_CSCP_NonBootProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Raw_HID = {
+ .Header = {
+ .Size = sizeof(USB_HID_Descriptor_HID_t),
+ .Type = HID_DTYPE_HID
+ },
+ .HIDSpec = VERSION_BCD(1, 1, 1),
+ .CountryCode = 0x00,
+ .TotalReportDescriptors = 1,
+ .HIDReportType = HID_DTYPE_Report,
+ .HIDReportLength = sizeof(RawReport)
+ },
+ .Raw_INEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = RAW_EPSIZE,
+ .PollingIntervalMS = 0x01
+ },
+ .Raw_OUTEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = RAW_EPSIZE,
+ .PollingIntervalMS = 0x01
+ },
#endif
#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP)
- /*
- * Mouse
- */
- .Mouse_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = MOUSE_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 1, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_BootSubclass, .Protocol = HID_CSCP_MouseBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR},
- .Mouse_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(MouseReport)},
- .Mouse_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MOUSE_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS},
+ /*
+ * Mouse
+ */
+ .Mouse_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = MOUSE_INTERFACE,
+ .AlternateSetting = 0x00,
+ .TotalEndpoints = 1,
+ .Class = HID_CSCP_HIDClass,
+ .SubClass = HID_CSCP_BootSubclass,
+ .Protocol = HID_CSCP_MouseBootProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Mouse_HID = {
+ .Header = {
+ .Size = sizeof(USB_HID_Descriptor_HID_t),
+ .Type = HID_DTYPE_HID
+ },
+ .HIDSpec = VERSION_BCD(1, 1, 1),
+ .CountryCode = 0x00,
+ .TotalReportDescriptors = 1,
+ .HIDReportType = HID_DTYPE_Report,
+ .HIDReportLength = sizeof(MouseReport)
+ },
+ .Mouse_INEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = MOUSE_EPSIZE,
+ .PollingIntervalMS = USB_POLLING_INTERVAL_MS
+ },
#endif
#ifdef SHARED_EP_ENABLE
- /*
- * Shared
- */
- .Shared_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
- .InterfaceNumber = SHARED_INTERFACE,
- .AlternateSetting = 0x00,
- .TotalEndpoints = 1,
- .Class = HID_CSCP_HIDClass,
+ /*
+ * Shared
+ */
+ .Shared_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = SHARED_INTERFACE,
+ .AlternateSetting = 0x00,
+ .TotalEndpoints = 1,
+ .Class = HID_CSCP_HIDClass,
# ifdef KEYBOARD_SHARED_EP
- .SubClass = HID_CSCP_BootSubclass,
- .Protocol = HID_CSCP_KeyboardBootProtocol,
+ .SubClass = HID_CSCP_BootSubclass,
+ .Protocol = HID_CSCP_KeyboardBootProtocol,
# else
- .SubClass = HID_CSCP_NonBootSubclass,
- .Protocol = HID_CSCP_NonBootProtocol,
+ .SubClass = HID_CSCP_NonBootSubclass,
+ .Protocol = HID_CSCP_NonBootProtocol,
# endif
- .InterfaceStrIndex = NO_DESCRIPTOR},
- .Shared_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(SharedReport)},
- .Shared_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = SHARED_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS},
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Shared_HID = {
+ .Header = {
+ .Size = sizeof(USB_HID_Descriptor_HID_t),
+ .Type = HID_DTYPE_HID
+ },
+ .HIDSpec = VERSION_BCD(1, 1, 1),
+ .CountryCode = 0x00,
+ .TotalReportDescriptors = 1,
+ .HIDReportType = HID_DTYPE_Report,
+ .HIDReportLength = sizeof(SharedReport)
+ },
+ .Shared_INEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = SHARED_EPSIZE,
+ .PollingIntervalMS = USB_POLLING_INTERVAL_MS
+ },
#endif
#ifdef CONSOLE_ENABLE
- /*
- * Console
- */
- .Console_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = CONSOLE_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 2, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_NonBootSubclass, .Protocol = HID_CSCP_NonBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR},
- .Console_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(ConsoleReport)},
- .Console_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | CONSOLE_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CONSOLE_EPSIZE, .PollingIntervalMS = 0x01},
- .Console_OUTEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_OUT | CONSOLE_OUT_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CONSOLE_EPSIZE, .PollingIntervalMS = 0x01},
+ /*
+ * Console
+ */
+ .Console_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = CONSOLE_INTERFACE,
+ .AlternateSetting = 0x00,
+ .TotalEndpoints = 2,
+ .Class = HID_CSCP_HIDClass,
+ .SubClass = HID_CSCP_NonBootSubclass,
+ .Protocol = HID_CSCP_NonBootProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Console_HID = {
+ .Header = {
+ .Size = sizeof(USB_HID_Descriptor_HID_t),
+ .Type = HID_DTYPE_HID
+ },
+ .HIDSpec = VERSION_BCD(1, 1, 1),
+ .CountryCode = 0x00,
+ .TotalReportDescriptors = 1,
+ .HIDReportType = HID_DTYPE_Report,
+ .HIDReportLength = sizeof(ConsoleReport)
+ },
+ .Console_INEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_IN | CONSOLE_IN_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CONSOLE_EPSIZE,
+ .PollingIntervalMS = 0x01
+ },
+ .Console_OUTEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = (ENDPOINT_DIR_OUT | CONSOLE_OUT_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CONSOLE_EPSIZE,
+ .PollingIntervalMS = 0x01
+ },
#endif
#ifdef MIDI_ENABLE
- /*
- * MIDI
- */
- .Audio_Interface_Association =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
- .FirstInterfaceIndex = AC_INTERFACE,
- .TotalInterfaces = 2,
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_ControlSubclass,
- .Protocol = AUDIO_CSCP_ControlProtocol,
- .IADStrIndex = NO_DESCRIPTOR,
- },
- .Audio_ControlInterface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = AC_INTERFACE,
- .AlternateSetting = 0,
- .TotalEndpoints = 0,
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_ControlSubclass,
- .Protocol = AUDIO_CSCP_ControlProtocol,
- .InterfaceStrIndex = NO_DESCRIPTOR},
- .Audio_ControlInterface_SPC =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = AUDIO_DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_Header,
- .ACSpecification = VERSION_BCD(1, 0, 0),
- .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t),
- .InCollection = 1,
- .InterfaceNumber = AS_INTERFACE,
- },
- .Audio_StreamInterface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = AS_INTERFACE,
- .AlternateSetting = 0,
- .TotalEndpoints = 2,
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_MIDIStreamingSubclass,
- .Protocol = AUDIO_CSCP_StreamingProtocol,
- .InterfaceStrIndex = NO_DESCRIPTOR},
- .Audio_StreamInterface_SPC = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_General, .AudioSpecification = VERSION_BCD(1, 0, 0), .TotalLength = offsetof(USB_Descriptor_Configuration_t, MIDI_Out_Jack_Endpoint_SPC) + sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t) - offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC)},
- .MIDI_In_Jack_Emb = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, .JackType = MIDI_JACKTYPE_Embedded, .JackID = 0x01, .JackStrIndex = NO_DESCRIPTOR},
- .MIDI_In_Jack_Ext = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, .JackType = MIDI_JACKTYPE_External, .JackID = 0x02, .JackStrIndex = NO_DESCRIPTOR},
- .MIDI_Out_Jack_Emb = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, .JackType = MIDI_JACKTYPE_Embedded, .JackID = 0x03, .NumberOfPins = 1, .SourceJackID = {0x02}, .SourcePinID = {0x01}, .JackStrIndex = NO_DESCRIPTOR},
- .MIDI_Out_Jack_Ext = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, .JackType = MIDI_JACKTYPE_External, .JackID = 0x04, .NumberOfPins = 1, .SourceJackID = {0x01}, .SourcePinID = {0x01}, .JackStrIndex = NO_DESCRIPTOR},
- .MIDI_In_Jack_Endpoint = {.Endpoint = {.Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, .EndpointAddress = MIDI_STREAM_OUT_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MIDI_STREAM_EPSIZE, .PollingIntervalMS = 0x05},
-
- .Refresh = 0,
- .SyncEndpointNumber = 0},
- .MIDI_In_Jack_Endpoint_SPC = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = AUDIO_DSUBTYPE_CSEndpoint_General}, .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, .TotalEmbeddedJacks = 0x01, .AssociatedJackID = {0x01}},
- .MIDI_Out_Jack_Endpoint = {.Endpoint = {.Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, .EndpointAddress = MIDI_STREAM_IN_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MIDI_STREAM_EPSIZE, .PollingIntervalMS = 0x05},
-
- .Refresh = 0,
- .SyncEndpointNumber = 0},
- .MIDI_Out_Jack_Endpoint_SPC = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = AUDIO_DTYPE_CSEndpoint}, .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, .TotalEmbeddedJacks = 0x01, .AssociatedJackID = {0x03}},
+ /*
+ * MIDI
+ */
+ .Audio_Interface_Association = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_Association_t),
+ .Type = DTYPE_InterfaceAssociation
+ },
+ .FirstInterfaceIndex = AC_INTERFACE,
+ .TotalInterfaces = 2,
+ .Class = AUDIO_CSCP_AudioClass,
+ .SubClass = AUDIO_CSCP_ControlSubclass,
+ .Protocol = AUDIO_CSCP_ControlProtocol,
+ .IADStrIndex = NO_DESCRIPTOR,
+ },
+ .Audio_ControlInterface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = AC_INTERFACE,
+ .AlternateSetting = 0,
+ .TotalEndpoints = 0,
+ .Class = AUDIO_CSCP_AudioClass,
+ .SubClass = AUDIO_CSCP_ControlSubclass,
+ .Protocol = AUDIO_CSCP_ControlProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Audio_ControlInterface_SPC = {
+ .Header = {
+ .Size = sizeof(USB_Audio_Descriptor_Interface_AC_t),
+ .Type = AUDIO_DTYPE_CSInterface
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSInterface_Header,
+ .ACSpecification = VERSION_BCD(1, 0, 0),
+ .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t),
+ .InCollection = 1,
+ .InterfaceNumber = AS_INTERFACE,
+ },
+ .Audio_StreamInterface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = AS_INTERFACE,
+ .AlternateSetting = 0,
+ .TotalEndpoints = 2,
+ .Class = AUDIO_CSCP_AudioClass,
+ .SubClass = AUDIO_CSCP_MIDIStreamingSubclass,
+ .Protocol = AUDIO_CSCP_StreamingProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .Audio_StreamInterface_SPC = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t),
+ .Type = AUDIO_DTYPE_CSInterface
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSInterface_General,
+ .AudioSpecification = VERSION_BCD(1, 0, 0),
+ .TotalLength = offsetof(USB_Descriptor_Configuration_t, MIDI_Out_Jack_Endpoint_SPC) + sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t) - offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC)
+ },
+ .MIDI_In_Jack_Emb = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_InputJack_t),
+ .Type = AUDIO_DTYPE_CSInterface
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
+ .JackType = MIDI_JACKTYPE_Embedded,
+ .JackID = 0x01,
+ .JackStrIndex = NO_DESCRIPTOR
+ },
+ .MIDI_In_Jack_Ext = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_InputJack_t),
+ .Type = AUDIO_DTYPE_CSInterface
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
+ .JackType = MIDI_JACKTYPE_External,
+ .JackID = 0x02,
+ .JackStrIndex = NO_DESCRIPTOR
+ },
+ .MIDI_Out_Jack_Emb = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_OutputJack_t),
+ .Type = AUDIO_DTYPE_CSInterface
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
+ .JackType = MIDI_JACKTYPE_Embedded,
+ .JackID = 0x03,
+ .NumberOfPins = 1,
+ .SourceJackID = {0x02},
+ .SourcePinID = {0x01},
+ .JackStrIndex = NO_DESCRIPTOR
+ },
+ .MIDI_Out_Jack_Ext = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_OutputJack_t),
+ .Type = AUDIO_DTYPE_CSInterface
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
+ .JackType = MIDI_JACKTYPE_External,
+ .JackID = 0x04,
+ .NumberOfPins = 1,
+ .SourceJackID = {0x01},
+ .SourcePinID = {0x01},
+ .JackStrIndex = NO_DESCRIPTOR
+ },
+ .MIDI_In_Jack_Endpoint = {
+ .Endpoint = {
+ .Header = {
+ .Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = MIDI_STREAM_OUT_EPADDR,
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = MIDI_STREAM_EPSIZE,
+ .PollingIntervalMS = 0x05
+ },
+ .Refresh = 0,
+ .SyncEndpointNumber = 0
+ },
+ .MIDI_In_Jack_Endpoint_SPC = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t),
+ .Type = AUDIO_DTYPE_CSEndpoint
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
+ .TotalEmbeddedJacks = 0x01,
+ .AssociatedJackID = {0x01}
+ },
+ .MIDI_Out_Jack_Endpoint = {
+ .Endpoint = {
+ .Header = {
+ .Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = MIDI_STREAM_IN_EPADDR,
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = MIDI_STREAM_EPSIZE,
+ .PollingIntervalMS = 0x05
+ },
+ .Refresh = 0,
+ .SyncEndpointNumber = 0
+ },
+ .MIDI_Out_Jack_Endpoint_SPC = {
+ .Header = {
+ .Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t),
+ .Type = AUDIO_DTYPE_CSEndpoint
+ },
+ .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
+ .TotalEmbeddedJacks = 0x01,
+ .AssociatedJackID = {0x03}
+ },
#endif
#ifdef VIRTSER_ENABLE
- /*
- * Virtual Serial
- */
- .CDC_Interface_Association =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
- .FirstInterfaceIndex = CCI_INTERFACE,
- .TotalInterfaces = 2,
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
- .IADStrIndex = NO_DESCRIPTOR,
- },
- .CDC_CCI_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = CCI_INTERFACE, .AlternateSetting = 0, .TotalEndpoints = 1, .Class = CDC_CSCP_CDCClass, .SubClass = CDC_CSCP_ACMSubclass, .Protocol = CDC_CSCP_ATCommandProtocol, .InterfaceStrIndex = NO_DESCRIPTOR},
- .CDC_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = CDC_DTYPE_CSInterface},
- .Subtype = 0x00,
- .CDCSpecification = VERSION_BCD(1, 1, 0),
- },
- .CDC_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = CDC_DTYPE_CSInterface},
- .Subtype = 0x02,
- .Capabilities = 0x02,
- },
- .CDC_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = CDC_DTYPE_CSInterface},
- .Subtype = 0x06,
- .MasterInterfaceNumber = CCI_INTERFACE,
- .SlaveInterfaceNumber = CDI_INTERFACE,
- },
- .CDC_NotificationEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = CDC_NOTIFICATION_EPADDR, .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_NOTIFICATION_EPSIZE, .PollingIntervalMS = 0xFF},
- .CDC_DCI_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = CDI_INTERFACE, .AlternateSetting = 0, .TotalEndpoints = 2, .Class = CDC_CSCP_CDCDataClass, .SubClass = CDC_CSCP_NoDataSubclass, .Protocol = CDC_CSCP_NoDataProtocol, .InterfaceStrIndex = NO_DESCRIPTOR},
- .CDC_DataOutEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = CDC_OUT_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_EPSIZE, .PollingIntervalMS = 0x05},
- .CDC_DataInEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = CDC_IN_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_EPSIZE, .PollingIntervalMS = 0x05},
+ /*
+ * Virtual Serial
+ */
+ .CDC_Interface_Association = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_Association_t),
+ .Type = DTYPE_InterfaceAssociation
+ },
+ .FirstInterfaceIndex = CCI_INTERFACE,
+ .TotalInterfaces = 2,
+ .Class = CDC_CSCP_CDCClass,
+ .SubClass = CDC_CSCP_ACMSubclass,
+ .Protocol = CDC_CSCP_ATCommandProtocol,
+ .IADStrIndex = NO_DESCRIPTOR,
+ },
+ .CDC_CCI_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = CCI_INTERFACE,
+ .AlternateSetting = 0,
+ .TotalEndpoints = 1,
+ .Class = CDC_CSCP_CDCClass,
+ .SubClass = CDC_CSCP_ACMSubclass,
+ .Protocol = CDC_CSCP_ATCommandProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .CDC_Functional_Header = {
+ .Header = {
+ .Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t),
+ .Type = CDC_DTYPE_CSInterface
+ },
+ .Subtype = 0x00,
+ .CDCSpecification = VERSION_BCD(1, 1, 0),
+ },
+ .CDC_Functional_ACM = {
+ .Header = {
+ .Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t),
+ .Type = CDC_DTYPE_CSInterface
+ },
+ .Subtype = 0x02,
+ .Capabilities = 0x02,
+ },
+ .CDC_Functional_Union = {
+ .Header = {
+ .Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t),
+ .Type = CDC_DTYPE_CSInterface
+ },
+ .Subtype = 0x06,
+ .MasterInterfaceNumber = CCI_INTERFACE,
+ .SlaveInterfaceNumber = CDI_INTERFACE,
+ },
+ .CDC_NotificationEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = CDC_NOTIFICATION_EPADDR,
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,
+ .PollingIntervalMS = 0xFF
+ },
+ .CDC_DCI_Interface = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Interface_t),
+ .Type = DTYPE_Interface
+ },
+ .InterfaceNumber = CDI_INTERFACE,
+ .AlternateSetting = 0,
+ .TotalEndpoints = 2,
+ .Class = CDC_CSCP_CDCDataClass,
+ .SubClass = CDC_CSCP_NoDataSubclass,
+ .Protocol = CDC_CSCP_NoDataProtocol,
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+ .CDC_DataOutEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = CDC_OUT_EPADDR,
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CDC_EPSIZE,
+ .PollingIntervalMS = 0x05
+ },
+ .CDC_DataInEndpoint = {
+ .Header = {
+ .Size = sizeof(USB_Descriptor_Endpoint_t),
+ .Type = DTYPE_Endpoint
+ },
+ .EndpointAddress = CDC_IN_EPADDR,
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CDC_EPSIZE,
+ .PollingIntervalMS = 0x05
+ },
#endif
};
/*
* String descriptors
*/
-const USB_Descriptor_String_t PROGMEM LanguageString = {.Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, .UnicodeString = {LANGUAGE_ID_ENG}};
+const USB_Descriptor_String_t PROGMEM LanguageString = {
+ .Header = {
+ .Size = USB_STRING_LEN(1),
+ .Type = DTYPE_String
+ },
+ .UnicodeString = {LANGUAGE_ID_ENG}
+};
-const USB_Descriptor_String_t PROGMEM ManufacturerString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator
- .Type = DTYPE_String},
- .UnicodeString = LSTR(MANUFACTURER)};
+const USB_Descriptor_String_t PROGMEM ManufacturerString = {
+ .Header = {
+ .Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator
+ .Type = DTYPE_String
+ },
+ .UnicodeString = LSTR(MANUFACTURER)
+};
-const USB_Descriptor_String_t PROGMEM ProductString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator
- .Type = DTYPE_String},
- .UnicodeString = LSTR(PRODUCT)};
+const USB_Descriptor_String_t PROGMEM ProductString = {
+ .Header = {
+ .Size = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator
+ .Type = DTYPE_String
+ },
+ .UnicodeString = LSTR(PRODUCT)
+};
#ifndef SERIAL_NUMBER
# define SERIAL_NUMBER 0
#endif
-const USB_Descriptor_String_t PROGMEM SerialNumberString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER)) - 1), // Subtract 1 for null terminator
- .Type = DTYPE_String},
- .UnicodeString = LSTR(SERIAL_NUMBER)};
+const USB_Descriptor_String_t PROGMEM SerialNumberString = {
+ .Header = {
+ .Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER)) - 1), // Subtract 1 for null terminator
+ .Type = DTYPE_String
+ },
+ .UnicodeString = LSTR(SERIAL_NUMBER)
+};
+
+// clang-format on
/**
* This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index 3719b7aa0f..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;
@@ -345,6 +334,15 @@ const PROGMEM uchar mouse_hid_report[] = {
0xc0, // END_COLLECTION
};
+#ifndef USB_MAX_POWER_CONSUMPTION
+# define USB_MAX_POWER_CONSUMPTION 500
+#endif
+
+// TODO: change this to 10ms to match LUFA
+#ifndef USB_POLLING_INTERVAL_MS
+# define USB_POLLING_INTERVAL_MS 1
+#endif
+
/*
* Descriptor for compite device: Keyboard + Mouse
*
@@ -366,7 +364,7 @@ const PROGMEM char usbDescriptorConfiguration[] = {
# else
(1 << 7), /* attributes */
# endif
- USB_CFG_MAX_BUS_POWER / 2, /* max USB current in 2mA units */
+ USB_MAX_POWER_CONSUMPTION / 2, /* max USB current in 2mA units */
/*
* Keyboard interface
@@ -393,7 +391,7 @@ const PROGMEM char usbDescriptorConfiguration[] = {
(char)0x81, /* IN endpoint number 1 */
0x03, /* attrib: Interrupt endpoint */
8, 0, /* maximum packet size */
- USB_CFG_INTR_POLL_INTERVAL, /* in ms */
+ USB_POLLING_INTERVAL_MS, /* in ms */
# endif
/*
@@ -424,7 +422,7 @@ const PROGMEM char usbDescriptorConfiguration[] = {
(char)(0x80 | USB_CFG_EP3_NUMBER), /* IN endpoint number 3 */
0x03, /* attrib: Interrupt endpoint */
8, 0, /* maximum packet size */
- USB_CFG_INTR_POLL_INTERVAL, /* in ms */
+ USB_POLLING_INTERVAL_MS, /* in ms */
# endif
};
#endif
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/drashna/config.h b/users/drashna/config.h
index a0f92d8f38..6fafff8604 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -7,7 +7,7 @@
#define USB_POLLING_INTERVAL_MS 1
#ifdef AUDIO_ENABLE
-# if __GNUC__ > 7
+# if __GNUC__ > 5
# if __has_include("drashna_song_list.h")
# include "drashna_song_list.h"
# endif // if file exists
@@ -29,11 +29,15 @@
#endif // !AUDIO_ENABLE
#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_SLEEP
# undef RGBLIGHT_ANIMATIONS
-# define RGBLIGHT_EFFECT_BREATHING
-# define RGBLIGHT_EFFECT_SNAKE
-# define RGBLIGHT_EFFECT_KNIGHT
+# if defined(__AVR__) && !defined(__AVR_AT90USB1286__)
+# define RGBLIGHT_SLEEP
+# define RGBLIGHT_EFFECT_BREATHING
+# define RGBLIGHT_EFFECT_SNAKE
+# define RGBLIGHT_EFFECT_KNIGHT
+# else
+# define RGBLIGHT_ANIMATIONS
+# endif
#endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index b48d837d00..71779a6215 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -25,8 +25,6 @@ userspace_config_t userspace_config;
# define DRASHNA_UNICODE_MODE 2
#endif
-
-
bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed) {
static uint16_t this_timer;
if (pressed) {
@@ -73,19 +71,22 @@ void bootmagic_lite(void) {
}
}
+__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
+
+void keyboard_pre_init_user(void) {
+ userspace_config.raw = eeconfig_read_user();
+ keyboard_pre_init_keymap();
+}
// Add reconfigurable functions here, for keymap customization
// This allows for a global, userspace functions, and continued
// customization of the keymap. Use _keymap instead of _user
// functions in the keymaps
-__attribute__((weak))
-void matrix_init_keymap(void) {}
+__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) {
- userspace_config.raw = eeconfig_read_user();
-
-#ifdef BOOTLOADER_CATERINA
+#if defined(BOOTLOADER_CATERINA) && defined(__AVR__)
DDRD &= ~(1 << 5);
PORTD &= ~(1 << 5);
@@ -100,8 +101,7 @@ void matrix_init_user(void) {
matrix_init_keymap();
}
-__attribute__((weak))
-void keyboard_post_init_keymap(void) {}
+__attribute__((weak)) void keyboard_post_init_keymap(void) {}
void keyboard_post_init_user(void) {
#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
@@ -110,10 +110,9 @@ void keyboard_post_init_user(void) {
keyboard_post_init_keymap();
}
-__attribute__((weak))
-void shutdown_keymap(void) {}
+__attribute__((weak)) void shutdown_keymap(void) {}
- void rgb_matrix_update_pwm_buffers(void);
+void rgb_matrix_update_pwm_buffers(void);
void shutdown_user(void) {
#ifdef RGBLIGHT_ENABLE
@@ -122,29 +121,22 @@ void shutdown_user(void) {
rgblight_setrgb_red();
#endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 );
+ rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
rgb_matrix_update_pwm_buffers();
#endif // RGB_MATRIX_ENABLE
shutdown_keymap();
}
-__attribute__((weak))
-void suspend_power_down_keymap(void) {}
+__attribute__((weak)) void suspend_power_down_keymap(void) {}
-void suspend_power_down_user(void) {
- suspend_power_down_keymap();
-}
+void suspend_power_down_user(void) { suspend_power_down_keymap(); }
-__attribute__((weak))
-void suspend_wakeup_init_keymap(void) {}
+__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
-void suspend_wakeup_init_user(void) {
- suspend_wakeup_init_keymap();
-}
+void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); }
-__attribute__((weak))
-void matrix_scan_keymap(void) {}
+__attribute__((weak)) void matrix_scan_keymap(void) {}
// No global matrix scan code, so just run keymap's matrix
// scan function
@@ -166,8 +158,7 @@ void matrix_scan_user(void) {
matrix_scan_keymap();
}
-__attribute__((weak))
-layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
+__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
// on layer change, no matter where the change was initiated
// Then runs keymap's layer change check
@@ -179,32 +170,27 @@ layer_state_t layer_state_set_user(layer_state_t state) {
return layer_state_set_keymap(state);
}
-__attribute__((weak))
-layer_state_t default_layer_state_set_keymap(layer_state_t state) { return 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) {
state = default_layer_state_set_keymap(state);
#if 0
-#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
state = default_layer_state_set_rgb(state);
# endif // RGBLIGHT_ENABLE
#endif
return state;
}
-__attribute__((weak))
-void led_set_keymap(uint8_t usb_led) {}
+__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
// Any custom LED code goes here.
// So far, I only have keyboard specific code,
// So nothing goes here.
-void led_set_user(uint8_t usb_led) {
- led_set_keymap(usb_led);
-}
+void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); }
-__attribute__((weak))
-void eeconfig_init_keymap(void) {}
+__attribute__((weak)) void eeconfig_init_keymap(void) {}
void eeconfig_init_user(void) {
userspace_config.raw = 0;
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 0ccb7614fa..0ba1817604 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -16,7 +16,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
-#include "quantum.h"
+#include QMK_KEYBOARD_H
+
#include "version.h"
#include "eeprom.h"
#include "wrappers.h"
@@ -62,6 +63,7 @@ void led_set_keymap(uint8_t usb_led);
void eeconfig_init_keymap(void);
bool hasAllBitsInMask(uint8_t value, uint8_t mask);
+// clang-format off
typedef union {
uint32_t raw;
struct {
@@ -73,6 +75,7 @@ typedef union {
bool rgb_matrix_idle_anim :1;
};
} userspace_config_t;
+// clang-format on
extern userspace_config_t userspace_config;
diff --git a/users/drashna/font_gmk_bad.h b/users/drashna/font_gmk_bad.h
new file mode 100644
index 0000000000..c1c5c390a9
--- /dev/null
+++ b/users/drashna/font_gmk_bad.h
@@ -0,0 +1,241 @@
+#pragma once
+
+#ifdef __AVR__
+# include <avr/io.h>
+# include <avr/pgmspace.h>
+#elif defined(ESP8266)
+# include <pgmspace.h>
+#else
+# define PROGMEM
+#endif
+
+// 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, 0x10, 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,
+ 0x80, 0xC0, 0xE0, 0xF0, 0xF0, 0x70,
+ 0x38, 0x38, 0x38, 0x78, 0x70, 0xF0,
+ 0xE0, 0xE0, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xF0, 0xF8,
+ 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x80, 0xE0, 0xF8, 0xF8, 0xF8, 0xF8,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x00,
+ 0x80, 0xE0, 0xF0, 0xF8, 0x78, 0x38,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xF8, 0xF8, 0xF8, 0x38, 0x38,
+ 0x38, 0xF8, 0xF0, 0xF0, 0xE0, 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, 0x80, 0xFC, 0xFC,
+ 0xFC, 0x1C, 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, 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, 0x3C,
+ 0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x00,
+ 0x00, 0x38, 0x38, 0xB8, 0xB8, 0xF9,
+ 0xF9, 0xF8, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x1F,
+ 0x01, 0x3F, 0xFF, 0xFF, 0xF0, 0xFE,
+ 0x7F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x7F,
+ 0xFF, 0xFF, 0xF3, 0xC1, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xFF, 0xFF, 0xFF, 0x3F, 0x1C, 0x1C,
+ 0x9C, 0xFF, 0xFF, 0xF3, 0xE1, 0x00,
+ 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE,
+ 0xFF, 0x0F, 0x07, 0x07, 0x8E, 0xFF,
+ 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00,
+ 0x00, 0xF0, 0xFC, 0xFE, 0xFF, 0x8F,
+ 0x07, 0x07, 0x8E, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xC0, 0x80, 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,
+ 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, 0x01, 0x03, 0x03, 0x03, 0x07,
+ 0x07, 0x07, 0x07, 0x03, 0x03, 0x03,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x07, 0x07, 0x07, 0x01, 0x00,
+ 0x00, 0x00, 0x07, 0x07, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x07, 0x07, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x07, 0x07, 0x07, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x03, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x07,
+ 0x07, 0x07, 0x07, 0x03, 0x07, 0x07,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x07, 0x07, 0x07,
+ 0x07, 0x03, 0x07, 0x07, 0x07, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x07, 0x07, 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,
+};
diff --git a/users/drashna/hue_manitee_font.h b/users/drashna/hue_manitee_font.h
new file mode 100644
index 0000000000..72d50f7a6a
--- /dev/null
+++ b/users/drashna/hue_manitee_font.h
@@ -0,0 +1,241 @@
+#pragma once
+
+#ifdef __AVR__
+# include <avr/io.h>
+# include <avr/pgmspace.h>
+#elif defined(ESP8266)
+# include <pgmspace.h>
+#else
+# define PROGMEM
+#endif
+
+// 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, 0x10, 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, 0x80, 0xC0, 0xC0,
+ 0x90, 0x70, 0xE8, 0xA8, 0xE4, 0xC4,
+ 0xC4, 0xA0, 0xE4, 0xB0, 0xDC, 0xE4,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C,
+ 0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8,
+ 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,
+ 0xF8, 0xF8, 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,
+ 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, 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, 0xF0,
+ 0xFC, 0xF6, 0xF7, 0xEF, 0xFF, 0x87,
+ 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x07, 0x1F, 0x1F, 0x19, 0x15,
+ 0xF7, 0x16, 0x1A, 0x1B, 0x16, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x0C, 0x33, 0x33,
+ 0x33, 0x33, 0x33, 0x33, 0xC0, 0xC0,
+ 0x00, 0x00, 0x03, 0x03, 0xFF, 0xFF,
+ 0x03, 0x03, 0x00, 0x00, 0xC0, 0xC0,
+ 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0xFC,
+ 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFC,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0x30, 0x30, 0xCC, 0xCC,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 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, 0x01,
+ 0x03, 0x07, 0x07, 0x07, 0x07, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x07,
+ 0x03, 0x00, 0x00, 0x02, 0x04, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 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,
+ 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/drashna/process_records.c b/users/drashna/process_records.c
index 6eb21d2f27..2f79ad11cc 100644
--- a/users/drashna/process_records.c
+++ b/users/drashna/process_records.c
@@ -2,11 +2,9 @@
uint16_t copy_paste_timer;
-__attribute__((weak))
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
+__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; }
+__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; }
// Defines actions tor my global custom keycodes. Defined in drashna.h file
// Then runs the _keymap's record handier if not processed here
@@ -23,7 +21,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_QWERTY ... KC_WORKMAN:
if (record->event.pressed) {
- uint8_t mods = mod_config(get_mods()|get_oneshot_mods());
+ uint8_t mods = mod_config(get_mods() | get_oneshot_mods());
if (!mods) {
set_single_persistent_default_layer(keycode - KC_QWERTY);
} else if (mods & MOD_MASK_SHIFT) {
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
index a9af0566e3..52ec61c22d 100644
--- a/users/drashna/rgb_stuff.c
+++ b/users/drashna/rgb_stuff.c
@@ -12,9 +12,9 @@ void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight
#if defined(RGB_MATRIX_ENABLE)
static uint32_t hypno_timer;
# if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd)
-# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
# else
-# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
+# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
# endif
#endif
@@ -23,68 +23,68 @@ static uint32_t hypno_timer;
* This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up.
*/
#ifdef RGBLIGHT_ENABLE
-#ifdef INDICATOR_LIGHTS
+# ifdef INDICATOR_LIGHTS
void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
- if (userspace_config.rgb_layer_change && biton32(layer_state) == 0) {
+ 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
+# ifdef SHFT_LED1
rgblight_sethsv_at(120, 255, 255, SHFT_LED1);
-# endif // SHFT_LED1
-# ifdef SHFT_LED2
+# endif // SHFT_LED1
+# ifdef SHFT_LED2
rgblight_sethsv_at(120, 255, 255, SHFT_LED2);
-# endif // SHFT_LED2
+# endif // SHFT_LED2
} else {
-# ifdef SHFT_LED1
+# ifdef SHFT_LED1
rgblight_sethsv_default_helper(SHFT_LED1);
-# endif // SHFT_LED1
-# ifdef SHFT_LED2
+# endif // SHFT_LED1
+# ifdef SHFT_LED2
rgblight_sethsv_default_helper(SHFT_LED2);
-# endif // SHFT_LED2
+# endif // SHFT_LED2
}
if ((this_mod | this_osm) & MOD_MASK_CTRL) {
-# ifdef CTRL_LED1
+# ifdef CTRL_LED1
rgblight_sethsv_at(0, 255, 255, CTRL_LED1);
-# endif // CTRL_LED1
-# ifdef CTRL_LED2
+# endif // CTRL_LED1
+# ifdef CTRL_LED2
rgblight_sethsv_at(0, 255, 255, CTRL_LED2);
-# endif // CTRL_LED2
+# endif // CTRL_LED2
} else {
-# ifdef CTRL_LED1
+# ifdef CTRL_LED1
rgblight_sethsv_default_helper(CTRL_LED1);
-# endif // CTRL_LED1
-# ifdef CTRL_LED2
+# endif // CTRL_LED1
+# ifdef CTRL_LED2
rgblight_sethsv_default_helper(CTRL_LED2);
-# endif // CTRL_LED2
+# endif // CTRL_LED2
}
if ((this_mod | this_osm) & MOD_MASK_GUI) {
-# ifdef GUI_LED1
+# ifdef GUI_LED1
rgblight_sethsv_at(51, 255, 255, GUI_LED1);
-# endif // GUI_LED1
-# ifdef GUI_LED2
+# endif // GUI_LED1
+# ifdef GUI_LED2
rgblight_sethsv_at(51, 255, 255, GUI_LED2);
-# endif // GUI_LED2
+# endif // GUI_LED2
} else {
-# ifdef GUI_LED1
+# ifdef GUI_LED1
rgblight_sethsv_default_helper(GUI_LED1);
-# endif // GUI_LED1
-# ifdef GUI_LED2
+# endif // GUI_LED1
+# ifdef GUI_LED2
rgblight_sethsv_default_helper(GUI_LED2);
-# endif // GUI_LED2
+# endif // GUI_LED2
}
if ((this_mod | this_osm) & MOD_MASK_ALT) {
-# ifdef ALT_LED1
+# ifdef ALT_LED1
rgblight_sethsv_at(240, 255, 255, ALT_LED1);
-# endif // ALT_LED1
-# ifdef GUI_LED2
+# endif // ALT_LED1
+# ifdef GUI_LED2
rgblight_sethsv_at(240, 255, 255, ALT_LED2);
-# endif // GUI_LED2
+# endif // GUI_LED2
} else {
-# ifdef GUI_LED1
+# ifdef GUI_LED1
rgblight_sethsv_default_helper(ALT_LED1);
-# endif // GUI_LED1
-# ifdef GUI_LED2
+# endif // GUI_LED1
+# ifdef GUI_LED2
rgblight_sethsv_default_helper(ALT_LED2);
-# endif // GUI_LED2
+# endif // GUI_LED2
}
}
}
@@ -95,9 +95,9 @@ void matrix_scan_indicator(void) {
set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
}
}
-#endif // INDICATOR_LIGHTS
+# endif // INDICATOR_LIGHTS
-#ifdef RGBLIGHT_TWINKLE
+# ifdef RGBLIGHT_TWINKLE
static rgblight_fadeout lights[RGBLED_NUM];
__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; }
@@ -105,40 +105,40 @@ __attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) {
/* 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
+# ifdef INDICATOR_LIGHTS
+# ifdef SHFT_LED1
case SHFT_LED1:
return true;
-# endif // SHFT_LED1
-# ifdef SHFT_LED2
+# endif // SHFT_LED1
+# ifdef SHFT_LED2
case SHFT_LED2:
return true;
-# endif // SHFT_LED2
-# ifdef CTRL_LED1
+# endif // SHFT_LED2
+# ifdef CTRL_LED1
case CTRL_LED1:
return true;
-# endif // CTRL_LED1
-# ifdef CTRL_LED2
+# endif // CTRL_LED1
+# ifdef CTRL_LED2
case CTRL_LED2:
return true;
-# endif // CTRL_LED2
-# ifdef GUI_LED1
+# endif // CTRL_LED2
+# ifdef GUI_LED1
case GUI_LED1:
return true;
-# endif // GUI_LED1
-# ifdef GUI_LED2
+# endif // GUI_LED1
+# ifdef GUI_LED2
case GUI_LED2:
return true;
-# endif // GUI_LED2
-# ifdef ALT_LED1
+# endif // GUI_LED2
+# ifdef ALT_LED1
case ALT_LED1:
return true;
-# endif // ALT_LED1
-# ifdef ALT_LED2
+# endif // ALT_LED1
+# ifdef ALT_LED2
case ALT_LED2:
return true;
-# endif // ALT_LED2
-# endif // INDICATOR_LIGHTS
+# endif // ALT_LED2
+# endif // INDICATOR_LIGHTS
default:
return rgblight_twinkle_is_led_used_keymap(index);
}
@@ -154,19 +154,19 @@ void scan_rgblight_fadeout(void) { // Don't effing change this function .... rg
if (light->life) {
light->life -= 1;
- if (biton32(layer_state) == 0) {
+ 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 && biton32(layer_state) == 0) {
+ if (light->enabled && get_highest_layer(layer_state) == 0) {
rgblight_sethsv_default_helper(light_index);
}
litup = light->enabled = false;
}
}
}
- if (litup && biton32(layer_state) == 0) {
+ if (litup && get_highest_layer(layer_state) == 0) {
rgblight_set();
}
}
@@ -211,8 +211,8 @@ void start_rgb_light(void) {
rgblight_sethsv_at(light->hue, 255, light->life, light_index);
}
-#endif
-#endif // RGBLIGHT_ENABLE
+# endif
+#endif // RGBLIGHT_ENABLE
bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
uint16_t temp_keycode = keycode;
@@ -259,7 +259,9 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
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); }
+ if (userspace_config.rgb_matrix_idle_anim) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
+ }
}
#endif
break;
@@ -281,7 +283,9 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
is_eeprom_updated = true;
}
#endif
- if (is_eeprom_updated) { eeconfig_update_user(userspace_config.raw); }
+ if (is_eeprom_updated) {
+ eeconfig_update_user(userspace_config.raw);
+ }
}
break;
}
@@ -290,7 +294,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
void keyboard_post_init_rgb(void) {
#if defined(RGBLIGHT_ENABLE)
-# if defined(RGBLIGHT_STARTUP_ANIMATION)
+# if defined(RGBLIGHT_STARTUP_ANIMATION)
bool is_enabled = rgblight_config.enable;
if (userspace_config.rgb_layer_change) {
rgblight_enable_noeeprom();
@@ -309,13 +313,13 @@ void keyboard_post_init_rgb(void) {
rgblight_disable_noeeprom();
}
-# endif
+# endif
layer_state_set_user(layer_state);
#endif
#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
- if (userspace_config.rgb_matrix_idle_anim) {
- rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
- }
+ if (userspace_config.rgb_matrix_idle_anim) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
+ }
#endif
}
@@ -337,67 +341,70 @@ void matrix_scan_rgb(void) {
#endif
}
+#ifdef RGBLIGHT_ENABLE
+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);
+}
+#endif
+
layer_state_t layer_state_set_rgb(layer_state_t state) {
#ifdef RGBLIGHT_ENABLE
if (userspace_config.rgb_layer_change) {
- switch (biton32(state)) {
+ switch (get_highest_layer(state)) {
case _MACROS:
- rgblight_sethsv_noeeprom_orange();
- userspace_config.is_overwatch ? rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2) : rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 3);
+ rgblight_set_hsv_and_mode(HSV_ORANGE, userspace_config.is_overwatch ? RGBLIGHT_MODE_SNAKE + 2 : RGBLIGHT_MODE_SNAKE + 3);
break;
case _MEDIA:
- rgblight_sethsv_noeeprom_chartreuse();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 1);
+ rgblight_set_hsv_and_mode(HSV_CHARTREUSE, RGBLIGHT_MODE_KNIGHT + 1);
break;
case _GAMEPAD:
- rgblight_sethsv_noeeprom_orange();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2);
+ rgblight_set_hsv_and_mode(HSV_ORANGE, RGBLIGHT_MODE_SNAKE + 2);
break;
case _DIABLO:
- rgblight_sethsv_noeeprom_red();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
+ rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_BREATHING + 3);
break;
case _RAISE:
- rgblight_sethsv_noeeprom_yellow();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
+ rgblight_set_hsv_and_mode(HSV_YELLOW, RGBLIGHT_MODE_BREATHING + 3);
break;
case _LOWER:
- rgblight_sethsv_noeeprom_green();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
+ rgblight_set_hsv_and_mode(HSV_GREEN, RGBLIGHT_MODE_BREATHING + 3);
break;
case _ADJUST:
- rgblight_sethsv_noeeprom_red();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+ rgblight_set_hsv_and_mode(HSV_RED, RGBLIGHT_MODE_KNIGHT + 2);
break;
default: // for any other layers, or the default layer
- switch (biton32(default_layer_state)) {
+ {
+ 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_sethsv_noeeprom_magenta();
+ rgblight_set_hsv_and_mode(HSV_MAGENTA, mode);
break;
case _DVORAK:
- rgblight_sethsv_noeeprom_springgreen();
+ rgblight_set_hsv_and_mode(HSV_SPRINGGREEN, mode);
break;
case _WORKMAN:
- rgblight_sethsv_noeeprom_goldenrod();
+ rgblight_set_hsv_and_mode(HSV_GOLDENROD, mode);
break;
case _NORMAN:
- rgblight_sethsv_noeeprom_coral();
+ rgblight_set_hsv_and_mode(HSV_CORAL, mode);
break;
case _MALTRON:
- rgblight_sethsv_noeeprom_yellow();
+ rgblight_set_hsv_and_mode(HSV_YELLOW, mode);
break;
case _EUCALYN:
- rgblight_sethsv_noeeprom_pink();
+ rgblight_set_hsv_and_mode(HSV_PINK, mode);
break;
case _CARPLAX:
- rgblight_sethsv_noeeprom_blue();
+ rgblight_set_hsv_and_mode(HSV_BLUE, mode);
break;
default:
- rgblight_sethsv_noeeprom_cyan();
+ rgblight_set_hsv_and_mode(HSV_CYAN, mode);
break;
}
- biton32(state) == _MODS ? rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING) : rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); // if _MODS layer is on, then breath to denote it
break;
+ }
}
}
#endif // RGBLIGHT_ENABLE
@@ -408,6 +415,7 @@ layer_state_t layer_state_set_rgb(layer_state_t state) {
#ifdef RGB_MATRIX_ENABLE
# include "lib/lib8tion/lib8tion.h"
extern led_config_t g_led_config;
+
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) {
diff --git a/users/drashna/rgb_stuff.h b/users/drashna/rgb_stuff.h
index 7e34c93c11..50b73c1c3c 100644
--- a/users/drashna/rgb_stuff.h
+++ b/users/drashna/rgb_stuff.h
@@ -20,13 +20,13 @@ layer_state_t layer_state_set_rgb(layer_state_t state);
layer_state_t default_layer_state_set_rgb(layer_state_t state);
#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_TWINKLE)
-void scan_rgblight_fadeout(void);
+void scan_rgblight_fadeout(void);
#endif
#if defined(RGBLIGHT_ENABLE)
-void rgblight_sethsv_default_helper(uint8_t index);
+void rgblight_sethsv_default_helper(uint8_t index);
#endif
#ifdef RGB_MATRIX_ENABLE
-void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+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);
#endif
diff --git a/users/drashna/rgblight_breathe_table.h b/users/drashna/rgblight_breathe_table.h
index 05d347fcd3..4c6ae38faa 100644
--- a/users/drashna/rgblight_breathe_table.h
+++ b/users/drashna/rgblight_breathe_table.h
@@ -1,9 +1,10 @@
#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 */
+/* #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,
@@ -110,7 +111,8 @@ const uint8_t rgblight_effect_breathe_table[] PROGMEM = {
0x4e, 0x48
#endif /* 64 bytes table */
};
+// clang-format on
-static const int table_scale = 256/sizeof(rgblight_effect_breathe_table);
+static const int table_scale = 256 / sizeof(rgblight_effect_breathe_table);
#endif /* RGBLIGHT_EFFECT_BREATHE_TABLE */
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 1b5a863850..882857fc86 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -1,16 +1,16 @@
SRC += drashna.c \
process_records.c
-LINK_TIME_OPTIMIZATION_ENABLE = yes
-SPACE_CADET_ENABLE = no
+LTO_ENABLE = yes
+SPACE_CADET_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
+ 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)
@@ -52,3 +52,10 @@ 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 \ No newline at end of file
diff --git a/users/drashna/template.c b/users/drashna/template.c
index d90e6bdecf..833447daac 100644
--- a/users/drashna/template.c
+++ b/users/drashna/template.c
@@ -1,124 +1,82 @@
#include "template.h"
-
// Add reconfigurable functions here, for keymap customization
// This allows for a global, userspace functions, and continued
// customization of the keymap. Use _keymap instead of _user
// functions in the keymaps
-__attribute__ ((weak))
-void matrix_init_keymap(void) {}
+__attribute__((weak)) void matrix_init_keymap(void) {}
// Call user matrix init, then call the keymap's init function
-void matrix_init_user(void) {
- matrix_init_keymap();
-}
+void matrix_init_user(void) { matrix_init_keymap(); }
-
-__attribute__ ((weak))
-void matrix_scan_keymap(void) {}
+__attribute__((weak)) void matrix_scan_keymap(void) {}
// No global matrix scan code, so just run keymap's matix
// scan function
-void matrix_scan_user(void) {
- matrix_scan_keymap();
-}
+void matrix_scan_user(void) { matrix_scan_keymap(); }
-
-__attribute__ ((weak))
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
+__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
// Defines actions tor my global custom keycodes. Defined in drashna.h file
// Then runs the _keymap's recod handier if not processed here,
// And use "NEWPLACEHOLDER" for new safe range
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
- switch (keycode) {
- case KC_MAKE:
- if (!record->event.pressed) {
- SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP
-#if (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU))
- ":dfu"
+ switch (keycode) {
+ case KC_MAKE:
+ if (!record->event.pressed) {
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP
+#if (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU))
+ ":dfu"
#elif defined(BOOTLOADER_HALFKAY)
- ":teensy"
+ ":teensy"
#elif defined(BOOTLOADER_CATERINA)
- ":avrdude"
+ ":avrdude"
#endif
- SS_TAP(X_ENTER));
+ SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
}
- return false;
- break;
-
- case VRSN:
- if (record->event.pressed) {
- SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- return false;
- break;
- }
- return process_record_keymap(keycode, record);
-}
-
-
-__attribute__ ((weak))
-layer_state_t layer_state_set_keymap (layer_state_t state) {
- return state;
-}
-
-layer_state_t layer_state_set_user (layer_state_t state) {
- return layer_state_set_keymap (state);
+ return process_record_keymap(keycode, record);
}
+__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
+layer_state_t layer_state_set_user(layer_state_t state) { return layer_state_set_keymap(state); }
-__attribute__ ((weak))
-void led_set_keymap(uint8_t usb_led) {}
-
-void led_set_user(uint8_t usb_led) {
- led_set_keymap(usb_led);
-}
-
+__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
+void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); }
-__attribute__ ((weak))
-void suspend_power_down_keymap(void) {}
-
-void suspend_power_down_user(void)
-{
- suspend_power_down_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) {}
+__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
-void suspend_wakeup_init_user(void)
-{
- suspend_wakeup_init_keymap();
- #ifdef KEYBOARD_ergodox_ez
- wait_ms(10);
- #endif
+void suspend_wakeup_init_user(void) {
+ suspend_wakeup_init_keymap();
+#ifdef KEYBOARD_ergodox_ez
+ wait_ms(10);
+#endif
}
+__attribute__((weak)) void startup_keymap(void) {}
-
-__attribute__ ((weak))
-void startup_keymap(void) {}
-
-void startup_user (void) {
- #ifdef RGBLIGHT_ENABLE
+void startup_user(void) {
+#ifdef RGBLIGHT_ENABLE
matrix_init_rgb();
- #endif //RGBLIGHT_ENABLE
- startup_keymap();
+#endif // RGBLIGHT_ENABLE
+ startup_keymap();
}
+__attribute__((weak)) void shutdown_keymap(void) {}
-
-__attribute__ ((weak))
-void shutdown_keymap(void) {}
-
-void shutdown_user (void) {
- shutdown_keymap();
-}
+void shutdown_user(void) { shutdown_keymap(); }
diff --git a/users/drashna/template.h b/users/drashna/template.h
index dd1c487604..178f96e220 100644
--- a/users/drashna/template.h
+++ b/users/drashna/template.h
@@ -1,7 +1,6 @@
-#ifndef USERSPACE
-#define USERSPACE
+#pragma once
-#include "quantum.h"
+#include QMK_KEYBOARD_H
#include "version.h"
#include "eeprom.h"
@@ -9,10 +8,8 @@
#define BASE 0
enum custom_keycodes {
- VRSN = SAFE_RANGE, // can always be here
- KC_MAKE,
- KC_RESET,
- NEWPLACEHOLDER //use "NEWPLACEHOLDER for keymap specific codes
+ VRSN = SAFE_RANGE, // can always be here
+ KC_MAKE,
+ KC_RESET,
+ NEWPLACEHOLDER // use "NEWPLACEHOLDER for keymap specific codes
};
-
-#endif
diff --git a/users/dshields/config.h b/users/dshields/config.h
index d92f787e41..aa10814763 100644
--- a/users/dshields/config.h
+++ b/users/dshields/config.h
@@ -6,6 +6,7 @@
#define ONESHOT_TIMEOUT 3000
#define RETRO_TAPPING
#define BACKLIGHT_BREATHING
+#define DYNAMIC_MACRO_NO_NESTING
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
diff --git a/users/dshields/dshields.c b/users/dshields/dshields.c
index bc88cae561..8f432a317c 100644
--- a/users/dshields/dshields.c
+++ b/users/dshields/dshields.c
@@ -1,12 +1,7 @@
#include "quantum.h"
#include "dshields.h"
-extern bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record);
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
if (keycode == KC_ESC && record->event.pressed) {
bool rc = true;
uint8_t mods = 0;
diff --git a/users/dshields/dshields.h b/users/dshields/dshields.h
index a65ccfea00..e1aa07a5db 100644
--- a/users/dshields/dshields.h
+++ b/users/dshields/dshields.h
@@ -1,10 +1,5 @@
#pragma once
-// dynamic macro keys
-#define DM_PLAY DYN_MACRO_PLAY1
-#define DM_STRT DYN_REC_START1
-#define DM_STOP DYN_REC_STOP
-
// one-shot layer keys
#define OSL_RSE OSL(RSE)
#define OSL_LWR OSL(LWR)
@@ -21,21 +16,27 @@
// mod-tap keys
#define MT_SPC SFT_T(KC_SPC)
+// LED/RGB controls
#ifdef KEYBOARD_planck_light
#define LGT_TOG RGB_TOG
#define LGT_MOD RGB_MOD
#define LGT_BRT _______
+ #define LGT_INC RGB_HUI
+ #define LGT_DEC RGB_HUD
#endif
#ifdef KEYBOARD_planck_rev3
#define LGT_TOG BL_TOGG
#define LGT_MOD BL_STEP
#define LGT_BRT BL_BRTG
+ #define LGT_INC BL_INC
+ #define LGT_DEC BL_DEC
#endif
#ifdef KEYBOARD_planck_rev6
#define LGT_TOG _______
#define LGT_MOD _______
#define LGT_BRT _______
+ #define LGT_INC _______
+ #define LGT_DEC _______
#endif
enum layers { DEF, LWR, RSE, FUN };
-enum keycodes { DYNAMIC_MACRO_RANGE = SAFE_RANGE };
diff --git a/users/dshields/rules.mk b/users/dshields/rules.mk
index 8a7c82cd44..abfbe5e40e 100644
--- a/users/dshields/rules.mk
+++ b/users/dshields/rules.mk
@@ -8,6 +8,7 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
API_SYSEX_ENABLE = no
SPACE_CADET_ENABLE = no
LEADER_ENABLE = no
+DYNAMIC_MACRO_ENABLE = yes
LINK_TIME_OPTIMIZATION_ENABLE = yes
diff --git a/users/issmirnov/config.h b/users/issmirnov/config.h
new file mode 100644
index 0000000000..664ebfe8a3
--- /dev/null
+++ b/users/issmirnov/config.h
@@ -0,0 +1,45 @@
+#pragma once
+
+// Allows sending more than one key per scan. Useful for chords.
+#define QMK_KEYS_PER_SCAN 4
+
+// how long before a tap becomes a hold
+#undef TAPPING_TERM
+#define TAPPING_TERM 100
+
+// makes tap and hold keys work better for fast typers who don't want
+// tapping term set above 500
+#define PERMISSIVE_HOLD
+
+// tap anyway, even after TAPPING_TERM, if there was no other key
+// interruption between press and release
+#define RETRO_TAPPING
+
+// how many taps before triggering the toggle
+#undef ONESHOT_TAP_TOGGLE
+#define ONESHOT_TAP_TOGGLE 2
+
+// how long before oneshot modifier key times out (currently only shift)
+#undef ONESHOT_TIMEOUT
+#define ONESHOT_TIMEOUT 2000
+
+// Enable combos for vim
+#define COMBO_COUNT 5 // Specify the number of combos used. BE SURE TO INCREMENT AS NEEDED
+#define COMBO_TERM 50 // window in milliseconds to trigger combo
+
+// Allow more than 4 keys to be sent to the system. Useful for gaming.
+// #define FORCE_NKRO
+
+// Save 200 bytes on unused keycodes
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
+
+// Enable HID_listen commands.
+#define NO_DEBUG
+#undef NO_PRINT
+#define USER_PRINT
+
+// Note: Defining the following does not have any impact on space:
+// - NO_ACTION_MACRO
+// - NO_ACTION_FUNCTION
+// - DISABLE_LEADER
diff --git a/users/issmirnov/issmirnov.c b/users/issmirnov/issmirnov.c
new file mode 100644
index 0000000000..665afbcfd7
--- /dev/null
+++ b/users/issmirnov/issmirnov.c
@@ -0,0 +1,43 @@
+#include "issmirnov.h"
+
+enum combo_events {
+ JK_ESC,
+ DF_CLN,
+ SD_SLASH,
+ XC_COPY,
+ XV_PASTE
+};
+
+
+const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
+const uint16_t PROGMEM df_combo[] = {KC_D, KC_F, COMBO_END};
+const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END};
+const uint16_t PROGMEM copy_combo[] = {KC_X, KC_C, COMBO_END};
+const uint16_t PROGMEM paste_combo[] = {KC_X, KC_V, COMBO_END};
+
+
+// BE SURE TO UPDATE THE CONFIG.H "COMBO_COUNT" value when you add elements here!
+combo_t key_combos[COMBO_COUNT] = {
+ COMBO(jk_combo, KC_ESC),
+ COMBO(df_combo, KC_COLON),
+ COMBO(sd_combo, KC_SLASH),
+ [XC_COPY] = COMBO_ACTION(copy_combo),
+ [XV_PASTE] = COMBO_ACTION(paste_combo),
+};
+
+
+void process_combo_event(uint8_t combo_index, bool pressed) {
+ switch(combo_index) {
+ case XC_COPY:
+ if (pressed) {
+ tap_code16(LCTL(KC_C));
+ }
+ break;
+
+ case XV_PASTE:
+ if (pressed) {
+ tap_code16(LCTL(KC_V));
+ }
+ break;
+ }
+}
diff --git a/users/issmirnov/issmirnov.h b/users/issmirnov/issmirnov.h
new file mode 100644
index 0000000000..eef80dfc47
--- /dev/null
+++ b/users/issmirnov/issmirnov.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include QMK_KEYBOARD_H
+
+#include "rows.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 {
+ _QWERTY = 0,
+ _SYMB,
+ _NUMP,
+ _OVERWATCH,
+ _NAVI
+};
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE,
+ TAP_TOG_LAYER,
+ CLEAR_EEPROM,
+ WKSP_LEFT, // Smart key that only activates when we are momentarily in a layer
+ WKSP_RIGHT, // Smart key that only activates when we are momentarily in a layer
+};
+
+
+#define LOWER MO(_SYMB)
+#define RAISE MO(_NUMP)
+
+#define CTL_SPC MT(MOD_LCTL, KC_SPC)
+#define OSMSFT OSM(MOD_LSFT)
+#define LOCK LGUI(KC_L)
+#define MODSFT LSFT(KC_LGUI)
+#define APPS LGUI(KC_SPC)
diff --git a/users/issmirnov/rows.h b/users/issmirnov/rows.h
new file mode 100644
index 0000000000..d35af2175c
--- /dev/null
+++ b/users/issmirnov/rows.h
@@ -0,0 +1,55 @@
+#pragma once
+
+#include QMK_KEYBOARD_H
+
+// This wrapper is required in order to expand the row macro inside the keymap configs.
+#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
+#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+
+// Share common config. We'll skip the mod rows and func rows.
+// Note, it's also really neat the way the scoping works. Since we perform the expansion in the keymap.c file
+// so we can use our enums for custom keycodes
+#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 , TAP_TOG_LAYER
+#define _________________QWERTY_R3_________________ KC_N , KC_M , KC_DOT , KC_COMMA , TG(_NUMP)
+
+#define ___________________BLANK___________________ _______ , _______ , _______ , _______ , _______
+#define ___________________XXXXX___________________ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
+
+#define _________________SYMB_L1___________________ KC_MINS , KC_AT , KC_LCBR , KC_RCBR , KC_GRV
+#define _________________SYMB_L2___________________ KC_CIRC , KC_UNDS , KC_LPRN , KC_RPRN , KC_DLR
+#define _________________SYMB_L3___________________ KC_LABK , KC_RABK , KC_LBRACKET , KC_RBRACKET , KC_TILD
+
+#define _________________SYMB_R1___________________ KC_ASTR , KC_EXLM , KC_PIPE , KC_PERC , KC_PLUS
+#define _________________SYMB_R2___________________ KC_HASH , KC_EQL , KC_COLN , KC_SCLN , TAP_TOG_LAYER
+#define _________________SYMB_R3___________________ KC_AMPR , KC_QUES , KC_SLASH , KC_BSLASH , TG(_NUMP)
+
+
+#define _________________NUMP_L1___________________ KC_NO , KC_NO , LGUI(KC_UP) , XXXXXXX , XXXXXXX
+#define _________________NUMP_L2___________________ XXXXXXX , LGUI(KC_LEFT) , LGUI(KC_DOWN) , LGUI(KC_RIGHT) , XXXXXXX
+#define _________________NUMP_L3___________________ XXXXXXX , XXXXXXX , XXXXXXX , KC_AUDIO_VOL_DOWN , KC_AUDIO_VOL_UP
+
+#define _________________NUMP_R1___________________ KC_COMM , KC_7 , KC_8 , KC_9 , XXXXXXX
+#define _________________NUMP_R2___________________ KC_0 , KC_4 , KC_5 , KC_6 , TO(_SYMB)
+#define _________________NUMP_R3___________________ KC_DOT , KC_1 , KC_2 , KC_3 , TO(_QWERTY)
+
+// Note: These are 6x1 blocks, since modifiers are also adjusted.
+#define ______________OVERWATCH_L1_________________ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T
+#define ______________OVERWATCH_L2_________________ KC_LCTL , KC_A , KC_S , KC_D , KC_F , KC_P
+#define ______________OVERWATCH_L3_________________ KC_LSHIFT , KC_Z , KC_X , KC_C , KC_V , KC_GRAVE
+// Ergodox only has 5 keys on bottom row:
+#define ______________OVERWATCH_L4_________________ KC_LCTL , KC_F9 , KC_PSCREEN , KC_H , KC_R
+
+
+
+#define _________________NAVI_L1___________________ XXXXXXX , XXXXXXX , KC_UP , XXXXXXX , XXXXXXX
+#define _________________NAVI_L2___________________ XXXXXXX , KC_LEFT , KC_DOWN , KC_RGHT , XXXXXXX
+#define _________________NAVI_L3___________________ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
+
+#define _________________NAVI_R1___________________ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
+#define _________________NAVI_R2___________________ XXXXXXX , KC_LCTL , XXXXXXX , XXXXXXX , XXXXXXX
+#define _________________NAVI_R3___________________ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX
diff --git a/users/issmirnov/rules.mk b/users/issmirnov/rules.mk
new file mode 100644
index 0000000000..096d7b4c0d
--- /dev/null
+++ b/users/issmirnov/rules.mk
@@ -0,0 +1,25 @@
+
+SRC += tap_tog.c
+SRC += issmirnov.c
+
+# https://www.reddit.com/r/olkb/comments/bmpgjm/programming_help/
+# Should shave 2000 bytes
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+
+# Enable debugging only when needed.
+CONSOLE_ENABLE = yes # +400 bytes (hid_listen support)
+
+# Enable combo keys for vim usage.
+# https://github.com/qmk/qmk_firmware/blob/master/docs/feature_combo.md
+COMBO_ENABLE = yes
+
+# This allows the keyboard to tell the host OS that up to 248 keys are held down at once
+NKRO_ENABLE = no # note: also needs FORCE_NKRO in config.h
+
+# Disable unused features to save on space
+# https://thomasbaart.nl/2018/12/01/reducing-firmware-size-in-qmk/
+MOUSEKEY_ENABLE = no # 2000 bytes
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = no # https://beta.docs.qmk.fm/features/feature_command
+UNICODE_ENABLE = no # Unicode
+SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard
diff --git a/users/issmirnov/tap_tog.c b/users/issmirnov/tap_tog.c
new file mode 100644
index 0000000000..02cea08b1d
--- /dev/null
+++ b/users/issmirnov/tap_tog.c
@@ -0,0 +1,52 @@
+#include QMK_KEYBOARD_H
+
+#include "tap_tog.h"
+
+bool tap_tog_layer_other_key_pressed = false;
+bool tap_tog_layer_toggled_on = false;
+uint8_t tap_tog_count = 0;
+
+void process_tap_tog(uint8_t layer, keyrecord_t *record) {
+ tap_tog_count++;
+ // press
+ if (record->event.pressed) {
+
+ // TTL has already been pressed and we are toggled into that layer
+ // so now we need to leave
+ if(tap_tog_layer_toggled_on) {
+ layer_clear();
+ tap_tog_layer_toggled_on = false;
+ }
+
+ // this means we're in our default layer
+ // so switch the layer immediately
+ // whether we'll switch back when it's released depends on if a button gets pressed while this is held down
+ else {
+ // switch layer
+ layer_on(layer);
+ tap_tog_layer_other_key_pressed = false; // if this becomes true before it gets released, it will act as a held modifier
+ }
+ }
+
+ // release
+ else {
+ // if it was used as a held modifier (like traditional shift)
+ if(tap_tog_layer_other_key_pressed) {
+ // switch layer back
+ layer_clear();
+ }
+ // if it was used as a toggle button
+ else {
+ // next time, it will turn layer off
+ tap_tog_layer_toggled_on = true;
+
+ // If it's been tapped twice, reset the toggle flag.
+ // Otherwise, we get stuck oscillating between this code block and the
+ // pressed && TTL_toggled_on block.
+ if (tap_tog_count >= 4 ) {
+ tap_tog_count = 0;
+ tap_tog_layer_toggled_on = false;
+ }
+ }
+ }
+}
diff --git a/users/issmirnov/tap_tog.h b/users/issmirnov/tap_tog.h
new file mode 100644
index 0000000000..f59711f043
--- /dev/null
+++ b/users/issmirnov/tap_tog.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "issmirnov.h"
+
+extern bool tap_tog_layer_other_key_pressed; // set to true if any key pressed while TAP_TOG_LAYER held down
+extern bool tap_tog_layer_toggled_on; // will become true if no keys are pressed while TTL held down
+extern uint8_t tap_tog_count; // number of presses on TAP_TOG_LAYER button.
+
+// Tap dance analog with momentary toggle when held, switch when tapped
+void process_tap_tog(uint8_t layer, keyrecord_t *record);
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 bb4770afc2..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 };
@@ -14,43 +20,43 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT_miryoku(
KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT,
LGUI_T(KC_A), LALT_T(KC_R), LCTL_T(KC_S), LSFT_T(KC_T), KC_G, KC_M, LSFT_T(KC_N), LCTL_T(KC_E), LALT_T(KC_I), LGUI_T(KC_O),
- KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH,
+ KC_Z, ALGR_T(KC_X), KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, ALGR_T(KC_DOT), KC_SLSH,
KC_NP, KC_NP, LT(MEDR, KC_ESC), LT(NAVR, KC_SPC), LT(MOUR, KC_TAB), LT(NSSL, KC_ENT), LT(NSL, KC_BSPC), LT(FUNL, KC_DEL), KC_NP, KC_NP
),
[NAVR] = LAYOUT_miryoku(
KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_AGIN, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
+ KC_NA, KC_ALGR, KC_NA, KC_NA, KC_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
KC_NP, KC_NP, KC_NA, KC_NA, KC_NA, KC_ENT, KC_BSPC, KC_DEL, KC_NP, KC_NP
),
[MOUR] = LAYOUT_miryoku(
KC_RST, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,
- KC_NA, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
+ KC_NA, KC_ALGR, KC_NA, KC_NA, KC_NA, KC_NU, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
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_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU,
+ 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
),
[FUNL] = LAYOUT_miryoku(
KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
KC_F11, KC_F4, KC_F5, KC_F6, KC_SLCK, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
- KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
+ KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NA, KC_NA, KC_NA, KC_ALGR, KC_NA,
KC_NP, KC_NP, KC_APP, KC_SPC, KC_TAB, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
),
[NSL] = LAYOUT_miryoku(
KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
- KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
+ KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_ALGR, KC_NA,
KC_NP, KC_NP, KC_DOT, KC_0, KC_MINS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
),
[NSSL] = LAYOUT_miryoku(
KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, KC_NA, KC_NA, KC_NA, KC_NA, KC_RST,
KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_NA, KC_NA, KC_NA, KC_NA, KC_NA,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_NA, KC_NA, KC_NA, KC_ALGR, KC_NA,
KC_NP, KC_NP, KC_GT, KC_RPRN, KC_UNDS, KC_NA, KC_NA, KC_NA, KC_NP, KC_NP
)
};
diff --git a/users/manna-harbour_miryoku/miryoku.org b/users/manna-harbour_miryoku/miryoku.org
index 556f95f60e..692321d01e 100644
--- a/users/manna-harbour_miryoku/miryoku.org
+++ b/users/manna-harbour_miryoku/miryoku.org
@@ -1,18 +1,23 @@
#+Title: miryoku.org
+[[https://raw.githubusercontent.com/manna-harbour/miryoku/master/kle-miryoku-keycodes.png]]
+
The miryoku layout is an ergonomic, minimal, orthogonal layout for ergo or ortho
keyboards, implemented as part of the QMK firmware. The layout is maintained in
emacs org-mode tables and converted to QMK keymap data structures using embedded
python scripts. The layout is mapped onto keyboards with different physical
-layouts as a subset without code duplication using the QMK userland feature and
+layouts as a subset without code duplication using the QMK userspace feature and
C macros. Versions of the layout can also be seen outside of the QMK source at
[[https://github.com/manna-harbour/miryoku/]].
+After making changes here call org-babel-tangle (C-c C-v t).
+
* Contents
- [[#layout][Layout]]
- [[#code-generation][Code Generation]]
- [[#subset-mapping][Subset Mapping]]
+- [[#related-documentation][Related Documentation]]
* Layout
@@ -45,6 +50,7 @@ C macros. Versions of the layout can also be seen outside of the QMK source at
- Dual-function layer change on thumbs.
- Layers are designed orthogonally with a single purpose per hand and are
accessed by holding a thumb key on the opposite hand.
+ - All layers on the same hand are based on the same basic key arrangement.
- Holding layer change and modifiers on one hand combined with a single key
press on the other hand can produce any combination of modifiers and
single keys without any finger contortions.
@@ -53,9 +59,10 @@ C macros. Versions of the layout can also be seen outside of the QMK source at
or simultaneously without race conditions.
- As mods are only enabled on the opposite hand, auto-repeat is available on
the home row on layers for use with cursor and mouse keys.
- - Tap-hold auto-repeat is disabled to enable faster tap-hold switching on
- thumbs but thumb tap keys are mirrored onto some layers for use with
- auto-repeat.
+ - Tap-hold auto-repeat is disabled to permit faster tap-hold switching on
+ thumbs, but thumb tap keys are mirrored onto some layers for use with
+ auto-repeat. On other layers thumb keys are redefined with important
+ functions for that layer.
** Layers
@@ -92,7 +99,7 @@ included for prose, dot and slash for file and directory names.
#+NAME: hold
| RST | | | | | | | | | RST |
| LGUI | LALT | LCTL | LSFT | | | LSFT | LCTL | LALT | LGUI |
-| | | | | | | | | | |
+| | ALGR | | | | | | | ALGR | |
| NP | NP | MEDR | NAVR | MOUR | NSSL | NSL | FUNL | NP | NP |
@@ -127,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 |
@@ -365,7 +373,7 @@ Modifiers usable in hold table. Need to have the same name for KC_ and _T versi
- LCTL
- LALT
- LGUI
-- LAGR
+- ALGR
** Other
@@ -376,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
@@ -397,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
@@ -406,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()>>
@@ -427,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
@@ -450,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
@@ -474,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(\
@@ -512,12 +524,12 @@ cd ../.. && make ergodox_ez:manna-harbour_miryoku:teensy
For the ortho_4x12 layout, the right half as is as follows: The rightmost column
bottom 3 rows is the pinkie column. The middle 4 columns top 3 rows are for the
-remaining fingers. The bottom row left 3 columns are the thumb keys. The
-remaining keys are unused.
+remaining fingers. The pinkie column is one row lower than the other columns to
+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(\
@@ -553,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( \
@@ -578,16 +590,100 @@ 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
* Related Documentation
+:PROPERTIES:
+:CUSTOM_ID: related-documentation
+:END:
+
** QMK
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/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/keyboards/jj50/i2c.h b/users/twschum/readme.md
index 27c9d3d050..b354e4b79c 100644
--- a/keyboards/jj50/i2c.h
+++ b/users/twschum/readme.md
@@ -1,5 +1,4 @@
-/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+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
@@ -13,13 +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/>.
-*/
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
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/users/xulkal/custom_rgb.h b/users/xulkal/custom_rgb.h
index f19dd223c2..10010b5242 100644
--- a/users/xulkal/custom_rgb.h
+++ b/users/xulkal/custom_rgb.h
@@ -1,9 +1,12 @@
#pragma once
#if defined(RGB_MATRIX_ENABLE)
-#include "rgb_matrix.h"
+# include "rgb_matrix.h"
#elif defined(RGBLIGHT_ENABLE)
-#include "rgblight.h"
+# if !defined(__AVR__)
+# define PROGMEM
+# endif
+# include "rgblight.h"
#endif
#ifdef RGB_MATRIX_ENABLE
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..d8c4c759a3 100755
--- a/util/docker_build.sh
+++ b/util/docker_build.sh
@@ -51,6 +51,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 c5c27d1670..a4037cce9e 100755
--- a/util/macos_install.sh
+++ b/util/macos_install.sh
@@ -22,8 +22,11 @@ if ! brew --version >/dev/null 2>&1; then
fi
brew tap osx-cross/avr
-brew tap PX4/homebrew-px4
+brew tap osx-cross/arm
brew update
-brew install avr-gcc@8 gcc-arm-none-eabi 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/travis_build.sh b/util/travis_build.sh
index 225c8548f5..6d5dbed684 100755
--- a/util/travis_build.sh
+++ b/util/travis_build.sh
@@ -1,57 +1,42 @@
#!/bin/bash
-# if docker is installed - patch calls to within the qmk docker image
-if command -v docker >/dev/null; then
- function make() {
- docker run --rm -e MAKEFLAGS="$MAKEFLAGS" -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container make "$@"
- }
+source util/travis_utils.sh
+
+NUM_CORE_CHANGES=$(echo "$QMK_CHANGES" | grep -Ecv -e '^(docs/)' -e '^(keyboards/)' -e '^(layouts/)' -e '^(util/)' -e '^(lib/python/)' -e '^(bin/qmk)' -e '^(requirements.txt)' -e '(.travis.yml)')
+
+if [[ "$TRAVIS_COMMIT_MESSAGE" == *"[skip build]"* ]]; then
+ echo "Skipping due to commit message"
+ exit 0
fi
-# test force push
-#TRAVIS_COMMIT_RANGE="c287f1bfc5c8...81f62atc4c1d"
+if [ "$LOCAL_BRANCH" == "master" ] || [ "$NUM_CORE_CHANGES" != "0" ]; then
+ echo "Making default keymaps for all keyboards"
+ make all:default
+ exit $?
+fi
-TRAVIS_COMMIT_MESSAGE="${TRAVIS_COMMIT_MESSAGE:-none}"
-TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE:-HEAD~1..HEAD}"
-MAKE_ALL="make all:default"
+exit_code=0
-if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip build]"* ]] ; then
- exit_code=0
- git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE}
- if [ $? -eq 128 ]; then
- # We don't know what changed so just build the default keymaps
- echo "Making default keymaps for all keyboards (fallback)"
- eval $MAKE_ALL
+for KB in $(make list-keyboards); do
+ KEYBOARD_CHANGES=$(echo "$QMK_CHANGES" | grep -E '^(keyboards/'${KB}'/)')
+ if [[ -z "$KEYBOARD_CHANGES" ]]; then
+ # skip as no changes for this keyboard
+ continue
+ fi
+
+ KEYMAP_ONLY=$(echo "$KEYBOARD_CHANGES" | grep -cv /keymaps/)
+ if [[ $KEYMAP_ONLY -gt 0 ]]; then
+ echo "Making all keymaps for $KB"
+ make ${KB}:all
: $((exit_code = $exit_code + $?))
else
- NEFM=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -Ev '^(keyboards/)' | grep -Ev '^(docs/)' | grep -Ev '^(lib/python/)' | grep -Ev '^(bin/qmk)' | grep -Ev '^(requirements.txt)' | grep -Ev '^(util/)' | wc -l)
- BRANCH=$(git rev-parse --abbrev-ref HEAD)
- # is this branch master or a "non docs, non keyboards" change
- if [ $NEFM -gt 0 -o "$BRANCH" = "master" ]; then
- echo "Making default keymaps for all keyboards"
- eval $MAKE_ALL
+ CHANGED_KEYMAPS=$(echo "$KEYBOARD_CHANGES" | grep -oP '(?<=keyboards/'${KB}'/keymaps/)([a-zA-Z0-9_-]+)(?=\/)')
+ for KM in $CHANGED_KEYMAPS ; do
+ echo "Making $KM for $KB"
+ make ${KB}:${KM}
: $((exit_code = $exit_code + $?))
- else
- # keyboards project format
- # /keyboards/board1/rev/keymaps/
- # /keyboards/board2/keymaps/
- # ensure we strip everything off after and including the keymaps folder to get board and/or revision
- MKB=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -oP '(?<=keyboards\/)([a-zA-Z0-9_\/]+)(?=\/)' | sed 's^/keymaps/.*^^' | sort -u)
- for KB in $MKB ; do
- KEYMAP_ONLY=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -Ev '^(keyboards/'${KB}'/keymaps/)' | wc -l)
- if [[ $KEYMAP_ONLY -gt 0 ]]; then
- echo "Making all keymaps for $KB"
- make ${KB}:all
- : $((exit_code = $exit_code + $?))
- else
- MKM=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -oP '(?<=keyboards/'${KB}'/keymaps/)([a-zA-Z0-9_]+)(?=\/)' | sort -u)
- for KM in $MKM ; do
- echo "Making $KM for $KB"
- make ${KB}:${KM}
- : $((exit_code = $exit_code + $?))
- done
- fi
- done
- fi
+ done
fi
- exit $exit_code
-fi
+done
+
+exit $exit_code
diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh
index 8ca65f21a0..c18e42a293 100755
--- a/util/travis_compiled_push.sh
+++ b/util/travis_compiled_push.sh
@@ -1,5 +1,6 @@
#!/bin/bash
+source util/travis_utils.sh
source util/travis_push.sh
set -o errexit -o nounset
@@ -12,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/travis_docs.sh b/util/travis_docs.sh
index 5cfd63466d..93c2d71867 100755
--- a/util/travis_docs.sh
+++ b/util/travis_docs.sh
@@ -1,5 +1,6 @@
#!/bin/bash
+source util/travis_utils.sh
source util/travis_push.sh
if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip docs]"* ]] ; then
diff --git a/util/travis_push.sh b/util/travis_push.sh
index d100f9d48f..7f7d4c2c64 100755
--- a/util/travis_push.sh
+++ b/util/travis_push.sh
@@ -1,10 +1,5 @@
# Use this by sourcing it in your script.
-TRAVIS_BRANCH="${TRAVIS_BRANCH:master}"
-TRAVIS_PULL_REQUEST="${TRAVIS_PULL_REQUEST:false}"
-TRAVIS_COMMIT_MESSAGE="${TRAVIS_COMMIT_MESSAGE:-none}"
-TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE:-HEAD~1..HEAD}"
-
if [[ "$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "false" ]] ; then
git config --global user.name "QMK Bot"
git config --global user.email "hello@qmk.fm"
diff --git a/util/travis_test.sh b/util/travis_test.sh
index 9b7402c282..95991907ef 100644
--- a/util/travis_test.sh
+++ b/util/travis_test.sh
@@ -1,26 +1,9 @@
#!/bin/bash
-# if docker is installed - patch calls to within the qmk docker image
-if command -v docker >/dev/null; then
- function make() {
- docker run --rm -e MAKEFLAGS="$MAKEFLAGS" -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container make "$@"
- }
- function qmk() {
- docker run --rm -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container bin/qmk "$@"
- }
-fi
-
-TRAVIS_COMMIT_MESSAGE="${TRAVIS_COMMIT_MESSAGE:-none}"
-TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE:-HEAD~1..HEAD}"
-
-# test force push
-#TRAVIS_COMMIT_RANGE="c287f1bfc5c8...81f62atc4c1d"
-
-BRANCH=$(git rev-parse --abbrev-ref HEAD)
-CHANGES=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE})
+source util/travis_utils.sh
-NUM_CORE_CHANGES=$(echo "$CHANGES" | grep -Ecv -e '^(docs/)' -e '^(keyboards/)' -e '^(layouts/)')
-NUM_PY_CHANGES=$(echo "$CHANGES" | grep -Ec -e '^(lib/python/)' -e '^(bin/qmk)')
+NUM_CORE_CHANGES=$(echo "$QMK_CHANGES" | grep -Ecv -e '^(docs/)' -e '^(keyboards/)' -e '^(layouts/)' -e '^(util/)' -e '^(lib/python/)' -e '^(bin/qmk)' -e '^(requirements.txt)' -e '(.travis.yml)')
+NUM_PY_CHANGES=$(echo "$QMK_CHANGES" | grep -Ec -e '^(lib/python/)' -e '^(bin/qmk)')
if [[ "$TRAVIS_COMMIT_MESSAGE" == *"[skip test]"* ]]; then
echo "Skipping due to commit message"
@@ -29,14 +12,14 @@ fi
exit_code=0
-if [ "$BRANCH" == "master" ] || [ "$NUM_CORE_CHANGES" != "0" ]; then
+if [ "$LOCAL_BRANCH" == "master" ] || [ "$NUM_CORE_CHANGES" != "0" ]; then
echo "Running tests."
make test:all
: $((exit_code = $exit_code + $?))
fi
-if [ "$BRANCH" == "master" ] || [ "$NUM_PY_CHANGES" != "0" ]; then
+if [ "$LOCAL_BRANCH" == "master" ] || [ "$NUM_PY_CHANGES" != "0" ]; then
echo "Running python tests."
qmk pytest
: $((exit_code = $exit_code + $?))
diff --git a/util/travis_utils.sh b/util/travis_utils.sh
new file mode 100755
index 0000000000..e3d806dfba
--- /dev/null
+++ b/util/travis_utils.sh
@@ -0,0 +1,24 @@
+# Use this by sourcing it in your script.
+
+# Provide sane defaults for travis environment
+TRAVIS_BRANCH="${TRAVIS_BRANCH:master}"
+TRAVIS_PULL_REQUEST="${TRAVIS_PULL_REQUEST:false}"
+TRAVIS_COMMIT_MESSAGE="${TRAVIS_COMMIT_MESSAGE:-none}"
+TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE:-HEAD~1..HEAD}"
+
+# test force push
+#TRAVIS_COMMIT_RANGE="c287f1bfc5c8...81f62atc4c1d"
+
+# Extra variables
+LOCAL_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+QMK_CHANGES=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE})
+
+# if docker is installed - patch calls to within the qmk docker image
+if command -v docker >/dev/null; then
+ function make() {
+ docker run --rm -e MAKEFLAGS="$MAKEFLAGS" -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container make "$@"
+ }
+ function qmk() {
+ docker run --rm -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container bin/qmk "$@"
+ }
+fi
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