]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Add missing links to features page and sidebar section (#5949)
authorJack Humbert <jack.humb@gmail.com>
Tue, 4 Jun 2019 06:26:44 +0000 (02:26 -0400)
committerGitHub <noreply@github.com>
Tue, 4 Jun 2019 06:26:44 +0000 (02:26 -0400)
* Add missing links to features page and sidebar section

* Fix links

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Additional link fixes

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Fix typo

485 files changed:
.travis.yml
Dockerfile
docs/feature_encoders.md
docs/getting_started_introduction.md
docs/i2c_driver.md
docs/keycodes.md
docs/reference_configurator_support.md
docs/zh-cn/faq_build.md [new file with mode: 0644]
docs/zh-cn/faq_debug.md [new file with mode: 0644]
docs/zh-cn/faq_keymap.md [new file with mode: 0644]
drivers/arm/i2c_master.c
drivers/arm/i2c_master.h
keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c
keyboards/8pack/8pack.c [new file with mode: 0644]
keyboards/8pack/8pack.h [new file with mode: 0644]
keyboards/8pack/config.h [new file with mode: 0644]
keyboards/8pack/info.json [new file with mode: 0644]
keyboards/8pack/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/8pack/readme.md [new file with mode: 0644]
keyboards/8pack/rev11/config.h [new file with mode: 0644]
keyboards/8pack/rev11/rev11.c [new file with mode: 0644]
keyboards/8pack/rev11/rev11.h [new file with mode: 0644]
keyboards/8pack/rev11/rules.mk [new file with mode: 0644]
keyboards/8pack/rev12/config.h [new file with mode: 0644]
keyboards/8pack/rev12/rev12.c [new file with mode: 0644]
keyboards/8pack/rev12/rev12.h [new file with mode: 0644]
keyboards/8pack/rev12/rules.mk [new file with mode: 0644]
keyboards/8pack/rules.mk [new file with mode: 0644]
keyboards/9key/keymaps/default/keymap.c
keyboards/9key/keymaps/default/rules.mk [deleted file]
keyboards/9key/keymaps/tap_dance/keymap.c [new file with mode: 0644]
keyboards/9key/keymaps/tap_dance/rules.mk [new file with mode: 0644]
keyboards/9key/rules.mk
keyboards/abstract/ellipse/info.json [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/abstractkb/config.h [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/abstractkb/readme.md [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/abstractkb/rules.mk [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/default/config.h [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/default/readme.md [new file with mode: 0644]
keyboards/abstract/ellipse/keymaps/default/rules.mk [new file with mode: 0644]
keyboards/abstract/ellipse/readme.md [new file with mode: 0644]
keyboards/abstract/ellipse/rev1/config.h [new file with mode: 0644]
keyboards/abstract/ellipse/rev1/rev1.c [new file with mode: 0644]
keyboards/abstract/ellipse/rev1/rev1.h [new file with mode: 0644]
keyboards/abstract/ellipse/rev1/rules.mk [new file with mode: 0644]
keyboards/ai03/soyuz/config.h [new file with mode: 0644]
keyboards/ai03/soyuz/info.json [new file with mode: 0644]
keyboards/ai03/soyuz/keymaps/1U/keymap.c [new file with mode: 0644]
keyboards/ai03/soyuz/keymaps/1U/readme.md [new file with mode: 0644]
keyboards/ai03/soyuz/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ai03/soyuz/keymaps/default/readme.md [new file with mode: 0644]
keyboards/ai03/soyuz/readme.md [new file with mode: 0644]
keyboards/ai03/soyuz/rules.mk [new file with mode: 0644]
keyboards/ai03/soyuz/soyuz.c [new file with mode: 0644]
keyboards/ai03/soyuz/soyuz.h [new file with mode: 0644]
keyboards/akb/eb46/config.h [new file with mode: 0644]
keyboards/akb/eb46/eb46.c [new file with mode: 0644]
keyboards/akb/eb46/eb46.h [new file with mode: 0644]
keyboards/akb/eb46/info.json [new file with mode: 0644]
keyboards/akb/eb46/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/akb/eb46/readme.md [new file with mode: 0644]
keyboards/akb/eb46/rules.mk [new file with mode: 0644]
keyboards/akb/raine/config.h [new file with mode: 0644]
keyboards/akb/raine/info.json [new file with mode: 0644]
keyboards/akb/raine/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/akb/raine/raine.c [new file with mode: 0644]
keyboards/akb/raine/raine.h [new file with mode: 0644]
keyboards/akb/raine/readme.md [new file with mode: 0644]
keyboards/akb/raine/rules.mk [new file with mode: 0644]
keyboards/ares/ares.c [new file with mode: 0644]
keyboards/ares/ares.h [new file with mode: 0644]
keyboards/ares/config.h [new file with mode: 0644]
keyboards/ares/info.json [new file with mode: 0644]
keyboards/ares/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ares/readme.md [new file with mode: 0644]
keyboards/ares/rules.mk [new file with mode: 0644]
keyboards/ares/usbconfig.h [new file with mode: 0644]
keyboards/atreus/keymaps/ptillemans/keymap.c [new file with mode: 0644]
keyboards/business_card/alpha/alpha.c [new file with mode: 0644]
keyboards/business_card/alpha/alpha.h [new file with mode: 0644]
keyboards/business_card/alpha/config.h [new file with mode: 0644]
keyboards/business_card/alpha/keymaps/default/config.h [new file with mode: 0644]
keyboards/business_card/alpha/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/business_card/alpha/keymaps/default/readme.md [new file with mode: 0644]
keyboards/business_card/alpha/rules.mk [new file with mode: 0644]
keyboards/business_card/beta/beta.c [new file with mode: 0644]
keyboards/business_card/beta/beta.h [new file with mode: 0644]
keyboards/business_card/beta/config.h [new file with mode: 0644]
keyboards/business_card/beta/keymaps/default/config.h [new file with mode: 0644]
keyboards/business_card/beta/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/business_card/beta/keymaps/default/readme.md [new file with mode: 0644]
keyboards/business_card/beta/rules.mk [new file with mode: 0644]
keyboards/business_card/business_card.c [new file with mode: 0644]
keyboards/business_card/business_card.h [new file with mode: 0644]
keyboards/business_card/config.h [new file with mode: 0644]
keyboards/business_card/info.json [new file with mode: 0644]
keyboards/business_card/readme.md [new file with mode: 0644]
keyboards/business_card/rules.mk [new file with mode: 0644]
keyboards/canoe/keymaps/boy_314/keymap.c [new file with mode: 0644]
keyboards/canoe/keymaps/boy_314/readme.md [new file with mode: 0644]
keyboards/converter/palm_usb/readme.md
keyboards/dc01/arrow/rules.mk
keyboards/dc01/left/rules.mk
keyboards/dc01/numpad/rules.mk
keyboards/dc01/right/rules.mk
keyboards/divergetm2/info.json [new file with mode: 0644]
keyboards/duck/octagon/v1/info.json
keyboards/duck/octagon/v1/rules.mk
keyboards/duck/octagon/v1/v1.h
keyboards/dz60/dz60.h
keyboards/dz60/info.json
keyboards/dz60/keymaps/bingocaller/config.h
keyboards/dz60/keymaps/bingocaller/keymap.c
keyboards/dz60/keymaps/bingocaller/readme.md
keyboards/dz60/keymaps/kream/keymap.c [new file with mode: 0644]
keyboards/dz60/keymaps/kream/rules.mk [new file with mode: 0644]
keyboards/dztech/dz60rgb/dz60rgb.c
keyboards/dztech/dz60rgb/info.json
keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
keyboards/dztech/dz60rgb/keymaps/mekanist/keymap.c
keyboards/ep/comsn/hs68/config.h [new file with mode: 0644]
keyboards/ep/comsn/hs68/hs68.c [new file with mode: 0644]
keyboards/ep/comsn/hs68/hs68.h [new file with mode: 0644]
keyboards/ep/comsn/hs68/info.json [new file with mode: 0644]
keyboards/ep/comsn/hs68/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ep/comsn/hs68/readme.md [new file with mode: 0644]
keyboards/ep/comsn/hs68/rules.mk [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/config.h [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/info.json [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/mollydooker.c [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/mollydooker.h [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/readme.md [new file with mode: 0644]
keyboards/ep/comsn/mollydooker/rules.mk [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/config.h [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/info.json [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/readme.md [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/rules.mk [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/tf__longeboye.c [new file with mode: 0644]
keyboards/ep/comsn/tf_longeboye/tf_longeboye.h [new file with mode: 0644]
keyboards/ergo42/keymaps/shinze/config.h [new file with mode: 0644]
keyboards/ergo42/keymaps/shinze/keymap.c [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/config.h [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/info.json [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/keymaps/default/config.h [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/keymaps/default/readme.md [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/le_bmc.c [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/le_bmc.h [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/readme.md [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/rules.mk [new file with mode: 0644]
keyboards/exclusive/e6v2/le_bmc/usbconfig.h [new file with mode: 0644]
keyboards/geekboards/tester/config.h [new file with mode: 0644]
keyboards/geekboards/tester/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/geekboards/tester/readme.md [new file with mode: 0644]
keyboards/geekboards/tester/rules.mk [new file with mode: 0644]
keyboards/geekboards/tester/tester.c [new file with mode: 0644]
keyboards/geekboards/tester/tester.h [new file with mode: 0644]
keyboards/georgi/config.h
keyboards/georgi/keymaps/default-flipped/keymap.c [new file with mode: 0644]
keyboards/georgi/keymaps/default-flipped/readme.md [new file with mode: 0644]
keyboards/georgi/keymaps/default-flipped/rules.mk [new file with mode: 0644]
keyboards/georgi/keymaps/default/keymap.c
keyboards/georgi/keymaps/minimal/keymap.c
keyboards/georgi/keymaps/norman/keymap.c
keyboards/handwired/co60/info.json [new file with mode: 0644]
keyboards/handwired/co60/keymaps/all_keys/config.h [new file with mode: 0644]
keyboards/handwired/co60/keymaps/all_keys/keymap.c [new file with mode: 0644]
keyboards/handwired/co60/keymaps/all_keys/readme.md [new file with mode: 0644]
keyboards/handwired/co60/keymaps/default/config.h [new file with mode: 0644]
keyboards/handwired/co60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/co60/keymaps/default/readme.md [new file with mode: 0644]
keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/config.h [new file with mode: 0644]
keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/keymap.c [new file with mode: 0644]
keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/readme.md [new file with mode: 0644]
keyboards/handwired/co60/readme.md [new file with mode: 0644]
keyboards/handwired/co60/rev1/config.h [new file with mode: 0644]
keyboards/handwired/co60/rev1/rev1.c [new file with mode: 0644]
keyboards/handwired/co60/rev1/rev1.h [new file with mode: 0644]
keyboards/handwired/co60/rev1/rules.mk [new file with mode: 0644]
keyboards/handwired/co60/rev6/chconf.h [new file with mode: 0644]
keyboards/handwired/co60/rev6/config.h [new file with mode: 0644]
keyboards/handwired/co60/rev6/halconf.h [new file with mode: 0644]
keyboards/handwired/co60/rev6/led.c [new file with mode: 0644]
keyboards/handwired/co60/rev6/led_custom.h [new file with mode: 0644]
keyboards/handwired/co60/rev6/mcuconf.h [new file with mode: 0644]
keyboards/handwired/co60/rev6/rev6.c [new file with mode: 0644]
keyboards/handwired/co60/rev6/rev6.h [new file with mode: 0644]
keyboards/handwired/co60/rev6/rules.mk [new file with mode: 0644]
keyboards/handwired/co60/rev7/chconf.h [new file with mode: 0644]
keyboards/handwired/co60/rev7/config.h [new file with mode: 0644]
keyboards/handwired/co60/rev7/halconf.h [new file with mode: 0644]
keyboards/handwired/co60/rev7/led.c [new file with mode: 0644]
keyboards/handwired/co60/rev7/led_custom.h [new file with mode: 0644]
keyboards/handwired/co60/rev7/mcuconf.h [new file with mode: 0644]
keyboards/handwired/co60/rev7/rev7.c [new file with mode: 0644]
keyboards/handwired/co60/rev7/rev7.h [new file with mode: 0644]
keyboards/handwired/co60/rev7/rules.mk [new file with mode: 0644]
keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/keymap.c
keyboards/handwired/jotanck/config.h
keyboards/handwired/jotanck/jotanck.c
keyboards/handwired/jotanck/keymaps/default/keymap.c
keyboards/handwired/jotanck/readme.md
keyboards/handwired/jotanck/rules.mk
keyboards/hs60/v2/keymaps/stanrc85/keymap.c
keyboards/jc65/v32a/keymaps/ptillemans/keymap.c [new file with mode: 0644]
keyboards/jc65/v32a/keymaps/ptillemans/readme.md [new file with mode: 0644]
keyboards/jc65/v32a/keymaps/ptillemans/rules.mk [new file with mode: 0644]
keyboards/jc65/v32a/v32a.c
keyboards/kbdfans/kbd67/hotswap/keymaps/bcat/keymap.c
keyboards/kbdfans/kbd67/hotswap/keymaps/bcat/readme.md
keyboards/kbdfans/kbd8x_mk2/config.h [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/info.json [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/ai03/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/ai03/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_7/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_7/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/default/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/iso_625/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/iso_625/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/iso_7/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/iso_7/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/tester/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/keymaps/tester/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd8x_mk2/rules.mk [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/config.h [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/info.json [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/kbdpad_mk2.c [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/kbdpad_mk2.h [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/keymaps/default/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/keymaps/tester/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/keymaps/tester/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbdpad_mk2/rules.mk [new file with mode: 0644]
keyboards/keebio/bfo9000/keymaps/insertsnideremarks/readme.md [new file with mode: 0644]
keyboards/keebio/bfo9000/keymaps/tuesdayjohn/config.h [new file with mode: 0644]
keyboards/keebio/bfo9000/keymaps/tuesdayjohn/keymap.c [new file with mode: 0644]
keyboards/keebio/bfo9000/keymaps/tuesdayjohn/rules.mk [new file with mode: 0644]
keyboards/keebio/iris/keymaps/333fred/config.h [new file with mode: 0644]
keyboards/keebio/iris/keymaps/333fred/keymap.c [new file with mode: 0644]
keyboards/keebio/iris/keymaps/333fred/rules.mk [new file with mode: 0644]
keyboards/keebio/iris/keymaps/default/keymap.c
keyboards/keebio/iris/keymaps/hexwire/config.h
keyboards/keebio/iris/keymaps/jasondunsmore/config.h [new file with mode: 0644]
keyboards/keebio/iris/keymaps/jasondunsmore/keymap.c [new file with mode: 0644]
keyboards/keebio/iris/keymaps/jasondunsmore/readme.md [new file with mode: 0644]
keyboards/keebio/iris/keymaps/jasondunsmore/rules.mk [new file with mode: 0644]
keyboards/keebio/iris/keymaps/via/keymap.c
keyboards/keebio/iris/rev1/config.h
keyboards/keebio/iris/rev1_led/config.h
keyboards/keebio/iris/rev2/config.h
keyboards/keebio/iris/rev3/config.h
keyboards/keebio/iris/rules.mk
keyboards/keebio/levinson/levinson.h
keyboards/keebio/levinson/rev3/config.h [new file with mode: 0644]
keyboards/keebio/levinson/rev3/rev3.c [new file with mode: 0644]
keyboards/keebio/levinson/rev3/rev3.h [new file with mode: 0644]
keyboards/keebio/levinson/rev3/rules.mk [new file with mode: 0644]
keyboards/keebio/quefrency/keymaps/bcat/config.h
keyboards/keebio/quefrency/keymaps/bcat/keymap.c
keyboards/keebio/quefrency/keymaps/bcat/readme.md
keyboards/keebio/quefrency/keymaps/bcat/rules.mk
keyboards/keycapsss/o4l_5x12/info.json [new file with mode: 0644]
keyboards/kinesis/keymaps/insertsnideremarks/readme.md
keyboards/kinesis/keymaps/tuesdayjohn/config.h [new file with mode: 0644]
keyboards/kinesis/keymaps/tuesdayjohn/keymap.c [new file with mode: 0644]
keyboards/kinesis/keymaps/tuesdayjohn/readme.md [new file with mode: 0644]
keyboards/kinesis/keymaps/tuesdayjohn/rules.mk [new file with mode: 0644]
keyboards/lazydesigners/dimple/config.h [new file with mode: 0644]
keyboards/lazydesigners/dimple/dimple.c [new file with mode: 0644]
keyboards/lazydesigners/dimple/dimple.h [new file with mode: 0644]
keyboards/lazydesigners/dimple/info.json [new file with mode: 0644]
keyboards/lazydesigners/dimple/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/lazydesigners/dimple/keymaps/default/readme.md [new file with mode: 0644]
keyboards/lazydesigners/dimple/readme.md [new file with mode: 0644]
keyboards/lazydesigners/dimple/rules.mk [new file with mode: 0644]
keyboards/lets_split/keymaps/tylerwince/config.h [new file with mode: 0644]
keyboards/lets_split/keymaps/tylerwince/keymap.c [new file with mode: 0644]
keyboards/lets_split/keymaps/tylerwince/rules.mk [new file with mode: 0644]
keyboards/massdrop/ctrl/config_led.c
keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h
keyboards/massdrop/ctrl/keymaps/matthewrobo/config_led.c [new file with mode: 0644]
keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c
keyboards/massdrop/ctrl/keymaps/matthewrobo/rules.mk
keyboards/massdrop/ctrl/keymaps/xulkal/keymap.c
keyboards/melody96/keymaps/zunger/config.h [new file with mode: 0644]
keyboards/melody96/keymaps/zunger/keymap.c [new file with mode: 0644]
keyboards/melody96/keymaps/zunger/readme.md [new file with mode: 0644]
keyboards/melody96/keymaps/zunger/rules.mk [new file with mode: 0644]
keyboards/melody96/melody96.h
keyboards/moon/config.h [new file with mode: 0644]
keyboards/moon/info.json [new file with mode: 0644]
keyboards/moon/keymaps/default/config.h [new file with mode: 0644]
keyboards/moon/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/moon/keymaps/default/readme.md [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_ansi/config.h [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_ansi/keymap.c [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_ansi/readme.md [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_ansi_wkl/config.h [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_ansi_wkl/keymap.c [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_ansi_wkl/readme.md [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_iso/config.h [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_iso/keymap.c [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_iso/readme.md [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_iso_wkl/config.h [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_iso_wkl/keymap.c [new file with mode: 0644]
keyboards/moon/keymaps/default_tkl_iso_wkl/readme.md [new file with mode: 0644]
keyboards/moon/matrix.c [new file with mode: 0644]
keyboards/moon/moon.c [new file with mode: 0644]
keyboards/moon/moon.h [new file with mode: 0644]
keyboards/moon/pca9555.c [new file with mode: 0644]
keyboards/moon/pca9555.h [new file with mode: 0644]
keyboards/moon/readme.md [new file with mode: 0644]
keyboards/moon/rules.mk [new file with mode: 0644]
keyboards/nk65/info.json
keyboards/ok60/keymaps/ptillemans/keymap.c [new file with mode: 0644]
keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.c [new file with mode: 0644]
keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.mk [new file with mode: 0644]
keyboards/peiorisboards/ixora/bootloader_defs.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/chconf.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/config.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/halconf.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/info.json [new file with mode: 0644]
keyboards/peiorisboards/ixora/ixora.c [new file with mode: 0644]
keyboards/peiorisboards/ixora/ixora.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/peiorisboards/ixora/keymaps/wntrmln/keymap.c [new file with mode: 0644]
keyboards/peiorisboards/ixora/mcuconf.h [new file with mode: 0644]
keyboards/peiorisboards/ixora/readme.md [new file with mode: 0644]
keyboards/peiorisboards/ixora/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/dsanchezseco/keymap.c
keyboards/planck/keymaps/ptillemans/config.h [new file with mode: 0644]
keyboards/planck/keymaps/ptillemans/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/ptillemans/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/ptillemans/rules.mk [new file with mode: 0644]
keyboards/preonic/keymaps/kuatsure/config.h
keyboards/preonic/keymaps/kuatsure/keymap.c
keyboards/preonic/keymaps/kuatsure/rules.mk
keyboards/primekb/prime_e/keymaps/via/rules.mk
keyboards/primekb/prime_e/rules.mk
keyboards/redox/keymaps/ptillemans/config.h [new file with mode: 0644]
keyboards/redox/keymaps/ptillemans/keymap.c [new file with mode: 0644]
keyboards/redox/keymaps/ptillemans/readme.md [new file with mode: 0644]
keyboards/redox/keymaps/ptillemans/rules.mk [new file with mode: 0644]
keyboards/rgbkb/sol/keymaps/xulkal/keymap.c
keyboards/rgbkb/zen/rev1/keymaps/333fred/keymap.c
keyboards/rgbkb/zygomorph/keymaps/xulkal/config.h [deleted file]
keyboards/rgbkb/zygomorph/keymaps/xulkal/keymap.c
keyboards/romac/keymaps/stanrc85/config.h [new file with mode: 0644]
keyboards/romac/keymaps/stanrc85/keymap.c [new file with mode: 0644]
keyboards/romac/keymaps/stanrc85/rules.mk [new file with mode: 0644]
keyboards/snampad/config.h [new file with mode: 0644]
keyboards/snampad/info.json [new file with mode: 0644]
keyboards/snampad/keymaps/default/config.h [new file with mode: 0644]
keyboards/snampad/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/snampad/keymaps/default/readme.md [new file with mode: 0644]
keyboards/snampad/readme.md [new file with mode: 0644]
keyboards/snampad/rules.mk [new file with mode: 0644]
keyboards/snampad/snampad.c [new file with mode: 0644]
keyboards/snampad/snampad.h [new file with mode: 0644]
keyboards/spacetime/config.h [new file with mode: 0644]
keyboards/spacetime/info.json [new file with mode: 0644]
keyboards/spacetime/keymaps/default/config.h [new file with mode: 0644]
keyboards/spacetime/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/spacetime/keymaps/default/readme.md [new file with mode: 0644]
keyboards/spacetime/keymaps/kyleterry/keymap.c [new file with mode: 0644]
keyboards/spacetime/keymaps/kyleterry/rules.mk [new file with mode: 0644]
keyboards/spacetime/readme.md [new file with mode: 0644]
keyboards/spacetime/rev1/rev1.c [new file with mode: 0644]
keyboards/spacetime/rev1/rev1.h [new file with mode: 0644]
keyboards/spacetime/rev1/rules.mk [new file with mode: 0644]
keyboards/spacetime/rev2/rev2.c [new file with mode: 0644]
keyboards/spacetime/rev2/rev2.h [new file with mode: 0644]
keyboards/spacetime/rev2/rules.mk [new file with mode: 0644]
keyboards/spacetime/rules.mk [new file with mode: 0644]
keyboards/spacetime/spacetime.c [new file with mode: 0644]
keyboards/spacetime/spacetime.h [new file with mode: 0644]
keyboards/tada68/keymaps/hhkb68/keymap.c [new file with mode: 0644]
keyboards/tada68/keymaps/hhkb68/layers.json [new file with mode: 0644]
keyboards/tada68/keymaps/hhkb68/readme.md [new file with mode: 0644]
keyboards/tada68/keymaps/iso-nor/keymap.c
keyboards/waldo/waldo.h
keyboards/westfoxtrot/cypher/info.json
keyboards/wilba_tech/wt60_a/config.h
keyboards/wilba_tech/wt60_a/readme.md
keyboards/wilba_tech/wt65_a/config.h
keyboards/wilba_tech/wt65_a/readme.md
keyboards/wilba_tech/wt65_b/config.h [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/info.json [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/keymaps/via/keymap.c [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/readme.md [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/rules.mk [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/wt65_b.c [new file with mode: 0644]
keyboards/wilba_tech/wt65_b/wt65_b.h [new file with mode: 0644]
keyboards/wilba_tech/wt69_a/config.h
keyboards/wilba_tech/wt69_a/readme.md
keyboards/wilba_tech/wt75_a/config.h
keyboards/wilba_tech/wt75_a/readme.md
keyboards/wilba_tech/wt75_b/config.h [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/info.json [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/keymaps/via/keymap.c [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/readme.md [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/rules.mk [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/wt75_b.c [new file with mode: 0644]
keyboards/wilba_tech/wt75_b/wt75_b.h [new file with mode: 0644]
keyboards/wilba_tech/wt80_a/config.h
keyboards/wilba_tech/wt80_a/readme.md
keyboards/wilba_tech/wt8_a/config.h
keyboards/wilba_tech/wt8_a/readme.md
keyboards/wilba_tech/wt_main.c
keyboards/xd75/keymaps/boy_314/keymap.c
keyboards/xw60/config.h [new file with mode: 0644]
keyboards/xw60/info.json [new file with mode: 0644]
keyboards/xw60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/xw60/keymaps/default/readme.md [new file with mode: 0644]
keyboards/xw60/keymaps/pingjunior/keymap.c [new file with mode: 0644]
keyboards/xw60/keymaps/pingjunior/readme.md [new file with mode: 0644]
keyboards/xw60/readme.md [new file with mode: 0644]
keyboards/xw60/rules.mk [new file with mode: 0644]
keyboards/xw60/xw60.c [new file with mode: 0644]
keyboards/xw60/xw60.h [new file with mode: 0644]
keyboards/ymd96/README.md [deleted file]
keyboards/ymd96/keymaps/JJ50/keymap.c [deleted file]
keyboards/ymd96/keymaps/default/keymap.c
keyboards/ymd96/readme.md [new file with mode: 0644]
keyboards/ymd96/ymd96.h
layouts/community/60_ansi/stanrc85-ansi/keymap.c
layouts/community/ergodox/333fred/keymap.c
layouts/community/ortho_4x12/jotix/config.h
layouts/community/ortho_4x12/jotix/keymap.c
layouts/community/ortho_4x12/jotix/rules.mk [deleted file]
layouts/community/ortho_5x12/333fred/keymap.c
quantum/config_common.h
quantum/keymap_extras/sendstring_belgian.h [new file with mode: 0644]
quantum/matrix.c
quantum/split_common/transport.c
quantum/template/avr/config.h
quantum/template/ps2avrgb/config.h
tmk_core/chibios.mk
tmk_core/common/action.c
tmk_core/protocol/arm_atsam/md_bootloader.h
users/333fred/333fred.c
users/333fred/333fred.h
users/333fred/333fred_config.h
users/333fred/rgb.c
users/bcat/config.h [new file with mode: 0644]
users/bcat/rules.mk [new file with mode: 0644]
users/kuatsure/kuatsure.c
users/kuatsure/kuatsure.h
users/kuatsure/rules.mk
users/stanrc85/layer_rgb.c
users/stanrc85/stanrc85.h
users/xulkal/custom_encoder.c [new file with mode: 0644]
users/xulkal/custom_encoder.h [new file with mode: 0644]
users/xulkal/custom_keycodes.h [new file with mode: 0644]
users/xulkal/custom_oled.c [new file with mode: 0644]
users/xulkal/custom_oled.h [new file with mode: 0644]
users/xulkal/custom_tap_dance.c [new file with mode: 0644]
users/xulkal/custom_tap_dance.h [new file with mode: 0644]
users/xulkal/layouts.h
users/xulkal/process_records.c
users/xulkal/process_records.h
users/xulkal/rules.mk
users/xulkal/timer_utils.c [new file with mode: 0644]
users/xulkal/timer_utils.h [new file with mode: 0644]
users/xulkal/xulkal.h
util/linux_install.sh
util/travis_build.sh
util/travis_compiled_push.sh
util/travis_test.sh

index 796be6c045bcea5549dbfaea9015a18073dfaf6c..b4a76765cc4cbacccfe548d8499cec1c90c3e0e4 100644 (file)
@@ -11,31 +11,21 @@ env:
   global:
   - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
   - MAKEFLAGS="-j3 --output-sync"
+services:
+  - docker
 before_install:
-  - wget http://ww1.microchip.com/downloads/en/DeviceDoc/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz || wget http://qmk.fm/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
-  # Need DFU > .5 for dfu-suffix
-  - sudo add-apt-repository --yes ppa:tormodvolden/ppa
-  - sudo apt-get update -qq
+  - docker build -t qmkfm/qmk_firmware .
 install:
-  - tar -zxf avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
-  - export PATH="$PATH:$TRAVIS_BUILD_DIR/avr8-gnu-toolchain-linux_x86_64/bin"
   - npm install -g moxygen
-  - sudo apt-get -y --force-yes install dfu-util
-before_script:
-  - avr-gcc --version
 script:
-- git rev-parse --short HEAD
-- bash util/travis_test.sh
-- bash util/travis_build.sh
-- bash util/travis_docs.sh
+  - git rev-parse --short HEAD
+  - bash util/travis_test.sh
+  - bash util/travis_build.sh
+  - bash util/travis_docs.sh
 addons:
   apt:
     packages:
-    - dfu-programmer
     - pandoc
-    - gcc-arm-none-eabi
-    - binutils-arm-none-eabi
-    - libnewlib-arm-none-eabi
     - diffutils
     - dos2unix
     - doxygen
index 6bd5acb335736505fc2cb4f400872244c07a8813..f15eb2ee3602c287d6c6e9b99ca4466d6effffe9 100644 (file)
@@ -9,7 +9,6 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
     dfu-programmer \
     dfu-util \
     gcc \
-    gcc-arm-none-eabi \
     gcc-avr \
     git \
     libnewlib-arm-none-eabi \
@@ -19,11 +18,12 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
     zip \
     && rm -rf /var/lib/apt/lists/*
 
-ENV KEYBOARD=ergodox_ez
-ENV KEYMAP=default
+# upgrade gcc-arm-none-eabi from the default 5.4.1 to 6.3.1 due to ARM runtime issues
+RUN wget -q https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 -O - | \
+    tar xj --strip-components=1 -C /
 
 VOLUME /qmk_firmware
 WORKDIR /qmk_firmware
 COPY . .
 
-CMD make $KEYBOARD:$KEYMAP
+CMD make all:default
index dd12c91ce34e07a3cea177c08ccf40e389c17a35..9ac97a9a160bfc170ea0819e8c600bd29a2d651a 100644 (file)
@@ -38,7 +38,7 @@ or `keymap.c`:
         } else {
           tap_code(KC_PGUP);
         }
-      } else if (index == 1) { /* Second encoder
+      } else if (index == 1) { /* Second encoder */  
         if (clockwise) {
           tap_code(KC_UP);
         } else {
index 3b6a488ed603f19b32480b966dcd940d2a6bd766..e183d77eeb57854157d9e7981efc325f18960894 100644 (file)
@@ -12,11 +12,17 @@ Within the folder `users` is a directory for each user. This is a place for user
 
 ### Keyboard Project Structure
 
-Within the folder `keyboards` and its subfolder `handwired` is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard`. Within it you'll find the following structure:
+Within the folder `keyboards`, its subfolder `handwired` and its vendor and manufacture subdirectories e.g. `clueboard` is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard/2x1800`. Within it, you'll find the following structure:
 
 * `keymaps/`: Different keymaps that can be built
 * `rules.mk`: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific `rules.mk`.
 * `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`.
+* `info.json`: The file used for setting layout for QMK Configurator. See [Configurator Support](reference_configurator_support.md) for more information.
+* `readme.md`: A brief overview of the keyboard.
+* `<keyboardName>.h`: This file is where the keyboard layout is defined against the keyboard's switch matrix.
+* `<keyboardName>.c`: This file is where you can find custom code for the keyboard.  
+
+For more information on project structure, see [QMK Keyboard Guidelines](hardware_keyboard_guidelines.md).
 
 ### Keymap Structure
 
index bb1a2d74ffd2ab455ac1ac974ea22d7dd29ca734..4a47a92b1161c1e5e73bcd2cbf651fe85f38318a 100644 (file)
@@ -65,11 +65,30 @@ By default the I2C1 hardware driver is assumed to be used. If another hardware d
 
 STM32 MCUs allows a variety of pins to be configured as I2C pins depending on the hardware driver used. By default B6 and B7 are set to I2C. You can use these defines to set your i2c pins:
 
-| Variable    | Description                                  | Default |
-|-------------|----------------------------------------------|---------|
-| `I2C1_BANK` | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) | `GPIOB` |
-| `I2C1_SCL`  | The pin number for the SCL pin (0-9)         | `6`     |
-| `I2C1_SDA`  | The pin number for the SDA pin (0-9)         | `7`     |
+| Variable                 | Description                                                                                  | Default |
+|--------------------------|----------------------------------------------------------------------------------------------|---------|
+| `I2C1_SCL_BANK`          | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) to use for SCL                                  | `GPIOB` |
+| `I2C1_SDA_BANK`          | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) to use for SDA                                  | `GPIOB` |
+| `I2C1_SCL`               | The pin number for the SCL pin (0-9)                                                         | `6`     |
+| `I2C1_SDA`               | The pin number for the SDA pin (0-9)                                                         | `7`     |
+| `I2C1_BANK` (deprecated) | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superceded by `I2C1_SCL_BANK`, `I2C1_SDA_BANK` | `GPIOB` |
+
+STM32 MCUs allow for different timing parameters when configuring I2C. These can be modified using the following parameters, using https://www.st.com/en/embedded-software/stsw-stm32126.html as a reference:
+
+| Variable              | Default |
+|-----------------------|---------|
+| `I2C1_TIMINGR_PRESC`  | `15U`   |
+| `I2C1_TIMINGR_SCLDEL` | `4U`    |
+| `I2C1_TIMINGR_SDADEL` | `2U`    |
+| `I2C1_TIMINGR_SCLH`   | `15U`   |
+| `I2C1_TIMINGR_SCLL`   | `21U`   |
+
+STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2C mode. See the respective datasheet for the appropriate values for your MCU.
+
+| Variable            | Default |
+|---------------------|---------|
+| `I2C1_SCL_PAL_MODE` | `4`     |
+| `I2C1_SDA_PAL_MODE` | `4`     |
 
 You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
 
index e9cfd34252011b12abfe697a82675851c950ca15..3ff87856e488d302d7ddb4a6a6de2cf1f5370d31 100644 (file)
@@ -344,23 +344,24 @@ This is a reference only. Each group of keys links to the page documenting their
 
 ## [Mod-Tap Keys](feature_advanced_keycodes.md#mod-tap)
 
-|Key         |Aliases                                                          |Description                                            |
-|------------|-----------------------------------------------------------------|-------------------------------------------------------|
-|`LCTL_T(kc)`|`CTL_T(kc)`                                                      |Left Control when held, `kc` when tapped               |
-|`LSFT_T(kc)`|`SFT_T(kc)`                                                      |Left Shift when held, `kc` when tapped                 |
-|`LALT_T(kc)`|`ALT_T(kc)`                                                      |Left Alt when held, `kc` when tapped                   |
-|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped                   |
-|`RCTL_T(kc)`|                                                                 |Right Control when held, `kc` when tapped              |
-|`RSFT_T(kc)`|                                                                 |Right Shift when held, `kc` when tapped                |
-|`RALT_T(kc)`|`ALGR_T(kc)`                                                     |Right Alt when held, `kc` when tapped                  |
-|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)`                                       |Right GUI when held, `kc` when tapped                  |
-|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)`                                       |Left Shift and GUI when held, `kc` when tapped         |
-|`LCA_T(kc)` |                                                                 |Left Control and Alt when held, `kc` when tapped       |
-|`LCAG_T(kc)`|                                                                 |Left Control, Alt and GUI when held, `kc` when tapped  |
-|`RCAG_T(kc)`|                                                                 |Right Control, Alt and GUI when held, `kc` when tapped |
-|`C_S_T(kc)` |                                                                 |Left Control and Shift when held, `kc` when tapped     |
-|`MEH_T(kc)` |                                                                 |Left Control, Shift and Alt when held, `kc` when tapped|
-|`HYPR_T(kc)`|`ALL_T(kc)`                                                      |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
+|Key          |Aliases                                                          |Description                                            |
+|-------------|-----------------------------------------------------------------|-------------------------------------------------------|
+|`MT(mod, kc)`|                                                                 |`mod` when held, `kc` when tapped                      |
+|`LCTL_T(kc)` |`CTL_T(kc)`                                                      |Left Control when held, `kc` when tapped               |
+|`LSFT_T(kc)` |`SFT_T(kc)`                                                      |Left Shift when held, `kc` when tapped                 |
+|`LALT_T(kc)` |`ALT_T(kc)`                                                      |Left Alt when held, `kc` when tapped                   |
+|`LGUI_T(kc)` |`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped                   |
+|`RCTL_T(kc)` |                                                                 |Right Control when held, `kc` when tapped              |
+|`RSFT_T(kc)` |                                                                 |Right Shift when held, `kc` when tapped                |
+|`RALT_T(kc)` |`ALGR_T(kc)`                                                     |Right Alt when held, `kc` when tapped                  |
+|`RGUI_T(kc)` |`RCMD_T(kc)`, `RWIN_T(kc)`                                       |Right GUI when held, `kc` when tapped                  |
+|`SGUI_T(kc)` |`SCMD_T(kc)`, `SWIN_T(kc)`                                       |Left Shift and GUI when held, `kc` when tapped         |
+|`LCA_T(kc)`  |                                                                 |Left Control and Alt when held, `kc` when tapped       |
+|`LCAG_T(kc)` |                                                                 |Left Control, Alt and GUI when held, `kc` when tapped  |
+|`RCAG_T(kc)` |                                                                 |Right Control, Alt and GUI when held, `kc` when tapped |
+|`C_S_T(kc)`  |                                                                 |Left Control and Shift when held, `kc` when tapped     |
+|`MEH_T(kc)`  |                                                                 |Left Control, Shift and Alt when held, `kc` when tapped|
+|`HYPR_T(kc)` |`ALL_T(kc)`                                                      |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
 
 ## [RGB Lighting](feature_rgblight.md)
 
index a20a6c9adb6cf15a79bc95c333b1b4969c35a38e..784c6d9f75acf16cb68d99cb0cdffe0894b1af48 100644 (file)
@@ -89,7 +89,7 @@ Once the layout is as desired, move to the Raw Data tab in KLE, and copy the con
 
 To convert this data into our JSON, go to the [QMK KLE-JSON Converter](https://qmk.fm/converter/), paste the Raw Data into the Input field, and click the Convert button. After a moment, our JSON data will appear in the Output field. Copy the contents to a new text document, and name the document `info.json`, saving it in the same folder that contains `numpad.h`.
 
-Use the `keyboard_name` object to set the name of the keyboard. The `bootloader` object is deprecated, so it can be deleted. For instruction purposes, we will put each key's object on its own line. This is only to make the file more human-readable, and does not affect the Configurator's functionality.
+Use the `keyboard_name` object to set the name of the keyboard. For instruction purposes, we will put each key's object on its own line. This is only to make the file more human-readable, and does not affect the Configurator's functionality.
 
 ```json
 {
diff --git a/docs/zh-cn/faq_build.md b/docs/zh-cn/faq_build.md
new file mode 100644 (file)
index 0000000..60d9020
--- /dev/null
@@ -0,0 +1,150 @@
+# 关于构建的常见问题
+
+本页所写是QMK构建的常见问题.如果你还没有进行过编译,就看一下[构建环境搭建](getting_started_build_tools.md) 和 [make的说明](getting_started_make_guide.md).
+
+## 如果您不能在Linux上编程
+您需要适当的权限才能操作设备。对于Linux用户, 请参阅下方有关`udev`规则的说明。如果您对`udev`有问题,解决方法是用`sudo`命令。如果您不熟悉此命令,使用`man sudo`查看其手册或[看这个网页](https://linux.die.net/man/8/sudo).
+
+在你的主控是ATMega32u4时,以下是使用`sudo`命令的样例:
+
+    $ sudo dfu-programmer atmega32u4 erase --force
+    $ sudo dfu-programmer atmega32u4 flash your.hex
+    $ sudo dfu-programmer atmega32u4 reset
+
+或只用;
+
+    $ sudo make <keyboard>:<keymap>:dfu
+
+使用`sudo`运行`make`一般来说**不**推荐,如果可能,尽量使用前一种方法之一。
+
+### Linux `udev` 规则
+在Linux上,您需要适当的权限才能访问MCU。你也可以在刷新固件时使用 `sudo`,或把这些文件放到`/etc/udev/rules.d/`。
+
+**/etc/udev/rules.d/50-atmel-dfu.rules:**
+```
+# Atmel ATMega32U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
+# Atmel USBKEY AT90USB1287
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
+# Atmel ATMega32U2
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
+```
+
+**/etc/udev/rules.d/52-tmk-keyboard.rules:**
+```
+# tmk键盘产品     https://github.com/tmk/tmk_keyboard
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
+```
+**/etc/udev/rules.d/54-input-club-keyboard.rules:**
+
+```
+# Input Club keyboard bootloader
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
+```
+
+### 串行设备在Linux上检测不到bootloader模式
+确保您的内核对您的设备有相应的支持。 如果你的设备是 USB ACM, 比如Pro Micro (Atmega32u4),就要加上`CONFIG_USB_ACM=y`. 其他设备可能需要`USB_SERIAL` 及其任何子选项。
+
+## DFU Bootloader的未知设备
+
+如果您在使用Windows来刷新键盘的时候碰到了问题,检查设备管理器。如果在键盘处于 "bootloader模式"时你看到 "未知设备",说明你可能面临设备问题。
+
+重新运行MSYS2上的安装脚本或许会凑效(比如在MSYS2/WSL运行 `./util/qmk_install.sh`) 或者重新安装QMK工具箱也可能会解决你的问题。
+
+如果以上方法还是短针攻疽,那您可能需要使用[Zadig Utility](https://zadig.akeo.ie/)。下载此程序, 找到设备问题, 然后选择 `WinUSB`选项, 然后点击"Reinstall driver"。完成后再试试刷新你的键盘。倘若依然徒劳无功,那就尝试所有选项直到好用为止。
+
+?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但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都没有问题,除了有极低的与其他产品发生冲突的可能性。
+
+大多数QMK主板使用`0xFEED`作为vendor ID。您应该查看其他键盘,以确保选择了唯一的Product ID。
+
+也要看看这个。
+https://github.com/tmk/tmk_keyboard/issues/150
+
+一也可以在下方链接购买一个唯一的VID:PID。不过个人使用似乎用不着这个。
+- http://www.obdev.at/products/vusb/license.html
+- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
+
+## 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注释错了。
+
+```
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 2048
+#   Atmel DFU loader 4096       (TMK Alt Controller)
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=2048
+```
+
+## 在MacOS上 `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)` 
+这是brew更新的问题,导致AVR GCC依赖的符号链接被损坏。
+
+解决方案是移除并重新安装所有受影响的模块。
+
+```
+brew rm avr-gcc
+brew rm dfu-programmer
+brew rm dfu-util
+brew rm gcc-arm-none-eabi
+brew rm avrdude
+brew install avr-gcc
+brew install dfu-programmer
+brew install dfu-util
+brew install gcc-arm-none-eabi
+brew install avrdude
+```
+
+### avr-gcc 8.1 和 LUFA
+
+如果你把avr-gcc升级到7以上你可能会遇到关于LUFA的问题。比如:
+
+`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
+
+那你就需要在brew中把avr-gcc回退到7。
+
+```
+brew uninstall --force avr-gcc
+brew install avr-gcc@7
+brew link --force avr-gcc@7
+```
+
+### 我刷新了我的键盘但是键盘不工作/按键没有注册 - 而且还是ARM的 (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
+由于EEPROM在基于ARM的芯片上的工作原理,保存的设置可能不再有效。这会影响默认层,而且*或许*在某些情况下,会使键盘不好用,我们仍在调查这些情况。重置EEPROM将解决此问题。
+
+[Planck rev6键盘重置EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) 是用于强制重置EEPROM的。刷入这个文件后,再次刷入正常固件,这会将键盘恢复到_正常_工作状态。
+[Preonic rev3键盘重置EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
+
+如果以任何形式启用了bootmagic, 那么您还需要(看[Bootmagic文档](feature_bootmagic.md) 以及键盘信息,以了解如何执行此操作的详细信息).
diff --git a/docs/zh-cn/faq_debug.md b/docs/zh-cn/faq_debug.md
new file mode 100644 (file)
index 0000000..ca8b3fd
--- /dev/null
@@ -0,0 +1,233 @@
+# 调试的常见问题
+
+本篇详细介绍了人们在键盘故障排除时的各种常见问题。
+
+# 调试控制台
+
+## `hid_listen` 无法识别设备
+当设备的调试控制台未就绪时,您将看到如下内容:
+
+```
+Waiting for device:.........
+```
+
+插入设备后,*hid_listen*找到该设备,您将收到以下消息:
+
+```
+Waiting for new device:.........................
+Listening:
+```
+
+如果您无法获得这条“Listening:”消息,请尝试在[Makefile]中使用 `CONSOLE_ENABLE=yes`
+
+在Linux这样的操作系统上,你可能需要一些权限。
+- 使用`sudo hid_listen`
+
+## 控制台没有返回消息
+检查:
+- *hid_listen* 找到了你的设备。看前面。
+- 输入**Magic**+d打开调试。详见[Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands)。
+- 设置`debug_enable=true` ,一般存在于**matrix.c**的`matrix_init()`中。
+- 尝试使用'print'函数而不要用调试输出。详见**common/print.h**。
+- 断开其他有控制台功能的设备。 详见[Issue #97](https://github.com/tmk/tmk_keyboard/issues/97)。
+
+## Linux或UNIX这样的系统如何请求超级用户权限
+用'sudo'来执行*hid_listen*就有权限了。
+```
+$ sudo hid_listen
+```
+
+或者把一个文件放到规则文件夹来为TMK设备添加*udev规则*,不同系统的目录可能有所不同。
+
+文件: /etc/udev/rules.d/52-tmk-keyboard.rules(在Ubuntu系统的情况下)
+```
+# tmk keyboard products     https://github.com/tmk/tmk_keyboard
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
+```
+
+***
+
+# 其他
+## 安全注意事项
+
+你应该不想要把你的键盘变成"砖头"吧,就是变成没法重写固件的那种。
+下面讲解一些参数来告诉你什么风险很大(其实也不是很大)。
+
+- 假如你键盘表面没有设计重置键"RESET", 那你要进入bootloader的话就要按PCB上的RESET了。
+  按PCB上的RESET要拧开键盘底部。
+- 如果 tmk_core / common 里面的文件丢失键盘可能失灵。
+- .hex太大可能不太好; `make dfu` 会删除块,检验大小(咦?好像反了...)。
+  一但出错,刷新键盘失败的话就困在DFU出不去了。
+  - 所以, 要知道大小限制。 Planck键盘上.hex文件最大大小是 is 7000h (十进制是28672)
+
+```
+Linking: .build/planck_rev4_cbbrowne.elf                                                            [OK]
+Creating load file for Flash: .build/planck_rev4_cbbrowne.hex                                       [OK]
+
+Size after:
+   text    data     bss     dec     hex filename
+      0   22396       0   22396    577c planck_rev4_cbbrowne.hex
+```
+
+  - 上面那个文件大小是 22396/577ch,比28672/7000h小
+  - 当你有一个合适的.hex文件时,你就要重试加载那个了
+  - 您在键盘Makefile中的某些选项可能消耗额外内存;注意以下这几个
+    BOOTMAGIC_ENABLE, MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE
+- DFU 工具/不/可以写入bootloader (unless you throw in extra fruit salad of options), 
+  所以还是有点危险的
+- EEPROM大概有100000次循环寿命。不要总是频繁重写固件;EEPROM会玩坏的。
+## 全键无冲不好用
+首先你要在**Makefile**用如下命令编译固件`NKRO_ENABLE`。
+
+全键无冲还不好用的话试着用`Magic` **N** 命令(默认是`LShift+RShift+N`)。这个命令会在**全键无冲**和**六键无冲**之间临时切换。有些情况**全键无冲**不好用你就需要使用**六键无冲**模式,尤其是在BIOS中。
+
+如果你的固件使用`BOOTMAGIC_ENABLE`编译的你要用`BootMagic` **N** 命令(默认`Space+N`)打开开关。这个设置保存在EEPROM中并保存在电源循环中。
+<!--翻译问题:上面这句翻译的不贴切 -->
+
+https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
+
+
+## 指点杆需要复位电路(PS/2 鼠标支持)
+如果没有复位电路,由于硬件初始化不正确,您将得到不一致的结果。查看TPM754复位电路。
+
+- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
+- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
+
+
+## 矩阵不可读16以上的列
+当列超过16时[matrix.h]的`read_cols()`中,用`1UL<<16`而不要用`1<<16`。
+
+在C语言中`1` 是一个[int] 类型的[16 bit]值,在AVR中你不能左移大于15次。如果你使用`1<<16`的话会得到意外的零。你要用 [unsigned long]类型,比如`1UL`。
+
+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中使用它们。
+
+```
+EXTRAKEY_ENABLE = yes          # 音频控制和系统控制
+```
+
+## 睡眠唤醒不好用
+
+在Windows查看设备管理器中该键盘设备属性中电源管理选项卡中的`允许此设备唤醒计算机(O)`是否勾选。同时看一眼BIOS设置。
+
+在主机睡眠时按下任何键都可以唤醒了。
+
+## 使用Arduino?
+
+**注意Arduino的针脚名字和主控芯片的不一样。** 比如, Arduino的`D0`并不是`PD0`。自己用原理图捋一下电路。
+
+- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
+- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
+
+Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。
+
+
+## 在USB AVR使用PF4-7针脚?
+你要置位MCUCR寄存器JTD位来将PF4-7设置为GPIO。这些针脚默认是JTAG功能。 像ATMega*U* or AT90USB*这样的MCU会受影响。
+
+如果是用Teensy的话就不需要了。Tennsy自带JTAGEN位未编程来失能该功能。
+<!--翻译问题:上句可能有错,原文为:Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function. -->
+代码如下。
+```
+    // F接口JTAG失能。在四个周期内写入两次JTD位。
+    MCUCR |= (1<<JTD);
+    MCUCR |= (1<<JTD);
+```
+https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hbkb/matrix.c#L67
+
+阅读ATMega32U4的datasheet中的**26.5.1 MCU Control Register – MCUCR**。
+
+
+## 为锁定键添加指示灯
+你要自制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的试试。
+
+
+## Mac 兼容性
+### OS X 10.11 和集线器
+https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
+
+
+## 对于BIOS (UEFI)/恢复(睡眠和唤醒)/重新启动 有问题
+有人说他们的键盘在BIOS中,或许是恢复(睡眠和唤醒)后不工作.
+
+截止至目前,其根本原因未知,不排除与某些构建选项有关。试着在Makefile中失能`CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE`这样的选项,也试试其他的。
+
+https://github.com/tmk/tmk_keyboard/issues/266
+https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
+
+
+
+## FLIP 不工作
+### `AtLibUsbDfu.dll` 未找到
+从设备管理器中删除当前驱动程序并在设备管理器重新安装一个FLIP提供的程序。
+http://imgur.com/a/bnwzy
diff --git a/docs/zh-cn/faq_keymap.md b/docs/zh-cn/faq_keymap.md
new file mode 100644 (file)
index 0000000..ee8e3c0
--- /dev/null
@@ -0,0 +1,212 @@
+# 布局常见问题
+
+本页本页包含人们经常遇到的关于布局的问题。如果你觉得没什么问题,请先看[布局概览](keymap.md)。
+
+## 我能用什么键码?
+看[键码](keycodes.md)你可以找到你能用的键码索引。可以的话这些链接可以连接到更广泛的文档。
+
+键码实际上定义在[common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
+
+## 默认的键码什么样?
+
+世界上有三种标准键盘设计,分别是:ANSI, ISO, and JIS. 主要是北美用ANSI(译者注:中国很多键盘使用这个), 欧洲和非洲主要使用ISO,日本使用JIS。未提及的区域通常使用ANSI或ISO。与这些设计对应的键代码如下所示:
+
+<!-- 该图片的来源: http://www.keyboard-layout-editor.com/#/gists/bf431647d1001cff5eff20ae55621e9a -->
+![键盘设计图](https://i.imgur.com/5wsh5wM.png)
+
+## 我有一些键变成了其他功能或者不工作了
+
+QMK有两个功能,Bootmagic和命令行,它允许您在运行中更改键盘的行为。该功能包括但不仅限于, 交换Ctrl/Caps,关闭界面,交换Alt/Gui,交换 Backspace/Backslash,禁用所有键,以及其他的行为改变。
+
+快速解决方法是插入键盘时按住`Space`+`Backspace`。该操作将重置已保存设置,让这些键回复初始功能。这招不好用的话参阅下方:
+
+* [Bootmagic](feature_bootmagic.md)
+* [命令](feature_command.md) 
+
+## 菜单键不好用
+
+现在大多数键盘 `KC_RGUI`和`KC_RCTL`中间的键子叫做`KC_APP`。这是因为在这个键子发明之前相关标准里就已经有键叫做`MENU(菜单)`了,所以微软叫他`APP(应用)`键。
+
+## `KC_SYSREQ` 不工作
+使用抓屏的键码(`KC_PSCREEN`或`KC_PSCR`)而不用`KC_SYSREQ`。组合键'Alt + Print Screen'会被当作'System request'。
+
+见[issue #168](https://github.com/tmk/tmk_keyboard/issues/168)和
+* http://en.wikipedia.org/wiki/Magic_SysRq_key
+* http://en.wikipedia.org/wiki/System_request
+
+## 电源键不工作
+
+这有点让人困惑,QMK有两个"Power(电源)"键码: `KC_POWER` 在键盘/小键盘的HID使用页面中,`KC_SYSTEM_POWER` (或者叫`KC_PWR`)在用户页。
+
+前者只能被macOS识别,但是后者,即`KC_SLEP`和`KC_WAKE`三大主要操作系统全都支持,所以推荐使用这两个。Windows下这些键立即生效,macOS要长按直到弹出对话框。
+
+## 自动大小写锁定
+可以解决'the'问题(正常应为The)。我经常在输入'The'时不慎输入了'the'或者'THe'。自动大小写锁定可以修正此类问题。详见下方链接。
+https://github.com/tmk/tmk_keyboard/issues/67
+
+## 修改 键/层 卡住
+除非正确配置层切换,否则修改键或层可能会卡住。
+对于修改键和图层操作,必须把`KC_TRANS`放到目标层的相同位置,用于注销修改键或在释放事件时返回到上一层。
+* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#31-momentary-switching
+* http://geekhack.org/index.php?topic=57008.msg1492604#msg1492604
+* https://github.com/tmk/tmk_keyboard/issues/248
+
+
+## 机械自锁开关支持Mechanical Lock Switch Support
+
+本功能用于*机械自锁开关*比如[this Alps one](http://deskthority.net/wiki/Alps_SKCL_Lock)。你可以通过向`config.h`添加以下宏来使能该功能:
+
+```
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+```
+
+在使能该功能后,要在键盘中使用`KC_LCAP`, `KC_LNUM` 和 `KC_LSCR`这三个键码。
+
+远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。***
+
+## 输入ASCII之外的特殊字符比如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
+
+## macOS上的`Fn` 
+
+不像大多数FN键,苹果上那个有自己的键码...呃,基本上算吧。 他取缔了基本6键无冲HID报告的第六个键码 -- 所以苹果键盘其实是5键无冲的。
+
+技术上说QMK可以发送这个键。但是,这样做需要修改报告格式以添加FN键的状态。这还不是最糟糕的,你的键盘的VID和PID和真的苹果键盘不一样的话还不会被识别。
+QMK官方支持这个会被律师函的,所以就当我没说过。
+
+详见[issue#2179](https://github.com/qmk/qmk_firmware/issues/2179)。
+
+
+## Mac OSX的媒体控制键
+#### KC_MNXT 和 KC_MPRV 在Mac上不好用
+使用 `KC_MFFD`(`KC_MEDIA_FAST_FORWARD`) 和 `KC_MRWD`(`KC_MEDIA_REWIND`),不要用 `KC_MNXT` 和 `KC_MPRV`.
+详见 https://github.com/tmk/tmk_keyboard/issues/195
+
+
+## Mac OSX中支持那些键?
+你可以从此源码中获知在OSX中支持哪些键码
+
+`usb_2_adb_keymap` 阵列映射 键盘/小键盘 页用于ADB扫描码(OSX内部键码).
+
+https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/Cosmo_USB2ADB.c
+
+`IOHIDConsumer::dispatchConsumerEvent`会处理用户页面用法。
+<!--翻译问题:上面那两句翻译的不好-> handles Consumer page usages. -->
+https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/IOHIDConsumer.cpp
+
+
+## Mac OSX中的JIS键
+岛国特别键比如`無変換(Muhenkan)`, `変換(Henkan)`, `ひらがな(hiragana)`OSX是不是别的。You can use **Seil** to enable those keys, try following options.
+<!--翻译问题:以上“岛国特别键”没有任何地域歧视的意思 -->
+* 在电脑键盘上使能NFER键
+* 在电脑键盘上使能XFER键
+* 在电脑键盘上使能KATAKAN键
+
+https://pqrs.org/osx/karabiner/seil.html
+
+
+## RN-42蓝牙模块与Karabiner不能有效协同工作
+Karabiner - Mac OSX的改键软件 - 默认RN-42模块是不会被响应的。想要Karabiner和你的键盘协同工作你要使能此选项:
+https://github.com/tekezo/Karabiner/issues/403#issuecomment-102559237
+
+此问题详见下方链接。
+https://github.com/tmk/tmk_keyboard/issues/213
+https://github.com/tekezo/Karabiner/issues/403
+
+
+## Esc 和 <code>&#96;</code> 双功能键
+
+请见[Grave Escape](feature_grave_esc.md)功能。
+
+## 右侧双角色修改键(诸如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可以识别该键码但默认不映射。
+
+目前尚不清楚如何在真正的苹果键盘按出弹出键。HHKB使用`F20`用于弹出键(`Fn+f`),该功能在MAC模式有效但不保证与苹果弹出键码相符。
+
+
+## `action_util.c`中的 `weak_mods`和`real_mods`是什么
+___待改善___
+
+real_mods 用于保存实际(物理)修改键的实际状态。
+weak_mods 用于保存虚拟或临时修改键,它将不会影响实际修改键。
+
+以按下左侧Shift键然后输入ACTION_MODS_KEY(LSHIFT, KC_A)为例,
+
+在weak_mods时,
+* (1) 按下不抬起左Shift: real_mods |= MOD_BIT(LSHIFT)
+* (2) 按 ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods |= MOD_BIT(LSHIFT)
+* (3) 抬起 ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods &= ~MOD_BIT(LSHIFT)
+real_mods 还是保持在修改状态。
+
+在没有weak_mods时,
+* (1) 按下不抬起左Shift: real_mods |= MOD_BIT(LSHIFT)
+* (2) 按 ACTION_MODS_KEY(LSHIFT, KC_A): real_mods |= MOD_BIT(LSHIFT)
+* (3) 抬起 ACTION_MODS_KEY(LSHIFT, KC_A): real_mods &= ~MOD_BIT(LSHIFT)
+此时real_mods失去‘实际左Shift’的状态。
+
+weak_mods和real_mods现已全部加入键盘数据包发送豪华套餐。
+https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57
index 7369398cc4b91b71fae0300a8da8e8c4a59c957d..5814375f371fabf7883fb02e4f16412f7b1eb8b9 100644 (file)
 
 static uint8_t i2c_address;
 
-// This configures the I2C clock to 400khz assuming a 72Mhz clock
-// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
 static const I2CConfig i2cconfig = {
-  STM32_TIMINGR_PRESC(15U) |
-  STM32_TIMINGR_SCLDEL(4U) | STM32_TIMINGR_SDADEL(2U) |
-  STM32_TIMINGR_SCLH(15U)  | STM32_TIMINGR_SCLL(21U),
+  STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
+  STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
+  STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH)  | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
   0,
   0
 };
@@ -58,13 +56,13 @@ __attribute__ ((weak))
 void i2c_init(void)
 {
   // Try releasing special pins for a short time
-  palSetPadMode(I2C1_BANK, I2C1_SCL, PAL_MODE_INPUT);
-  palSetPadMode(I2C1_BANK, I2C1_SDA, PAL_MODE_INPUT);
+  palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_INPUT);
+  palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
 
   chThdSleepMilliseconds(10);
 
-  palSetPadMode(I2C1_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN);
-  palSetPadMode(I2C1_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN);
+  palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
+  palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
 
   //i2cInit(); //This is invoked by halInit() so no need to redo it.
 }
index a15f1702dd30bdc945b82c89af5a9c7b393dd674..1bb74c800f6cff5937ed76e8edfdab8cf6c9afbe 100644 (file)
 #include "ch.h"
 #include <hal.h>
 
-#ifndef I2C1_BANK
-    #define I2C1_BANK GPIOB
+#ifdef I2C1_BANK
+    #define I2C1_SCL_BANK I2C1_BANK
+    #define I2C1_SDA_BANK I2C1_BANK
 #endif
+
+#ifndef I2C1_SCL_BANK
+    #define I2C1_SCL_BANK GPIOB
+#endif
+
+#ifndef I2C1_SDA_BANK
+    #define I2C1_SDA_BANK GPIOB
+#endif
+
 #ifndef I2C1_SCL
     #define I2C1_SCL 6
 #endif
     #define I2C1_SDA 7
 #endif
 
+// 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
+    #define I2C1_TIMINGR_PRESC 15U
+#endif
+#ifndef I2C1_TIMINGR_SCLDEL
+    #define I2C1_TIMINGR_SCLDEL 4U
+#endif
+#ifndef I2C1_TIMINGR_SDADEL
+    #define I2C1_TIMINGR_SDADEL 2U
+#endif
+#ifndef I2C1_TIMINGR_SCLH
+    #define I2C1_TIMINGR_SCLH 15U
+#endif
+#ifndef I2C1_TIMINGR_SCLL
+    #define I2C1_TIMINGR_SCLL 21U
+#endif
+
 #ifndef I2C_DRIVER
   #define I2C_DRIVER I2CD1
 #endif
index c166cd0b18c331dc355d34c6b5fcfafe29968b5d..f4dd36d6dc5a693e8cdf0dbbf4d1cfa9e540bf91 100644 (file)
@@ -37,11 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    RAISE, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, RGB, KC_RCTL
    ),
   // raise layer to handle function & nav keys
-  [_raise] = LAYOUT_all
+    [_raise] = 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, KC_DEL,
-   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_LSCR, KC_PAUSE, KC_TRNS,
-   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, KC_TRNS, KC_TRNS,
+   KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_LSCR, KC_PAUSE, KC_TRNS,
+   KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, KC_TRNS, KC_TRNS,
    KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
    ),
diff --git a/keyboards/8pack/8pack.c b/keyboards/8pack/8pack.c
new file mode 100644 (file)
index 0000000..e89d728
--- /dev/null
@@ -0,0 +1 @@
+#include "8pack.h"
diff --git a/keyboards/8pack/8pack.h b/keyboards/8pack/8pack.h
new file mode 100644 (file)
index 0000000..1c4ffb5
--- /dev/null
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_8pack_rev11
+  #include "rev11.h"
+#endif
+
+#ifdef KEYBOARD_8pack_rev12
+  #include "rev12.h"
+#endif
\ No newline at end of file
diff --git a/keyboards/8pack/config.h b/keyboards/8pack/config.h
new file mode 100644 (file)
index 0000000..88bd1f3
--- /dev/null
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x2171
+#define MANUFACTURER    Charles Garcia
+#define PRODUCT         8-Pack
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+
+#define DIRECT_PINS { { F4, F5, F6, F7 }, { B1, B3, B2, B6 } }
+
+#define BACKLIGHT_LED_COUNT 8
+#undef BACKLIGHT_PIN
+#define BACKLIGHT_PINS { D1, D0, D4, C6, D7, E6, B4, B5 }
+#define BACKLIGHT_LEVELS 8
+
+// ws2812 options
+#define RGB_DI_PIN D2 // pin the DI on the ws2812 is hooked-up to
+#define RGBLED_NUM 8 // number of LEDs
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/8pack/info.json b/keyboards/8pack/info.json
new file mode 100644 (file)
index 0000000..82122b8
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "keyboard_name": "8-Pack",
+  "url": "https://github.com/cgarcia2097/8-Pack",
+  "maintainer": "Charles Garcia",
+  "width": 4,
+  "height": 2,
+  "layouts": {
+    "LAYOUT": {
+      "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}
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/keyboards/8pack/keymaps/default/keymap.c b/keyboards/8pack/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..aa1aa91
--- /dev/null
@@ -0,0 +1,12 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = LAYOUT(
+           KC_V, KC_C, KC_X, MO(1),
+               KC_A, KC_S, KC_D, KC_F
+       ),
+       [1] = LAYOUT(
+           RGB_TOG, RGB_RMOD, RGB_MOD, KC_NO,
+               RESET,   BL_DEC,   BL_INC,  BL_TOGG
+       )
+};
diff --git a/keyboards/8pack/readme.md b/keyboards/8pack/readme.md
new file mode 100644 (file)
index 0000000..ad5df53
--- /dev/null
@@ -0,0 +1,13 @@
+# 8-Pack Macropad
+
+An open source 2x4 macropad designed by Charles Garcia.
+
+Keyboard Maintainer: [Charles Garcia](https://github.com/cgarcia2097)  
+Hardware Supported: 8-Pack Macropad PCB  
+Hardware Availability: [8-Pack Github](https://github.com/cgarcia2097/8-Pack)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make 8pack: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/8pack/rev11/config.h b/keyboards/8pack/rev11/config.h
new file mode 100644 (file)
index 0000000..83ad51a
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+#define DEVICE_VER      0x0001
diff --git a/keyboards/8pack/rev11/rev11.c b/keyboards/8pack/rev11/rev11.c
new file mode 100644 (file)
index 0000000..c54ecbe
--- /dev/null
@@ -0,0 +1 @@
+#include "rev11.h"
diff --git a/keyboards/8pack/rev11/rev11.h b/keyboards/8pack/rev11/rev11.h
new file mode 100644 (file)
index 0000000..ebf8529
--- /dev/null
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "8pack.h"
+
+#define LAYOUT( \
+    K00, K01, K02, K03, \
+       K10, K11, K12, K13 \
+) { \
+       { K13, K12, K11, K10 }, \
+    { K03, K02, K01, K00 } \
+}
diff --git a/keyboards/8pack/rev11/rules.mk b/keyboards/8pack/rev11/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/8pack/rev12/config.h b/keyboards/8pack/rev12/config.h
new file mode 100644 (file)
index 0000000..9a52750
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+#define DEVICE_VER      0x0002
diff --git a/keyboards/8pack/rev12/rev12.c b/keyboards/8pack/rev12/rev12.c
new file mode 100644 (file)
index 0000000..b2d091a
--- /dev/null
@@ -0,0 +1 @@
+#include "rev12.h"
diff --git a/keyboards/8pack/rev12/rev12.h b/keyboards/8pack/rev12/rev12.h
new file mode 100644 (file)
index 0000000..3efeb06
--- /dev/null
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "8pack.h"
+
+#define LAYOUT( \
+    K00, K01, K02, K03, \
+       K10, K11, K12, K13 \
+) { \
+    { K03, K02, K01, K00 }, \
+       { K13, K12, K11, K10 } \
+}
diff --git a/keyboards/8pack/rev12/rules.mk b/keyboards/8pack/rev12/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/8pack/rules.mk b/keyboards/8pack/rules.mk
new file mode 100644 (file)
index 0000000..97496c8
--- /dev/null
@@ -0,0 +1,63 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = caterina
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  = no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE  = no  # Audio control and System control(+450)
+CONSOLE_ENABLE   = yes # Console for debug(+400)
+COMMAND_ENABLE   = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+NKRO_ENABLE      = no  # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE     = no
+RGBLIGHT_ENABLE  = yes
+OLED_DRIVER_ENABLE = no
+
+DEFAULT_FOLDER = 8pack/rev12
index 9f639716955d16b758a5a41fa0759d4fe70a56af..acc0350739e0ebcd012c9d81bd79620e917ebdf0 100644 (file)
@@ -1,16 +1,5 @@
 #include QMK_KEYBOARD_H
 
-// Tap Dance Declarations
-enum {
-  ENT_5 = 0,
-  ZERO_7
-};
-
-// Macro Declarations
-enum {
-  DBL_0 = 0
-};
-
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* LAYER 0
@@ -24,8 +13,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [0] = LAYOUT( \
   KC_1,       KC_2,      KC_3,       \
-  KC_4,       TD(ENT_5), KC_6,       \
-  TD(ZERO_7), KC_8,      LT(1, KC_9) \
+  KC_4,       KC_5,      KC_6,       \
+  KC_7,       KC_8,      LT(1, KC_9) \
 ),
 
 /* LAYER 1
@@ -39,27 +28,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [1] = LAYOUT( \
   KC_ESC,   KC_PLUS, KC_MINS, \
-  KC_BSPC,  KC_ASTR, KC_SLSH, \
-  M(DBL_0), KC_DOT,  KC_TRNS  \
+  KC_ENTER, KC_ASTR, KC_SLSH, \
+  KC_0,     KC_DOT,  KC_TRNS  \
 )
 
 };
-
-qk_tap_dance_action_t tap_dance_actions[] = {
-  [ENT_5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_ENT),
-  [ZERO_7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_0)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  if (record->event.pressed) {
-      switch(id) {
-          case DBL_0:
-              SEND_STRING("00");
-              return false;
-      }
-  }
-  return MACRO_NONE;
-};
-
-void matrix_init_user(void) {
-}
\ No newline at end of file
diff --git a/keyboards/9key/keymaps/default/rules.mk b/keyboards/9key/keymaps/default/rules.mk
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/keyboards/9key/keymaps/tap_dance/keymap.c b/keyboards/9key/keymaps/tap_dance/keymap.c
new file mode 100644 (file)
index 0000000..a96880a
--- /dev/null
@@ -0,0 +1,69 @@
+#include QMK_KEYBOARD_H
+
+// Tap Dance Declarations
+enum tap_dances {
+  ENT_5 = 0,
+  ZERO_7,
+};
+
+// Macro Declarations
+enum custom_keycodes {
+  DBL_0 = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* LAYER 0
+ * ,-----------------------.
+ * |   1   |   2   |   3   |
+ * |-------+-------+-------|
+ * |   4   | 5/ENT |   6   | Dbl Tap 5 for Enter
+ * |-------+-------+-------|
+ * |  7/0  |   8   | 9/FN  | 7/0 = Dbl Tap 7 for 0  -  9/FN = Hold 9 for FN
+ * `-----------------------'
+ */
+[0] = LAYOUT( \
+  KC_1,       KC_2,      KC_3,       \
+  KC_4,       TD(ENT_5), KC_6,       \
+  TD(ZERO_7), KC_8,      LT(1, KC_9) \
+),
+
+/* LAYER 1
+ * ,-----------------------.
+ * |  ESC  |   +   |   -   |
+ * |-------+-------+-------|
+ * |  BSPC |   *   |   /   |
+ * |-------+-------+-------|
+ * |  00   |   .   |       |
+ * `-----------------------'
+ */
+[1] = LAYOUT( \
+  KC_ESC,   KC_PLUS, KC_MINS, \
+  KC_BSPC,  KC_ASTR, KC_SLSH, \
+  DBL_0,    KC_DOT,  KC_TRNS  \
+)
+
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [ENT_5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_ENT),
+  [ZERO_7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_0)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case DBL_0:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        tap_code(KC_P0);
+        tap_code(KC_P0);
+      }
+      break;
+
+  }
+  return true;
+};
+
+
+void matrix_init_user(void) {
+}
diff --git a/keyboards/9key/keymaps/tap_dance/rules.mk b/keyboards/9key/keymaps/tap_dance/rules.mk
new file mode 100644 (file)
index 0000000..e5ddcae
--- /dev/null
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
index e252640f7e6e9ddd8f728c753a92955d270e2c58..9fae54fa910a81595780dac6baf2e9cc60976a95 100644 (file)
@@ -47,7 +47,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 OPT_DEFS += -DBOOTLOADER_SIZE=4096
 
 # Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
+#   change to "no" to disable the options, or define them in the Makefile in
 #   the appropriate keymap folder that will get included automatically
 #
 BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
@@ -63,7 +63,7 @@ UNICODE_ENABLE = yes         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
 RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
 API_SYSEX_ENABLE = yes
-TAP_DANCE_ENABLE = yes
+TAP_DANCE_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/abstract/ellipse/info.json b/keyboards/abstract/ellipse/info.json
new file mode 100644 (file)
index 0000000..8ad50e6
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "Ellipse", 
+    "url": "https://abstractkb.tk/product/ellipse-rev1", 
+    "maintainer": "AbstractKB", 
+    "width": 3, 
+    "height": 2.25, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/config.h b/keyboards/abstract/ellipse/keymaps/abstractkb/config.h
new file mode 100644 (file)
index 0000000..3bc66cd
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019 AbstractKB
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 2
+#define RGBLIGHT_ANIMATIONS
+
+// place overrides here
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c b/keyboards/abstract/ellipse/keymaps/abstractkb/keymap.c
new file mode 100644 (file)
index 0000000..8d64941
--- /dev/null
@@ -0,0 +1,66 @@
+/* Copyright 2019 AbstractKB
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 {
+  MYKEY = SAFE_RANGE
+};*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* Base */
+    KC_MUTE,  RGB_TOG,  BL_TOGG,
+    RGB_M_SW,  RGB_M_P,        BL_BRTG
+  )
+};
+
+/*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 encoder_update_user(uint8_t index, bool clockwise) {
+       if (index == 0) { /* First encoder */
+               if (clockwise) {
+                       tap_code(KC_VOLU);
+               } else {
+                       tap_code(KC_VOLD);
+               }
+       } else if (index == 1) { /* Second encoder */
+               if (clockwise) {
+                       rgblight_increase_hue_noeeprom();
+               } else {
+                       rgblight_decrease_hue_noeeprom();
+               }
+       } else if (index == 2) { /* Third encoder */
+               if (clockwise) {
+                       backlight_increase();
+               } else {
+                       backlight_decrease();
+               }
+       }
+}
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/readme.md b/keyboards/abstract/ellipse/keymaps/abstractkb/readme.md
new file mode 100644 (file)
index 0000000..5db2eb6
--- /dev/null
@@ -0,0 +1,3 @@
+# My keymap
+
+This was used for testing lights but will become my personal keymap
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/abstractkb/rules.mk b/keyboards/abstract/ellipse/keymaps/abstractkb/rules.mk
new file mode 100644 (file)
index 0000000..54a2685
--- /dev/null
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/default/config.h b/keyboards/abstract/ellipse/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..e406c48
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 AbstractKB
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/abstract/ellipse/keymaps/default/keymap.c b/keyboards/abstract/ellipse/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..ac1ec98
--- /dev/null
@@ -0,0 +1,66 @@
+/* Copyright 2019 AbstractKB
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 {
+  MYKEY = SAFE_RANGE
+};*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* Base */
+    KC_A,      RGB_TOG,        KC_C,
+    KC_X,      KC_Y,           KC_Z
+  )
+};
+
+/*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 encoder_update_user(uint8_t index, bool clockwise) {
+       if (index == 0) { /* First encoder */
+               if (clockwise) {
+                       tap_code(KC_O);
+               } else {
+                       tap_code(KC_P);
+               }
+       } else if (index == 1) { /* Second encoder */
+               if (clockwise) {
+                       rgblight_increase_hue_noeeprom();
+               } else {
+                       rgblight_decrease_hue_noeeprom();
+               }
+       } else if (index == 2) {
+               if (clockwise) {
+                       tap_code(KC_M);
+               } else {
+                       tap_code(KC_R);
+               }
+       }
+}
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/default/readme.md b/keyboards/abstract/ellipse/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..e14c0c8
--- /dev/null
@@ -0,0 +1,6 @@
+# The default keymap for Ellipse
+
+This keymap allows for basic testing of the keypad once assembled.
+Each knob and key outputs a different standard letter keycode,
+except for the middle knob which changes the hue of the RGB LEDs and when
+pressed down turns off the RGB LEDs
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/keymaps/default/rules.mk b/keyboards/abstract/ellipse/keymaps/default/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/abstract/ellipse/readme.md b/keyboards/abstract/ellipse/readme.md
new file mode 100644 (file)
index 0000000..973d36f
--- /dev/null
@@ -0,0 +1,19 @@
+# EllipseRev1
+
+![EllipseRev1](http://abstractkb.tk/wp-content/uploads/2019/03/ellipsetop.jpg)
+
+A small keypad with more knobs than ever before!  3 Knobs and 3 MX-style switches on one little board.
+
+At this time there are 2 small known issues with the Rev 1.  One of which is that backlight breathing does not work,
+and the other issue that has been encountered is that the post_init_user function does not seem to be called.
+Hopefully these issues can be resolved soon; this QMK file is being released as orders have started to ship and they need to be configurable.
+
+Keyboard Maintainer: [AbstractKB](https://github.com/abstractkb)  
+Hardware Supported: The Abstract Ellipse Rev1  
+Hardware Availability: https://abstractkb.tk
+
+Make example for this keyboard (after setting up your build environment):
+
+    make abstract/ellipse/rev1:default:dfu
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/abstract/ellipse/rev1/config.h b/keyboards/abstract/ellipse/rev1/config.h
new file mode 100644 (file)
index 0000000..4fcf96e
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 AbstractKB
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public 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      0x0001
+#define MANUFACTURER    AbstractKB
+#define PRODUCT         EllipseRev1
+#define DESCRIPTION     The Ellipse Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#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 { D3, C7 }
+#define MATRIX_COL_PINS { F0, B6, B5 }
+#define UNUSED_PINS { B0, D0, D1, D2, D4, D6, D7, F1, F4, F5, F6, F7 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN C6
+//#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 15
+
+#define RGB_DI_PIN E6
+#ifdef RGB_DI_PIN
+   #define RGBLED_NUM 3
+   #define RGBLIGHT_HUE_STEP 8
+   #define RGBLIGHT_SAT_STEP 8
+   #define RGBLIGHT_VAL_STEP 8
+   #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+   #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+//   #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+//   #define RGBLIGHT_EFFECT_BREATHING
+//   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//   #define RGBLIGHT_EFFECT_SNAKE
+//   #define RGBLIGHT_EFFECT_KNIGHT
+//   #define RGBLIGHT_EFFECT_CHRISTMAS
+//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//   #define RGBLIGHT_EFFECT_RGB_TEST
+//   #define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/*#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)*/
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES           2     //< number of visible lines of the display
+#define LCD_DISP_LENGTH    16     //< visibles characters per line of the display
+
+#define LCD_IO_MODE      1            //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT         PORTB        //< port for the LCD lines
+#define LCD_DATA0_PORT   LCD_PORT     //< port for 4bit data bit 0
+#define LCD_DATA1_PORT   LCD_PORT     //< port for 4bit data bit 1
+#define LCD_DATA2_PORT   LCD_PORT     //< port for 4bit data bit 2
+#define LCD_DATA3_PORT   LCD_PORT     //< port for 4bit data bit 3
+#define LCD_DATA0_PIN    4            //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN    5            //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN    6            //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN    7            //< pin for 4bit data bit 3
+#define LCD_RS_PORT      LCD_PORT     //< port for RS line
+#define LCD_RS_PIN       3            //< pin  for RS line
+#define LCD_RW_PORT      LCD_PORT     //< port for RW line
+#define LCD_RW_PIN       2            //< pin  for RW line
+#define LCD_E_PORT       LCD_PORT     //< port for Enable line
+#define LCD_E_PIN        1            //< pin  for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
+
+#define NUMBER_OF_ENCODERS 3
+#define ENCODERS_PAD_A { B2, B3, D5 }
+#define ENCODERS_PAD_B { B1, B7, B4 }
+#define ENCODER_RESOLUTION 2
diff --git a/keyboards/abstract/ellipse/rev1/rev1.c b/keyboards/abstract/ellipse/rev1/rev1.c
new file mode 100644 (file)
index 0000000..ae7aa64
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 AbstractKB
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "rev1.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);
+}*/
\ No newline at end of file
diff --git a/keyboards/abstract/ellipse/rev1/rev1.h b/keyboards/abstract/ellipse/rev1/rev1.h
new file mode 100644 (file)
index 0000000..de8b9ba
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright 2019 AbstractKB
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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, \
+    K10, K11, K12   \
+) \
+{ \
+    { K00, K01,   K02 }, \
+    { K10, K11,   K12 }, \
+}
+
diff --git a/keyboards/abstract/ellipse/rev1/rules.mk b/keyboards/abstract/ellipse/rev1/rules.mk
new file mode 100644 (file)
index 0000000..880d40e
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+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           # Enable support for rotary encoders
diff --git a/keyboards/ai03/soyuz/config.h b/keyboards/ai03/soyuz/config.h
new file mode 100644 (file)
index 0000000..299e599
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xA103
+#define PRODUCT_ID      0x0004
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    ai03 Design Studio
+#define PRODUCT         Soyuz
+#define DESCRIPTION     Single-PCB Numpad Kit
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6, B6, E6, B4 }
+#define MATRIX_COL_PINS { F4, B3, D7, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN 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
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/ai03/soyuz/info.json b/keyboards/ai03/soyuz/info.json
new file mode 100644 (file)
index 0000000..e4f8eb0
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "keyboard_name": "Soyuz", 
+    "url": "https://github.com/ai03-2725/soyuz", 
+    "maintainer": "ai03", 
+    "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/keyboards/ai03/soyuz/keymaps/1U/keymap.c b/keyboards/ai03/soyuz/keymaps/1U/keymap.c
new file mode 100644 (file)
index 0000000..aa8683c
--- /dev/null
@@ -0,0 +1,57 @@
+/* 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
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  DBLZERO = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_ortho_5x4( /* Base */
+    KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, \
+       KC_P7,   KC_P8,   KC_P9,   KC_MINS, \
+       KC_P4,   KC_P5,   KC_P6,   KC_PPLS, \
+       KC_P1,   KC_P2,   KC_P3,   KC_EQL,  \
+       DBLZERO, KC_P0,   KC_PDOT, KC_PENT  \
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case DBLZERO:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("00");
+      } else {
+        // when keycode QMKBEST is released
+      }
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/ai03/soyuz/keymaps/1U/readme.md b/keyboards/ai03/soyuz/keymaps/1U/readme.md
new file mode 100644 (file)
index 0000000..f030f8c
--- /dev/null
@@ -0,0 +1,3 @@
+# The 1U keymap for Soyuz
+
+A keymap that uses 1U keys everywhere for a 20-key numpad.
\ No newline at end of file
diff --git a/keyboards/ai03/soyuz/keymaps/default/keymap.c b/keyboards/ai03/soyuz/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..62bb5c2
--- /dev/null
@@ -0,0 +1,42 @@
+/* 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_ortho_5x4( /* Base */
+    KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+       KC_P7,   KC_P8,   KC_P9,   KC_PPLS, \
+       KC_P4,   KC_P5,   KC_P6,   KC_PPLS, \
+       KC_P1,   KC_P2,   KC_P3,   KC_PENT, \
+       KC_P0,   KC_P0,   KC_PDOT, KC_PENT  \
+  )
+};
+
+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/ai03/soyuz/keymaps/default/readme.md b/keyboards/ai03/soyuz/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..f4954e8
--- /dev/null
@@ -0,0 +1,3 @@
+# The default keymap for Soyuz
+
+A very basic keymap for a "typical" numpad layout using 2U keys wherever applicable.
\ No newline at end of file
diff --git a/keyboards/ai03/soyuz/readme.md b/keyboards/ai03/soyuz/readme.md
new file mode 100644 (file)
index 0000000..e88dfab
--- /dev/null
@@ -0,0 +1,15 @@
+# Soyuz
+
+![soyuz](https://raw.githubusercontent.com/ai03-2725/Soyuz/master/Renders/Front.png)
+
+A single-PCB numpad kit  
+
+Keyboard Maintainer: [ai03](https://github.com/ai03-2725)  
+Hardware Supported: [Soyuz PCB](https://github.com/ai03-2725/soyuz)  
+Hardware Availability: Various vendors - List will be maintained in the [PCB repo](https://github.com/ai03-2725/soyuz)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ai03/soyuz: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/ai03/soyuz/rules.mk b/keyboards/ai03/soyuz/rules.mk
new file mode 100644 (file)
index 0000000..5df789e
--- /dev/null
@@ -0,0 +1,82 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = 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 = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+
+LAYOUTS = ortho_5x4
diff --git a/keyboards/ai03/soyuz/soyuz.c b/keyboards/ai03/soyuz/soyuz.c
new file mode 100644 (file)
index 0000000..dc73f19
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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 "soyuz.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/ai03/soyuz/soyuz.h b/keyboards/ai03/soyuz/soyuz.h
new file mode 100644 (file)
index 0000000..a379f8e
--- /dev/null
@@ -0,0 +1,41 @@
+/* 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/>.
+ */
+#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_5x4( \
+       K00, K01, K02, K03, \
+       K10, K11, K12, K13, \
+       K20, K21, K22, K23, \
+       K30, K31, K32, K33, \
+       K40, K41, K42, K43  \
+) { \
+       { K00, K01, K02, K03 }, \
+       { K10, K11, K12, K13 }, \
+       { K20, K21, K22, K23 }, \
+       { K30, K31, K32, K33 }, \
+       { K40, K41, K42, K43 }  \
+}
diff --git a/keyboards/akb/eb46/config.h b/keyboards/akb/eb46/config.h
new file mode 100644 (file)
index 0000000..965f769
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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 0x4646
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elliot Powell
+#define PRODUCT eb46
+#define DESCRIPTION eb46 running qmk
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS \
+  { B5, B4, D7, B6 }
+#define MATRIX_COL_PINS \
+  { B0, B1, B2, B3, B7, D0, D1, D2, D3, D5, D4, D6, C6 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
diff --git a/keyboards/akb/eb46/eb46.c b/keyboards/akb/eb46/eb46.c
new file mode 100644 (file)
index 0000000..3417b43
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "eb46.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/akb/eb46/eb46.h b/keyboards/akb/eb46/eb46.h
new file mode 100644 (file)
index 0000000..8dd5290
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 xxx KC_NO
+
+#define LAYOUT(\
+  k000, k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b,\
+       k100, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a,     \
+       k200, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a,     \
+       k300, k30, k31, k32, k33,           k36,      k38, k39, k3a     \
+) \
+{ \
+  {k000, k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b},\
+       {k100, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, xxx},\
+       {k200, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, xxx},\
+       {k300, k30, k31, k32, k33, xxx, xxx, k36, xxx, k38, k39, k3a, xxx} \
+}
diff --git a/keyboards/akb/eb46/info.json b/keyboards/akb/eb46/info.json
new file mode 100644 (file)
index 0000000..5513df3
--- /dev/null
@@ -0,0 +1,58 @@
+{
+    "keyboard_name": "eb46",
+    "maintainer": "e11i0t23",
+    "width": 13.25,
+    "height": 4,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                { "label": "F1", "x": 0, "y": 0 },
+                { "label": "Esc", "x": 1.25, "y": 0 },
+                { "label": "Q", "x": 2.25, "y": 0 },
+                { "label": "W", "x": 3.25, "y": 0 },
+                { "label": "E", "x": 4.25, "y": 0 },
+                { "label": "R", "x": 5.25, "y": 0 },
+                { "label": "T", "x": 6.25, "y": 0 },
+                { "label": "Y", "x": 7.25, "y": 0 },
+                { "label": "U", "x": 8.25, "y": 0 },
+                { "label": "I", "x": 9.25, "y": 0 },
+                { "label": "O", "x": 10.25, "y": 0 },
+                { "label": "P", "x": 11.25, "y": 0 },
+                { "label": "BackSpace", "x": 12.25, "y": 0 },
+                { "label": "F2", "x": 0, "y": 1 },
+                { "label": "Tab", "x": 1.25, "y": 1, "w": 1.25 },
+                { "label": "A", "x": 2.5, "y": 1 },
+                { "label": "S", "x": 3.5, "y": 1 },
+                { "label": "D", "x": 4.5, "y": 1 },
+                { "label": "F", "x": 5.5, "y": 1 },
+                { "label": "G", "x": 6.5, "y": 1 },
+                { "label": "H", "x": 7.5, "y": 1 },
+                { "label": "J", "x": 8.5, "y": 1 },
+                { "label": "K", "x": 9.5, "y": 1 },
+                { "label": "L", "x": 10.5, "y": 1 },
+                { "label": "Enter", "x": 11.5, "y": 1, "w": 1.75 },
+                { "label": "F3", "x": 0, "y": 2 },
+                { "label": "Shift", "x": 1.25, "y": 2, "w": 1.75 },
+                { "label": "Z", "x": 3, "y": 2 },
+                { "label": "X", "x": 4, "y": 2 },
+                { "label": "C", "x": 5, "y": 2 },
+                { "label": "V", "x": 6, "y": 2 },
+                { "label": "B", "x": 7, "y": 2 },
+                { "label": "N", "x": 8, "y": 2 },
+                { "label": "M", "x": 9, "y": 2 },
+                { "label": "<", "x": 10, "y": 2 },
+                { "label": ">", "x": 11, "y": 2 },
+                { "label": "RShift", "x": 12, "y": 2, "w": 1.25 },
+                { "label": "F4", "x": 0, "y": 3 },
+                { "label": "Ctrl", "x": 1.25, "y": 3, "w": 1.25 },
+                { "label": "Win", "x": 2.5, "y": 3 },
+                { "label": "Alt", "x": 3.5, "y": 3, "w": 1.25 },
+                { "label": "FN0", "x": 4.75, "y": 3, "w": 2.25 },
+                { "label": "Space", "x": 7, "y": 3, "w": 2.75 },
+                { "label": "Menu", "x": 9.75, "y": 3 },
+                { "label": "RAlt", "x": 10.75, "y": 3, "w": 1.25 },
+                { "label": "Super", "x": 12.25, "y": 3 }
+            ]
+        }
+    }
+}
diff --git a/keyboards/akb/eb46/keymaps/default/keymap.c b/keyboards/akb/eb46/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..c2114cc
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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_F5,    KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+  KC_PGUP,  KC_TAB,  KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,       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_RSFT,
+  KC_ESC,   LCTL_T(KC_LBRC), KC_LGUI, KC_LALT,  KC_SPC,  LT(1, KC_SPC), KC_RALT, MO(2), RCTL_T(KC_RBRC) ),
+  [1] = LAYOUT( /* Base */
+  _______,  _______,  KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0,     _______,
+  _______,  _______,  _______, _______, _______, _______, _______, KC_LEFT, KC_UP,   KC_DOWN, KC_RIGHT,         _______,
+  _______,  _______,           KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, KC_MINS, KC_EQL, _______,
+  _______,  _______,  _______, _______,          _______,          _______,          _______, _______, _______ ),
+  [2] = LAYOUT( /* Base */
+  _______,  KC_F1  ,  KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12 ,
+  _______,  _______,  _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, KC_NUHS,          _______,
+  _______,  _______,           KC_NUBS, _______, _______, _______, _______, _______, _______, KC_SLSH, _______, _______,
+  _______,  _______,  _______, _______,          _______,          _______,          _______, _______,  RESET ),
+};
diff --git a/keyboards/akb/eb46/readme.md b/keyboards/akb/eb46/readme.md
new file mode 100644 (file)
index 0000000..e7d1046
--- /dev/null
@@ -0,0 +1,13 @@
+# eb46
+
+EB46: A 40% plus macro keys
+
+Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23), [/u/e11i0t23 on reddit](https://reddit.com/u/e11i0t23)  
+Hardware Supported: EB46 PCB  
+Hardware Availability: Coming Soon
+
+Make example for this keyboard (after setting up your build environment):
+
+    make akb/eb46: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/akb/eb46/rules.mk b/keyboards/akb/eb46/rules.mk
new file mode 100644 (file)
index 0000000..195c9e5
--- /dev/null
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/akb/raine/config.h b/keyboards/akb/raine/config.h
new file mode 100644 (file)
index 0000000..a28fcee
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER AKB
+#define PRODUCT Raine M3
+#define DESCRIPTION Raine M3
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS \
+  { E6, C6, F7, B2, B0 }
+#define MATRIX_COL_PINS \
+  { F6, F5, F4, B1, F1, F0, B3, B7, D0, D1, D2, D3, D5, D4, D6, D7 }
+#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
+
+/* 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
diff --git a/keyboards/akb/raine/info.json b/keyboards/akb/raine/info.json
new file mode 100644 (file)
index 0000000..0992f86
--- /dev/null
@@ -0,0 +1,84 @@
+{
+    "keyboard_name": "raine",
+    "maintainer": "e11i0t23",
+    "width": 16.25,
+    "height": 5.25,
+    "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": 6, "y": 0 },
+                { "label": "7", "x": 7, "y": 0 },
+                { "label": "8", "x": 8, "y": 0 },
+                { "label": "9", "x": 9, "y": 0 },
+                { "label": "0", "x": 10, "y": 0 },
+                { "label": "_", "x": 11, "y": 0 },
+                { "label": "BSP", "x": 12, "y": 0 },
+                { "label": "Num Lock", "x": 13.25, "y": 0 },
+                { "label": "Scroll Lock", "x": 14.25, "y": 0 },
+                { "label": "Insert", "x": 15.25, "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, "w": 1.5 },
+                { "label": "7", "x": 13.25, "y": 1 },
+                { "label": "8", "x": 14.25, "y": 1 },
+                { "label": "9", "x": 15.25, "y": 1 },
+                { "label": "Caps", "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": "ENTER", "x": 11.75, "y": 2, "w": 1.25 },
+                { "label": "4", "x": 13.25, "y": 2 },
+                { "label": "5", "x": 14.25, "y": 2 },
+                { "label": "6", "x": 15.25, "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": "Shift", "x": 10.25, "y": 3, "w": 1.5 },
+                { "x": 12, "y": 3.25 },
+                { "label": "1", "x": 13.25, "y": 3 },
+                { "label": "2", "x": 14.25, "y": 3 },
+                { "label": "3", "x": 15.25, "y": 3 },
+                { "label": "Ctrl", "x": 0, "y": 4, "w": 1.25 },
+                { "label": "Alt", "x": 2.25, "y": 4, "w": 1.25 },
+                { "label": "SPLEFT", "x": 3.5, "y": 4, "w": 2.25 },
+                { "label": "7U", "x": 5.75, "y": 4 },
+                { "label": "SPRIGHT", "x": 6.75, "y": 4, "w": 1.75 },
+                { "label": "Menu", "x": 9.5, "y": 4, "w": 1.25 },
+                { "x": 11, "y": 4.25 },
+                { "x": 12, "y": 4.25 },
+                { "x": 13, "y": 4.25 },
+                { "label": "0", "x": 14.25, "y": 4 },
+                { "label": "Del", "x": 15.25, "y": 4 }
+            ]
+        }
+    }
+}
diff --git a/keyboards/akb/raine/keymaps/default/keymap.c b/keyboards/akb/raine/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..80e5252
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC, KC_NLCK, KC_SLCK, 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_BSLS, KC_P7, KC_P8, KC_P9,
+       MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_HASH, KC_ENT, KC_P4, KC_P5, KC_P6,
+       KC_LSFT, KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLSH, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+       KC_LCTL, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_LGUI, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_DEL),
+  [1] = LAYOUT( /* Second */
+  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_LBRC, KC_RBRC, _______, _______, _______, _______,
+       _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, _______, _______, _______, _______, _______,
+       _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______, _______, _______, _______, _______,
+       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET),
+};
+
diff --git a/keyboards/akb/raine/raine.c b/keyboards/akb/raine/raine.c
new file mode 100644 (file)
index 0000000..d73db44
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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 "raine.h"
diff --git a/keyboards/akb/raine/raine.h b/keyboards/akb/raine/raine.h
new file mode 100644 (file)
index 0000000..fb5cd48
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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( \
+       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,       K113, K114, K115, \
+       K200,       K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309,       K311, K312, K313, K314, K315, \
+       K400,       K402,       K404, K405,       K407,       K409,       K410,       K412, 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,  KC_NO, K113,  K114,  K115 }, \
+       { K200,  KC_NO, K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  K214,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K311,  KC_NO, K312,  K313,  K314,  K315 }, \
+       { K400,  KC_NO,  K402,  KC_NO, K404,  K405,  KC_NO, K407,  KC_NO,  K409,  K410,  KC_NO, K412,  K413,  K414,  K415 }  \
+}
diff --git a/keyboards/akb/raine/readme.md b/keyboards/akb/raine/readme.md
new file mode 100644 (file)
index 0000000..6aa11a1
--- /dev/null
@@ -0,0 +1,15 @@
+# Raine-m³
+
+![Raine-m³](https://i.imgur.com/da2dZh1.jpg)
+
+A custom board inspired by both the 1800 layout, and the compact functionality of 40% boards.
+
+Keyboard Maintainer: [e11i0t23](https://github.com/e11i0t23)  
+Hardware Supported: Official Raine-m³ PCB  
+Hardware Availability: Coming Soon
+
+Make example for this keyboard (after setting up your build environment):
+
+    make akb/raine: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/akb/raine/rules.mk b/keyboards/akb/raine/rules.mk
new file mode 100644 (file)
index 0000000..195c9e5
--- /dev/null
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/ares/ares.c b/keyboards/ares/ares.c
new file mode 100644 (file)
index 0000000..85c7435
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "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);
+}
+
+void backlight_set(uint8_t level) {
+       if (level == 0) {
+               // Turn out the lights
+               writePinLow(D0);
+               writePinLow(D1);
+               writePinLow(D4);
+               writePinLow(D6);
+       } else {
+               // Turn on the lights
+               writePinHigh(D0);
+               writePinHigh(D1);
+               writePinHigh(D4);
+               writePinHigh(D6);
+       }
+}
+#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/ares.h b/keyboards/ares/ares.h
new file mode 100644 (file)
index 0000000..41ecb57
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+Copyright 2019 Maarten Dekkers <maartenwut@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+#define LAYOUT( \
+    k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d,      \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d,      \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d,      \
+    k00, k01, k02,                k06,                k0a, k0b, k0c, k0d       \
+) \
+{ \
+    {k00, k01, k02, XXX, XXX, XXX, k06, XXX, XXX, XXX, k0a, k0b, k0c, k0d, XXX}, \
+    {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, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e}  \
+}
diff --git a/keyboards/ares/config.h b/keyboards/ares/config.h
new file mode 100644 (file)
index 0000000..f278c6f
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID       0x20A0
+#define PRODUCT_ID      0x422D
+#define MANUFACTURER    LSJ
+#define PRODUCT         QMK Firmware for Ares
+
+#define RGBLED_NUM 16
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define UNUSED_PINS {}
+
+#define DIODE_DIRECTION COL2ROW
+#define DEBOUNCING_DELAY 5
+
+#define NO_BACKLIGHT_CLOCK
+#define BACKLIGHT_LEVELS 1
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+
+/* 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)))
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
\ No newline at end of file
diff --git a/keyboards/ares/info.json b/keyboards/ares/info.json
new file mode 100644 (file)
index 0000000..00911de
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "LSJ Ares", 
+    "url": "", 
+    "maintainer": "qmk", 
+    "width": 15, 
+    "height": 5, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"Back space", "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":"|", "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":"|", "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":"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}, {"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}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/ares/keymaps/default/keymap.c b/keyboards/ares/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..18e3d30
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+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
+
+#define _MA 0
+#define _FN 1
+
+#define ______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT(
+  KC_ESC,  KC_1,    KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS, KC_BSPC,
+  KC_TAB,  KC_Q,    KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
+  KC_CAPS, KC_A,    KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,    KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+  KC_LSFT, KC_NUBS, KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, MO(_FN),
+  KC_LCTL, KC_LGUI, KC_LALT,                        KC_SPC,                          KC_RALT, KC_RGUI, KC_APP,  KC_RCTRL),
+[_FN] = LAYOUT(
+  RGB_MOD, BL_TOGG, ______, ______, ______, ______, ______, ______, ______, ______,  ______,  ______,  ______,  ______,  RESET,
+  ______,  ______,  ______, ______, ______, ______, ______, ______, ______, ______,  ______,  ______,  ______,  ______,
+  ______,  ______,  ______, ______, ______, ______, ______, ______, ______, ______,  ______,  ______,  ______,  ______,
+  ______,  ______,  ______, ______, ______, ______, ______, ______, ______, ______,  ______,  ______,  ______,  ______,
+  ______,  ______,  ______,                         ______,                          ______,  ______,  ______,  ______)
+  
+};
diff --git a/keyboards/ares/readme.md b/keyboards/ares/readme.md
new file mode 100644 (file)
index 0000000..338113a
--- /dev/null
@@ -0,0 +1,42 @@
+lSJ Ares
+========
+
+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
+
+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 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. 
+
+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.
diff --git a/keyboards/ares/rules.mk b/keyboards/ares/rules.mk
new file mode 100644 (file)
index 0000000..cd8edc6
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_SUSPEND_POWER_DOWN = yes
+
+# processor frequency
+F_CPU = 12000000
+
+# Bootloader
+#     This definition is optional, and if your keyboard supports multiple bootloaders of
+#     different sizes, comment this out, and the correct address will be loaded 
+#     automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = lite
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
+RGBLIGHT_CUSTOM_DRIVER = yes
+NO_UART = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+SRC += i2c_master.c
+
+# programming options
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/ares/usbconfig.h b/keyboards/ares/usbconfig.h
new file mode 100644 (file)
index 0000000..89b7ffb
--- /dev/null
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME      D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT      3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT       2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ       (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC       0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME   D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT          4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT    1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3   1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER              3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN           USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT          0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE      0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL      1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED         0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER           500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE      1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ       0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT   0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL        0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE       0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS          0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len)     if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts)     if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK()              hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF                   1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ *     in      YL, TCNT0
+ *     sts     timer0Snapshot, YL
+ *     endm
+ * #endif
+ * #define USB_SOF_HOOK                    myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING     0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH   0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC                0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID       (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID       (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION  0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME     'L', 'S', 'J'
+#define USB_CFG_VENDOR_NAME_LEN 3
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME     'A', 'r', 'e', 's'
+#define USB_CFG_DEVICE_NAME_LEN 4
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER   'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN   0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS        0
+#define USB_CFG_DEVICE_SUBCLASS     0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS     3   /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS  1   /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL  1   /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ *   + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ *     at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ *     used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ *     you want RAM pointers.
+ *   + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ *     in static memory is in RAM, not in flash memory.
+ *   + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ *     the driver must know the descriptor's length. The descriptor itself is
+ *     found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ *   char usbDescriptorDevice[];
+ *   char usbDescriptorConfiguration[];
+ *   char usbDescriptorHidReport[];
+ *   char usbDescriptorString0[];
+ *   int usbDescriptorStringVendor[];
+ *   int usbDescriptorStringDevice[];
+ *   int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE   (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ *   USB_CFG_DESCR_PROPS_DEVICE
+ *   USB_CFG_DESCR_PROPS_CONFIGURATION
+ *   USB_CFG_DESCR_PROPS_STRINGS
+ *   USB_CFG_DESCR_PROPS_STRING_0
+ *   USB_CFG_DESCR_PROPS_STRING_VENDOR
+ *   USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ *   USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ *   USB_CFG_DESCR_PROPS_HID
+ *   USB_CFG_DESCR_PROPS_HID_REPORT
+ *   USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int  serialNumberDescriptor[] = {
+ *     USB_STRING_DESCRIPTOR_HEADER(6),
+ *     'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE                  0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION           USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_CONFIGURATION           0
+#define USB_CFG_DESCR_PROPS_STRINGS                 0
+#define USB_CFG_DESCR_PROPS_STRING_0                0
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR           0
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT          0
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER    0
+#define USB_CFG_DESCR_PROPS_HID                     USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID                     0
+#define USB_CFG_DESCR_PROPS_HID_REPORT              USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID_REPORT              0
+#define USB_CFG_DESCR_PROPS_UNKNOWN                 0
+
+#define usbMsgPtr_t unsigned short
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
+ * a scalar type here because gcc generates slightly shorter code for scalar
+ * arithmetics than for pointer arithmetics. Remove this define for backward
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
+ */
+
+/* ----------------------- Optional MCU Description ------------------------ */
+
+/* The following configurations have working defaults in usbdrv.h. You
+ * usually don't need to set them explicitly. Only if you want to run
+ * the driver on a device which is not yet supported or with a compiler
+ * which is not fully supported (such as IAR C) or if you use a differnt
+ * interrupt than INT0, you may have to define some of these.
+ */
+/* #define USB_INTR_CFG            MCUCR */
+/* #define USB_INTR_CFG_SET        ((1 << ISC00) | (1 << ISC01)) */
+/* #define USB_INTR_CFG_CLR        0 */
+/* #define USB_INTR_ENABLE         GIMSK */
+/* #define USB_INTR_ENABLE_BIT     INT0 */
+/* #define USB_INTR_PENDING        GIFR */
+/* #define USB_INTR_PENDING_BIT    INTF0 */
+/* #define USB_INTR_VECTOR         INT0_vect */
+
+/* Set INT1 for D- falling edge to count SOF */
+/* #define USB_INTR_CFG            EICRA */
+#define USB_INTR_CFG_SET        ((1 << ISC11) | (0 << ISC10))
+/* #define USB_INTR_CFG_CLR        0 */
+/* #define USB_INTR_ENABLE         EIMSK */
+#define USB_INTR_ENABLE_BIT     INT1
+/* #define USB_INTR_PENDING        EIFR */
+#define USB_INTR_PENDING_BIT    INTF1
+#define USB_INTR_VECTOR         INT1_vect
+
+#endif /* __usbconfig_h_included__ */
diff --git a/keyboards/atreus/keymaps/ptillemans/keymap.c b/keyboards/atreus/keymaps/ptillemans/keymap.c
new file mode 100644 (file)
index 0000000..9019e9a
--- /dev/null
@@ -0,0 +1,49 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#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 _QW 0
+#define _RS 1
+#define _LW 2
+
+#define MY_SHEN MT(MOD_LSFT, KC_ENT)
+#define MY_CTES MT(MOD_LCTL, KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QW] = LAYOUT( /* Qwerty */
+    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 ,
+    TT(_LW), KC_TAB, KC_LGUI,  KC_LSFT, KC_BSPC, MY_CTES, KC_LALT, KC_SPC,  TT(_RS), KC_MINS, KC_QUOT, MY_SHEN
+  ),
+
+  /*
+   *  !       @     up     {    }        ||     pgup    7     8     9    *
+   *  #     left   down  right  $        ||     pgdn    4     5     6    +
+   *  [       ]      (     )    &        ||       `     1     2     3    \
+   * lower  insert super shift bksp ctrl || alt space   fn    .     0    =
+   */
+  [_RS] = LAYOUT( /* [> RAISE <] */
+    KC_EXLM, KC_AT,   KC_UP,   KC_UNDS, KC_PLUS,                   KC_PGUP, KC_7,    KC_8,   KC_9, KC_ASTR ,
+    KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR,                    KC_PGDN, KC_4,    KC_5,   KC_6, KC_PLUS ,
+    KC_RBRC, KC_LBRC, KC_LPRN, KC_RPRN, KC_AMPR,                   KC_GRV,  KC_1,    KC_2,   KC_3, KC_BSLS ,
+    TT(_LW), _______, _______, _______, _______, _______, _______, _______, TO(_QW), KC_DOT,   KC_0, KC_EQL
+  ),
+  /*
+   * insert home   up  end   pgup       ||      up     F7    F8    F9   F10
+   *  del   left  down right pgdn       ||     down    F4    F5    F6   F11
+   *       volup             reset      ||             F1    F2    F3   F12
+   *       voldn  super shift next ctrl || alt space   L0  prtsc scroll pause
+   */
+  [_LW] = LAYOUT( /* [> LOWER <] */
+    KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP,                   KC_UP,   KC_F7,   KC_F8,   KC_F9,   KC_F10  ,
+    KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,                   KC_DOWN, KC_F4,   KC_F5,   KC_F6,   KC_F11  ,
+    KC_NO,   KC_VOLU, KC_NO,   KC_NO,   RESET,                     KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F12  ,
+    KC_NO,   KC_VOLD, _______, _______, KC_MNXT, _______, _______, _______, TO(_QW), KC_PSCR, KC_SLCK, KC_MPLY
+  )
+};
diff --git a/keyboards/business_card/alpha/alpha.c b/keyboards/business_card/alpha/alpha.c
new file mode 100644 (file)
index 0000000..3d2d1de
--- /dev/null
@@ -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 "alpha.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/business_card/alpha/alpha.h b/keyboards/business_card/alpha/alpha.h
new file mode 100644 (file)
index 0000000..9807576
--- /dev/null
@@ -0,0 +1,35 @@
+/* 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( \
+    k00, k01, k02, \
+    k10, k11, k12   \
+) \
+{ \
+    { k00, k01, k02 }, \
+    { k10, k11, k12 }, \
+}
diff --git a/keyboards/business_card/alpha/config.h b/keyboards/business_card/alpha/config.h
new file mode 100644 (file)
index 0000000..e0324d6
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+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         business_card
+#define DESCRIPTION     A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#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 { B2, B6 }
+#define MATRIX_COL_PINS { E6, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+   #define RGBLED_NUM 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
+#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_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/business_card/alpha/keymaps/default/config.h b/keyboards/business_card/alpha/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..7c15789
--- /dev/null
@@ -0,0 +1,22 @@
+/* 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
+#ifdef RGB_DI_PIN
+   #define RGBLIGHT_ANIMATIONS
+#endif
diff --git a/keyboards/business_card/alpha/keymaps/default/keymap.c b/keyboards/business_card/alpha/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..4c7b423
--- /dev/null
@@ -0,0 +1,47 @@
+/* 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
+
+// Defines the keycodes used by our macros in process_record_user
+
+const uint16_t PROGMEM
+keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] =
+LAYOUT(/* Base */
+        KC_1, KC_2, KC_3,
+        KC_4, KC_5, KC_6
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }
+
+void led_set_user(uint8_t usb_led) {}
+
+void keyboard_post_init_user(void) {
+    rgblight_enable_noeeprom();
+    rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD);
+}
+
+#ifdef OLED_DRIVER_ENABLE
+static 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);
+}
+void oled_task_user(void) { render_logo(); }
+#endif
diff --git a/keyboards/business_card/alpha/keymaps/default/readme.md b/keyboards/business_card/alpha/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..22cc77e
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for business_card
\ No newline at end of file
diff --git a/keyboards/business_card/alpha/rules.mk b/keyboards/business_card/alpha/rules.mk
new file mode 100644 (file)
index 0000000..8bb38a5
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/business_card/beta/beta.c b/keyboards/business_card/beta/beta.c
new file mode 100644 (file)
index 0000000..c43be6c
--- /dev/null
@@ -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 "beta.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/business_card/beta/beta.h b/keyboards/business_card/beta/beta.h
new file mode 100644 (file)
index 0000000..21a334e
--- /dev/null
@@ -0,0 +1,37 @@
+/* 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( \
+    k00, k01,  \
+    k10, k11,  \
+    k20, k21   \
+) \
+{ \
+    { k21, k20 }, \
+    { k11, k10 }, \
+    { k01, k00 }, \
+}
diff --git a/keyboards/business_card/beta/config.h b/keyboards/business_card/beta/config.h
new file mode 100644 (file)
index 0000000..fc65149
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+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         business_card
+#define DESCRIPTION     A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 2
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B3, B2, B6 }
+#define MATRIX_COL_PINS { B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+   #define RGBLED_NUM 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
+#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_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/business_card/beta/keymaps/default/config.h b/keyboards/business_card/beta/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..e04ba7e
--- /dev/null
@@ -0,0 +1,23 @@
+/* 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
+
+#ifdef RGB_DI_PIN
+   #define RGBLIGHT_ANIMATIONS
+#endif
\ No newline at end of file
diff --git a/keyboards/business_card/beta/keymaps/default/keymap.c b/keyboards/business_card/beta/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..c317a23
--- /dev/null
@@ -0,0 +1,50 @@
+/* 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(/* Base */
+        KC_1, KC_2,
+        KC_3, KC_4,
+        KC_5, KC_6
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }
+
+void matrix_init_user(void) {
+    rgblight_enable_noeeprom();
+    rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD);
+}
+
+void matrix_scan_user(void) {}
+
+void led_set_user(uint8_t usb_led) {}
+
+void keyboard_post_init_user(void) {}
+
+#ifdef OLED_DRIVER_ENABLE
+static 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);
+}
+void oled_task_user(void) { render_logo(); }
+#endif
diff --git a/keyboards/business_card/beta/keymaps/default/readme.md b/keyboards/business_card/beta/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..22cc77e
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for business_card
\ No newline at end of file
diff --git a/keyboards/business_card/beta/rules.mk b/keyboards/business_card/beta/rules.mk
new file mode 100644 (file)
index 0000000..8bb38a5
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/business_card/business_card.c b/keyboards/business_card/business_card.c
new file mode 100644 (file)
index 0000000..a57c004
--- /dev/null
@@ -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 "business_card.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/business_card/business_card.h b/keyboards/business_card/business_card.h
new file mode 100644 (file)
index 0000000..f330a01
--- /dev/null
@@ -0,0 +1,25 @@
+/* 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
+
+#ifdef KEYBOARD_business_card_alpha
+    #include "alpha.h"
+#endif
+#ifdef KEYBOARD_business_card_beta
+    #include "beta.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/business_card/config.h b/keyboards/business_card/config.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/business_card/info.json b/keyboards/business_card/info.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/business_card/readme.md b/keyboards/business_card/readme.md
new file mode 100644 (file)
index 0000000..c1bb32c
--- /dev/null
@@ -0,0 +1,15 @@
+# business_card
+
+![business_card](imgur.com image replace me!)
+
+A short description of the keyboard/project
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)  
+Hardware Supported: The PCBs, controllers supported  
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+    make business_card: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/business_card/rules.mk b/keyboards/business_card/rules.mk
new file mode 100644 (file)
index 0000000..c12d659
--- /dev/null
@@ -0,0 +1,83 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+
+DEFAULT_FOLDER = business_card/beta
diff --git a/keyboards/canoe/keymaps/boy_314/keymap.c b/keyboards/canoe/keymaps/boy_314/keymap.c
new file mode 100644 (file)
index 0000000..e3b4c88
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+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
+
+#define _BL 0
+#define _F1 1
+#define _F2 2
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_BL] = LAYOUT(
+      KC_GESC,        KC_1,    KC_2,    KC_3,    KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,    KC_0,    KC_LBRC,  KC_RBRC, KC_BSPC,  KC_DEL,    \
+      KC_TAB,         KC_QUOT, KC_COMM, KC_DOT,  KC_P,   KC_Y,   KC_F,   KC_G,   KC_C,   KC_R,    KC_L,    KC_SLSH,  KC_EQL,  KC_BSLS,  KC_PGUP,  \
+      CTL_T(KC_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_PGDN,    \
+      KC_LSPO,                 KC_SCLN, KC_Q,    KC_J,   KC_K,   KC_X,   KC_B,   KC_M,   KC_W,    KC_V,    KC_Z,     KC_RSPC, KC_UP,    MO(_F2),      \
+      KC_LCTL,        KC_LGUI, KC_LALT,                          KC_SPC,                 KC_RALT, MO(_F1),           KC_LEFT, KC_DOWN,  KC_RIGHT),
+
+  [_F1] = LAYOUT(
+         KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11,   KC_F12,  KC_DEL,   KC_TRNS,    \
+      KC_TRNS, KC_NO,   KC_UP,   KC_NO,   RGB_TOG,RGB_VAI,RGB_HUI,RGB_SAI,KC_INS, RESET,   KC_PSCR, KC_TRNS,  KC_PAUS, KC_BSLS,  KC_TRNS, \
+      KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,RGB_MOD,RGB_VAD,RGB_HUD,RGB_SAD,KC_NO,  KC_NO,   KC_F14,  KC_F15,   KC_INS,            KC_HOME,   \
+      KC_LSPO,          KC_MPRV, KC_MPLY, KC_MNXT,KC_NO,  KC_NO,  KC_NO,  KC_MUTE,KC_VOLD, KC_VOLU, KC_NO,    KC_RSPC, KC_VOLU,  KC_TRNS,      \
+      KC_LCTL, KC_LGUI, KC_LALT,                          KC_TRNS,                KC_RALT, KC_TRNS,           KC_MPLY, KC_VOLD,  KC_MNXT),
+         
+  [_F2] = LAYOUT(
+      KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11,   KC_F12,  KC_DEL,   KC_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,   \
+      KC_LSPO,          KC_MPRV, KC_MPLY, KC_MNXT,KC_NO,  KC_NO,  KC_NO,  KC_MUTE,KC_VOLD, KC_VOLU, KC_NO,    KC_RSPC, KC_PGUP,  KC_TRNS,       \
+      KC_LCTL, KC_LGUI, KC_LALT,                          KC_TRNS,                KC_RALT, KC_TRNS,           KC_HOME, KC_PGDOWN,KC_END)
+
+};
+
+void led_set_user(uint8_t usb_led) {
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        rgblight_sethsv(HSV_RED);
+    } else {
+        rgblight_sethsv(HSV_TURQUOISE);
+    }
+}
\ No newline at end of file
diff --git a/keyboards/canoe/keymaps/boy_314/readme.md b/keyboards/canoe/keymaps/boy_314/readme.md
new file mode 100644 (file)
index 0000000..3db01a6
--- /dev/null
@@ -0,0 +1,5 @@
+# Boy_314's Canoe Layout
+
+Currently only supports Dvorak. Top right LED turns red when caps lock is on.
+
+Fn+O (Fn+R in Dvorak) puts the board into bootloader mode.
\ No newline at end of file
index 17ba329dade206d839b835bfc25cc8676f9c00ed..850005d9ea3c638ff2fc09417fe9ca6dc1b6110d 100644 (file)
@@ -23,9 +23,10 @@ qmk because  the Arduino softserial library uses different pins from QMK.
 
 I've wired the pro micro  hardware as follows. 
 
-Label| TX0,RX1,GND,GND,2  ,3  ,4  ,5  ,6  ,7
-Palm |    ,   , * ,GND,VCC,RX ,NC ,RTS,nc ,DCD
-MCU  |                ,D1 ,D0 ,   ,C6 ,   ,E6
+| Label | TX0 | RX1 | GND | GND |  2  |  3  |  4  |  5  |  6  |  7  |
+|  ---  | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| Palm  |     |     |  *  | GND | VCC | RX  | NC  | RTS | NC  | DCD |
+|  MCU  |     |     |     |     | D1  | D0  |     | C6  |     | E6  |
 
 \* The RX line from the keyboard should be conected to a ~10K ohm pull down resistor to ground.
 RX --|--3
index c457893536f0d1c8e475044095dd7fa8dc7599c3..0bd090bab6d7c9449005c800b7553782ad809b48 100644 (file)
@@ -1,5 +1,5 @@
 SRC += matrix.c \
-       ../../../drivers/avr/i2c_slave.c
+       i2c_slave.c
 
 # MCU name
 #MCU = at90usb1286
index 1ea1f275b20cb818dce7c01e187ea58c5f14ae90..515b6b3ddef86190b7ab0370267f14b0b08a7f2b 100644 (file)
@@ -1,5 +1,5 @@
 SRC += matrix.c \
-      ../../../drivers/avr/i2c_master.c
+       i2c_master.c
 
 # MCU name
 #MCU = at90usb1286
index 39112ae922b7e79038f10f69334071cc8089e03d..9def53dd513b42ee0beb5cf4a27a6a225267fd6d 100644 (file)
@@ -1,5 +1,5 @@
 SRC += matrix.c \
-       ../../../drivers/avr/i2c_slave.c
+       i2c_slave.c
 
 # MCU name
 #MCU = at90usb1286
index c457893536f0d1c8e475044095dd7fa8dc7599c3..0bd090bab6d7c9449005c800b7553782ad809b48 100644 (file)
@@ -1,5 +1,5 @@
 SRC += matrix.c \
-       ../../../drivers/avr/i2c_slave.c
+       i2c_slave.c
 
 # MCU name
 #MCU = at90usb1286
diff --git a/keyboards/divergetm2/info.json b/keyboards/divergetm2/info.json
new file mode 100644 (file)
index 0000000..3a4389b
--- /dev/null
@@ -0,0 +1,59 @@
+{
+    "keyboard_name": "UniKeyboard Diverge TM 2",
+    "url": "",
+    "maintainer": "islandman93, xton",
+    "width": 13,
+    "height": 4,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"label":"L00", "x":0, "y":0},
+                {"label":"L01", "x":1, "y":0},
+                {"label":"L02", "x":2, "y":0},
+                {"label":"L03", "x":3, "y":0},
+                {"label":"L04", "x":4, "y":0},
+                {"label":"L05", "x":5, "y":0},
+                {"label":"R00", "x":7, "y":0},
+                {"label":"R01", "x":8, "y":0},
+                {"label":"R02", "x":9, "y":0},
+                {"label":"R03", "x":10, "y":0},
+                {"label":"R04", "x":11, "y":0},
+                {"label":"R05", "x":12, "y":0},
+                {"label":"L10", "x":0, "y":1},
+                {"label":"L11", "x":1, "y":1},
+                {"label":"L12", "x":2, "y":1},
+                {"label":"L13", "x":3, "y":1},
+                {"label":"L14", "x":4, "y":1},
+                {"label":"L15", "x":5, "y":1},
+                {"label":"R10", "x":7, "y":1},
+                {"label":"R11", "x":8, "y":1},
+                {"label":"R12", "x":9, "y":1},
+                {"label":"R13", "x":10, "y":1},
+                {"label":"R14", "x":11, "y":1},
+                {"label":"R15", "x":12, "y":1},
+                {"label":"L20", "x":0, "y":2},
+                {"label":"L21", "x":1, "y":2},
+                {"label":"L22", "x":2, "y":2},
+                {"label":"L23", "x":3, "y":2},
+                {"label":"L24", "x":4, "y":2},
+                {"label":"L25", "x":5, "y":2},
+                {"label":"R20", "x":7, "y":2},
+                {"label":"R21", "x":8, "y":2},
+                {"label":"R22", "x":9, "y":2},
+                {"label":"R23", "x":10, "y":2},
+                {"label":"R24", "x":11, "y":2},
+                {"label":"R25", "x":12, "y":2},
+                {"label":"L30", "x":0, "y":3},
+                {"label":"L31", "x":1, "y":3},
+                {"label":"L32", "x":2, "y":3},
+                {"label":"L33", "x":3, "y":3},
+                {"label":"L34", "x":4, "y":3, "w":2},
+                {"label":"R31", "x":7, "y":3, "w":2},
+                {"label":"R32", "x":9, "y":3},
+                {"label":"R33", "x":10, "y":3},
+                {"label":"R34", "x":11, "y":3},
+                {"label":"R35", "x":12, "y":3}
+            ]
+        }
+    }
+}
index 1feff95192c0681fb1d757e8c746c0ccb316e04f..ff45267004d78d5d6ad183e9bc0c833d0d242e58 100644 (file)
@@ -5,8 +5,94 @@
     "width": 16, 
     "height": 6, 
     "layouts": {
-        "LAYOUT": {
-            "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":1.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.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}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
+        "LAYOUT_75_ansi": {
+            "key_count": 84,
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"F1", "x":1, "y":0},
+                {"label":"F2", "x":2, "y":0},
+                {"label":"F3", "x":3, "y":0},
+                {"label":"F4", "x":4, "y":0},
+                {"label":"F5", "x":5, "y":0},
+                {"label":"F6", "x":6, "y":0},
+                {"label":"F7", "x":7, "y":0},
+                {"label":"F8", "x":8, "y":0},
+                {"label":"F9", "x":9, "y":0},
+                {"label":"F10", "x":10, "y":0},
+                {"label":"F11", "x":11, "y":0},
+                {"label":"F12", "x":12, "y":0},
+                {"label":"PrtSc", "x":13, "y":0},
+                {"label":"ScrLk", "x":14, "y":0},
+                {"label":"Pause", "x":15, "y":0},
+                {"label":"~", "x":0, "y":1},
+                {"label":"!", "x":1, "y":1},
+                {"label":"@", "x":2, "y":1},
+                {"label":"#", "x":3, "y":1},
+                {"label":"$", "x":4, "y":1},
+                {"label":"%", "x":5, "y":1},
+                {"label":"^", "x":6, "y":1},
+                {"label":"&", "x":7, "y":1},
+                {"label":"*", "x":8, "y":1},
+                {"label":"(", "x":9, "y":1},
+                {"label":")", "x":10, "y":1},
+                {"label":"_", "x":11, "y":1},
+                {"label":"+", "x":12, "y":1},
+                {"label":"Backspace", "x":13, "y":1, "w":2},
+                {"label":"Home", "x":15, "y":1},
+                {"label":"Tab", "x":0, "y":2, "w":1.5},
+                {"label":"Q", "x":1.5, "y":2},
+                {"label":"W", "x":2.5, "y":2},
+                {"label":"E", "x":3.5, "y":2},
+                {"label":"R", "x":4.5, "y":2},
+                {"label":"T", "x":5.5, "y":2},
+                {"label":"Y", "x":6.5, "y":2},
+                {"label":"U", "x":7.5, "y":2},
+                {"label":"I", "x":8.5, "y":2},
+                {"label":"O", "x":9.5, "y":2},
+                {"label":"P", "x":10.5, "y":2},
+                {"label":"{", "x":11.5, "y":2},
+                {"label":"}", "x":12.5, "y":2},
+                {"label":"|", "x":13.5, "y":2, "w":1.5},
+                {"label":"Page Up", "x":15, "y":2},
+                {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+                {"label":"A", "x":1.75, "y":3},
+                {"label":"S", "x":2.75, "y":3},
+                {"label":"D", "x":3.75, "y":3},
+                {"label":"F", "x":4.75, "y":3},
+                {"label":"G", "x":5.75, "y":3},
+                {"label":"H", "x":6.75, "y":3},
+                {"label":"J", "x":7.75, "y":3},
+                {"label":"K", "x":8.75, "y":3},
+                {"label":"L", "x":9.75, "y":3},
+                {"label":":", "x":10.75, "y":3},
+                {"label":"\"", "x":11.75, "y":3},
+                {"label":"Enter", "x":12.75, "y":3, "w":2.25},
+                {"label":"Page Down", "x":15, "y":3},
+                {"label":"Shift", "x":0, "y":4, "w":2.25},
+                {"label":"Z", "x":2.25, "y":4},
+                {"label":"X", "x":3.25, "y":4},
+                {"label":"C", "x":4.25, "y":4},
+                {"label":"V", "x":5.25, "y":4},
+                {"label":"B", "x":6.25, "y":4},
+                {"label":"N", "x":7.25, "y":4},
+                {"label":"M", "x":8.25, "y":4},
+                {"label":"<", "x":9.25, "y":4},
+                {"label":">", "x":10.25, "y":4},
+                {"label":"?", "x":11.25, "y":4},
+                {"label":"Shift", "x":12.25, "y":4, "w":1.75},
+                {"label":"\u2191", "x":14, "y":4},
+                {"label":"End", "x":15, "y":4},
+                {"label":"Ctrl", "x":0, "y":5, "w":1.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},
+                {"label":"Fn", "x":11, "y":5},
+                {"label":"Ctrl", "x":12, "y":5},
+                {"label":"\u2190", "x":13, "y":5},
+                {"label":"\u2193", "x":14, "y":5},
+                {"label":"\u2192", "x":15, "y":5}
+            ]
         }
     }
 }
index 66d2c8defc5cefbb6f32e49cb341126b1ec6226f..889b93ed4590ed1c007decf20d155fe8b1df7bf4 100644 (file)
@@ -69,4 +69,5 @@ RGBLIGHT_ENABLE = yes
 
 CUSTOM_MATRIX = yes
 SRC += matrix.c \
-               
+
+LAYOUTS = 75_ansi
index 471a91a332e22c71797cdea343708298e50fa129..9f3d1e369fd6f48055ef436c93fe9045bb4460e0 100644 (file)
 
 #include "quantum.h"
 
-#define LAYOUT( \
-    K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5P, \
-    K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, 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, K5O, K2N, K2P, \
-    K1A,      K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1P, \
-    K0A, K0B, K0C,                K0G,           K0J, K0K, K0L, K0M, K0N, K0P  \
-) { \
-  { 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, KC_NO, 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, K1C, K1D, K1E,   K1F,   K1G, K1H,   K1I,   K1J, K1K, K1L, KC_NO, K1M,   K1N, KC_NO, K1P }, \
-  { K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M,   K0N, KC_NO, K0P }  \
-}
-
 #define LAYOUT_75_ansi( \
     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,      K4P, \
index fb4a14c7dda5c5794056d86cc8f3e0fbcda8bc3d..f435c4072bb81d58d3db3b5cbca7533d4848a477 100644 (file)
     { k40,  k41,   KC_NO, k43,  k44,   KC_NO, k46,  KC_NO, k48,   KC_NO, k4a,  k4b,  KC_NO, k4d,   k4e   }  \
 }
 
+/* LAYOUT_60_ansi_split_space_rshift
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │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 │1e   │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │20    │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d      │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │30      │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d    │3e │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴┬──┴─┬─┴───┴──┬┴───┼───┴┬────┬┴───┤
+ * │40  │41  │43  │44        │46  │48      │4a  │4b  │4d  │4e  │
+ * └────┴────┴────┴──────────┴────┴────────┴────┴────┴────┴────┘
+*/
+#define LAYOUT_60_ansi_split_space_rshift( \
+    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, k44,      k46,      k48,      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,  k44,   KC_NO, k46,  KC_NO, k48,   KC_NO, k4a,  k4b,  KC_NO, k4d,   k4e   }  \
+}
+
 /* LAYOUT_60_iso
  * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
  * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e     │
index 1eb2d6c8c7bc81df8d6fe34ca755a5a15229f1a5..aca960dff3ebe58990f19436b339bbcd4c566f81 100644 (file)
       "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":"CapsLock", "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_ansi_split": {
-      "key_count": 61,
+      "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":"CapsLock", "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":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"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_space_rshift": {
+      "key_count": 64,
+      "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":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"FN", "x":14, "y": 3}, {"label":"Ctrl", "x":0, "y":4, "w":1.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":"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_iso": {
       "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":"CapsLock", "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}, {"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}]
index 470e3d18b2458894c24ecd92267fe6a7767a90ec..b04b47a30bc22a02bde473d6c44e67eda5071d7d 100644 (file)
@@ -1,2 +1,3 @@
-#undef MOUSEKEY_DELAY
 #define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_TIME_TO_MAX 15
index 961d825566bdc4434169bbbd7276618974ed92b3..6b3317497823ab69570738e45589fe3225707371 100644 (file)
@@ -60,13 +60,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         * Mouse keys
             * Cursor movement: HJKL
             * MB 1, 2, and 3 on F, D, and S, respectively
-            * Mouse wheel: U(p) and D(own)
+            * Mouse wheel: up (V), down (R) (reversed because of Natural Scrolling)
     */
     [_MOUSE] = LAYOUT(
         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, KC_BTN3, KC_BTN2, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______,
         _______, _______, _______, _______, KC_WH_D, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, KC_BTN3, KC_BTN2, KC_BTN1, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______,
+        _______, _______, _______, _______, _______, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______,
         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
 
     /*  Layer 4:
index 0cb3f77e2b1256e68f8dbef11ea8dfd3e0df3f5d..d32dc626749a67de0f9906712bd1186b77d7f00f 100644 (file)
@@ -89,7 +89,7 @@ This is a MacOS-specific keymap for DZ60 configured in a standard 60% ANSI layou
 * Mouse keys
     * Cursor movement: HJKL
     * MB 1, 2, and 3 on F, D, and S, respectively
-    * Mouse wheel: Up (R) and Down (V)
+    * Mouse wheel: up (V), down (R) (reversed because of Natural Scrolling)
 
 ## `L4`
 
diff --git a/keyboards/dz60/keymaps/kream/keymap.c b/keyboards/dz60/keymaps/kream/keymap.c
new file mode 100644 (file)
index 0000000..2c74de4
--- /dev/null
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_60_ansi_split_space_rshift(
+        KC_GESC, KC_1,    KC_2,    KC_3,   KC_4,  KC_5,   KC_6,    KC_7,  KC_8,    KC_9,   KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,   KC_R,  KC_T,   KC_Y,    KC_U,  KC_I,    KC_O,   KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
+        MO(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_LSFT, KC_Z,    KC_X,    KC_C,   KC_V,  KC_B,   KC_N,    KC_M,  KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+        KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_SPC, KC_CAPS, KC_NO, KC_NO,   KC_ENT),
+
+       [1] = LAYOUT_60_ansi_split_space_rshift(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,
+        _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END,  KC_PSCR, KC_GRV,  KC_TILD, _______,
+        _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, _______,
+        _______, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
diff --git a/keyboards/dz60/keymaps/kream/rules.mk b/keyboards/dz60/keymaps/kream/rules.mk
new file mode 100644 (file)
index 0000000..6a82f21
--- /dev/null
@@ -0,0 +1,3 @@
+MOUSEKEY_ENABLE=no
+BACKLIGHT_ENABLE=no
+RGBLIGHT_ENABLE=no
index 28ac7ce9e251286b13b629aa5b6a810868c3d44a..0909ace232460ff7831066ae8dae57f32e0efbbc 100644 (file)
@@ -416,19 +416,20 @@ led_config_t g_led_config = { {
     {  53,  52,  51,  50,  49,  48,  47,  46,  45,  44,  43,  42, NO_LED,  41 },
     {  62,  61,  60, NO_LED, NO_LED,  59, NO_LED, NO_LED,  58,  57,  56,  55, NO_LED,  54 }
 }, {
-    { 223,   0 }, { 206,   0 }, { 189,   0 }, { 172,   0 }, { 155,   0 }, { 137,   0 }, { 120,   0 }, { 103,   0 }, {  86,   0 }, {  68,   0 }, {  51,   0 }, {  34,   0 }, {  17,   0 }, {   0,   0 },
-    { 223,  16 }, { 206,  16 }, { 189,  16 }, { 172,  16 }, { 155,  16 }, { 137,  16 }, { 120,  16 }, { 103,  16 }, {  86,  16 }, {  68,  16 }, {  51,  16 }, {  34,  16 }, {  17,  16 }, {   0,  16 },
-    { 223,  32 }, { 189,  32 }, { 172,  32 }, { 155,  32 }, { 137,  32 }, { 120,  32 }, { 103,  32 }, {  86,  32 }, {  68,  32 }, {  51,  32 }, {  34,  32 }, {  17,  32 }, {   0,  32 }, { 223,  48 },
-    { 189,  48 }, { 172,  48 }, { 155,  48 }, { 137,  48 }, { 120,  48 }, { 103,  48 }, {  86,  48 }, {  68,  48 }, {  51,  48 }, {  34,  48 }, {  17,  48 }, {   0,  48 }, { 223,  64 }, { 189,  64 },
-    { 172,  64 }, { 155,  64 }, { 137,  64 }, {  86,  64 }, {  34,  64 }, {  17,  64 }, {   0,  64 }
+    { 216,   0 }, { 192,   0 }, { 176,   0 }, { 160,   0 }, { 144,   0 }, { 128,   0 }, { 112,   0 }, {  96,   0 }, {  80,   0 }, {  64,   0 }, {  48,   0 }, {  32,   0 }, {  16,   0 }, {   0,   0 },
+    { 220,  16 }, { 200,  16 }, { 184,  16 }, { 168,  16 }, { 152,  16 }, { 136,  16 }, { 120,  16 }, { 104,  16 }, {  88,  16 }, {  72,  16 }, {  56,  16 }, {  40,  16 }, {  24,  16 }, {   4,  16 },
+    { 214,  32 }, { 188,  32 }, { 172,  32 }, { 156,  32 }, { 140,  32 }, { 124,  32 }, { 108,  32 }, {  92,  32 }, {  76,  32 }, {  60,  32 }, {  44,  32 }, {  28,  32 }, {   6,  32 }, { 224,  48 },
+    { 208,  48 }, { 186,  48 }, { 164,  48 }, { 148,  48 }, { 132,  48 }, { 116,  48 }, { 100,  48 }, {  84,  48 }, {  68,  48 }, {  52,  48 }, {  36,  48 }, {   9,  48 }, { 224,  64 }, { 208,  64 },
+    { 192,  64 }, { 176,  64 }, { 160,  64 }, { 102,  64 }, {  42,  64 }, {  22,  64 }, {   2,  64 }
 }, {
-    1, 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,
+    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
     1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
-    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, 1, 1, 1,
     1, 1, 1, 4, 1, 1, 1
 } };
 
+
 #endif
 
 void matrix_init_kb(void) {
index 4615706c69a66414de2dea3c4b9322a325f39a17..d615fe53db52bfd6dd1f45e76751e8c14190c9ea 100644 (file)
@@ -6,7 +6,12 @@
   "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_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}]
+        }
+    }
 }
index b6fb08dc1c5b93624b1643beeb104810e9229b2b..7166bf70b8a28a62402f452cacf94e550001ec5b 100644 (file)
@@ -9,22 +9,35 @@
 #undef DISABLE_RGB_MATRIX_MULTISPLASH
 #undef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
 
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
 
+// #define DISABLE_RGB_MATRIX_SOLID_COLOR
 // #define DISABLE_RGB_MATRIX_ALPHAS_MODS
-#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-#define DISABLE_RGB_MATRIX_BREATHING
+// #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define DISABLE_RGB_MATRIX_BREATHING
+#define DISABLE_RGB_MATRIX_BAND_SAT
+// #define DISABLE_RGB_MATRIX_BAND_VAL
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
 #define DISABLE_RGB_MATRIX_CYCLE_ALL
 #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
 #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
-// #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#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
 // #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
@@ -40,7 +53,6 @@
 
 // #define RGB_MATRIX_KEYRELEASES
 
-
 // some speed shit
 #define NO_ACTION_MACRO
 #define NO_ACTION_FUNCTION
index a7f1dd73e2e13062d9cde85a797b38554fc09d5c..11afb22d9b0c79a09bb9508a0889d7ed08228459 100644 (file)
@@ -64,13 +64,13 @@ 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;
+                       rgb_matrix_layer_helper(0xFF, 0x00, 0x00); break;
 
                case _LAYER2:
-                       rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+                       rgb_matrix_layer_helper(0x00, 0xFF, 0x00); break;
 
                case _LAYER4:
-                       rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+                       rgb_matrix_layer_helper(0xFF, 0xFF, 0x00); break;
                }
        }
 
diff --git a/keyboards/ep/comsn/hs68/config.h b/keyboards/ep/comsn/hs68/config.h
new file mode 100644 (file)
index 0000000..db633a2
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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 0x6868
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elliot Powell
+#define PRODUCT ephs68
+#define DESCRIPTION     A Hotswapable keyboard for kayak
+
+/* 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 \
+  { B6, B5, B4, D0, F6 }
+#define MATRIX_COL_PINS \
+  { B0, B1, B3, B2, B7, D3, F1, D5, D6, D7, F4, F5, C7, C6, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#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/ep/comsn/hs68/hs68.c b/keyboards/ep/comsn/hs68/hs68.c
new file mode 100644 (file)
index 0000000..fdde3ad
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "hs68.h"
+
+void matrix_init_kb(void) {
+  // put your keyboard start-up code here
+  // runs once when the firmware starts up
+
+  matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+  // put your looping keyboard code here
+  // runs every cycle (a lot)
+
+  matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+  // put your per-action keyboard code here
+  // runs for every action, just before processing by the firmware
+
+  return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+  // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+  led_set_user(usb_led);
+}
diff --git a/keyboards/ep/comsn/hs68/hs68.h b/keyboards/ep/comsn/hs68/hs68.h
new file mode 100644 (file)
index 0000000..394208c
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 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,      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,                K46,                K4A, K4B, K4C, K4D, K4E  \
+) { \
+    {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E}, \
+    {K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, 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, xxx, K46, xxx, xxx, xxx, K4A, K4B, K4C, K4D, K4E } \
+  }
diff --git a/keyboards/ep/comsn/hs68/info.json b/keyboards/ep/comsn/hs68/info.json
new file mode 100644 (file)
index 0000000..957684b
--- /dev/null
@@ -0,0 +1,364 @@
+{
+    "keyboard_name": "EPHS68",
+    "maintainer": "Elliot Powell (u/e11i0t23)",
+    "width": 16,
+    "height": 5,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {
+                    "label": "ESC",
+                    "x": 0,
+                    "y": 0
+                },
+                {
+                    "label": "!",
+                    "x": 1,
+                    "y": 0
+                },
+                {
+                    "label": "\"",
+                    "x": 2,
+                    "y": 0
+                },
+                {
+                    "label": "\u00a3",
+                    "x": 3,
+                    "y": 0
+                },
+                {
+                    "label": "$",
+                    "x": 4,
+                    "y": 0
+                },
+                {
+                    "label": "%",
+                    "x": 5,
+                    "y": 0
+                },
+                {
+                    "label": "^",
+                    "x": 6,
+                    "y": 0
+                },
+                {
+                    "label": "&",
+                    "x": 7,
+                    "y": 0
+                },
+                {
+                    "label": "*",
+                    "x": 8,
+                    "y": 0
+                },
+                {
+                    "label": "(",
+                    "x": 9,
+                    "y": 0
+                },
+                {
+                    "label": ")",
+                    "x": 10,
+                    "y": 0
+                },
+                {
+                    "label": "_",
+                    "x": 11,
+                    "y": 0
+                },
+                {
+                    "label": "+",
+                    "x": 12,
+                    "y": 0
+                },
+                {
+                    "label": "Backspace",
+                    "x": 13,
+                    "y": 0,
+                    "w": 2
+                },
+                {
+                    "label": "GRAV",
+                    "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": "DEL",
+                    "x": 15,
+                    "y": 1
+                },
+                {
+                    "label": "Caps Lock",
+                    "x": 0,
+                    "y": 2,
+                    "w": 1.75
+                },
+                {
+                    "label": "A",
+                    "x": 1.75,
+                    "y": 2
+                },
+                {
+                    "label": "S",
+                    "x": 2.75,
+                    "y": 2
+                },
+                {
+                    "label": "D",
+                    "x": 3.75,
+                    "y": 2
+                },
+                {
+                    "label": "F",
+                    "x": 4.75,
+                    "y": 2
+                },
+                {
+                    "label": "G",
+                    "x": 5.75,
+                    "y": 2
+                },
+                {
+                    "label": "H",
+                    "x": 6.75,
+                    "y": 2
+                },
+                {
+                    "label": "J",
+                    "x": 7.75,
+                    "y": 2
+                },
+                {
+                    "label": "K",
+                    "x": 8.75,
+                    "y": 2
+                },
+                {
+                    "label": "L",
+                    "x": 9.75,
+                    "y": 2
+                },
+                {
+                    "label": ":",
+                    "x": 10.75,
+                    "y": 2
+                },
+                {
+                    "label": "@",
+                    "x": 11.75,
+                    "y": 2
+                },
+                {
+                    "label": "~",
+                    "x": 12.75,
+                    "y": 2
+                },
+                {
+                    "label": "Enter",
+                    "x": 13.75,
+                    "y": 1,
+                    "w": 1.25,
+                    "h": 2
+                },
+                {
+                    "label": "PGUP",
+                    "x": 15,
+                    "y": 2
+                },
+                {
+                    "label": "Shift",
+                    "x": 0,
+                    "y": 3,
+                    "w": 1.25
+                },
+                {
+                    "label": "|",
+                    "x": 1.25,
+                    "y": 3
+                },
+                {
+                    "label": "Z",
+                    "x": 2.25,
+                    "y": 3
+                },
+                {
+                    "label": "X",
+                    "x": 3.25,
+                    "y": 3
+                },
+                {
+                    "label": "C",
+                    "x": 4.25,
+                    "y": 3
+                },
+                {
+                    "label": "V",
+                    "x": 5.25,
+                    "y": 3
+                },
+                {
+                    "label": "B",
+                    "x": 6.25,
+                    "y": 3
+                },
+                {
+                    "label": "N",
+                    "x": 7.25,
+                    "y": 3
+                },
+                {
+                    "label": "M",
+                    "x": 8.25,
+                    "y": 3
+                },
+                {
+                    "label": "<",
+                    "x": 9.25,
+                    "y": 3
+                },
+                {
+                    "label": ">",
+                    "x": 10.25,
+                    "y": 3
+                },
+                {
+                    "label": "?",
+                    "x": 11.25,
+                    "y": 3
+                },
+                {
+                    "label": "Shift",
+                    "x": 12.25,
+                    "y": 3,
+                    "w": 1.75
+                },
+                {
+                    "label": "UP",
+                    "x": 14,
+                    "y": 3
+                },
+                {
+                    "label": "PGDN",
+                    "x": 15,
+                    "y": 3
+                },
+                {
+                    "label": "Ctrl",
+                    "x": 0,
+                    "y": 4,
+                    "w": 1.25
+                },
+                {
+                    "label": "Win",
+                    "x": 1.25,
+                    "y": 4,
+                    "w": 1.25
+                },
+                {
+                    "label": "Alt",
+                    "x": 2.5,
+                    "y": 4,
+                    "w": 1.25
+                },
+                {
+                    "x": 3.75,
+                    "y": 4,
+                    "w": 6.25
+                },
+                {
+                    "label": "AltGr",
+                    "x": 10,
+                    "y": 4,
+                    "w": 1.25
+                },
+                {
+                    "label": "Win",
+                    "x": 11.25,
+                    "y": 4,
+                    "w": 1.25
+                },
+                {
+                    "label": "LEFT",
+                    "x": 13,
+                    "y": 4
+                },
+                {
+                    "label": "DOWN",
+                    "x": 14,
+                    "y": 4
+                },
+                {
+                    "label": "RIGHT",
+                    "x": 15,
+                    "y": 4
+                }
+            ]
+        }
+    }
+}
diff --git a/keyboards/ep/comsn/hs68/keymaps/default/keymap.c b/keyboards/ep/comsn/hs68/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..b2972da
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT(
+      KC_ESC,  KC_1,    KC_2,    KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_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,
+      KC_LSFT, KC_NUHS, 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_SPACE,                  KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
+    ),
+};
diff --git a/keyboards/ep/comsn/hs68/readme.md b/keyboards/ep/comsn/hs68/readme.md
new file mode 100644 (file)
index 0000000..0f23020
--- /dev/null
@@ -0,0 +1,13 @@
+# hs68
+
+Hotswap 68% deisnged for the Kayak
+
+Keyboard Maintainer: [e11i0t23](https://github.com/e11i0t23)  
+Hardware Supported: ephs68 pcb. Kayak case kits  
+Hardware Availability: None
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ep/comsn/hs68: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/ep/comsn/hs68/rules.mk b/keyboards/ep/comsn/hs68/rules.mk
new file mode 100644 (file)
index 0000000..b7d3b9b
--- /dev/null
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/ep/comsn/mollydooker/config.h b/keyboards/ep/comsn/mollydooker/config.h
new file mode 100644 (file)
index 0000000..3ba6615
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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 0x9696
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elliot Powell
+#define PRODUCT mollydooker
+#define DESCRIPTION Custom southpaw replacement PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 19
+
+/*
+ * 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, D2 }
+#define MATRIX_COL_PINS \
+  { B1, B2, B3, E6, B7, F1, F0, D0, D1, D7, D5, D4, D6, B4, B5, D3, B6, C6, C7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #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
+#define RGB_DI_PIN B0
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 84
+#define RGBLIGHT_LIMIT_VAL 35
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * 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
+
+/*
+ * 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
+*/
diff --git a/keyboards/ep/comsn/mollydooker/info.json b/keyboards/ep/comsn/mollydooker/info.json
new file mode 100644 (file)
index 0000000..6ede5c1
--- /dev/null
@@ -0,0 +1,96 @@
+{
+    "keyboard_name": "mollydooker",
+    "maintainer": "Elliot Powell (u/e11i0t23)",
+    "width": 20,
+    "height": 5,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                { "label": "VolDn", "x": 0, "y": 0 },
+                { "label": "VolUp", "x": 1, "y": 0 },
+                { "label": "Mute", "x": 2, "y": 0 },
+                { "label": "~", "x": 3, "y": 0 },
+                { "label": "Esc", "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": "_", "x": 15, "y": 0 },
+                { "label": "+", "x": 16, "y": 0 },
+                { "label": "Backspace", "x": 17, "y": 0, "w": 2 },
+                { "label": "Del", "x": 19, "y": 0 },
+                { "label": "7", "x": 0, "y": 1 },
+                { "label": "8", "x": 1, "y": 1 },
+                { "label": "9", "x": 2, "y": 1 },
+                { "label": "+", "x": 3, "y": 1, "h": 2 },
+                { "label": "Tab", "x": 4, "y": 1, "w": 1.5 },
+                { "label": "Q", "x": 5.5, "y": 1 },
+                { "label": "W", "x": 6.5, "y": 1 },
+                { "label": "E", "x": 7.5, "y": 1 },
+                { "label": "R", "x": 8.5, "y": 1 },
+                { "label": "T", "x": 9.5, "y": 1 },
+                { "label": "Y", "x": 10.5, "y": 1 },
+                { "label": "U", "x": 11.5, "y": 1 },
+                { "label": "I", "x": 12.5, "y": 1 },
+                { "label": "O", "x": 13.5, "y": 1 },
+                { "label": "P", "x": 14.5, "y": 1 },
+                { "label": "{", "x": 15.5, "y": 1 },
+                { "label": "}", "x": 16.5, "y": 1 },
+                { "label": "|", "x": 17.5, "y": 1, "w": 1.5 },
+                { "label": "PgUp", "x": 19, "y": 1 },
+                { "label": "4", "x": 0, "y": 2 },
+                { "label": "5", "x": 1, "y": 2 },
+                { "label": "6", "x": 2, "y": 2 },
+                { "label": "Caps Lock", "x": 4, "y": 2, "w": 1.75 },
+                { "label": "A", "x": 5.75, "y": 2 },
+                { "label": "S", "x": 6.75, "y": 2 },
+                { "label": "D", "x": 7.75, "y": 2 },
+                { "label": "F", "x": 8.75, "y": 2 },
+                { "label": "G", "x": 9.75, "y": 2 },
+                { "label": "H", "x": 10.75, "y": 2 },
+                { "label": "J", "x": 11.75, "y": 2 },
+                { "label": "K", "x": 12.75, "y": 2 },
+                { "label": "L", "x": 13.75, "y": 2 },
+                { "label": ":", "x": 14.75, "y": 2 },
+                { "label": "\"", "x": 15.75, "y": 2 },
+                { "label": "Enter", "x": 16.75, "y": 2, "w": 2.25 },
+                { "label": "PgDn", "x": 19, "y": 2 },
+                { "label": "1", "x": 0, "y": 3 },
+                { "label": "2", "x": 1, "y": 3 },
+                { "label": "3", "x": 2, "y": 3 },
+                { "label": "Enter", "x": 3, "y": 3, "h": 2 },
+                { "label": "Shift", "x": 4, "y": 3, "w": 2.25 },
+                { "label": "Z", "x": 6.25, "y": 3 },
+                { "label": "X", "x": 7.25, "y": 3 },
+                { "label": "C", "x": 8.25, "y": 3 },
+                { "label": "V", "x": 9.25, "y": 3 },
+                { "label": "B", "x": 10.25, "y": 3 },
+                { "label": "N", "x": 11.25, "y": 3 },
+                { "label": "M", "x": 12.25, "y": 3 },
+                { "label": "<", "x": 13.25, "y": 3 },
+                { "label": ">", "x": 14.25, "y": 3 },
+                { "label": "?", "x": 15.25, "y": 3 },
+                { "label": "Shift", "x": 16.25, "y": 3, "w": 1.75 },
+                { "label": "Up", "x": 18, "y": 3 },
+                { "label": "fn0", "x": 19, "y": 3 },
+                { "label": "0", "x": 0, "y": 4, "w": 2 },
+                { "label": ".", "x": 2, "y": 4 },
+                { "label": "Ctrl", "x": 4, "y": 4, "w": 1.25 },
+                { "label": "Win", "x": 5.25, "y": 4, "w": 1.25 },
+                { "label": "Alt", "x": 6.5, "y": 4, "w": 1.25 },
+                { "label": "Space", "x": 7.75, "y": 4, "w": 6.25 },
+                { "label": "Alt", "x": 14, "y": 4, "w": 1.5 },
+                { "label": "Ctrl", "x": 15.5, "y": 4, "w": 1.5 },
+                { "label": "Left", "x": 17, "y": 4 },
+                { "label": "Down", "x": 18, "y": 4 },
+                { "label": "Right", "x": 19, "y": 4 }
+            ]
+        }
+    }
+}
diff --git a/keyboards/ep/comsn/mollydooker/keymaps/default/keymap.c b/keyboards/ep/comsn/mollydooker/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..a213973
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* Base */                                                                                                                                      
+    KC_NLCK, KC_PSLS, KC_PMNS, RGB_MOD, 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_P7,   KC_P8,   KC_P9,   KC_PPLS, KC_TAB,   KC_Q,  KC_W,  KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,    KC_O,   KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, 
+    KC_P4,   KC_P5,   KC_P6,            KC_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_P1,   KC_P2,   KC_P3,   KC_PENT, KC_LSFT,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, KC_SLSH,          KC_RSFT, KC_UP,   KC_F5,  
+    KC_P0,            KC_PDOT,          KC_LCTL,  KC_LGUI, KC_LALT,                   KC_SPC,                       KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT 
+  ),
+};
+
+int RGB_current_mode;
+
+void matrix_init_user(void) {
+  #ifdef RGBLIGHT_ENABLE
+    RGB_current_mode = rgblight_config.mode;
+  #endif
+  enum rgb_matrix_effects {
+      RGB_MATRIX_SOLID_COLOR = 1,
+  #ifdef RGB_MATRIX_KEYPRESSES
+      RGB_MATRIX_SOLID_REACTIVE,
+  #endif
+      RGB_MATRIX_EFFECT_MAX
+  };
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/ep/comsn/mollydooker/mollydooker.c b/keyboards/ep/comsn/mollydooker/mollydooker.c
new file mode 100644 (file)
index 0000000..d0d6f30
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "mollydooker.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/ep/comsn/mollydooker/mollydooker.h b/keyboards/ep/comsn/mollydooker/mollydooker.h
new file mode 100644 (file)
index 0000000..0cdac37
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 xxxx KC_NO
+
+#define LAYOUT( \
+    K100, K101, K102, k103, k104, k105, k106, k107, k108, k109, k110, 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,       k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315,       k317, k318, \
+    K400, K401, K402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k413, k414,       k416, k417, k418, \
+    K500,       K502,       k504, k505, k506,             k509,                   k513, k514,       k516, k517, k518) \
+{ \
+    {K100, K101, K102, k103, k104, k105, k106, k107, k108, k109, k110, 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, xxxx, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315, xxxx, k317, k318}, \
+    {K400, K401, K402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k413, k414, xxxx, k416, k417, k418}, \
+    {K500, xxxx, K502, xxxx, k504, k505, k506, xxxx, xxxx, k509, xxxx, xxxx, xxxx, k513, k514, xxxx, k516, k517, k518}  \
+}
diff --git a/keyboards/ep/comsn/mollydooker/readme.md b/keyboards/ep/comsn/mollydooker/readme.md
new file mode 100644 (file)
index 0000000..c43875f
--- /dev/null
@@ -0,0 +1,13 @@
+# mollydooker
+
+A southpaw extended 65 replacement PCB with per key RGB
+
+Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23), [/u/e11i0t23](https://reddit.com/u/e11i0t23)  
+Hardware Supported: mollydooker  
+Hardware Availability: None
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ep/comsn/mollydooker: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/ep/comsn/mollydooker/rules.mk b/keyboards/ep/comsn/mollydooker/rules.mk
new file mode 100644 (file)
index 0000000..db4f2ed
--- /dev/null
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/ep/comsn/tf_longeboye/config.h b/keyboards/ep/comsn/tf_longeboye/config.h
new file mode 100644 (file)
index 0000000..e622010
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+Copyright 2019 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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 0x9696
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elliot Powell
+#define PRODUCT TF Longeboye
+#define DESCRIPTION     TF Longeboye Designed for Papi SodaMan of MKUK
+
+/* 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 \
+  { B5, B4, D1, D2, D3 }
+#define MATRIX_COL_PINS \
+  { F4, F5, F6, F7, B1, B3, B2, B6, F0, F1, C7, D5, B7, E6, D7, C6, D4, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+// #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
diff --git a/keyboards/ep/comsn/tf_longeboye/info.json b/keyboards/ep/comsn/tf_longeboye/info.json
new file mode 100644 (file)
index 0000000..5cfa993
--- /dev/null
@@ -0,0 +1,99 @@
+{
+    "keyboard_name": "tf_longeboye",
+    "maintainer": "Elliot Powell (u/e11i0t23)",
+    "width": 21.5,
+    "height": 5,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                { "label": "Esc", "x": 0, "y": 0 },
+                { "label": "!", "x": 1, "y": 0 },
+                { "label": "\"", "x": 2, "y": 0 },
+                { "label": "\u00a3", "x": 3, "y": 0 },
+                { "label": "$", "x": 4, "y": 0 },
+                { "label": "%", "x": 5, "y": 0 },
+                { "label": "^", "x": 6, "y": 0 },
+                { "label": "&", "x": 7, "y": 0 },
+                { "label": "*", "x": 8, "y": 0 },
+                { "label": "(", "x": 9, "y": 0 },
+                { "label": ")", "x": 10, "y": 0 },
+                { "label": "_", "x": 11, "y": 0 },
+                { "label": "+", "x": 12, "y": 0 },
+                { "label": "Backspace", "x": 13, "y": 0, "w": 2 },
+                { "label": "Insert", "x": 15.25, "y": 0 },
+                { "label": "PgUp", "x": 16.25, "y": 0 },
+                { "label": "Num Lock", "x": 17.5, "y": 0 },
+                { "label": "/", "x": 18.5, "y": 0 },
+                { "label": "*", "x": 19.5, "y": 0 },
+                { "label": "-", "x": 20.5, "y": 0 },
+                { "label": "Tab", "x": 0, "y": 1, "w": 1.5 },
+                { "label": "Q", "x": 1.5, "y": 1 },
+                { "label": "W", "x": 2.5, "y": 1 },
+                { "label": "E", "x": 3.5, "y": 1 },
+                { "label": "R", "x": 4.5, "y": 1 },
+                { "label": "T", "x": 5.5, "y": 1 },
+                { "label": "Y", "x": 6.5, "y": 1 },
+                { "label": "U", "x": 7.5, "y": 1 },
+                { "label": "I", "x": 8.5, "y": 1 },
+                { "label": "O", "x": 9.5, "y": 1 },
+                { "label": "P", "x": 10.5, "y": 1 },
+                { "label": "{", "x": 11.5, "y": 1 },
+                { "label": "}", "x": 12.5, "y": 1 },
+                { "label": "Delete", "x": 15.25, "y": 1 },
+                { "label": "PgDn", "x": 16.25, "y": 1 },
+                { "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 },
+                { "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": "4", "x": 17.5, "y": 2 },
+                { "label": "5", "x": 18.5, "y": 2 },
+                { "label": "6", "x": 19.5, "y": 2 },
+                { "label": "Shift", "x": 0, "y": 3, "w": 1.25 },
+                { "label": "|", "x": 1.25, "y": 3 },
+                { "label": "Z", "x": 2.25, "y": 3 },
+                { "label": "X", "x": 3.25, "y": 3 },
+                { "label": "C", "x": 4.25, "y": 3 },
+                { "label": "V", "x": 5.25, "y": 3 },
+                { "label": "B", "x": 6.25, "y": 3 },
+                { "label": "N", "x": 7.25, "y": 3 },
+                { "label": "M", "x": 8.25, "y": 3 },
+                { "label": "<", "x": 9.25, "y": 3 },
+                { "label": ">", "x": 10.25, "y": 3 },
+                { "label": "?", "x": 11.25, "y": 3 },
+                { "label": "Shift", "x": 12.25, "y": 3, "w": 1.75 },
+                { "label": "fn", "x": 14, "y": 3 },
+                { "label": "\u2191", "x": 15.25, "y": 3 },
+                { "label": "1", "x": 17.5, "y": 3 },
+                { "label": "2", "x": 18.5, "y": 3 },
+                { "label": "3", "x": 19.5, "y": 3 },
+                { "label": "Enter", "x": 20.5, "y": 3, "h": 2 },
+                { "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 Gr", "x": 10, "y": 4, "w": 1.25 },
+                { "label": "Fn", "x": 11.25, "y": 4, "w": 1.25 },
+                { "label": "Ctrl", "x": 12.5, "y": 4, "w": 1.25 },
+                { "label": "\u2190", "x": 14.25, "y": 4 },
+                { "label": "\u2193", "x": 15.25, "y": 4 },
+                { "label": "\u2192", "x": 16.25, "y": 4 },
+                { "label": "0", "x": 17.5, "y": 4, "w": 2 },
+                { "label": ".", "x": 19.5, "y": 4 }
+            ]
+        }
+    }
+}
diff --git a/keyboards/ep/comsn/tf_longeboye/keymaps/default/keymap.c b/keyboards/ep/comsn/tf_longeboye/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..2e9da9b
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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_1,    KC_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_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_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_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_RSFT, MO(1),      KC_UP,             KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+    KC_LCTL, KC_LGUI, KC_LALT,                    KC_SPC,                       KC_RALT, MO(1),   KC_RCTL,    KC_LEFT, KC_DOWN, KC_RGHT,  KC_P0,            KC_PDOT
+  ),
+  [1] = LAYOUT( /* Base */
+
+  KC_GRV,  KC_F1,   KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,  KC_F11,  KC_F12,  KC_TRNS,    KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,
+  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,  KC_TRNS,          
+  KC_TRNS, KC_TRNS, SGUI(KC_S),  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                         KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,
+  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_VOLD,  KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,    KC_PGUP,             KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,
+  KC_TRNS, KC_TRNS, KC_TRNS,                                KC_TRNS,                                KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_PGDN,  KC_TRNS,   KC_TRNS,             KC_TRNS 
+),
+
+};
+
+
diff --git a/keyboards/ep/comsn/tf_longeboye/readme.md b/keyboards/ep/comsn/tf_longeboye/readme.md
new file mode 100644 (file)
index 0000000..3bd89fb
--- /dev/null
@@ -0,0 +1,11 @@
+# TF Longeboye
+
+Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23), [/u/e11i0t23](https://reddit.com/u/e11i0t23)  
+Hardware Supported: TF Longeboye  
+Hardware Availability: None
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ep/comsn/tf_longeboye: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/ep/comsn/tf_longeboye/rules.mk b/keyboards/ep/comsn/tf_longeboye/rules.mk
new file mode 100644 (file)
index 0000000..195c9e5
--- /dev/null
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/ep/comsn/tf_longeboye/tf__longeboye.c b/keyboards/ep/comsn/tf_longeboye/tf__longeboye.c
new file mode 100644 (file)
index 0000000..9e81417
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "tf_longeboye.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/ep/comsn/tf_longeboye/tf_longeboye.h b/keyboards/ep/comsn/tf_longeboye/tf_longeboye.h
new file mode 100644 (file)
index 0000000..f673ff6
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2019 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+       K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K013, K014,    K015, K016,   K018, K019, K408, K114,     \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K113,          K115, K116,   K118, K119, K407,           \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214,                  K218, K219, K405, K216,     \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314,    K315,         K318, K319, K404, K316,     \
+       K400, K401, K402,                   K406,                   K410, K411, K413,    K414, K415, K416,   K418,       K403            \
+) { \
+       { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011, K013,  K014,  K015,  K016, K018,  K019,  }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111, K113,  K114,  K115,  K116, K118,  K119,  }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211, K213,  K214,  KC_NO, K216, K218,  K219,  }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311, K313,  K314,  K315,  K316, K318,  K319,  }, \
+       { K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  KC_NO, K410,  K411, K413,  K414,  K415,  K416, K418,  KC_NO, }  \
+}
diff --git a/keyboards/ergo42/keymaps/shinze/config.h b/keyboards/ergo42/keymaps/shinze/config.h
new file mode 100644 (file)
index 0000000..360d6a5
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+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
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
diff --git a/keyboards/ergo42/keymaps/shinze/keymap.c b/keyboards/ergo42/keymaps/shinze/keymap.c
new file mode 100644 (file)
index 0000000..4f4247d
--- /dev/null
@@ -0,0 +1,39 @@
+#include QMK_KEYBOARD_H
+#include "keymap_bepo.h"
+#include "keymap_french.h"
+
+extern keymap_config_t keymap_config;
+
+#define BASE 0
+#define NUMB 1
+#define SHORT 2
+
+// Special keys
+#define COPY     RGUI(BP_C)
+#define PASTE    RGUI(BP_V)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [BASE] = LAYOUT( \
+    KC_TAB,    BP_B,    BP_ECUT, BP_P,    BP_O,    BP_EGRV, KC_ESC,      KC_BSPC, BP_DCRC, BP_V,    BP_D,    BP_L,    BP_J,    BP_Z,    \
+    BP_W,      BP_A,    BP_U,    BP_I,    BP_E,    BP_COMM, _______,     _______, BP_C,    BP_T,    BP_S,    BP_R,    BP_N,    BP_M,    \
+    KC_LSFT,   BP_AGRV, BP_Y,    BP_X,    BP_DOT,  BP_K,    _______,     _______, BP_APOS, BP_Q,    BP_G,    BP_H,    BP_F,    BP_CCED, \
+    MO(SHORT), KC_LCTL, _______, KC_LALT, KC_LGUI, KC_SPC,  MO(NUMB),    KC_RGUI, KC_RSFT, KC_SPC,  _______, _______, _______, _______  \
+  ),
+
+  [NUMB] = LAYOUT( \
+    BP_HASH, BP_DQOT, BP_LDQT, BP_RDQT, BP_LPRN, BP_RPRN, BP_AT,         BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, BP_EQL,  BP_PERC, KC_BSPC, \
+    BP_DLR,  BP_1,    BP_2,    BP_3,    BP_4,    BP_5,    KC_LBRC,       KC_RBRC, BP_6,    BP_7,    BP_8,    BP_9,    BP_0,    BP_DEGR, \
+    _______, _______, _______, _______, _______, _______, _______,       _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______,       _______, _______, _______, _______, _______, _______, _______  \
+  ),
+
+  [SHORT] = LAYOUT( \
+    _______, _______, _______, _______,  _______, _______, _______,    _______, _______, _______, _______, _______, _______, RESET,   \
+    _______, _______, KC_UP,   _______,  _______, _______, _______,    _______, _______, _______, _______, _______, _______, _______, \
+    _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______,    _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, COPY,    PASTE,    _______, _______, _______,    _______, _______, _______, _______, _______, _______, _______  \
+  )
+
+};
+
diff --git a/keyboards/exclusive/e6v2/le_bmc/config.h b/keyboards/exclusive/e6v2/le_bmc/config.h
new file mode 100644 (file)
index 0000000..d0b976c
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+Copyright 2019 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    exclusive
+#define PRODUCT         e6v2 le bmc
+#define DESCRIPTION     A custom 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 11
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+
+//                        0   1   2   3   4   5   6   7   8   9   A
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, C2, C3, C4, C5, D7 }
+#define DIODE_DIRECTION COL2ROW
+
+#define RGBLED_NUM 6
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/exclusive/e6v2/le_bmc/info.json b/keyboards/exclusive/e6v2/le_bmc/info.json
new file mode 100644 (file)
index 0000000..aa6d171
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "keyboard_name": "", 
+    "url": "", 
+    "maintainer": "qmk", 
+    "width": 15, 
+    "height": 5, 
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "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.26}, {"x":10.0, "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}]
+        },
+
+        "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}]
+        },
+
+        "LAYOUT_60_hhkb": {
+            "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":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+        },
+
+        "LAYOUT_60_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}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/exclusive/e6v2/le_bmc/keymaps/default/config.h b/keyboards/exclusive/e6v2/le_bmc/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..26c6d6a
--- /dev/null
@@ -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/exclusive/e6v2/le_bmc/keymaps/default/keymap.c b/keyboards/exclusive/e6v2/le_bmc/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..7300419
--- /dev/null
@@ -0,0 +1,74 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_ansi(
+        KC_GESC, KC_1,    KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
+        KC_TAB,  KC_Q,    KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
+        KC_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, MO(1)
+    ),
+
+[1] = LAYOUT_60_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,  \
+            BL_TOGG, BL_INC,   BL_DEC,  BL_STEP, RESET,   EEP_RST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+       RGB_TOG, RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          \
+       KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, 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),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QMKBEST:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("QMK is the best thing ever!");
+      } else {
+        // when keycode QMKBEST is released
+      }
+      break;
+    case QMKURL:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKURL is released
+      }
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/exclusive/e6v2/le_bmc/keymaps/default/readme.md b/keyboards/exclusive/e6v2/le_bmc/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..4a1b6ef
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for bmc
diff --git a/keyboards/exclusive/e6v2/le_bmc/le_bmc.c b/keyboards/exclusive/e6v2/le_bmc/le_bmc.c
new file mode 100644 (file)
index 0000000..5f7ef25
--- /dev/null
@@ -0,0 +1,88 @@
+/* Copyright 2018 amnesia0287
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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) {
+}
+
+void backlight_init_ports(void) {
+    // initialize pins D0, D1, D4 and D6 as output
+    setPinOutput(D0);
+    setPinOutput(D1);
+    setPinOutput(D4);
+    setPinOutput(D6);
+
+    // turn backlight LEDs on
+    writePinHigh(D0);
+    writePinHigh(D1);
+    writePinHigh(D4);
+    writePinHigh(D6);
+}
+
+void backlight_set(uint8_t level) {
+       if (level == 0) {
+        // turn backlight LEDs off
+        writePinLow(D0);
+        writePinLow(D1);
+        writePinLow(D4);
+        writePinLow(D6);
+       } 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/le_bmc.h b/keyboards/exclusive/e6v2/le_bmc/le_bmc.h
new file mode 100644 (file)
index 0000000..2328690
--- /dev/null
@@ -0,0 +1,103 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+// LAYOUT_all ignores the key often coded as ~# to the left of Enter on ISO layouts. 
+// This is done as it shares the same row AND col as the pipe key. 
+
+#define LAYOUT_all( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k52, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36,      \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,           \
+    k10, k53, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18, k54,      \
+    k00, k01, k02, k65, k04, k08, k09, k05                                     \
+) \
+{ \
+    { k00,   k01,   k02,   KC_NO, k04, k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14, k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24, k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34, k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44, k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, k52,   k53,   k54, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64, k65,   k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74, KC_NO, k76,   k77,   k78,   KC_NO, k7A   }, \
+}
+
+
+#define LAYOUT_60_ansi( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36, \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,      \
+    k10, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18,           \
+    k00, k01, k02, k65, k04, k08, k09, k05                                \
+) \
+{ \
+    { k00,   k01,   k02,   KC_NO, k04,   k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14,   k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44,   k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64,   k65,   k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74,   KC_NO, k76,   k77,   k78,   KC_NO, k7A   }, \
+}
+
+#define LAYOUT_60_hhkb( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k52, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36,      \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,           \
+    k10, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18, k54,           \
+    k01, k02, k65, k08, k09                                                    \
+) \
+{ \
+    { KC_NO, k01,   k02,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14,   k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44,   k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, k52,   KC_NO, k54,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64,   k65,   k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74,   KC_NO, k76,   k77,   k78,   KC_NO, k7A   }, \
+}
+
+#define LAYOUT_60_tsangan( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k52, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36,      \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,           \
+    k10, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18, k54,           \
+    k00, k01, k02, k65, k08, k09, k05                                          \
+) \
+{ \
+    { k00,   k01,   k02,   KC_NO, KC_NO, k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14,   k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44,   k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, k52,   KC_NO, k54,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64,   k65,   k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74,   KC_NO, k76,   k77,   k78,   KC_NO, k7A   }, \
+}
diff --git a/keyboards/exclusive/e6v2/le_bmc/readme.md b/keyboards/exclusive/e6v2/le_bmc/readme.md
new file mode 100644 (file)
index 0000000..4dc8e6e
--- /dev/null
@@ -0,0 +1,44 @@
+# E6-V2 Bootmapper Client (ps2avrgb) LE
+
+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)  
+
+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. 
+
+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
new file mode 100644 (file)
index 0000000..a9156ad
--- /dev/null
@@ -0,0 +1,89 @@
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 12000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+# ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+# F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = bootloadHID
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_CUSTOM_DRIVER = yes
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+
+SRC += i2c_master.c
+
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/exclusive/e6v2/le_bmc/usbconfig.h b/keyboards/exclusive/e6v2/le_bmc/usbconfig.h
new file mode 100644 (file)
index 0000000..f22f2b6
--- /dev/null
@@ -0,0 +1,393 @@
+/* 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_INTR_POLL_INTERVAL      1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED         0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER           500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE      1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ       0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT   0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL        0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE       0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS          0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len)     if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts)     if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK()              hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF                   1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ *     in      YL, TCNT0
+ *     sts     timer0Snapshot, YL
+ *     endm
+ * #endif
+ * #define USB_SOF_HOOK                    myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING     0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH   0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC                0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID       (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID       (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION  0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME     'E', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e'
+#define USB_CFG_VENDOR_NAME_LEN 9
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME     'E', '6', 'V', '2'
+#define USB_CFG_DEVICE_NAME_LEN 4
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER   'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN   0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS        0
+#define USB_CFG_DEVICE_SUBCLASS     0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS     3   /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS  1   /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL  1   /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ *   + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ *     at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ *     used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ *     you want RAM pointers.
+ *   + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ *     in static memory is in RAM, not in flash memory.
+ *   + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ *     the driver must know the descriptor's length. The descriptor itself is
+ *     found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ *   char usbDescriptorDevice[];
+ *   char usbDescriptorConfiguration[];
+ *   char usbDescriptorHidReport[];
+ *   char usbDescriptorString0[];
+ *   int usbDescriptorStringVendor[];
+ *   int usbDescriptorStringDevice[];
+ *   int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE   (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ *   USB_CFG_DESCR_PROPS_DEVICE
+ *   USB_CFG_DESCR_PROPS_CONFIGURATION
+ *   USB_CFG_DESCR_PROPS_STRINGS
+ *   USB_CFG_DESCR_PROPS_STRING_0
+ *   USB_CFG_DESCR_PROPS_STRING_VENDOR
+ *   USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ *   USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ *   USB_CFG_DESCR_PROPS_HID
+ *   USB_CFG_DESCR_PROPS_HID_REPORT
+ *   USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int  serialNumberDescriptor[] = {
+ *     USB_STRING_DESCRIPTOR_HEADER(6),
+ *     'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE                  0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION           USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_CONFIGURATION           0
+#define USB_CFG_DESCR_PROPS_STRINGS                 0
+#define USB_CFG_DESCR_PROPS_STRING_0                0
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR           0
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT          0
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER    0
+#define USB_CFG_DESCR_PROPS_HID                     USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID                     0
+#define USB_CFG_DESCR_PROPS_HID_REPORT              USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID_REPORT              0
+#define USB_CFG_DESCR_PROPS_UNKNOWN                 0
+
+#define usbMsgPtr_t unsigned short
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
+ * a scalar type here because gcc generates slightly shorter code for scalar
+ * arithmetics than for pointer arithmetics. Remove this define for backward
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
+ */
+
+/* ----------------------- Optional MCU Description ------------------------ */
+
+/* The following configurations have working defaults in usbdrv.h. You
+ * usually don't need to set them explicitly. Only if you want to run
+ * the driver on a device which is not yet supported or with a compiler
+ * which is not fully supported (such as IAR C) or if you use a differnt
+ * interrupt than INT0, you may have to define some of these.
+ */
+/* #define USB_INTR_CFG            MCUCR */
+/* #define USB_INTR_CFG_SET        ((1 << ISC00) | (1 << ISC01)) */
+/* #define USB_INTR_CFG_CLR        0 */
+/* #define USB_INTR_ENABLE         GIMSK */
+/* #define USB_INTR_ENABLE_BIT     INT0 */
+/* #define USB_INTR_PENDING        GIFR */
+/* #define USB_INTR_PENDING_BIT    INTF0 */
+/* #define USB_INTR_VECTOR         INT0_vect */
+
+/* Set INT1 for D- falling edge to count SOF */
+/* #define USB_INTR_CFG            EICRA */
+#define USB_INTR_CFG_SET        ((1 << ISC11) | (0 << ISC10))
+/* #define USB_INTR_CFG_CLR        0 */
+/* #define USB_INTR_ENABLE         EIMSK */
+#define USB_INTR_ENABLE_BIT     INT1
+/* #define USB_INTR_PENDING        EIFR */
+#define USB_INTR_PENDING_BIT    INTF1
+#define USB_INTR_VECTOR         INT1_vect
diff --git a/keyboards/geekboards/tester/config.h b/keyboards/geekboards/tester/config.h
new file mode 100644 (file)
index 0000000..ac67877
--- /dev/null
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "config_common.h"
+
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x1319
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Geekboards
+#define PRODUCT         Geekboards Tester
+#define DESCRIPTION     Geekboards 8-keys macropad
+
+
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 4
+
+#define MATRIX_ROW_PINS { B0, D4}
+#define MATRIX_COL_PINS { F7, F6, D2, D3}
+#define UNUSED_PINS
+
+#define DIODE_DIRECTION COL2ROW
+#define LOCKING_SUPPORT_ENABL
+#define LOCKING_RESYNC_ENABLE
+
+#define DEBOUNCE 3
+#define RGB_DISABLE_AFTER_TIMEOUT 0
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true
+#define RGB_MATRIX_KEYPRESSES
+#define DISABLE_RGB_MATRIX_SPLASH
+#define DISABLE_RGB_MATRIX_MULTISPLASH
+#define DISABLE_RGB_MATRIX_SOLID_SPLASH
+#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)
diff --git a/keyboards/geekboards/tester/keymaps/default/keymap.c b/keyboards/geekboards/tester/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..e68f15f
--- /dev/null
@@ -0,0 +1,23 @@
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+    RGB_MOD,  KC_1,     KC_2,     KC_3,
+    KC_4,   KC_5,     KC_6,     MO(1)
+    ),
+[1] = LAYOUT( /* Base */
+    KC_ESC,  KC_F1,     KC_F2,     KC_F3,
+    KC_F4,   KC_F5,     KC_F6,     KC_F7
+    ),
+};
+
+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/geekboards/tester/readme.md b/keyboards/geekboards/tester/readme.md
new file mode 100644 (file)
index 0000000..7da0693
--- /dev/null
@@ -0,0 +1,12 @@
+Geekboards 8-keys macropad
+=====
+
+Keyboard Maintainer: [dztech](https://github.com/moyi4681)  
+Hardware Supported: Geekboards 8-keys macropad  
+Hardware Availability: geekboards.ru(https://geekboards.ru/)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make geekboards/tester: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/geekboards/tester/rules.mk b/keyboards/geekboards/tester/rules.mk
new file mode 100644 (file)
index 0000000..7e8d595
--- /dev/null
@@ -0,0 +1,68 @@
+# MCU name
+MCU = atmega32u4
+
+# project specific files
+#SRC =
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section
+BOOTLOADER = qmk-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+
+# 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)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+RGB_MATRIX_ENABLE = yes     # Use RGB matrix
diff --git a/keyboards/geekboards/tester/tester.c b/keyboards/geekboards/tester/tester.c
new file mode 100644 (file)
index 0000000..4fab1a7
--- /dev/null
@@ -0,0 +1,56 @@
+#include "tester.h"
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |      G location
+ *   |  |      |      B location
+ *   |  |      |      | */
+    {0, C1_1,   C3_2,   C4_2}, //A1
+    {0, C1_2,   C2_2,   C4_3}, //A2
+    {0, C1_3,   C2_3,   C3_3}, //A3
+    {0, C1_4,   C2_4,   C3_4}, //A4
+    {0, C1_5,   C2_5,   C3_5}, //A5
+    {0, C1_6,   C2_6,   C3_6}, //A6
+    {0, C1_7,   C2_7,   C3_7}, //A7
+    {0, C1_8,   C2_8,   C3_8}, //A8
+};
+
+led_config_t g_led_config = { 
+{
+    {  0,  1,  2,  3},
+    {  4,  5,  6,  7}
+}, 
+{
+    { 0,   0 }, { 75,   0 }, { 151,   0 }, { 224,   0 }, { 0,   64 }, { 75,   64 }, { 151,   64 }, { 224,  64 }
+}, 
+{
+    4, 4, 4, 4, 4, 4, 4, 4
+} 
+};
+
+
+
+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/geekboards/tester/tester.h b/keyboards/geekboards/tester/tester.h
new file mode 100644 (file)
index 0000000..28c555f
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma once
+#include "quantum.h"
+#define LAYOUT( \
+      k00, k01, k02, k03,\
+      k10, k11, k12, k13\
+) \
+{ \
+    { k00, k01, k02, k03 }, \
+    { k10, k11, k12, k13 } \
+}
index b35a1be789c1551b78307cc3cf6b3b3954f21007..49d54adcd88bf90e8c3cd632b932241650192a50 100644 (file)
@@ -30,6 +30,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define NO_ACTION_FUNCTION
 #define NO_ACTION_ONESHOT
 #define NO_ACTION_MACRO
+#define IGNORE_MOD_TAP_INTERRUPT
 
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
diff --git a/keyboards/georgi/keymaps/default-flipped/keymap.c b/keyboards/georgi/keymaps/default-flipped/keymap.c
new file mode 100644 (file)
index 0000000..09243f2
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+ * Good on you for modifying your layout, this is the most nonQMK layout you will come across
+ * There are three modes, Steno (the default), QWERTY (Toggleable) and a Momentary symbol layer
+ *
+ * Don't modify the steno layer directly, instead add chords using the keycodes and macros
+ * from sten.h to the layout you want to modify.
+ *
+ * Observe the comment above processQWERTY!
+ *
+ * http://docs.gboards.ca
+ */
+
+#include QMK_KEYBOARD_H
+#include "sten.h"
+#include "keymap_steno.h"
+
+// Proper Layers
+#define FUNCT   (LSD | LK | LP | LH)
+#define MEDIA   (LSD | LK | LW | LR)
+#define MOVE    (ST1 | ST2)
+
+// QMK Layers
+#define STENO_LAYER   0
+#define GAMING        1
+#define GAMING_2      2
+
+/* Keyboard Layout
+ * ,---------------------------------.    ,------------------------------.
+ * | FN  | LSU | LFT | LP | LH | ST1 |    | ST3 | RF | RP | RL | RT | RD |
+ * |-----+-----+-----+----+----|-----|    |-----|----+----+----+----+----|
+ * | PWR | LSD | LK  | LW | LR | ST2 |    | ST4 | RR | BB | RG | RS | RZ |
+ * `---------------------------------'    `------------------------------'
+ *                   ,---------------,    .---------------.
+ *                   | LNO | LA | LO |    | RE | RU | RNO |
+ *                   `---------------'    `---------------'
+ */
+
+// Note: You can only use basic keycodes here!
+// P() is just a wrapper to make your life easier.
+//
+// http://docs.gboards.ca
+uint32_t processQwerty(bool lookup) {
+    // Specials
+    P( RT  | RS  | RD  | RZ | LNO,        SEND_STRING(VERSION); SEND_STRING(__DATE__));
+    P( LNO | RNO | LA  | LO | RE | RU,    SEND(KC_MPLY));
+    P( LFT | LK  | LP  | LW,              REPEAT());
+    P( ST1 | ST2 | LW  | ST4,             SEND(KC_BSPC));
+
+    // Mouse Keys
+    P( LO  | LSD | LK,    CLICK_MOUSE(KC_MS_BTN2));
+    P( LO  | LR  | LW,    CLICK_MOUSE(KC_MS_BTN1));
+
+    // Thumb Chords
+    P( LA  | LO  | RE  | RU,    SEND(KC_CAPS));
+    P( LA  | RU,                SEND(KC_ESC));
+    P( LO  | RE,                SEND(KC_LCTL));
+    P( LNO | RNO | LA | RU,     SEND(KC_LCTL); SEND(KC_LSFT));
+    P( LNO | LA  | RE,          SEND(KC_LCTL); SEND(KC_LSFT); SEND(KC_LALT));
+
+    // Mods
+    P( RT | RD   | RS | RZ,    SEND(KC_LGUI));
+    P( RT | RD,                SEND(KC_LCTL));
+    P( RS | RZ,                SEND(KC_LALT));
+    P( LA | LNO,               SEND(KC_LCTL));
+    P( LA | LO,                SEND(KC_LALT));
+    P( LO,                     SEND(KC_LSFT));
+
+    // Function Layer
+    P( FUNCT | RF | RR,    SEND(KC_F5));
+    P( FUNCT | RP | RB,    SEND(KC_F6));
+    P( FUNCT | RL | RG,    SEND(KC_F7));
+    P( FUNCT | RT | RS,    SEND(KC_F8));
+    P( FUNCT | RF,         SEND(KC_F1));
+    P( FUNCT | RP,         SEND(KC_F2));
+    P( FUNCT | RL,         SEND(KC_F3));
+    P( FUNCT | RT,         SEND(KC_F4));
+    P( FUNCT | RR,         SEND(KC_F9));
+    P( FUNCT | RG,         SEND(KC_F10));
+    P( FUNCT | RB,         SEND(KC_F11));
+    P( FUNCT | RS,         SEND(KC_F12));
+
+    // Movement Layer
+    P( MOVE | RF,     SEND(KC_LEFT));
+    P( MOVE | RP,     SEND(KC_DOWN));
+    P( MOVE | RL,     SEND(KC_UP));
+    P( MOVE | RT,     SEND(KC_RIGHT));
+    P( MOVE | ST3,    SEND(KC_PGUP));
+    P( MOVE | ST4,    SEND(KC_PGDN));
+
+    // Media Layer
+    P( MEDIA | RF,    SEND(KC_MPRV));
+    P( MEDIA | RP,    SEND(KC_MPLY));
+    P( MEDIA | RL,    SEND(KC_MPLY));
+    P( MEDIA | RT,    SEND(KC_MNXT));
+    P( MEDIA | RD,    SEND(KC_VOLU));
+    P( MEDIA | RZ,    SEND(KC_VOLD));
+    P( MEDIA | RS,    SEND(KC_MUTE));
+
+    // Number Row, Left
+    P( LNO | LSU,    SEND(KC_1));
+    P( LNO | LFT,    SEND(KC_2));
+    P( LNO | LP,     SEND(KC_3));
+    P( LNO | LH,     SEND(KC_4));
+    P( LNO | ST1,    SEND(KC_5));
+    P( LNO | ST3,    SEND(KC_6));
+    P( LNO | RF,     SEND(KC_7));
+    P( LNO | RP,     SEND(KC_8));
+    P( LNO | RL,     SEND(KC_9));
+    P( LNO | RT,     SEND(KC_0));
+
+    // Number Row, Right
+    P( RNO | LSU,    SEND(KC_1));
+    P( RNO | LFT,    SEND(KC_2));
+    P( RNO | LP,     SEND(KC_3));
+    P( RNO | LH,     SEND(KC_4));
+    P( RNO | ST1,    SEND(KC_5));
+    P( RNO | ST3,    SEND(KC_6));
+    P( RNO | RF,     SEND(KC_7));
+    P( RNO | RP,     SEND(KC_8));
+    P( RNO | RL,     SEND(KC_9));
+    P( RNO | RT,     SEND(KC_0));
+    P( RNO | LA,     SEND(KC_5));
+
+    // Specials
+    P( RU | RNO,    SEND(KC_TAB));
+    P( RE | RU,     SEND(KC_BSPC));
+    P( RD | RZ,     SEND(KC_ENT));
+    P( RE,          SEND(KC_ENT));
+    P( RD,          SEND(KC_BSPC));
+    P( LNO,         SEND(KC_BSPC));
+    P( RNO,         SEND(KC_BSPC));
+    P( LA,          SEND(KC_SPC));
+    P( RU,          SEND(KC_SPC));
+    P( RZ,          SEND(KC_ESC));
+
+    // Symbols and Numbers
+    P( PWR | RE | RU,      SEND(KC_ENT));
+    P( PWR | LA | LO,      SEND(KC_SPC));
+    P( PWR | LP | LW,      SEND(KC_LSFT); SEND(KC_9));       // (
+    P( PWR | LH | LR,      SEND(KC_LSFT); SEND(KC_0));       // )
+    P( PWR | ST1 | ST2,    SEND(KC_GRV));                    // `
+    P( PWR | RD | RZ,      SEND(KC_ESC));
+    P( PWR | LSU | LSD,    SEND(KC_LSFT); SEND(KC_3));       // #
+    P( PWR | LFT | LK,     SEND(KC_LSFT); SEND(KC_4));       // $
+    P( PWR | LSU,          SEND(KC_LSFT); SEND(KC_1));       // !
+    P( PWR | LSD,          SEND(KC_LSFT); SEND(KC_5));       // %
+    P( PWR | LFT,          SEND(KC_LSFT); SEND(KC_2));       // @
+    P( PWR | LK,           SEND(KC_LSFT); SEND(KC_6));       // ^
+    P( PWR | LP,           SEND(KC_LSFT); SEND(KC_LBRC));    // {
+    P( PWR | LW,           SEND(KC_LBRC));
+    P( PWR | LH,           SEND(KC_LSFT); SEND(KC_RBRC));    // }
+    P( PWR | LR,           SEND(KC_RBRC));
+    P( PWR | ST1,          SEND(KC_LSFT); SEND(KC_BSLS));    // |
+    P( PWR | ST2,          SEND(KC_LSFT); SEND(KC_GRV));     // ~
+    P( PWR | ST3,          SEND(KC_QUOT));
+    P( PWR | ST4,          SEND(KC_LSFT); SEND(KC_QUOT));    // "
+    P( PWR | RF,           SEND(KC_KP_PLUS));
+    P( PWR | RR,           SEND(KC_LSFT); SEND(KC_7));       // &
+    P( PWR | RP,           SEND(KC_MINS));
+    P( PWR | RB,           SEND(KC_EQL));
+    P( PWR | RL,           SEND(KC_SLSH));
+    P( PWR | RG,           SEND(KC_COMM));
+    P( PWR | RT,           SEND(KC_PAST));
+    P( PWR | RS,           SEND(KC_DOT));
+    P( PWR | RD,           SEND(KC_TAB));
+    P( PWR | LA,           SEND(KC_LSFT));
+    P( PWR | LO,           SEND(KC_SLSH));
+    P( PWR | RE,           SEND(KC_SCLN));
+    P( PWR | RU,           SEND(KC_BSLS));
+    P( PWR | LNO,          SEND(KC_BSLS));
+
+    // Letters
+    P( LSU | LSD,    SEND(KC_A));
+    P( LFT | LK,     SEND(KC_S));
+    P( LP  | LW,     SEND(KC_D));
+    P( LH  | LR,     SEND(KC_F));
+    P( ST1 | ST2,    SEND(KC_G));
+    P( ST3 | ST4,    SEND(KC_H));
+    P( RF  | RR,     SEND(KC_J));
+    P( RT  | RS,     SEND(KC_SCLN));
+    P( RG  | RL,     SEND(KC_L));
+    P( RP  | RB,     SEND(KC_K));
+    P( LSU,          SEND(KC_Q));
+    P( LSD,          SEND(KC_Z));
+    P( LFT,          SEND(KC_W));
+    P( LK,           SEND(KC_X));
+    P( LP,           SEND(KC_E));
+    P( LW,           SEND(KC_C));
+    P( LH,           SEND(KC_R));
+    P( LR,           SEND(KC_V));
+    P( ST1,          SEND(KC_T));
+    P( ST2,          SEND(KC_B));
+    P( ST3,          SEND(KC_Y));
+    P( ST4,          SEND(KC_N));
+    P( RF,           SEND(KC_U));
+    P( RR,           SEND(KC_M));
+    P( RP,           SEND(KC_I));
+    P( RB,           SEND(KC_COMM));
+    P( RL,           SEND(KC_O));
+    P( RG,           SEND(KC_DOT));
+    P( RT,           SEND(KC_P));
+    P( RS,           SEND(KC_SLSH));
+    P( RNO,          SEND(KC_BSPC));
+    P( LNO,          SEND(KC_BSPC));
+
+    return 0;
+}
+
+// "Layers"
+// Steno layer should be first in your map.
+// When PWR | FN | ST3 | ST4 is pressed, the layer is increased to the next map. You must return to STENO_LAYER at the end.
+// If you need more space for chords, remove the two gaming layers.
+// Note: If using NO_ACTION_TAPPING, LT will not work!
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    // Main layer, everything goes through here
+    [STENO_LAYER] = LAYOUT_georgi(
+        STN_FN,  STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1,       STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR,
+        STN_PWR, STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2,       STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR,
+                                   STN_A,   STN_O,   STN_N1,        STN_N7,  STN_E,   STN_U
+    ),
+    // Gaming layer with Numpad, Very limited
+    [GAMING] = LAYOUT_georgi(
+        KC_LSFT, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                       KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_ENT,
+        KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                       KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_DQUO,
+                                   KC_LALT, KC_SPC,  LT(GAMING_2, KC_ENT),       KC_DEL,  KC_ASTR, TO(STENO_LAYER)
+    ),
+
+    [GAMING_2] = LAYOUT_georgi(
+        KC_LSFT, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,          KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+        KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,          KC_N,    KC_M,    KC_LT,   KC_GT,   KC_QUES, KC_RSFT,
+                                   KC_LALT, KC_SPC,  KC_ENT,        KC_DEL,  KC_ASTR, TO(STENO_LAYER)
+    )
+};
+
+// Don't fuck with this, thanks.
+size_t keymapsCount  = sizeof(keymaps)/sizeof(keymaps[0]);
diff --git a/keyboards/georgi/keymaps/default-flipped/readme.md b/keyboards/georgi/keymaps/default-flipped/readme.md
new file mode 100644 (file)
index 0000000..f9da34b
--- /dev/null
@@ -0,0 +1,11 @@
+# Georgi QWERTY/Steno firmware
+
+This is the default keymap for Georgi, it's based heavily off of the naps62 ErgoDox and the Gergo layout. 
+It is both a ergonomic and programmer friendly keymap.
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
+
+## Space issues
+If you find yourself running out of space for dictionary entries, disabling mousekeys in rules.mk will save
+you about 4k for entries!
+Get a free 1k by deleting the Gaming layers from the keymap!
diff --git a/keyboards/georgi/keymaps/default-flipped/rules.mk b/keyboards/georgi/keymaps/default-flipped/rules.mk
new file mode 100644 (file)
index 0000000..90d8057
--- /dev/null
@@ -0,0 +1,41 @@
+#----------------------------------------------------------------------------
+# make georgi:default:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+
+NO_REPEAT                               = no
+VERBOSE                                         = yes
+KEYBOARD_SHARED_EP       = yes
+CUSTOM_MATRIX                   = yes
+
+#Firmware reduction options
+MOUSEKEY_ENABLE                         = yes          # 1500 bytes
+NO_TAPPING                              = no       # 2000 bytes
+NO_PRINT                                = yes          
+
+#Debug options
+CONSOLE_ENABLE                  = no
+DEBUG_MATRIX_SCAN_RATE   = no
+DEBUG_MATRIX                    = no
+ONLY_QWERTY                             = no
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+    OPT_DEFS += -DDEBUG_MATRIX
+endif
+ifeq ($(strip $(NO_REPEAT)), yes)
+    OPT_DEFS += -DNO_REPEAT
+endif
+ifeq ($(strip $(NO_PRINT)), yes)
+    OPT_DEFS += -DNO_PRINT -DNO_DEBUG
+endif
+ifeq ($(strip $(ONLY_QWERTY)), yes)
+    OPT_DEFS += -DONLYQWERTY
+endif
+ifeq ($(strip $(NO_TAPPING)), yes)
+    OPT_DEFS += -DNO_ACTION_TAPPING
+endif
index 404aac8fc18a5b345524e8901b6404426b4f3d58..93c551af2748ed26985fcf4170818ab981c07189 100644 (file)
@@ -13,7 +13,6 @@
 #include QMK_KEYBOARD_H
 #include "sten.h"
 #include "keymap_steno.h"
-#define IGNORE_MOD_TAP_INTERRUPT
 
 // Proper Layers
 #define FUNCT   (LSD | LK | LP | LH)
index 1d9b57e9a54bcd7d7c8b28e13ecd41b610ca1008..e9294c5cc83ce6f635035b00fdfd0d10ae0e4c89 100644 (file)
@@ -13,7 +13,6 @@
 #include QMK_KEYBOARD_H
 #include "sten.h"
 #include "keymap_steno.h"
-#define IGNORE_MOD_TAP_INTERRUPT
 
 // Proper Layers
 #define FUNCT   (LSD | LK | LP | LH)
index 58c42c852951112dea61ef29be694e047b51ef5e..4591aab22fe0eebc0bb649f6a03c416faa3e98b4 100644 (file)
@@ -13,7 +13,6 @@
 #include QMK_KEYBOARD_H
 #include "sten.h"
 #include "keymap_steno.h"
-#define IGNORE_MOD_TAP_INTERRUPT
 
 // Proper Layers
 #define FUNCT   (LSD | LK | LP | LH)
diff --git a/keyboards/handwired/co60/info.json b/keyboards/handwired/co60/info.json
new file mode 100644 (file)
index 0000000..46f369f
--- /dev/null
@@ -0,0 +1,38 @@
+{
+  "keyboard_name": "CO60",
+  "url": "https://github.com/jmdaly/CO60",
+  "maintainer": "qmk",
+  "width": 15,
+  "height": 5,
+  "layouts": {
+    "LAYOUT_all": {
+      "key_count": 68,
+      "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"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":"LSpace", "x":3.75, "y":4, "w":2.25}, {"label":"Fn", "x":6, "y":4, "w":1.25}, {"label":"RSpace", "x":7.25, "y":4, "w":2.75}, {"label":"Alt", "x":10, "y":4, "w":1}, {"label":"Win", "x":11, "y":4, "w":1}, {"label":"Menu", "x":12, "y":4, "w":1}, {"label":"Ctrl", "x":13, "y":4, "w":1}, {"label":"Fn", "x":14, "y":4, "w":1}]
+    },
+    "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":"CapsLock", "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_ansi_split_bs_rshift": {
+      "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, "w":1}, {"label":"Del", "x":14, "y":0, "w":1}, {"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":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3, "w":1}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+    },
+    "LAYOUT_60_iso": {
+      "key_count": 62,
+      "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"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":"CapsLock", "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}, {"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_hhkb": {
+      "key_count": 60,
+      "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "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":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75},{"label":"Fn", "x":14, "y":3}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"label":"Space", "x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}]
+    },
+    "LAYOUT_60_hhkb_split_space": {
+      "key_count": 62,
+      "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "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":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75},{"label":"Fn", "x":14, "y":3}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"label":"LSpace", "x":4, "y":4, "w":2.75}, {"label":"Fn", "x":6.75, "y":4, "w":1.5}, {"label":"RSpace", "x":8.25, "y":4, "w":2.75}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}]
+    },
+    "LAYOUT_60_hhkb_split_625u_space": {
+      "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":"Del", "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":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75},{"label":"Fn", "x":14, "y":3}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"LSpace", "x":3.75, "y":4, "w":2.25}, {"label":"Fn", "x":6, "y":4, "w":1.25}, {"label":"RSpace", "x":7.25, "y":4, "w":2.75}, {"label":"Menu", "x":10, "y":4, "w":1.25}, {"label":"Alt", "x":11.25, "y":4, "w":1.25}, {"label":"Win", "x":12.5, "y":4}]
+    }
+  }
+}
+
diff --git a/keyboards/handwired/co60/keymaps/all_keys/config.h b/keyboards/handwired/co60/keymaps/all_keys/config.h
new file mode 100644 (file)
index 0000000..a68c5c7
--- /dev/null
@@ -0,0 +1,20 @@
+/* Copyright 2019 John M Daly <jmdaly@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
+
+
+// place overrides here
diff --git a/keyboards/handwired/co60/keymaps/all_keys/keymap.c b/keyboards/handwired/co60/keymaps/all_keys/keymap.c
new file mode 100644 (file)
index 0000000..797b7ec
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright 2019 John M Daly <jmdaly@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+
+enum co60_layers {
+  _L1,
+  _L2
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_L1] = LAYOUT_all( /* Base */
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7, KC_8,    KC_9,    KC_0,    KC_MINS,    KC_EQL,  KC_GRV, KC_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_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_LSFT,
+    KC_LCTL, KC_LGUI, KC_LALT,          KC_ENT,           KC_HOME, KC_END, KC_INS,         KC_RALT, KC_RGUI,    KC_RIGHT, KC_RCTL
+  )
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/co60/keymaps/all_keys/readme.md b/keyboards/handwired/co60/keymaps/all_keys/readme.md
new file mode 100644 (file)
index 0000000..0e472f2
--- /dev/null
@@ -0,0 +1,5 @@
+# Keymap that uses all possible switches
+
+This is in part to test all of the switches,
+but also it may be useful if anyone ever makes a
+layout that requires all switch positions.
diff --git a/keyboards/handwired/co60/keymaps/default/config.h b/keyboards/handwired/co60/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..124091c
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2018 John M Daly
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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/co60/keymaps/default/keymap.c b/keyboards/handwired/co60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..35151c4
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright 2019 John M Daly <jmdaly@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum co60_layers {
+  _L1,
+  _L2
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_L1] = LAYOUT_60_ansi( /* Base */
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7, KC_8,    KC_9,    KC_0,    KC_MINS,    KC_EQL,  KC_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,    MO(_L2), KC_RCTL
+  ),
+  [_L2] = LAYOUT_60_ansi( /* Base */
+    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_GRV,
+    _______, BL_TOGG, BL_INC,  _______, _______, _______, _______, _______, _______, _______,   _______,   KC_PGUP,    _______,  KC_INSERT,
+    _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT,  KC_HOME,   KC_END,     _______,
+    _______, BL_DEC,  _______, _______, _______, _______, _______, _______, _______, _______,   KC_PGDOWN, _______,
+    _______, _______, _______,                            _______,                              _______,   _______,    _______,  _______
+  )
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/co60/keymaps/default/readme.md b/keyboards/handwired/co60/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..eb8ba49
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for co60
\ No newline at end of file
diff --git a/keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/config.h b/keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/config.h
new file mode 100644 (file)
index 0000000..c88fbc2
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright 2019 John M Daly <jmdaly@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 LEADER_TIMEOUT 300
+
+// place overrides here
diff --git a/keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/keymap.c b/keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/keymap.c
new file mode 100644 (file)
index 0000000..0f19f9f
--- /dev/null
@@ -0,0 +1,137 @@
+/* Copyright 2019 John M Daly <jmdaly@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum co60_layers {
+  _L1,
+  _L2,
+  _L3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  // Default base layer. Except for the bottom row, this
+  // is close to a standard HHKB layout.
+  [_L1] = LAYOUT_60_hhkb_split_625u_space( /* Base */
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7, KC_8,    KC_9,    KC_0,    KC_MINS,    KC_EQL,  KC_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,
+    CTL_T(KC_ESC), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J, KC_K,    KC_L,    KC_SCLN, KC_QUOT,    KC_ENT,
+    KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, MO(_L3),
+             KC_LALT, KC_LGUI,       KC_ENT,              MO(_L3),       KC_SPC,  KC_LEAD, KC_RGUI, KC_RALT
+  ),
+  // My preferred base layout. This doesn't match the caps
+  // on my boards, so I don't make it default.
+  [_L2] = LAYOUT_60_hhkb_split_625u_space( /* Base */
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7, KC_8,    KC_9,    KC_0,    KC_MINS,    KC_EQL,  KC_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_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_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, MO(_L3),
+             KC_LALT, KC_LGUI,       KC_ENT,              MO(_L3),       KC_SPC,  KC_LEAD, KC_RGUI, KC_RALT
+  ),
+  [_L3] = LAYOUT_60_hhkb_split_625u_space( /* Function */
+    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,   _______, _______,
+    BL_BRTG, BL_TOGG, BL_INC,  BL_DEC, BL_ON, BL_OFF, _______, _______, _______, _______,   _______,   KC_PGUP,    KC_INSERT,  KC_DEL,
+    _______, RGB_TOG, RGB_MOD, RGB_RMOD, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT,  KC_HOME,   KC_END,     _______,
+    _______, BL_DEC,  _______, _______, _______, _______, _______, DF(_L1), DF(_L2), _______,   KC_PGDOWN, _______, _______,
+             _______, _______,          _______,          _______,          _______, _______,   _______,   _______
+  )
+};
+
+void matrix_init_user(void) {
+
+}
+
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+
+  LEADER_DICTIONARY() {
+    leading = false;
+    leader_end();
+
+    // Close a program in i3wm
+    SEQ_ONE_KEY(KC_Q) {
+      register_code(KC_LGUI);
+      register_code(KC_LSHIFT);
+      register_code(KC_Q);
+      unregister_code(KC_Q);
+      unregister_code(KC_LSHIFT);
+      unregister_code(KC_LGUI);
+    }
+    // Exit i3wm
+    SEQ_ONE_KEY(KC_E) {
+      register_code(KC_LGUI);
+      register_code(KC_LSHIFT);
+      register_code(KC_E);
+      unregister_code(KC_E);
+      unregister_code(KC_LSHIFT);
+      unregister_code(KC_LGUI);
+    }
+    // Copy selected text in suckless terminal
+    SEQ_ONE_KEY(KC_C) {
+      register_code(KC_LCTL);
+      register_code(KC_LSHIFT);
+      register_code(KC_C);
+      unregister_code(KC_C);
+      unregister_code(KC_LSHIFT);
+      unregister_code(KC_LCTL);
+    }
+    // Paste text in suckless terminal
+    SEQ_ONE_KEY(KC_V) {
+      register_code(KC_LCTL);
+      register_code(KC_LSHIFT);
+      register_code(KC_V);
+      unregister_code(KC_V);
+      unregister_code(KC_LSHIFT);
+      unregister_code(KC_LCTL);
+    }
+    // FZF shortcut to fuzzy switch directories
+    SEQ_ONE_KEY(KC_D) {
+      register_code(KC_LALT);
+      register_code(KC_C);
+      unregister_code(KC_C);
+      unregister_code(KC_LALT);
+    }
+    // Send keys to bring up fuzzy process kill
+    SEQ_ONE_KEY(KC_K) {
+      SEND_STRING("kill " SS_TAP(X_TAB));
+    }
+    // Send keys to start neovim and fuzzy search for filename
+    SEQ_ONE_KEY(KC_T) {
+      SEND_STRING("nvim ");
+      register_code(KC_LCTL);
+      register_code(KC_T);
+      unregister_code(KC_T);
+      unregister_code(KC_LCTL);
+    }
+    // Switch between windows in tmux
+    SEQ_ONE_KEY(KC_L) {
+      register_code(KC_LCTL);
+      register_code(KC_B);
+      unregister_code(KC_B);
+      unregister_code(KC_LCTL);
+      register_code(KC_L);
+      unregister_code(KC_L);
+    }
+  }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/readme.md b/keyboards/handwired/co60/keymaps/jmdaly_hhkb_split_space/readme.md
new file mode 100644 (file)
index 0000000..032fc85
--- /dev/null
@@ -0,0 +1,6 @@
+# The split-space HHKB keymap for co60
+
+This keymap implements a modified MX HHKB layout, but in addition to 7u space,
+this layout supports a number of split spacebar bottom rows. The full set of
+layout options is found
+[here](http://www.keyboard-layout-editor.com/#/gists/b488496b3a71c8192113c07e298be340).
diff --git a/keyboards/handwired/co60/readme.md b/keyboards/handwired/co60/readme.md
new file mode 100644 (file)
index 0000000..2a649ea
--- /dev/null
@@ -0,0 +1,26 @@
+# co60
+
+The CO60 is a 60% PCB that aims to meet the following goals:
+
+* Switches oriented such that the LEDs are South-facing, for
+  compatibility with Cherry profile keycaps.
+* USB Type-C support in both A to C and C to C configurations.
+* QMK support.
+* A variety of split spacebar configurations, including split 6.25U
+  space and split 7U space.
+* ESD protection circuitry, including data line protection and a
+  polyfuse on the VCC line.
+* Support for per-switch LED backlighting.
+* Fits in standard 60% keyboard cases.
+
+More info on the project, including all of the design files, can be found [here](https://github.com/jmdaly/CO60).
+
+Keyboard Maintainer: [jmdaly](https://github.com/jmdaly)  
+Hardware Supported: Supports the CO60 PCB rev1, rev6, rev7  
+Hardware Availability: Through group buys.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/co60/rev7: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/co60/rev1/config.h b/keyboards/handwired/co60/rev1/config.h
new file mode 100644 (file)
index 0000000..4d5140d
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+Copyright 2018 John M Daly <jmdaly@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      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    John M Daly
+#define PRODUCT         CO60
+#define DESCRIPTION     An open hardware sixty percent PCB
+
+/* 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, B2, B5, B4, D7, D6, B3, B0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#ifdef __AVR__
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#endif
+#define BACKLIGHT_LEVELS 3
+
+
+/* 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
diff --git a/keyboards/handwired/co60/rev1/rev1.c b/keyboards/handwired/co60/rev1/rev1.c
new file mode 100644 (file)
index 0000000..abdfa88
--- /dev/null
@@ -0,0 +1,46 @@
+/* Copyright 2018 John M Daly
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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"
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+__attribute__ ((weak))
+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);
+}
+
+__attribute__ ((weak))
+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/handwired/co60/rev1/rev1.h b/keyboards/handwired/co60/rev1/rev1.h
new file mode 100644 (file)
index 0000000..3cf6a85
--- /dev/null
@@ -0,0 +1,127 @@
+/* Copyright 2018 John M Daly
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 following is a layout that uses all available switch positions.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_all( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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, K214, \
+    K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+    K400, K401, K402,       K404,       K406,       K408,       K410, K411, K412, K413, K414 \
+) \
+{ \
+    { K000, K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013, 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, K214 }, \
+    { K300, K301,   K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313, K314 }, \
+    { K400, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412,  K413, K414 }, \
+}
+
+#define LAYOUT_60_ansi( \
+    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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       \
+    K400, K401, K402,                   K406,                   K410, K411,       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,  KC_NO,  K214 }, \
+    { K300, KC_NO, K302, K303,  K304,  K305,  K306, K307,  K308, K309,   K310, K311, KC_NO, K313,   KC_NO }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,   K414 }, \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+    K400, K401, K402,                   K406,                   K410, K411,       K413, K414 \
+) \
+{ \
+    { K000, K001,  K002, K003,  K004,  K005,  K006, K007,  K008, K009,   K010, K011, K012,  K013,   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,  KC_NO,  K214 }, \
+    { K300, KC_NO, K302, K303,  K304,  K305,  K306, K307,  K308, K309,   K310, K311, KC_NO, K313,   K314 }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,   K414 }, \
+}
+
+#define LAYOUT_60_iso( \
+    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,       \
+    K200,       K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+    K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       \
+    K400, K401, K402,                   K406,                   K410, K411,       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,  KC_NO }, \
+    { K200, KC_NO, K202, K203,  K204,  K205,  K206, K207,  K208,  K209,  K210, K211, K212,  K213,  K214 }, \
+    { K300, K301,  K302, K303,  K304,  K305,  K306, K307,  K308,  K309,  K310, K311, KC_NO, K313,  KC_NO }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,  K414 }, \
+}
+
+#define LAYOUT_60_hhkb( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,                   K406,                         K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004,  K005,  K006, K007,  K008,  K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304,  K305,  K306, K307,  K308,  K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO }, \
+}
+
+#define LAYOUT_60_hhkb_split_space( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,       K404,       K406,       K408,             K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO }, \
+}
+
+#define LAYOUT_60_hhkb_split_625u_space( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,       K404,       K406,       K408,       K410, K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, KC_NO }, \
+}
diff --git a/keyboards/handwired/co60/rev1/rules.mk b/keyboards/handwired/co60/rev1/rules.mk
new file mode 100644 (file)
index 0000000..31ce6cb
--- /dev/null
@@ -0,0 +1,70 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = 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
+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
+LEADER_ENABLE = yes         # Turn on leader support
+
+# Layouts supported by this PCB:
+LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift 60_hhkb
diff --git a/keyboards/handwired/co60/rev6/chconf.h b/keyboards/handwired/co60/rev6/chconf.h
new file mode 100644 (file)
index 0000000..1d9f12f
--- /dev/null
@@ -0,0 +1,520 @@
+/*
+    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                 100000
+
+/**
+ * @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
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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        TRUE
+
+/**
+ * @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           TRUE
+
+/**
+ * @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/handwired/co60/rev6/config.h b/keyboards/handwired/co60/rev6/config.h
new file mode 100644 (file)
index 0000000..b1ab99f
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2019 John M Daly <jmdaly@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      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    John M Daly
+#define PRODUCT         CO60 rev6
+#define DESCRIPTION     An open hardware sixty percent PCB
+
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* ROWS: Top to bottom, COLS: Left to right
+*/
+#define MATRIX_ROW_PINS { B0, B1, B2, A15, A10 }
+#define MATRIX_COL_PINS { A2, A3, A6, B14, B15, A8, A9, A7, B3, B4, C14, C15, C13, B5, B6 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#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
+
+/* Backlight configuration
+ * Backlight LEDs on B8
+ */
+#define BACKLIGHT_LEVELS 24
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
diff --git a/keyboards/handwired/co60/rev6/halconf.h b/keyboards/handwired/co60/rev6/halconf.h
new file mode 100644 (file)
index 0000000..5e5d702
--- /dev/null
@@ -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                 TRUE
+#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                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S                 FALSE
+#endif
+
+/**
+ * @brief   Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI             FALSE
+#endif
+
+/**
+ * @brief   Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM                 TRUE
+#endif
+
+/**
+ * @brief   Enables the 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          TRUE
+#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 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     1
+#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    TRUE
+#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/handwired/co60/rev6/led.c b/keyboards/handwired/co60/rev6/led.c
new file mode 100644 (file)
index 0000000..fe28ce2
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+#include "led_custom.h"
+#include "rev6.h"
+#include "printf.h"
+
+static void breathing_callback(PWMDriver *pwmp);
+
+static PWMConfig pwmCFG = {
+  0xFFFF,                              /* PWM clock frequency  */
+  256,                                 /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
+  NULL,                                /* No Callback */
+  {
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
+      {PWM_OUTPUT_DISABLED, NULL}
+  },
+  0,                                  /* HW dependent part.*/
+  0
+};
+
+static PWMConfig pwmCFG_breathing = {
+  0xFFFF,                              /* 10kHz PWM clock frequency  */
+  256,                                 /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
+  breathing_callback,                  /* Breathing Callback */
+  {
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
+      {PWM_OUTPUT_DISABLED, NULL}
+  },
+  0,                                  /* HW dependent part.*/
+  0
+};
+
+// See http://jared.geek.nz/2013/feb/linear-led-pwm
+static uint16_t cie_lightness(uint16_t v) {
+  if (v <= 5243)   // if below 8% of max
+    return v / 9;  // same as dividing by 900%
+  else {
+    uint32_t y = (((uint32_t)v + 10486) << 8) / (10486 + 0xFFFFUL);  // add 16% of max and compare
+    // to get a useful result with integer division, we shift left in the expression above
+    // and revert what we've done again after squaring.
+    y = y * y * y >> 8;
+    if (y > 0xFFFFUL)  // prevent overflow
+      return 0xFFFFU;
+    else
+      return (uint16_t)y;
+  }
+}
+
+void backlight_init_ports(void) {
+  palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(2));
+  pwmStart(&PWMD4, &pwmCFG);
+  if (kb_backlight_config.enable) {
+    if (kb_backlight_config.breathing) {
+      breathing_enable();
+    } else {
+      backlight_set(kb_backlight_config.level);
+    }
+  } else {
+    backlight_set(0);
+  }
+}
+
+void backlight_set(uint8_t level) {
+  uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t)level / BACKLIGHT_LEVELS));
+  if (level == 0) {
+    // Turn backlight off
+    // Disable channel 3 on PWM4
+    pwmDisableChannel(&PWMD4, 2);
+  } else {
+    // Turn backlight on
+    if (!is_breathing()) {
+      // Enable channel 3 on PWM4
+      pwmEnableChannel(&PWMD4, 2, PWM_FRACTION_TO_WIDTH(&PWMD4, 0xFFFF, duty));
+    }
+  }
+}
+
+uint8_t backlight_tick = 0;
+
+void backlight_task(void) {
+}
+
+#define BREATHING_NO_HALT  0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON  2
+#define BREATHING_STEPS 128
+
+static uint8_t breathing_period = BREATHING_PERIOD;
+static uint8_t breathing_halt = BREATHING_NO_HALT;
+static uint16_t breathing_counter = 0;
+
+bool is_breathing(void) {
+    return PWMD4.config == &pwmCFG_breathing;
+}
+
+#define breathing_min() do {breathing_counter = 0;} while (0)
+#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
+
+
+void breathing_interrupt_enable(void){
+    pwmStop(&PWMD4);
+    pwmStart(&PWMD4, &pwmCFG_breathing);
+    chSysLockFromISR();
+    pwmEnablePeriodicNotification(&PWMD4);
+    pwmEnableChannelI(
+      &PWMD4,
+      2,
+      PWM_FRACTION_TO_WIDTH(
+        &PWMD4,
+        0xFFFF,
+        0xFFFF
+      )
+    );
+    chSysUnlockFromISR();
+}
+
+void breathing_interrupt_disable(void){
+    pwmStop(&PWMD4);
+    pwmStart(&PWMD4, &pwmCFG);
+}
+
+void breathing_enable(void)
+{
+  breathing_counter = 0;
+  breathing_halt = BREATHING_NO_HALT;
+  breathing_interrupt_enable();
+}
+
+void breathing_pulse(void)
+{
+    if (kb_backlight_config.level == 0)
+      breathing_min();
+    else
+      breathing_max();
+    breathing_halt = BREATHING_HALT_ON;
+    breathing_interrupt_enable();
+}
+
+void breathing_disable(void)
+{
+    breathing_interrupt_disable();
+    // Restore backlight level
+    backlight_set(kb_backlight_config.level);
+}
+
+void breathing_self_disable(void)
+{
+  if (kb_backlight_config.level == 0)
+    breathing_halt = BREATHING_HALT_OFF;
+  else
+    breathing_halt = BREATHING_HALT_ON;
+}
+
+void breathing_toggle(void) {
+  if (is_breathing()){
+    breathing_disable();
+  } else {
+    breathing_enable();
+  }
+}
+
+void breathing_period_set(uint8_t value)
+{
+  if (!value)
+    value = 1;
+  breathing_period = value;
+}
+
+void breathing_period_default(void) {
+  breathing_period_set(BREATHING_PERIOD);
+}
+
+void breathing_period_inc(void)
+{
+  breathing_period_set(breathing_period+1);
+}
+
+void breathing_period_dec(void)
+{
+  breathing_period_set(breathing_period-1);
+}
+
+/* To generate breathing curve in python:
+ * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
+ */
+static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+// Use this before the cie_lightness function.
+static inline uint16_t scale_backlight(uint16_t v) {
+  return v / BACKLIGHT_LEVELS * kb_backlight_config.level;
+}
+
+static void breathing_callback(PWMDriver *pwmp)
+{
+  (void)pwmp;
+  uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
+  // resetting after one period to prevent ugly reset at overflow.
+  breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
+  uint8_t index = breathing_counter / interval % BREATHING_STEPS;
+
+  if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
+      ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
+  {
+      breathing_interrupt_disable();
+  }
+
+  uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
+
+  chSysLockFromISR();
+  pwmEnableChannelI(
+    &PWMD4,
+    2,
+    PWM_FRACTION_TO_WIDTH(
+      &PWMD4,
+      0xFFFF,
+      duty
+    )
+  );
+  chSysUnlockFromISR();
+}
diff --git a/keyboards/handwired/co60/rev6/led_custom.h b/keyboards/handwired/co60/rev6/led_custom.h
new file mode 100644 (file)
index 0000000..96c4d0c
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2019 John M Daly <jmdaly@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
+
+void backlight_task(void);
+void breathing_interrupt_disable(void);
+void breathing_interrupt_enable(void);
diff --git a/keyboards/handwired/co60/rev6/mcuconf.h b/keyboards/handwired/co60/rev6/mcuconf.h
new file mode 100644 (file)
index 0000000..69bf918
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+    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
+
+/*
+ * STM32F3xx 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 STM32F3xx_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_LSI_ENABLED                   TRUE
+#define STM32_HSE_ENABLED                   TRUE
+#define STM32_LSE_ENABLED                   FALSE
+#define STM32_SW                            STM32_SW_PLL
+#define STM32_PLLSRC                        STM32_PLLSRC_HSE
+#define STM32_PREDIV_VALUE                  1
+#define STM32_PLLMUL_VALUE                  9
+#define STM32_HPRE                          STM32_HPRE_DIV1
+#define STM32_PPRE1                         STM32_PPRE1_DIV2
+#define STM32_PPRE2                         STM32_PPRE2_DIV2
+#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK
+#define STM32_ADC12PRES                     STM32_ADC12PRES_DIV1
+#define STM32_ADC34PRES                     STM32_ADC34PRES_DIV1
+#define STM32_USART1SW                      STM32_USART1SW_PCLK
+#define STM32_USART2SW                      STM32_USART2SW_PCLK
+#define STM32_USART3SW                      STM32_USART3SW_PCLK
+#define STM32_UART4SW                       STM32_UART4SW_PCLK
+#define STM32_UART5SW                       STM32_UART5SW_PCLK
+#define STM32_I2C1SW                        STM32_I2C1SW_SYSCLK
+#define STM32_I2C2SW                        STM32_I2C2SW_SYSCLK
+#define STM32_TIM1SW                        STM32_TIM1SW_PCLK2
+#define STM32_TIM8SW                        STM32_TIM8SW_PCLK2
+#define STM32_RTCSEL                        STM32_RTCSEL_LSI
+#define STM32_USB_CLOCK_REQUIRED            TRUE
+#define STM32_USBPRE                        STM32_USBPRE_DIV1P5
+
+#undef STM32_HSE_BYPASS
+// #error "oh no"
+// #endif
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_DUAL_MODE                 FALSE
+#define STM32_ADC_COMPACT_SAMPLES           FALSE
+#define STM32_ADC_USE_ADC1                  FALSE
+#define STM32_ADC_USE_ADC2                  FALSE
+#define STM32_ADC_USE_ADC3                  FALSE
+#define STM32_ADC_USE_ADC4                  FALSE
+#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 5)
+#define STM32_ADC_ADC4_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC1_DMA_PRIORITY         2
+#define STM32_ADC_ADC2_DMA_PRIORITY         2
+#define STM32_ADC_ADC3_DMA_PRIORITY         2
+#define STM32_ADC_ADC4_DMA_PRIORITY         2
+#define STM32_ADC_ADC12_IRQ_PRIORITY        5
+#define STM32_ADC_ADC3_IRQ_PRIORITY         5
+#define STM32_ADC_ADC4_IRQ_PRIORITY         5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC12_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC34_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1                  FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY         11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE                 FALSE
+#define STM32_DAC_USE_DAC1_CH1              TRUE
+#define STM32_DAC_USE_DAC1_CH2              TRUE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY     10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY     10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY     2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY     2
+
+/*
+ * 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       6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI30_32_IRQ_PRIORITY    6
+#define STM32_EXT_EXTI33_IRQ_PRIORITY       6
+
+/*
+ * 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                  FALSE
+#define STM32_GPT_USE_TIM6                  TRUE
+#define STM32_GPT_USE_TIM7                  TRUE
+#define STM32_GPT_USE_TIM8                  TRUE
+#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_TIM6_IRQ_PRIORITY         7
+#define STM32_GPT_TIM7_IRQ_PRIORITY         7
+#define STM32_GPT_TIM8_IRQ_PRIORITY         7
+
+/*
+ * 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         10
+#define STM32_I2C_I2C2_IRQ_PRIORITY         10
+#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_USE_TIM4                  FALSE
+#define STM32_ICU_USE_TIM8                  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_TIM8_IRQ_PRIORITY         7
+
+/*
+ * 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_USE_TIM4                  TRUE
+#define STM32_PWM_USE_TIM8                  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_TIM8_IRQ_PRIORITY         7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1             FALSE
+#define STM32_SERIAL_USE_USART2             TRUE
+#define STM32_SERIAL_USE_USART3             FALSE
+#define STM32_SERIAL_USE_UART4              FALSE
+#define STM32_SERIAL_USE_UART5              FALSE
+#define STM32_SERIAL_USART1_PRIORITY        12
+#define STM32_SERIAL_USART2_PRIORITY        12
+#define STM32_SERIAL_USART3_PRIORITY        12
+#define STM32_SERIAL_UART4_PRIORITY         12
+#define STM32_SERIAL_UART5_PRIORITY         12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1                  FALSE
+#define STM32_SPI_USE_SPI2                  FALSE
+#define STM32_SPI_USE_SPI3                  FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY         1
+#define STM32_SPI_SPI2_DMA_PRIORITY         1
+#define STM32_SPI_SPI3_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_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_USART1_IRQ_PRIORITY      12
+#define STM32_UART_USART2_IRQ_PRIORITY      12
+#define STM32_UART_USART3_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_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_HP_IRQ_PRIORITY      13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY      14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG                  FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/handwired/co60/rev6/rev6.c b/keyboards/handwired/co60/rev6/rev6.c
new file mode 100644 (file)
index 0000000..f597513
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright 2019 John M Daly <jmdaly@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 "rev6.h"
+
+#include "backlight.h"
+#include "led.h"
+#include "printf.h"
+
+backlight_levels_config_t kb_backlight_config = {
+  .enable = true,
+  .breathing = true,
+  .level = BACKLIGHT_LEVELS
+};
+
+uint8_t *o_fb;
+
+uint16_t counterst = 0;
+
+void matrix_init_kb(void) {
+       matrix_init_user();
+        backlight_init_ports();
+}
+
+void matrix_scan_kb(void) {
+       matrix_scan_user();
+}
diff --git a/keyboards/handwired/co60/rev6/rev6.h b/keyboards/handwired/co60/rev6/rev6.h
new file mode 100644 (file)
index 0000000..7d11f19
--- /dev/null
@@ -0,0 +1,146 @@
+/* Copyright 2019 John M Daly <jmdaly@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 a shortcut to help you visually see your layout.
+// The following is a layout that uses all available switch positions.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_all( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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, K214, \
+    K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+    K400, K401, K402,       K404,       K406,       K408,       K410, K411, K412, K413, K414 \
+) \
+{ \
+    { K000, K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013, 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, K214 }, \
+    { K300, K301,   K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313, K314 }, \
+    { K400, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412,  K413, K414 }, \
+}
+
+#define LAYOUT_60_ansi( \
+    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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       \
+    K400, K401, K402,                   K406,                   K410, K411,       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,  KC_NO,  K214 }, \
+    { K300, KC_NO, K302, K303,  K304,  K305,  K306, K307,  K308, K309,   K310, K311, KC_NO, K313,   KC_NO }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,   K414 }, \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+    K400, K401, K402,                   K406,                   K410, K411,       K413, K414 \
+) \
+{ \
+    { K000, K001,  K002, K003,  K004,  K005,  K006, K007,  K008, K009,   K010, K011, K012,  K013,   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,  KC_NO,  K214 }, \
+    { K300, KC_NO, K302, K303,  K304,  K305,  K306, K307,  K308, K309,   K310, K311, KC_NO, K313,   K314 }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,   K414 }, \
+}
+
+#define LAYOUT_60_iso( \
+    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, \
+    K200,       K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+    K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       \
+    K400, K401, K402,                   K406,                   K410, K411,       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,  KC_NO }, \
+    { K200, KC_NO, K202, K203,  K204,  K205,  K206, K207,  K208,  K209,  K210, K211, K212,  K213,  K214 }, \
+    { K300, K301,  K302, K303,  K304,  K305,  K306, K307,  K308,  K309,  K310, K311, KC_NO, K313,  KC_NO }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,  K414 }, \
+}
+
+#define LAYOUT_60_hhkb( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,                   K406,                         K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004,  K005,  K006, K007,  K008,  K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304,  K305,  K306, K307,  K308,  K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO }, \
+}
+
+#define LAYOUT_60_hhkb_split_space( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,       K404,       K406,       K408,             K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO }, \
+}
+
+#define LAYOUT_60_hhkb_split_625u_space( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,       K404,       K406,       K408,       K410, K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, KC_NO }, \
+}
+
+// Backlighting
+typedef union {
+    uint8_t raw;
+    struct {
+        bool    enable :1;
+        bool    breathing : 1;
+        uint8_t level  :6;
+    };
+} backlight_levels_config_t;
+
+extern backlight_levels_config_t kb_backlight_config;
+extern bool kb_backlight_breathing;
+
+void backlight_init_ports(void);
+void backlight_set(uint8_t level);
+bool is_breathing(void);
+void breathing_enable(void);
+void breathing_disable(void);
diff --git a/keyboards/handwired/co60/rev6/rules.mk b/keyboards/handwired/co60/rev6/rules.mk
new file mode 100644 (file)
index 0000000..dba41e1
--- /dev/null
@@ -0,0 +1,59 @@
+# 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
+
+# Code for backlight breathing:
+SRC += led.c
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = yes
+BOOTMAGIC_ENABLE = no   # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes   # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes   # Audio control and System control(+450)
+CONSOLE_ENABLE = no    # Console for debug(+400)
+COMMAND_ENABLE = no     # Commands for debug and configuration
+NKRO_ENABLE = yes       # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no    # Enable keyboard underlight functionality
+MIDI_ENABLE = no        # MIDI controls
+UNICODE_ENABLE = no     # Unicode
+BLUETOOTH_ENABLE = no   # Enable Bluetooth with the Adafruit EZ-Key HID
+LEADER_ENABLE = yes
+
+LAYOUTS += 60_ansi 60_ansi_split_bs_rshift 60_iso 60_hhkb
diff --git a/keyboards/handwired/co60/rev7/chconf.h b/keyboards/handwired/co60/rev7/chconf.h
new file mode 100644 (file)
index 0000000..1d9f12f
--- /dev/null
@@ -0,0 +1,520 @@
+/*
+    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                 100000
+
+/**
+ * @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
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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        TRUE
+
+/**
+ * @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           TRUE
+
+/**
+ * @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/handwired/co60/rev7/config.h b/keyboards/handwired/co60/rev7/config.h
new file mode 100644 (file)
index 0000000..1ccc12a
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+Copyright 2019 John M Daly <jmdaly@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      0x0000
+#define DEVICE_VER     0x0001
+#define MANUFACTURER    John M Daly
+#define PRODUCT         CO60 rev7
+#define DESCRIPTION     An open hardware sixty percent PCB
+
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* ROWS: Top to bottom, COLS: Left to right
+*/
+#define MATRIX_ROW_PINS { A8, A2, B13, B2, B10 }
+#define MATRIX_COL_PINS { A10, A9, A3, A4, A5, A6, B0, B1, A15, B3, B4, B5, C13, C14, C15 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#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
+
+/* Backlight configuration
+ * Backlight LEDs on B8
+ */
+#define BACKLIGHT_LEVELS 24
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
+
+#define RGBLIGHT_ANIMATIONS
+
+#define RGBLED_NUM 16
+#define RGB_DI_PIN A7
+#define DRIVER_LED_TOTAL RGBLED_NUM
+
+#define RGB_MATRIX_KEYPRESSES
diff --git a/keyboards/handwired/co60/rev7/halconf.h b/keyboards/handwired/co60/rev7/halconf.h
new file mode 100644 (file)
index 0000000..5e5d702
--- /dev/null
@@ -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                 TRUE
+#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                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S                 FALSE
+#endif
+
+/**
+ * @brief   Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI             FALSE
+#endif
+
+/**
+ * @brief   Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM                 TRUE
+#endif
+
+/**
+ * @brief   Enables the 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          TRUE
+#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 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     1
+#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    TRUE
+#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/handwired/co60/rev7/led.c b/keyboards/handwired/co60/rev7/led.c
new file mode 100644 (file)
index 0000000..13f8d98
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+#include "led_custom.h"
+#include "rev7.h"
+#include "printf.h"
+
+static void breathing_callback(PWMDriver *pwmp);
+
+static PWMConfig pwmCFG = {
+  0xFFFF,                              /* PWM clock frequency  */
+  256,                              /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
+  NULL,                               /* No Callback */
+  {
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
+      {PWM_OUTPUT_DISABLED, NULL}
+  },
+  0,                                  /* HW dependent part.*/
+  0
+};
+
+static PWMConfig pwmCFG_breathing = {
+  0xFFFF,                              /* 10kHz PWM clock frequency  */
+  256,                              /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
+  breathing_callback,                               /* Breathing Callback */
+  {
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 3 */
+      {PWM_OUTPUT_DISABLED, NULL}
+  },
+  0,                                  /* HW dependent part.*/
+  0
+};
+
+// See http://jared.geek.nz/2013/feb/linear-led-pwm
+static uint16_t cie_lightness(uint16_t v) {
+  if (v <= 5243) // if below 8% of max
+    return v / 9; // same as dividing by 900%
+  else {
+    uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
+    // to get a useful result with integer division, we shift left in the expression above
+    // and revert what we've done again after squaring.
+    y = y * y * y >> 8;
+    if (y > 0xFFFFUL) // prevent overflow
+      return 0xFFFFU;
+    else
+      return (uint16_t) y;
+  }
+}
+
+
+void backlight_init_ports(void) {
+  palSetPadMode(GPIOB, 8, PAL_MODE_ALTERNATE(2));
+  pwmStart(&PWMD4, &pwmCFG);
+  if(kb_backlight_config.enable){
+    if(kb_backlight_config.breathing){
+      breathing_enable();
+    } else{
+      backlight_set(kb_backlight_config.level);
+    }
+  } else {
+    backlight_set(0);
+  }
+}
+
+void backlight_set(uint8_t level) {
+  uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t) level / BACKLIGHT_LEVELS));
+  if (level == 0) {
+      // Turn backlight off
+      // Disable channel 3 on PWM4
+      pwmDisableChannel(&PWMD4, 2);
+  } else {
+    // Turn backlight on
+    if(!is_breathing()){
+      // Enable channel 3 on PWM4
+      pwmEnableChannel(&PWMD4, 2, PWM_FRACTION_TO_WIDTH(&PWMD4,0xFFFF,duty));
+    }
+  }
+}
+
+
+uint8_t backlight_tick = 0;
+
+void backlight_task(void) {
+}
+
+#define BREATHING_NO_HALT  0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON  2
+#define BREATHING_STEPS 128
+
+static uint8_t breathing_period = BREATHING_PERIOD;
+static uint8_t breathing_halt = BREATHING_NO_HALT;
+static uint16_t breathing_counter = 0;
+
+bool is_breathing(void) {
+    return PWMD4.config == &pwmCFG_breathing;
+}
+
+#define breathing_min() do {breathing_counter = 0;} while (0)
+#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
+
+
+void breathing_interrupt_enable(void){
+    pwmStop(&PWMD4);
+    pwmStart(&PWMD4, &pwmCFG_breathing);
+    chSysLockFromISR();
+    pwmEnablePeriodicNotification(&PWMD4);
+    pwmEnableChannelI(
+      &PWMD4,
+      2,
+      PWM_FRACTION_TO_WIDTH(
+        &PWMD4,
+        0xFFFF,
+        0xFFFF
+      )
+    );
+    chSysUnlockFromISR();
+}
+
+void breathing_interrupt_disable(void){
+    pwmStop(&PWMD4);
+    pwmStart(&PWMD4, &pwmCFG);
+}
+
+void breathing_enable(void)
+{
+  breathing_counter = 0;
+  breathing_halt = BREATHING_NO_HALT;
+  breathing_interrupt_enable();
+}
+
+void breathing_pulse(void)
+{
+    if (kb_backlight_config.level == 0)
+      breathing_min();
+    else
+      breathing_max();
+    breathing_halt = BREATHING_HALT_ON;
+    breathing_interrupt_enable();
+}
+
+void breathing_disable(void)
+{
+    breathing_interrupt_disable();
+    // Restore backlight level
+    backlight_set(kb_backlight_config.level);
+}
+
+void breathing_self_disable(void)
+{
+  if (kb_backlight_config.level == 0)
+    breathing_halt = BREATHING_HALT_OFF;
+  else
+    breathing_halt = BREATHING_HALT_ON;
+}
+
+void breathing_toggle(void) {
+  if (is_breathing()){
+    breathing_disable();
+  } else {
+    breathing_enable();
+  }
+}
+
+void breathing_period_set(uint8_t value)
+{
+  if (!value)
+    value = 1;
+  breathing_period = value;
+}
+
+void breathing_period_default(void) {
+  breathing_period_set(BREATHING_PERIOD);
+}
+
+void breathing_period_inc(void)
+{
+  breathing_period_set(breathing_period+1);
+}
+
+void breathing_period_dec(void)
+{
+  breathing_period_set(breathing_period-1);
+}
+
+/* To generate breathing curve in python:
+ * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
+ */
+static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+// Use this before the cie_lightness function.
+static inline uint16_t scale_backlight(uint16_t v) {
+  return v / BACKLIGHT_LEVELS * kb_backlight_config.level;
+}
+
+static void breathing_callback(PWMDriver *pwmp)
+{
+  (void)pwmp;
+  uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
+  // resetting after one period to prevent ugly reset at overflow.
+  breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
+  uint8_t index = breathing_counter / interval % BREATHING_STEPS;
+
+  if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
+      ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
+  {
+      breathing_interrupt_disable();
+  }
+
+  uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
+
+  chSysLockFromISR();
+  pwmEnableChannelI(
+    &PWMD4,
+    2,
+    PWM_FRACTION_TO_WIDTH(
+      &PWMD4,
+      0xFFFF,
+      duty
+    )
+  );
+  chSysUnlockFromISR();
+}
diff --git a/keyboards/handwired/co60/rev7/led_custom.h b/keyboards/handwired/co60/rev7/led_custom.h
new file mode 100644 (file)
index 0000000..56e723d
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+Copyright 2019 John M Daly <jmdaly@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
+
+void backlight_task(void);
+void breathing_interrupt_disable(void);
+void breathing_interrupt_enable(void);
diff --git a/keyboards/handwired/co60/rev7/mcuconf.h b/keyboards/handwired/co60/rev7/mcuconf.h
new file mode 100644 (file)
index 0000000..69bf918
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+    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
+
+/*
+ * STM32F3xx 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 STM32F3xx_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_LSI_ENABLED                   TRUE
+#define STM32_HSE_ENABLED                   TRUE
+#define STM32_LSE_ENABLED                   FALSE
+#define STM32_SW                            STM32_SW_PLL
+#define STM32_PLLSRC                        STM32_PLLSRC_HSE
+#define STM32_PREDIV_VALUE                  1
+#define STM32_PLLMUL_VALUE                  9
+#define STM32_HPRE                          STM32_HPRE_DIV1
+#define STM32_PPRE1                         STM32_PPRE1_DIV2
+#define STM32_PPRE2                         STM32_PPRE2_DIV2
+#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK
+#define STM32_ADC12PRES                     STM32_ADC12PRES_DIV1
+#define STM32_ADC34PRES                     STM32_ADC34PRES_DIV1
+#define STM32_USART1SW                      STM32_USART1SW_PCLK
+#define STM32_USART2SW                      STM32_USART2SW_PCLK
+#define STM32_USART3SW                      STM32_USART3SW_PCLK
+#define STM32_UART4SW                       STM32_UART4SW_PCLK
+#define STM32_UART5SW                       STM32_UART5SW_PCLK
+#define STM32_I2C1SW                        STM32_I2C1SW_SYSCLK
+#define STM32_I2C2SW                        STM32_I2C2SW_SYSCLK
+#define STM32_TIM1SW                        STM32_TIM1SW_PCLK2
+#define STM32_TIM8SW                        STM32_TIM8SW_PCLK2
+#define STM32_RTCSEL                        STM32_RTCSEL_LSI
+#define STM32_USB_CLOCK_REQUIRED            TRUE
+#define STM32_USBPRE                        STM32_USBPRE_DIV1P5
+
+#undef STM32_HSE_BYPASS
+// #error "oh no"
+// #endif
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_DUAL_MODE                 FALSE
+#define STM32_ADC_COMPACT_SAMPLES           FALSE
+#define STM32_ADC_USE_ADC1                  FALSE
+#define STM32_ADC_USE_ADC2                  FALSE
+#define STM32_ADC_USE_ADC3                  FALSE
+#define STM32_ADC_USE_ADC4                  FALSE
+#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 5)
+#define STM32_ADC_ADC4_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC1_DMA_PRIORITY         2
+#define STM32_ADC_ADC2_DMA_PRIORITY         2
+#define STM32_ADC_ADC3_DMA_PRIORITY         2
+#define STM32_ADC_ADC4_DMA_PRIORITY         2
+#define STM32_ADC_ADC12_IRQ_PRIORITY        5
+#define STM32_ADC_ADC3_IRQ_PRIORITY         5
+#define STM32_ADC_ADC4_IRQ_PRIORITY         5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC12_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC34_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1                  FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY         11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE                 FALSE
+#define STM32_DAC_USE_DAC1_CH1              TRUE
+#define STM32_DAC_USE_DAC1_CH2              TRUE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY     10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY     10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY     2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY     2
+
+/*
+ * 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       6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI30_32_IRQ_PRIORITY    6
+#define STM32_EXT_EXTI33_IRQ_PRIORITY       6
+
+/*
+ * 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                  FALSE
+#define STM32_GPT_USE_TIM6                  TRUE
+#define STM32_GPT_USE_TIM7                  TRUE
+#define STM32_GPT_USE_TIM8                  TRUE
+#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_TIM6_IRQ_PRIORITY         7
+#define STM32_GPT_TIM7_IRQ_PRIORITY         7
+#define STM32_GPT_TIM8_IRQ_PRIORITY         7
+
+/*
+ * 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         10
+#define STM32_I2C_I2C2_IRQ_PRIORITY         10
+#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_USE_TIM4                  FALSE
+#define STM32_ICU_USE_TIM8                  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_TIM8_IRQ_PRIORITY         7
+
+/*
+ * 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_USE_TIM4                  TRUE
+#define STM32_PWM_USE_TIM8                  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_TIM8_IRQ_PRIORITY         7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1             FALSE
+#define STM32_SERIAL_USE_USART2             TRUE
+#define STM32_SERIAL_USE_USART3             FALSE
+#define STM32_SERIAL_USE_UART4              FALSE
+#define STM32_SERIAL_USE_UART5              FALSE
+#define STM32_SERIAL_USART1_PRIORITY        12
+#define STM32_SERIAL_USART2_PRIORITY        12
+#define STM32_SERIAL_USART3_PRIORITY        12
+#define STM32_SERIAL_UART4_PRIORITY         12
+#define STM32_SERIAL_UART5_PRIORITY         12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1                  FALSE
+#define STM32_SPI_USE_SPI2                  FALSE
+#define STM32_SPI_USE_SPI3                  FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY         1
+#define STM32_SPI_SPI2_DMA_PRIORITY         1
+#define STM32_SPI_SPI3_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_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_USART1_IRQ_PRIORITY      12
+#define STM32_UART_USART2_IRQ_PRIORITY      12
+#define STM32_UART_USART3_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_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_HP_IRQ_PRIORITY      13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY      14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG                  FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/handwired/co60/rev7/rev7.c b/keyboards/handwired/co60/rev7/rev7.c
new file mode 100644 (file)
index 0000000..3d0964d
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright 2019 John M Daly <jmdaly@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 "rev7.h"
+
+#include "backlight.h"
+#include "led.h"
+#include "printf.h"
+
+backlight_levels_config_t kb_backlight_config = {
+  .enable = true,
+  .breathing = true,
+  .level = BACKLIGHT_LEVELS
+};
+
+uint8_t *o_fb;
+
+uint16_t counterst = 0;
+
+void matrix_init_kb(void) {
+        matrix_init_user();
+        backlight_init_ports();
+}
+
+void matrix_scan_kb(void) {
+       matrix_scan_user();
+}
diff --git a/keyboards/handwired/co60/rev7/rev7.h b/keyboards/handwired/co60/rev7/rev7.h
new file mode 100644 (file)
index 0000000..4ab2b8d
--- /dev/null
@@ -0,0 +1,146 @@
+/* Copyright 2019 Jack Humbert <jmdaly@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 a shortcut to help you visually see your layout.
+// The following is a layout that uses all available switch positions.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_all( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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, K214, \
+    K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+    K400, K401, K402,       K404,       K406,       K408,       K410, K411, K412, K413, K414 \
+) \
+{ \
+    { K000, K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013, 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, K214 }, \
+    { K300, K301,   K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313, K314 }, \
+    { K400, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412,  K413, K414 }, \
+}
+
+#define LAYOUT_60_ansi( \
+    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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       \
+    K400, K401, K402,                   K406,                   K410, K411,       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,  KC_NO,  K214 }, \
+    { K300, KC_NO, K302, K303,  K304,  K305,  K306, K307,  K308, K309,   K310, K311, KC_NO, K313,   KC_NO }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,   K414 }, \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+    K400, K401, K402,                   K406,                   K410, K411,       K413, K414 \
+) \
+{ \
+    { K000, K001,  K002, K003,  K004,  K005,  K006, K007,  K008, K009,   K010, K011, K012,  K013,   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,  KC_NO,  K214 }, \
+    { K300, KC_NO, K302, K303,  K304,  K305,  K306, K307,  K308, K309,   K310, K311, KC_NO, K313,   K314 }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,   K414 }, \
+}
+
+#define LAYOUT_60_iso( \
+    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, \
+    K200,       K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+    K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       \
+    K400, K401, K402,                   K406,                   K410, K411,       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,  KC_NO }, \
+    { K200, KC_NO, K202, K203,  K204,  K205,  K206, K207,  K208,  K209,  K210, K211, K212,  K213,  K214 }, \
+    { K300, K301,  K302, K303,  K304,  K305,  K306, K307,  K308,  K309,  K310, K311, KC_NO, K313,  KC_NO }, \
+    { K400, K401,  K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413,  K414 }, \
+}
+
+#define LAYOUT_60_hhkb( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,                   K406,                         K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004,  K005,  K006, K007,  K008,  K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304,  K305,  K306, K307,  K308,  K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO }, \
+}
+
+#define LAYOUT_60_hhkb_split_space( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,       K404,       K406,       K408,             K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO }, \
+}
+
+#define LAYOUT_60_hhkb_split_625u_space( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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,       K214, \
+    K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
+          K401, K402,       K404,       K406,       K408,       K410, K411,       K413      \
+) \
+{ \
+    { K000,  K001,   K002, K003,  K004, K005,  K006, K007,  K008, K009,  K010, K011, K012,  K013,  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,  KC_NO, K214 }, \
+    { K300,  KC_NO,  K302, K303,  K304, K305,  K306, K307,  K308, K309,  K310, K311, KC_NO, K313,  K314 }, \
+    { KC_NO, K401,   K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, KC_NO }, \
+}
+
+// Backlighting
+typedef union {
+    uint8_t raw;
+    struct {
+        bool    enable :1;
+        bool    breathing : 1;
+        uint8_t level  :6;
+    };
+} backlight_levels_config_t;
+
+extern backlight_levels_config_t kb_backlight_config;
+extern bool kb_backlight_breathing;
+
+void backlight_init_ports(void);
+void backlight_set(uint8_t level);
+bool is_breathing(void);
+void breathing_enable(void);
+void breathing_disable(void);
diff --git a/keyboards/handwired/co60/rev7/rules.mk b/keyboards/handwired/co60/rev7/rules.mk
new file mode 100644 (file)
index 0000000..6e0b385
--- /dev/null
@@ -0,0 +1,59 @@
+# 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
+
+# Code for backlight breathing:
+SRC += led.c
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = yes
+BOOTMAGIC_ENABLE = no   # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes   # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes   # Audio control and System control(+450)
+CONSOLE_ENABLE = no    # Console for debug(+400)
+COMMAND_ENABLE = no     # Commands for debug and configuration
+NKRO_ENABLE = yes       # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no    # Enable keyboard underlight functionality
+MIDI_ENABLE = no        # MIDI controls
+UNICODE_ENABLE = no     # Unicode
+BLUETOOTH_ENABLE = no   # Enable Bluetooth with the Adafruit EZ-Key HID
+LEADER_ENABLE = yes
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_hhkb
index 4f6151a51274be22da27d62d5160bcae03104fed..bc61579de8a2675bb657bbf6e5151accda0a49b1 100644 (file)
@@ -43,38 +43,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   ),
 
   [VIM] = LAYOUT_5x6(
-     _______, RESET,    _______,   _______, _______, _______,                       _______, _______, _______, _______, RESET,   _______,
-     _______, _______,  _______,   _______, KC_LSFT, _______,                       _______, _______, _______, _______, _______, _______,
-     _______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______,                       KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______,
-     _______, _______,  _______,   _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
-                        _______,   _______,                                                            _______, _______,
-                                           _______, _______,                       _______, _______,
-                                                    _______, _______,     _______, _______,
-                                                    _______, _______,     _______, _______
+     _______, RESET,   _______, _______, _______, _______,                       _______, _______, _______, _______, RESET,   _______,
+     _______, _______, _______, _______, KC_LSFT, _______,                       _______, _______, _______, _______, _______, _______,
+     _______, DLEFT,   DRIGHT,  KC_LCTL, KC_LGUI, _______,                       KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______,
+     _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______,
+                       _______, _______,                                                           _______, _______,
+                                         _______, _______,                       _______, _______,
+                                                  _______, _______,     _______, _______,
+                                                  _______, _______,     _______, _______
   ),
 };
 
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-    switch(id) {
-        case DLEFT:
-            if (record->event.pressed) { // Windows move desktop left
-                return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
-            }
-            break;
-        case DRIGHT:
-            if (record->event.pressed) { // Windows move desktop right
-                return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
-            }
-            break;
-        case PSCREEN_APP: if (record->event.pressed) {
-                return MACRO(D(LALT), T(PSCR), U(LALT), END);
-            }
-            break;
-    }
-    return MACRO_NONE;
-}
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-    tap_dance_process_record(keycode);
-    return true;
+    tap_dance_process_keycode(keycode);
+    return !try_handle_macro(keycode, record);
 }
index 38b77586ecd4948e70bb754eab27a894438c8fb0..cbbd6ea96e457f144276e2c88218d6aaa71631ab 100644 (file)
 #define UNUSED_PINS
 
 /* leds */
-#define QMK_LED B4
-#define BACKLIGHT_LEVELS 3
-#define BACKLIGHT_PIN B5
-#define BACKLIGHT_BREATHING
-#define BREATHING_PERIOD 5
+#define JOTANCK_LEDS
+#define JOTANCK_LED1 B5
+#define JOTANCK_LED2 B4
 
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION COL2ROW
index 7744570b23a43d92316b58a3c831e8cf5a2034f3..812781c3b71dc9df6875870fcbfa7eca00a0371e 100644 (file)
@@ -1,6 +1,10 @@
 #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);
 }
index 2e9f4a39f2a4c0f1dcc625ed7a6427a766c3f9bb..3eb01a658154a10e3e1e5629944aa60400a5121a 100644 (file)
@@ -78,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [_ADJUST] = LAYOUT_ortho_4x12 (
     _______, RESET,   _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
 ),    
 };
index 28bbab86bdfd24b160f954f1b5d7dda2d1529eab..4cf211adc348811c2d1e215a35f985ae2d6a2f98 100644 (file)
@@ -20,10 +20,10 @@ Hardware Availability: [Mercado Libre](https://articulo.mercadolibre.com.ar/MLA-
 | Arduino pin | A3 | A2 | A1 | A0 | 15 | 14 | TX0 | RXI | 2  | 3  | 4  | 5  |
 | QMK pin     | F4 | F5 | F6 | F7 | B1 | B3 | D3  | D2  | D1 | D0 | D4 | C6 |
 
-|             | QMK led   | Backlight |
-|-------------|-----------|-----------|
-| Arduino pin | 8         | 9         |
-| QMK pin     | B4        | B5        |
+|             | LED1 | LED2 |
+|-------------|------|------|
+| Arduino pin | 8    | 9    |
+| QMK pin     | B5   | B4   |
 
 ### Compiling the Firmware
 
index 6b39b7cc1abe1ce1a261c268f03807d09a530f71..fa2881413340cfcf453e3a38787e44b165799555 100644 (file)
@@ -50,10 +50,10 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
 EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
-CONSOLE_ENABLE = yes         # Console for debug(+400)
-COMMAND_ENABLE = no        # Commands for debug and configuration
-NKRO_ENABLE = yes            # 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
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 MIDI_ENABLE = no            # MIDI controls
 AUDIO_ENABLE = no           # Audio output on port C6
 UNICODE_ENABLE = no         # Unicode
index 8e4c8b42b12f8c3e20e606c0f13d3aab891dd61e..2e6a7048399125b25743b4bafe36f4bb13fef2e2 100644 (file)
 #include "stanrc85.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [0] = LAYOUT_60_ansi(
+  [_QWERTY] = LAYOUT_60_ansi(
        TD_TESC, KC_1,    KC_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_CTLE, KC_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,          LT_SPCF,          KC_RALT, TD_TWIN, MO(3),   TD_TCTL),
+       KC_LCTL, KC_LGUI, KC_LALT,          LT_SPCF,          KC_RALT, TD_TWIN, MO(_FN2_60),   TD_TCTL),
 
-  [1] = LAYOUT_60_ansi(
+  [_DEFAULT] = LAYOUT_60_ansi(
        KC_GESC, KC_1,    KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8,    KC_9,   KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
        KC_TAB,  KC_Q,    KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I,    KC_O,   KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
        KC_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(2),  MO(3),   KC_RCTL),
+       KC_LCTL, KC_LGUI, KC_LALT,          KC_SPC,           KC_RALT, MO(_FN1_60), MO(_FN2_60), KC_RCTL),
 
-  [2] = LAYOUT_60_ansi(
+  [_FN1_60] = LAYOUT_60_ansi(
        KC_TILD, KC_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,
        _______, _______, CA_QUOT, KC_VOLU, CA_SCLN, _______, _______, KC_HOME, KC_UP,   KC_END,  KC_PSCR, _______, _______, KC_INS,
        KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_MPLY, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
        _______, KC_RDP,  _______, _______, _______, _______, _______, _______, KC_WBAK, KC_WFWD, _______, _______,
        _______, _______, _______,                   _______,                   _______, _______, _______, _______),
 
-  [3] = LAYOUT_60_ansi(
+  [_FN2_60] = LAYOUT_60_ansi(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST,
        _______, EF_INC,  ES_INC,  S1_INC,  H1_INC,  S2_INC,  H2_INC,  BR_INC,  _______, _______, _______, _______, _______, RESET,
        _______, EF_DEC,  ES_DEC,  S1_DEC,  H1_DEC,  S2_DEC,  H2_DEC,  BR_DEC,  _______, _______, _______, _______, KC_MAKE,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-       _______, _______, _______,                   _______,                   _______, _______, _______, TG(1))
+       _______, _______, _______,                   _______,                   _______, _______, _______, TG(_DEFAULT))
 };
 
 // Backlight specific keys:
diff --git a/keyboards/jc65/v32a/keymaps/ptillemans/keymap.c b/keyboards/jc65/v32a/keymaps/ptillemans/keymap.c
new file mode 100644 (file)
index 0000000..c384d36
--- /dev/null
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+
+
+#define _QWERTY 0
+#define _RAISE 1
+
+#define KC_CTES LCTL_T(KC_ESC)
+#define KC_RAIS MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QWERTY] = LAYOUT(
+                 KC_GESC,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,KC_MINS, KC_EQL,KC_BSLS,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_HASH,KC_PGUP,
+                 KC_CTES,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,KC_SCLN,KC_QUOT,KC_HASH,         KC_ENT,KC_PGDN,
+                 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_END,
+                 KC_RAIS,KC_LGUI,KC_LALT,         KC_SPC, KC_SPC, KC_SPC,                        KC_RALT,KC_RGUI,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT
+    ),
+    [_RAISE] = LAYOUT(
+                 KC_GRV,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9, KC_F10, KC_F11,KC_F12,KC_BSLS,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_PSCR,KC_LBRC,KC_RBRC,          RESET,KC_PGUP,
+                 KC_CTES,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,KC_SCLN,KC_QUOT,  RESET,         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_HOME,
+                 KC_LCTL,KC_LGUI,KC_LALT,         KC_SPC, KC_SPC, KC_SPC,                        KC_RALT,KC_RGUI,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT
+                 ),
+};
+
+bool shift_pressed(void) {
+  return get_mods() & MOD_MASK_SHIFT;
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+  static bool tilde_pressed = false;
+
+  switch (keycode) {
+  case KC_HASH:
+    if (shift_pressed()) {
+      if (record->event.pressed) {
+        tilde_pressed = true;
+        register_code(KC_GRV);
+        return false;
+      }
+      else if (tilde_pressed) {
+        unregister_code(KC_GRV);
+        tilde_pressed = false;
+        return false;
+      }
+    }
+    return true;
+  default:
+    return true; // Process all other keycodes normally
+  }
+}
diff --git a/keyboards/jc65/v32a/keymaps/ptillemans/readme.md b/keyboards/jc65/v32a/keymaps/ptillemans/readme.md
new file mode 100644 (file)
index 0000000..61e55f3
--- /dev/null
@@ -0,0 +1,10 @@
+Default Keymap
+=======
+
+Default plain keymap with only a base layer.
+
+Keymap Maintainer: [Jason Barnachea](https://github.com/nautxx)
+
+Difference from base layout: None.
+
+Intended usage: Reference layout.
diff --git a/keyboards/jc65/v32a/keymaps/ptillemans/rules.mk b/keyboards/jc65/v32a/keymaps/ptillemans/rules.mk
new file mode 100644 (file)
index 0000000..1d2d9e5
--- /dev/null
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
index 621789423f471ec9a048f475c354c0d591c69d39..8176ade0a1c599894af5b6aa0030e057d31771be 100644 (file)
@@ -29,6 +29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "i2c.h"
 #include "quantum.h"
 
+#ifdef RGBLIGHT_ENABLE
 extern rgblight_config_t rgblight_config;
 
 void rgblight_set(void) {
@@ -43,12 +44,16 @@ void rgblight_set(void) {
     i2c_init();
     i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
 }
+#endif
 
 __attribute__ ((weak))
 void matrix_scan_user(void) {
-    rgblight_task();
+#ifdef RGBLIGHT_ENABLE
+  rgblight_task();
+#endif
 }
 
+#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);
@@ -62,4 +67,5 @@ void backlight_set(uint8_t level) {
                // Turn on the lights
                PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
        }
-}
\ No newline at end of file
+}
+#endif
index ab2cfa80a2d0de2a7d2db5c81f83c1e77b3c196f..6cb6afaea6687222882d893017a3d63d066513a3 100644 (file)
@@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Function layer: http://www.keyboard-layout-editor.com/#/gists/f29128427f674c43777f045e363d1b44 */
     [LAYER_FUNCTION] = 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_MPLY,  KC_VOLU,  KC_MSTP,  _______,  _______,  EEP_RST,  _______,  KC_PSCR,  KC_SLCK,  KC_PAUS,  _______,  _______,  _______,  _______,
+        _______,  KC_MPLY,  KC_VOLU,  KC_MSTP,  _______,  _______,  _______,  _______,  KC_PSCR,  KC_SLCK,  KC_PAUS,  _______,  _______,  _______,  _______,
         KC_CAPS,  KC_MPRV,  KC_VOLD,  KC_MNXT,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
         _______,  _______,  KC_MUTE,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
         _______,  _______,  _______,  _______,  KC_APP,   _______,  _______,  _______,  _______
index 0aa6fa136627b3a7f0d06bf565834b3c37582119..d1779152f8c334c9a17d245a321314aa98e0ed94 100644 (file)
@@ -10,4 +10,4 @@ cluster.
 
 ## Function layer
 
-![Function layer layout](https://i.imgur.com/KScatX6.png)
+![Function layer layout](https://i.imgur.com/urDnuTC.png)
diff --git a/keyboards/kbdfans/kbd8x_mk2/config.h b/keyboards/kbdfans/kbd8x_mk2/config.h
new file mode 100644 (file)
index 0000000..4c6900b
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xA103
+#define PRODUCT_ID      0x0005
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    KBDfans
+#define PRODUCT         KBD8X-MKII
+#define DESCRIPTION     TKL 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 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 B3
+#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 200 /* The maximum brightness level */
+  #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+  #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+//   #define RGBLIGHT_EFFECT_BREATHING
+//   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//   #define RGBLIGHT_EFFECT_SNAKE
+//   #define RGBLIGHT_EFFECT_KNIGHT
+//   #define RGBLIGHT_EFFECT_CHRISTMAS
+//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//   #define RGBLIGHT_EFFECT_RGB_TEST
+//   #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+//   /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+//   #define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
+//   /*==== use exp() and sin() ====*/
+//   #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
+//   #define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#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/kbdfans/kbd8x_mk2/info.json b/keyboards/kbdfans/kbd8x_mk2/info.json
new file mode 100644 (file)
index 0000000..06d69ef
--- /dev/null
@@ -0,0 +1,103 @@
+{
+    "keyboard_name": "kbd8x_mk2", 
+    "url": "https://kb.ai03.me/projects/kbd8x-mkii.html", 
+    "maintainer": "ai03", 
+    "width": 18.25, 
+    "height": 6.25, 
+    "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}
+                       ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.c b/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.c
new file mode 100644 (file)
index 0000000..1472707
--- /dev/null
@@ -0,0 +1,71 @@
+/* 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 "kbd8x_mk2.h"
+
+void matrix_init_kb(void) {  
+
+  // Indicator pins
+  // B2 - Scroll Lock
+  // E6 - Caps Lock
+  // Sinking setup - 5V -> LED/Resistor -> Pin
+  
+  setPinOutput(B2);
+  setPinOutput(E6);
+
+  matrix_init_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+  
+  // Toggle indicator LEDs
+  // Since they are a sinking setup, write HIGH to DISABLE, LOW to ENABLE
+  
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinLow(E6);
+  } else {
+    writePinHigh(E6);
+  }
+  
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinLow(B2);
+  } else {
+    writePinHigh(B2);
+  }
+
+  led_set_user(usb_led);
+}
+
+// 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_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);
+}
+
+*/
diff --git a/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h b/keyboards/kbdfans/kbd8x_mk2/kbd8x_mk2.h
new file mode 100644 (file)
index 0000000..86d8b35
--- /dev/null
@@ -0,0 +1,51 @@
+/* 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/>.
+ */
+#pragma once
+
+#include "quantum.h"  
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+    K000,       K001, 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, K066,    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, K090, K081, K091, K082, K092, K083, K093, K084, K094, K085, K095,     K086,  K096,          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,  K066,  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,  K096,  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/ai03/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/ai03/keymap.c
new file mode 100644 (file)
index 0000000..f651f2f
--- /dev/null
@@ -0,0 +1,53 @@
+/* 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_LGUI, KC_1,    KC_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, \
+       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_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_DEL,                    KC_UP,            \
+       KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                      MO(1),   KC_GRV,  BL_TOGG, KC_DEL,           KC_LEFT, KC_DOWN, KC_RGHT  \
+  ),
+  [1] = LAYOUT( /* Base */
+    
+       _______,          _______, _______, _______, _______,      _______, _______, _______, _______,     _______, _______, _______, _______,          _______, _______, _______, \
+       _______, KC_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_BSPC,          _______, _______, _______, \
+       KC_CAPS, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP,   _______, KC_MPRV, KC_MPLY, KC_MNXT,          _______,          _______, _______, _______, \
+       _______, KC_HOME, KC_PGDN, KC_END,  _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,                   _______,                                     \
+       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          KC_PSCR, _______,                   KC_PGUP,          \
+       _______, _______, _______,                            _______,                                     _______, _______, _______, _______,          KC_HOME, KC_PGDN, KC_END   \
+  )
+};
+
+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/ai03/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/ai03/readme.md
new file mode 100644 (file)
index 0000000..d48343e
--- /dev/null
@@ -0,0 +1,4 @@
+# The ai03 keymap for KBD8X MKII
+
+A strange layout that focuses functionality into the alphanumerics cluster.  
+Fn row and further keys effectively become nothing more than decoration.
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_625/keymap.c
new file mode 100644 (file)
index 0000000..69d0485
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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
new file mode 100644 (file)
index 0000000..8752789
--- /dev/null
@@ -0,0 +1,3 @@
+# 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/ansi_7/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_7/keymap.c
new file mode 100644 (file)
index 0000000..99496e2
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_NO,   KC_RALT, KC_RGUI, 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_7/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/ansi_7/readme.md
new file mode 100644 (file)
index 0000000..c0f5b86
--- /dev/null
@@ -0,0 +1,3 @@
+# The ANSI WKL keymap for KBD8X MKII
+
+A typical setup for the 1.5/7U bottom row.
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/default/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..1064c14
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_BSLS, 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/default/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..287ee70
--- /dev/null
@@ -0,0 +1,4 @@
+# The default keymap for KBD8X MKII
+
+A typical setup. Nothing special.  
+A nice starting point for customizing.
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/iso_625/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/iso_625/keymap.c
new file mode 100644 (file)
index 0000000..01c4a03
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_NUHS,          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_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_DEL,                    KC_UP,            \
+       KC_LCTL, KC_LGUI, KC_LALT,                           KC_SPC,                                       KC_ALGR, 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/iso_625/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/iso_625/readme.md
new file mode 100644 (file)
index 0000000..38760b7
--- /dev/null
@@ -0,0 +1,3 @@
+# The ISO 6.25U keymap for KBD8X MKII
+
+A typical setup for an ISO layout using 1.25/6.25U bottom row.
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/iso_7/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/iso_7/keymap.c
new file mode 100644 (file)
index 0000000..4087b59
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_NUHS,          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_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_DEL,                    KC_UP,            \
+       KC_LCTL, KC_LGUI, KC_LALT,                           KC_SPC,                                       KC_NO,   KC_ALGR, KC_RGUI, 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/iso_7/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/iso_7/readme.md
new file mode 100644 (file)
index 0000000..2f0eb19
--- /dev/null
@@ -0,0 +1,3 @@
+# The ISO 7U keymap for KBD8X MKII
+
+A typical setup for an ISO layout using 1.5/7U bottom row.
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/keymaps/tester/keymap.c b/keyboards/kbdfans/kbd8x_mk2/keymaps/tester/keymap.c
new file mode 100644 (file)
index 0000000..dc742bc
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_CAPS, KC_SLCK, BL_TOGG, BL_STEP,      RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD,     RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD,          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_BSLS, 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/tester/readme.md b/keyboards/kbdfans/kbd8x_mk2/keymaps/tester/readme.md
new file mode 100644 (file)
index 0000000..3de082b
--- /dev/null
@@ -0,0 +1,18 @@
+# The tester keymap for KBD8X MKII
+
+Sets the fn row to LED toggling (caps lock, scroll lock, RGB underglow, backlight).  
+  
+F1 = Caps Lock  
+F2 = Scroll Lock  
+F3 = Backlight Toggle  
+F4 = Backlight Step  
+  
+F5 = RGB Toggle  
+F6 = RGB Mode Cycle  
+F7 = RGB Hue Increase  
+F8 = RGB Hue Decrease  
+  
+F9  = RGB Saturation Increase  
+F10 = RGB Saturation Decrease  
+F11 = RGB Value Increase  
+F12 = RGB Value Decrease  
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x_mk2/readme.md b/keyboards/kbdfans/kbd8x_mk2/readme.md
new file mode 100644 (file)
index 0000000..3655ac1
--- /dev/null
@@ -0,0 +1,15 @@
+# KBD8X MKII
+
+![Photo](https://cdn.shopify.com/s/files/1/1473/3902/products/9_e4262f46-0d69-4c6c-9cc6-b88a3e2483d7_1800x1800.jpg)
+
+A fairly typical TKL
+
+Keyboard Maintainer: [ai03](https://github.com/ai03-2725) / [KBDfans](https://kbdfans.cn/)  
+Hardware Supported: KBD8X MKII PCB/case
+Hardware Availability: [KBDfans](https://kbdfans.cn/collections/new-arrival/products/coming-soon-kbd8x-mkii-custom-mechanical-keyboard-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make kbdfans/kbd8x_mk2: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/kbd8x_mk2/rules.mk b/keyboards/kbdfans/kbd8x_mk2/rules.mk
new file mode 100644 (file)
index 0000000..43e0dcf
--- /dev/null
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = 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 = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/kbdfans/kbdpad_mk2/config.h b/keyboards/kbdfans/kbdpad_mk2/config.h
new file mode 100644 (file)
index 0000000..e3b91e1
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xA103
+#define PRODUCT_ID      0x0006
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    KBDfans
+#define PRODUCT         KBDPAD-MKII
+#define DESCRIPTION     Numpad
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, D1, D2, C6, C7, B6 }
+#define MATRIX_COL_PINS { C4, C5, B3, B2 }
+#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 5
+
+#define RGB_DI_PIN B5
+#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/kbdfans/kbdpad_mk2/info.json b/keyboards/kbdfans/kbdpad_mk2/info.json
new file mode 100644 (file)
index 0000000..50cfc87
--- /dev/null
@@ -0,0 +1,37 @@
+{
+    "keyboard_name": "kbdpad_mk2", 
+    "url": "https://kb.ai03.me/projects/kbdpad-mkii.html", 
+    "maintainer": "ai03", 
+    "width": 4, 
+    "height": 6.25, 
+    "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.25},
+                               {"x":1, "y":1.25},
+                               {"x":2, "y":1.25},
+                               {"x":3, "y":1.25},
+                               {"x":0, "y":2.25},
+                               {"x":1, "y":2.25},
+                               {"x":2, "y":2.25},
+                               {"x":3, "y":2.25},
+                               {"x":0, "y":3.25},
+                               {"x":1, "y":3.25},
+                               {"x":2, "y":3.25},
+                               {"x":3, "y":3.25},
+                               {"x":0, "y":4.25},
+                               {"x":1, "y":4.25},
+                               {"x":2, "y":4.25},
+                               {"x":3, "y":4.25},
+                               {"x":0, "y":5.25},
+                               {"x":1, "y":5.25},
+                               {"x":2, "y":5.25},
+                               {"x":3, "y":5.25}
+                       ]
+        }
+    }
+}
diff --git a/keyboards/kbdfans/kbdpad_mk2/kbdpad_mk2.c b/keyboards/kbdfans/kbdpad_mk2/kbdpad_mk2.c
new file mode 100644 (file)
index 0000000..3ca8e0c
--- /dev/null
@@ -0,0 +1,61 @@
+/* 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 "kbdpad_mk2.h"
+
+void matrix_init_kb(void) {
+       
+  // Num Lock LED = B4
+  // Sinking setup (5V -> LED/Res -> Pin)
+  
+  setPinOutput(B4);
+
+  matrix_init_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+  
+  // Sinking setup. Write HIGH to turn OFF, LOW to turn ON.
+  
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinLow(B4);
+  } else {
+    writePinHigh(B4);
+  }
+
+  led_set_user(usb_led);
+}
+
+// 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_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);
+}
+
+*/
diff --git a/keyboards/kbdfans/kbdpad_mk2/kbdpad_mk2.h b/keyboards/kbdfans/kbdpad_mk2/kbdpad_mk2.h
new file mode 100644 (file)
index 0000000..328aeaa
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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/>.
+ */
+#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_6x4( \
+    K00, K01, K02, K03, \
+       K10, K11, K12, K13, \
+       K20, K21, K22, K23, \
+       K30, K31, K32, K33, \
+       K40, K41, K42, K43, \
+       K50, K51, K52, K53  \
+) \
+{ \
+    { K00, K01, K02, K03 }, \
+       { K10, K11, K12, K13 }, \
+       { K20, K21, K22, K23 }, \
+       { K30, K31, K32, K33 }, \
+       { K40, K41, K42, K43 }, \
+       { K50, K51, K52, K53 }  \
+}
diff --git a/keyboards/kbdfans/kbdpad_mk2/keymaps/default/keymap.c b/keyboards/kbdfans/kbdpad_mk2/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..841db90
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_ortho_6x4( /* Base */
+    KC_ESC,  KC_LCTL, KC_LALT, 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_PPLS, \
+       KC_P1,   KC_P2,   KC_P3,   KC_PENT, \
+       KC_P0,   KC_P0,   KC_PDOT, KC_PENT  \
+  ),
+};
+
+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/kbdpad_mk2/keymaps/default/readme.md b/keyboards/kbdfans/kbdpad_mk2/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..71ff8e0
--- /dev/null
@@ -0,0 +1,3 @@
+# The default keymap for KBDPAD MKII
+
+Just a numpad. Top row from Cherry G80-3700
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbdpad_mk2/keymaps/tester/keymap.c b/keyboards/kbdfans/kbdpad_mk2/keymaps/tester/keymap.c
new file mode 100644 (file)
index 0000000..04c301f
--- /dev/null
@@ -0,0 +1,44 @@
+/* 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_ortho_6x4( /* Base */
+    BL_TOGG, BL_STEP, RGB_TOG, RGB_MOD, \
+       KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+       KC_P7,   KC_P8,   KC_P9,   KC_PPLS, \
+       KC_P4,   KC_P5,   KC_P6,   KC_PPLS, \
+       KC_P1,   KC_P2,   KC_P3,   KC_PENT, \
+       KC_P0,   KC_P0,   KC_PDOT, KC_PENT  \
+  ),
+};
+
+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/kbdpad_mk2/keymaps/tester/readme.md b/keyboards/kbdfans/kbdpad_mk2/keymaps/tester/readme.md
new file mode 100644 (file)
index 0000000..3cd1e9b
--- /dev/null
@@ -0,0 +1,9 @@
+# The testing keymap for KBDPAD MKII
+
+Turns top row into LED tester.  
+  
+From left to right:  
+Backlight Toggle  
+Backlight Step  
+RGB Toggle  
+RGB Mode Cycle  
\ No newline at end of file
diff --git a/keyboards/kbdfans/kbdpad_mk2/readme.md b/keyboards/kbdfans/kbdpad_mk2/readme.md
new file mode 100644 (file)
index 0000000..7736019
--- /dev/null
@@ -0,0 +1,15 @@
+# KBDPAD MKII
+
+![kbdpad_mk2](https://cdn.shopify.com/s/files/1/1473/3902/files/1_17ddc70a-87f6-406d-8a32-d63615c70773.jpg?v=1552119175)
+
+A simple numpad
+
+Keyboard Maintainer: [ai03](https://github.com/ai03-2725)/[KBDfans](https://kbdfans.cn/)    
+Hardware Supported: The KBDPAD MKII PCB/case  
+Hardware Availability: [KBDfans](https://kbdfans.cn/products/gb-kbdpad-mkii-mechanical-keyboard-kit)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make kbdfans/kbdpad_mk2: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/kbdpad_mk2/rules.mk b/keyboards/kbdfans/kbdpad_mk2/rules.mk
new file mode 100644 (file)
index 0000000..90614e9
--- /dev/null
@@ -0,0 +1,82 @@
+# MCU name
+MCU = atmega32u2
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite    # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = 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 = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+
+LAYOUTS = ortho_6x4
diff --git a/keyboards/keebio/bfo9000/keymaps/insertsnideremarks/readme.md b/keyboards/keebio/bfo9000/keymaps/insertsnideremarks/readme.md
new file mode 100644 (file)
index 0000000..0a3bdc4
--- /dev/null
@@ -0,0 +1 @@
+## I've changed my folder name to match my GitHub username.  Please see https://github.com/qmk/qmk_firmware/tree/master/keyboards/keebio/bfo9000/keymaps/tuesdayjohn for my current keymap files.
diff --git a/keyboards/keebio/bfo9000/keymaps/tuesdayjohn/config.h b/keyboards/keebio/bfo9000/keymaps/tuesdayjohn/config.h
new file mode 100644 (file)
index 0000000..3446340
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+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
+
+/* 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 IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_TERM 150
+#define TAPPING_TOGGLE 2
+
+// #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
\ No newline at end of file
diff --git a/keyboards/keebio/bfo9000/keymaps/tuesdayjohn/keymap.c b/keyboards/keebio/bfo9000/keymaps/tuesdayjohn/keymap.c
new file mode 100644 (file)
index 0000000..e42f679
--- /dev/null
@@ -0,0 +1,341 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum bfo9000_layers {
+  _COLEMAK,   // Colemak (default layer)
+  _QWERTY,    // Qwerty
+  _GAMING,    // Gaming/vanilla toggle layer (limited dual-role keys and layer access)
+  _NUMBERS,   // Numbers & Symbols
+  _NUMBERS2,  // Numbers & Symbols 2 (identical as _NUMBERS; basically used for tri-layer access to _ADJUST)
+  _FUNCTION,  // Function
+  _FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
+  _NUMPAD,    // Numpad
+  _ADJUST,    // Adjust layer (accessed via tri-layer feature)
+  _ADJUST2    // Second Adjust layer (accessed outside of tri-layer feature)
+};
+
+enum bfo9000_keycodes {
+  COLEMAK = SAFE_RANGE,
+  QWERTY,
+  GAMING
+};
+
+//Tap Dance Declarations
+enum {
+  ADJ = 0,
+  LBCB,
+  RBCB,
+  EQPL,
+  PLEQ,
+  MNUN,
+  SLAS,
+  GVTL,
+  PPEQ,
+  PMUN,
+  PSPA
+};
+
+void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 2) {
+     layer_on(_ADJUST2);
+     set_oneshot_layer(_ADJUST2, ONESHOT_START);
+  }
+}
+void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 2) {
+     layer_off(_ADJUST2);
+     clear_oneshot_layer_state(ONESHOT_PRESSED);
+  }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+[ADJ]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset),  //  Double-tap to activate Adjust layer via oneshot layer 
+[LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR),  // Left bracket on a single-tap, left brace on a double-tap
+[RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR),  // Right bracket on a single-tap, right brace on a double-tap
+[EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),   // Plus sign on a single-tap, equal sign on a double-tap
+[PLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL),   // Equal sign on a single-tap, plus sign on a double-tap
+[MNUN] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),  // Minus sign on a single-tap, underscore on a double-tap
+[SLAS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR),  // Slash in a single-tap, asterisk in a double-tap
+[GVTL] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD),   // Grave on a single-tap, tilde on a double-tap
+[PPEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL),   // Numpad plus sign on a single-tap, equal sign on a double-tap
+[PMUN] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS),  // Numpad minus sign on a single-tap, underscore on a double-tap
+[PSPA] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST)   // Numpad slash on a single-tap, numpad asterisk on a double-tap
+};
+
+//Aliases for longer keycodes
+#define NUMPAD  TG(_NUMPAD)
+#define ADJUST  MO(_ADJUST2)
+#define SPCFN   LT(_FUNCTION, KC_SPC)
+#define BSPCFN  LT(_FUNCTION2, KC_BSPC)
+#define ENTNS   LT(_NUMBERS, KC_ENT)
+#define DELNS   LT(_NUMBERS2, KC_DEL)
+#define CTLESC  CTL_T(KC_ESC)
+#define ALTAPP  ALT_T(KC_APP)
+#define CTL_A   LCTL(KC_A)
+#define CTL_C   LCTL(KC_C)
+#define CTL_V   LCTL(KC_V)
+#define CTL_X   LCTL(KC_X)
+#define CTL_Z   LCTL(KC_Z)
+#define CTL_Y   LCTL(KC_Y)
+#define CA_TAB  LCA(KC_TAB)
+#define HYPER   ALL_T(KC_NO)
+#define TD_ADJ  TD(ADJ)
+#define TD_LBCB TD(LBCB)
+#define TD_RBCB TD(RBCB)
+#define TD_EQPL TD(EQPL)
+#define TD_PLEQ TD(PLEQ)
+#define TD_MNUN TD(MNUN)
+#define TD_SLAS TD(SLAS)
+#define TD_GVTL TD(GVTL)
+#define TD_PPEQ TD(PPEQ)
+#define TD_PMUN TD(PMUN)
+#define TD_PSPA TD(PSPA)
+#define NKROTG  MAGIC_TOGGLE_NKRO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+Colemak
+(Default layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |   ESC  |   F1   |   F2   |   F3   |   F4   |   F5   |        |        |        |   | Adjust |        |   F12  |   F6   |   F7   |   F8   |   F9   |   F10  |   F11  |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |    =   |    1   |    2   |    3   |    4   |    5   |        |        |        |   | Numpad |        |        |    6   |    7   |    8   |    9   |    0   |    -   |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |   Tab  |    Q   |    W   |    F   |    P   |    G   |        |        |  Home  |   | Pause  |        |        |    J   |    L   |    U   |    Y   |    ;   |    \   |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Esc/Ctl|    A   |    R   |    S   |    T   |    D   |        |        |  PgUp  |   | ScrLck |        |        |    H   |    N   |    E   |    I   |    O   |    '   |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | SCShift|    Z   |    X   |    C   |    V   |    B   | Esc/Ctl| App/Alt|  PgDn  |   | PrtScr |  RAlt  |  RCtl  |    K   |    M   |    ,   |    .   |    /   | SCShift|
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |   Ins  |    `   |    [   |    ]   | App/Alt| Spc/Fn | Ent/NS |  Bspc  |   End  |   |        |  Enter | Del/NS2| Bsp/Fn2|  RGUI  |  Left  |  Down  |   Up   |  Right |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_COLEMAK] = LAYOUT( \
+  KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   _______, _______, _______,     ADJUST,  _______, KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+  KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, _______, _______,     NUMPAD,  _______, _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    _______, _______, KC_HOME,     KC_PAUS, _______, _______, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSLS,    
+  CTLESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    _______, _______, KC_PGUP,     KC_SLCK, _______, _______, KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,  
+  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    CTLESC,  ALTAPP,  KC_PGDN,     KC_PSCR, KC_RALT, KC_RCTL, KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,   
+  KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC, ALTAPP,  SPCFN,   ENTNS,   KC_BSPC, KC_END,      _______, KC_ENT,  DELNS,   BSPCFN,  KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT 
+),
+
+/*
+QWERTY
+(Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |   ESC  |   F1   |   F2   |   F3   |   F4   |   F5   |        |        |        |   | Adjust |        |   F12  |   F6   |   F7   |   F8   |   F9   |   F10  |   F11  |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |    =   |    1   |    2   |    3   |    4   |    5   |        |        |        |   | Numpad |        |        |    6   |    7   |    8   |    9   |    0   |    -   |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |   Tab  |    Q   |    W   |    E   |    R   |    T   |        |        |  Home  |   |  Pause |        |        |    Y   |    U   |    I   |    O   |    P   |    \   |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Esc/Ctl|    A   |    S   |    D   |    F   |    G   |        |        |  PgUp  |   | ScrLck |        |        |    H   |    J   |    K   |    L   |    ;   |    '   |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | SCShift|    Z   |    X   |    C   |    V   |    B   | Esc/Ctl| App/Alt|  PgDn  |   | PrtScr |  RAlt  |  RCtl  |    N   |    M   |    ,   |    .   |    /   | SCShift|
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |   Ins  |    `   |    [   |    ]   | App/Alt| Spc/Fn | Ent/NS |  Bspc  |   End  |   |        |  Enter | Del/NS2| Bsp/Fn2|  RGUI  |  Left  |  Down  |   Up   |  Right |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_QWERTY] = LAYOUT( \
+  KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,       ADJUST,  _______, KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+  KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,        NUMPAD,  _______, _______, 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_HOME,     KC_PAUS, _______, _______, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,    
+  CTLESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_PGUP,     KC_SLCK, _______, _______, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,  
+  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    CTLESC,  ALTAPP,  KC_PGDN,     KC_PSCR, KC_RALT, KC_RCTL, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,   
+  KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC, ALTAPP,  SPCFN,   ENTNS,   KC_BSPC, KC_END,      _______, KC_ENT,  DELNS,   BSPCFN,  KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT 
+),
+
+/*
+Numbers/Symbols layer
+(Multiple characters: single-tap for first, double-tap for second)
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |   F12  |   F1   |   F2   |   F3   |   F4   |   F5   |        |        |        |   |        |        |        |   F6   |   F7   |   F8   |   F9   |   F10  |   F12  |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |    6   |    7   |    8   |    9   |    0   |        |        |        |   |        |        |        |    ^   |    &   |    *   |    (   |    )   |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |    1   |    2   |    3   |    4   |    5   |        |        |        |   |        |        |        |    !   |    @   |    #   |    $   |    %   |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |    .   |   / *  |   - _  |   + =  |        |        |        |   |        |        |        |   ` ~  |   [ {  |   ] }  |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |    (   |    )   |   [ {  |   ] }  |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_NUMBERS] = 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,
+  _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, _______, _______,     _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+  _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, _______, _______,     _______, _______, _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______,
+  _______, _______, KC_DOT,  TD_SLAS, TD_MNUN, TD_PLEQ, _______, _______, _______,     _______, _______, _______, TD_GVTL, TD_LBCB, TD_RBCB, _______, _______, _______,
+  KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_NUMBERS2] = 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,
+  _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, _______, _______,     _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+  _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, _______, _______,     _______, _______, _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______,
+  _______, _______, KC_DOT,  TD_SLAS, TD_MNUN, TD_PLEQ, _______, _______, _______,     _______, _______, _______, TD_GVTL, TD_LBCB, TD_RBCB, _______, _______, _______,
+  KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/*
+Function layer
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |   F12  |   F1   |   F2   |   F3   |   F4   |   F5   |        |        |        |   |        |        |        |   F6   |   F7   |   F8   |   F9   |   F10  |   F12  |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |   Up   |        |        |        |        |        |   |        |        |        |        |        |   Up   | Ctrl+Y |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        | Ctrl+A |  Left  |  Down  |  Right | C+A+Tb |        |        |        |   |        |        |        |  PgUp  |  Right |  Down  |  Left  |  Home  |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        | Ctrl+Z | Ctrl+X | Ctrl+C | Ctrl+V |  Bspc  |        |        |        |   |        |        |        |  PgDn  |  Mute  |  Vol-  |  Vol+  |   End  |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |  Prev  |  Play  |  Next  |  Stop  |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_FUNCTION] = 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,
+  _______, _______, _______, KC_UP,   _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, KC_UP,   CTL_Y,   _______, _______,
+  _______, CTL_A,   KC_LEFT, KC_DOWN, KC_RGHT, CA_TAB,  _______, _______, _______,     _______, _______, _______, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+  _______, CTL_Z,   CTL_X,   CTL_C,   CTL_V,   KC_BSPC, _______, _______, _______,     _______, _______, _______, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END,  _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
+),
+
+[_FUNCTION2] = 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,
+  _______, _______, _______, KC_UP,   _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, KC_UP,   CTL_Y,   _______, _______,
+  _______, CTL_A,   KC_LEFT, KC_DOWN, KC_RGHT, CA_TAB,  _______, _______, _______,     _______, _______, _______, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+  _______, CTL_Z,   CTL_X,   CTL_C,   CTL_V,   KC_BSPC, _______, _______, _______,     _______, _______, _______, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END,  _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
+),
+
+/*
+Numpad layer
+(Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |  NumLk |        |        |        |        |        |        |        |   |        |        |   Tab  |  NumLk |  KP /  |  KP *  |  KP -  |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |  KP 6  |  KP 7  |   KP 8 |  KP 9  |  KP 0  |        |        |        |   |        |        |        |  KP 7  |  KP 8  |  KP 9  |  KP +  |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |  KP 1  |  KP 2  |   KP 3 |  KP 4  |  KP 5  |        |        |        |   |        |        |        |  KP 4  |  KP 5  |  KP 6  |    =   |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |  KP .  | KP/ KP*|  KP- _ |  KP+ = |        |        |        |   |        |        |        |  KP 1  |  KP 2  |  KP 3  | KP Ent |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |    (   |    )   |   [ {  |   ] }  |        |        |        |        |        |   |        |        |        |        |  KP 0  |  KP .  | KP Ent |        |        |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_NUMPAD] = LAYOUT( \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, KC_NLCK, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, KC_TAB,  KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
+  _______, KC_P6,   KC_P7,   KC_P8,   KC_P9,   KC_P0,   _______, _______, _______,     _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   KC_PPLS, _______,
+  _______, KC_P1,   KC_P2,   KC_P3,   KC_P4,   KC_P5,   _______, _______, _______,     _______, _______, _______, _______, KC_P4,   KC_P5,   KC_P6,   KC_EQL,  _______,
+  _______, _______, KC_PDOT, TD_PSPA, TD_PMUN, TD_PPEQ, _______, _______, _______,     _______, _______, _______, _______, KC_P1,   KC_P2,   KC_P3,   KC_PENT, _______,
+  KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PENT, _______
+),
+
+/*
+Gaming
+(Toggle gaming layer with limited dual-role keys and layer access; NKRO turned on by default; Ent/NS + Delete/Numbers2 to access Adjust layer)
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |        |        |        |        |        |        |   F6   |   F7   |   F8   |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |    6   |    7   |    8   |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |    J   |    L   |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |  LCtl  |        |        |        |        |        |    H   |    N   |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |  Shift |        |        |        |        |        |   Esc  |  LAlt  |        |   |        |  RAlt  |  RCtl  |        |        |        |        |        |  Shift |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |  LAlt  |  Space |  Enter |  Bspc  |        |   |        | Ent/NS | Del/NS2| Bsp/Fn2|  RGUI  |        |        |        |        |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_GAMING] = LAYOUT( \
+  _______, _______, _______, _______, _______, _______, KC_F6,   KC_F7,   KC_F8,       _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, KC_6,    KC_7,    KC_8,        _______, _______, _______, _______, _______, _______, _______, _______, _______,  
+  _______, _______, _______, _______, _______, _______, KC_J,    KC_L,    _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,    
+  KC_LCTL, _______, _______, _______, _______, _______, KC_H,    KC_N,    _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,  
+  KC_LSFT, _______, _______, _______, _______, _______, KC_ESC,  KC_LALT, _______,     _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT,   
+  _______, _______, _______, _______, KC_LALT, KC_SPC,  KC_ENT,  KC_BSPC, _______,     _______, ENTNS,   _______, _______, _______, _______, _______, _______, _______ 
+),
+
+/*
+Adjust layer
+(Press and hold Adjust key on the function row or Enter/Number + Delete/Number2 to access; Numpad and NKRO are on toggle)
+ ,--------------------------------------------------------------------------------.   ,--------------------------------------------------------------------------------. 
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        | Colemak| Qwerty |        | Gaming |        |        |        |        |   |        |        |        | Numpad |        |        |        |        |  RESET |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        | NKROTG |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------|   |--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ |        |        |        |        |        |        |        |        |        |   |        |        |        |        |        |        |        |        |        |
+ `--------------------------------------------------------------------------------'   `--------------------------------------------------------------------------------'
+*/
+[_ADJUST] = LAYOUT(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, COLEMAK, QWERTY,  _______, GAMING,  _______, _______, _______, _______,     _______, _______, _______, NUMPAD,  _______, _______, _______, _______, RESET,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, NKROTG,  _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_ADJUST2] = LAYOUT(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, COLEMAK, QWERTY,  _______, GAMING,  _______, _______, _______, _______,     _______, _______, _______, NUMPAD,  _______, _______, _______, _______, RESET,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, NKROTG,  _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+       case COLEMAK:
+      if (record->event.pressed) {
+//        persistent_default_layer_set(1UL << _COLEMAK);
+        default_layer_set(1UL << _COLEMAK);
+        layer_move (_COLEMAK);
+        keymap_config.nkro = 0;
+         }
+      return false;
+      break;
+    case QWERTY:
+      if (record->event.pressed) {
+//        persistent_default_layer_set(1UL << _QWERTY);
+        default_layer_set(1UL << _QWERTY);
+        layer_move (_QWERTY);
+        keymap_config.nkro = 0;
+      }
+      return false;
+      break;
+    case GAMING:
+      if (record->event.pressed) {
+        layer_invert (_GAMING);
+        layer_off (_NUMPAD);
+        keymap_config.nkro = 1;
+         }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/keebio/bfo9000/keymaps/tuesdayjohn/rules.mk b/keyboards/keebio/bfo9000/keymaps/tuesdayjohn/rules.mk
new file mode 100644 (file)
index 0000000..cf63c44
--- /dev/null
@@ -0,0 +1,19 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # 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 = yes        # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight. 
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes      # Enable Tap Dancing function
diff --git a/keyboards/keebio/iris/keymaps/333fred/config.h b/keyboards/keebio/iris/keymaps/333fred/config.h
new file mode 100644 (file)
index 0000000..8a866b8
--- /dev/null
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "333fred_config.h"
+
+#define USE_SERIAL
+#define EE_HANDS
+#define NO_ACTION_MACRO
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
+
+#undef RGBLED_NUM
+#define RGBLED_NUM 24
+#define RGBLIGHT_SLEEP
diff --git a/keyboards/keebio/iris/keymaps/333fred/keymap.c b/keyboards/keebio/iris/keymaps/333fred/keymap.c
new file mode 100644 (file)
index 0000000..b8a65d7
--- /dev/null
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+#include "333fred.h"
+
+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_TAB,        KC_Q,        KC_W,    KC_E,    KC_R,    KC_T,                               KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
+  //├──────────────┼────────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼──────────────┤
+     CTL_T(KC_ESC), KC_A,        KC_S,    KC_D,    KC_F,    KC_G,                               KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+  //├──────────────┼────────────┼────────┼────────┼────────┼────────┼───────────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼──────────────┤
+     OSM(MOD_LSFT), CTL_T(KC_Z), KC_X,    KC_C,    KC_V,    KC_B,    KC_DEL,           KC_DOWN, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, OSM(MOD_RSFT),
+  //└──────────────┴────────────┴────────┴────────┼────────┼────────┼───────────────┤ ├────────┼────────┼────────┼────────┴────────┴────────┴──────────────┘
+                                                   KC_LALT, KC_BSPC, TD(TD_SYM_VIM),   KC_ENT,  KC_SPC,  KC_RGUI
+                                               // └────────┴────────┴───────────────┘ └────────┴────────┴────────┘
+  ),
+
+
+  [SYMB] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                              KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PLUS,                            _______, KC_7,    KC_8,    KC_9,    _______, KC_F12,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_EQL,                             _______, KC_4,    KC_5,    KC_6,    _______, KC_VOLU,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_UP,            KC_UP,   KC_0,    KC_1,    KC_2,    KC_3,    _______, KC_VOLD,
+  //└────────┴────────┴────────┴───┬────┴───┬────┴───────┴─────┬───┴────┐   └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+                                    _______, TD(TD_COPY_PASTE), _______,         KC_MPRV, KC_MPLY, KC_MNXT
+                                // └────────┴──────────────────┴────────┘       └────────┴────────┴────────┘
+  ),
+
+
+  [VIM] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, _______, _______, KC_LSFT, _______,                            _______, _______, _______, _______, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, DLEFT,   DRIGHT,  KC_LCTL, KC_LGUI, _______,                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______, _______, _______, _______, _______,
+  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+                                    _______, _______, _______,                   _______, _______, _______
+                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    tap_dance_process_keycode(keycode);
+    return !try_handle_macro(keycode, record);
+}
diff --git a/keyboards/keebio/iris/keymaps/333fred/rules.mk b/keyboards/keebio/iris/keymaps/333fred/rules.mk
new file mode 100644 (file)
index 0000000..2b5da5a
--- /dev/null
@@ -0,0 +1,7 @@
+NKRO_ENABLE = yes
+KEY_LOCK_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+CONSOLE_ENABLE = no
+PERMISSIVE_HOLD = yes
+EXTRAFLAGS += -flto
+
index f0e4d6f15b6876495d6fcf9898891087f473c7c3..758b842f75ba96df42878db9c65137b6e3ee7319 100644 (file)
@@ -22,9 +22,9 @@ 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_BSLS,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-     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_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_GRV,           KC_DEL,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+     KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_GRV,           KC_DEL,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
   //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
                                     KC_LGUI, LOWER,   KC_ENT,                    KC_SPC,  RAISE,   KC_RALT
                                 // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
index 53b00d24f50586e619f2b78e0c3141ea10fb029c..8166822d93fcf029b507fb88a25708f762ba9378 100644 (file)
@@ -20,14 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "config_common.h"
 
-/* Use I2C or Serial, not both */
-
-#define USE_SERIAL
-// #define USE_I2C
+#define USE_I2C
 
 /* Select hand configuration */
-
-#define MASTER_LEFT
 // #define MASTER_RIGHT
 // #define EE_HANDS
 
diff --git a/keyboards/keebio/iris/keymaps/jasondunsmore/config.h b/keyboards/keebio/iris/keymaps/jasondunsmore/config.h
new file mode 100644 (file)
index 0000000..8aa4be3
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+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 TAPPING_TERM 200
diff --git a/keyboards/keebio/iris/keymaps/jasondunsmore/keymap.c b/keyboards/keebio/iris/keymaps/jasondunsmore/keymap.c
new file mode 100644 (file)
index 0000000..5f93076
--- /dev/null
@@ -0,0 +1,147 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Layers
+#define _QWERTY 0 // Base layer
+#define _NUMB 1
+#define _NAVI 2
+
+// Keys
+#define KC_NUMB MO(_NUMB)
+#define KC_NAVI MO(_NAVI)
+#define KC_AGRV LALT_T(KC_GRAVE)
+#define KC_GUIE LGUI_T(KC_ESC)
+#define KC_REST RESET
+#define KC_DBUG DEBUG
+
+// Tap Dance Declarations
+enum {
+  TD_LALT_GRV_BSLS = 0,
+  TD_LSFT_LBRC,
+  TD_RSFT_RBRC,
+};
+
+void alt_grave_backslash(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      if (!state->pressed) {
+        register_code(KC_GRAVE);
+      } else {
+        register_code(KC_LALT);
+      }
+    } else if (state->count == 2) {
+      register_code(KC_BSLASH);
+    }
+}
+
+void alt_grave_backslash_reset(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      unregister_code(KC_GRAVE);
+      unregister_code(KC_LALT);
+    } else if (state->count == 2) {
+      unregister_code(KC_BSLASH);
+    }
+}
+
+void left_brackets(qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    if (!state->pressed) {
+      register_code(KC_LSFT);
+      register_code(KC_9);
+    } else {
+      register_code(KC_LSFT);
+    }
+  } else if (state->count == 2) {
+    register_code(KC_LBRC);
+  }
+}
+
+void left_brackets_reset(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      unregister_code(KC_LSFT);
+      unregister_code(KC_9);
+    } else if (state->count == 2) {
+      unregister_code(KC_LBRC);
+    }
+}
+
+void right_brackets(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      if (!state->pressed) {
+        register_code(KC_RSFT);
+        register_code(KC_0);
+      } else {
+        register_code(KC_RSFT);
+      }
+    } else if (state->count == 2) {
+      register_code(KC_RBRC);
+    }
+}
+
+void right_brackets_reset(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+        unregister_code(KC_RSFT);
+        unregister_code(KC_0);
+    } else if (state->count == 2) {
+      unregister_code(KC_RBRC);
+    }
+}
+
+
+// Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  // Tap once for KC_SLSH, twice for KC_BSLS
+  [TD_LALT_GRV_BSLS]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, alt_grave_backslash, alt_grave_backslash_reset),
+  [TD_LSFT_LBRC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, left_brackets, left_brackets_reset),
+  [TD_RSFT_RBRC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, right_brackets, right_brackets_reset)
+};
+
+// Tap Dance Keys
+#define KC_AGRB TD(TD_LALT_GRV_BSLS)
+#define KC_LSBK TD(TD_LSFT_LBRC)
+#define KC_RSBK TD(TD_RSFT_RBRC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_kc(
+//,----+----+----+----+----+----.              ,----+----+----+----+----+----.
+   GUIE, 1,   2,   3,   4,   5,                  6,   7,   8,   9,   0,  DEL,
+//|----+----+----+----+----+----|              |----+----+----+----+----+----|
+   TAB,  Q,   W,   E,   R,   T,                  Y,   U,   I,   O,   P,  BSPC,
+//|----+----+----+----+----+----|              |----+----+----+----+----+----|
+   AGRB, A,   S,   D,   F,   G,                  H,   J,   K,   L,  SCLN,QUOT,
+//|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
+   LSBK, Z,   X,   C,   V,   B,  MINS,     EQL,  N,   M,  COMM,DOT, SLSH,RSBK,
+//`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
+                     NUMB,LCTL,SPC,          ENT, RCTL,NAVI
+//                  `----+----+----'        `----+----+----'
+     ),
+
+  [_NUMB] = LAYOUT_kc(
+//,----+----+----+----+----+----.              ,----+----+----+----+----+----.
+   F12,  F1,  F2,  F3,  F4,  F5,                 F6,  F7,  F8,  F9, F10, F11,
+//|----+----+----+----+----+----|              |----+----+----+----+----+----|
+    NO, F17, F18, F19, F20,  NO,                 NO,  7,   8,   9,   0,  TRNS,
+//|----+----+----+----+----+----|              |----+----+----+----+----+----|
+   TRNS,F13, F14, F15, F16,  NO,                ASTR, 4,   5,   6,  PLUS,TRNS,
+//|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
+   TRNS,F21, F22, F23, F24,  NO, TRNS,     TRNS,SLSH, 1,   2,   3,  MINS,TRNS,
+//`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
+                     TRNS,TRNS,TRNS,         TRNS,DOT, TRNS
+//                  `----+----+----'        `----+----+----'
+      ),
+
+ [_NAVI] = LAYOUT_kc(
+//,----+----+----+----+----+----.              ,----+----+----+----+----+----.
+   PWR, MUTE,VOLD,VOLU,BRID,BRIU,               REST,DBUG, NO,  NO,  NO, TRNS,
+//|----+----+----+----+----+----|              |----+----+----+----+----+----|
+   WAKE,HOME,PGUP, UP, PGDN,TRNS,                NO,  NO,  NO,  NO,  NO, TRNS,
+//|----+----+----+----+----+----|              |----+----+----+----+----+----|
+   TRNS,END, LEFT,DOWN,RGHT,TRNS,               PAUS,CAPS,PSCR,SLCK,INS, TRNS,
+//|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
+   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS, NO,  NO,  NO,  NO,  NO, TRNS,
+//`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
+                     TRNS,TRNS,TRNS,         TRNS,TRNS,TRNS
+//                  `----+----+----'        `----+----+----'
+     )
+};
diff --git a/keyboards/keebio/iris/keymaps/jasondunsmore/readme.md b/keyboards/keebio/iris/keymaps/jasondunsmore/readme.md
new file mode 100644 (file)
index 0000000..0817b5e
--- /dev/null
@@ -0,0 +1,7 @@
+# jasondunsmore's iris layout
+
+_QWERTY is the default layer, from which all letters, symbols and
+numbers can be accessed. The _NUMB layer contains a numberpad,
+operators, and function keys. The _NAVI layer contains navigation
+keys, some hardware adjustment keys, lock keys, and RESET/DEBUG for
+QMK.
diff --git a/keyboards/keebio/iris/keymaps/jasondunsmore/rules.mk b/keyboards/keebio/iris/keymaps/jasondunsmore/rules.mk
new file mode 100644 (file)
index 0000000..d58c21f
--- /dev/null
@@ -0,0 +1,2 @@
+TAP_DANCE_ENABLE = yes
+COMMAND_ENABLE = no
index f67b71fc1ab3ccb17a77b5db6d4e5be4211f275e..c861ae845feb17526a62fbd55698115a45d30cbe 100644 (file)
@@ -15,9 +15,9 @@ 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_DEL,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-     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_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_HOME,          KC_END,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+     KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_HOME,          KC_END,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
   //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
                                     KC_LGUI, FN_MO13, KC_ENT,                    KC_SPC,  FN_MO23, KC_LALT
                                 // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
index 13302c60c4e10f78b1ee6d34fffded9225f9a76d..2a21861a1cd5202256015e71dcf70382c2c7c487 100644 (file)
@@ -46,7 +46,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #define BACKLIGHT_LEVELS 3
 
 /* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* serial.c configuration for split keyboard */
 #define SOFT_SERIAL_PIN D0
index 5fb8be674ec3424c75320a2e8711070ef7dd4635..b3629354e9f285914ec5c4d3fa13932bb43bc3c3 100644 (file)
@@ -46,7 +46,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #define BACKLIGHT_LEVELS 3
 
 /* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* serial.c configuration for split keyboard */
 #define SOFT_SERIAL_PIN D0
index 235c5710f5695fb3eb0d2480aa3617f6a4d71b06..a46328b94bc691b98f8b08b72e08f3c75601cafd 100644 (file)
@@ -46,7 +46,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #define BACKLIGHT_LEVELS 3
 
 /* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* serial.c configuration for split keyboard */
 #define SOFT_SERIAL_PIN D0
index ff0d28c73ca673fe06adce9f5adfc594dd0151f1..720695b60c99dc725b02963b7a4ac7b856d8e1fc 100644 (file)
@@ -36,8 +36,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MATRIX_ROW_PINS { D2, D3, D5, D7, D6 }
 #define MATRIX_COL_PINS { F1, F4, F5, F6, D4, B4 }
 #define SPLIT_HAND_PIN F0
-#define QMK_ESC_OUTPUT D2
-#define QMK_ESC_INPUT F1
+#define QMK_ESC_OUTPUT F1
+#define QMK_ESC_INPUT D2
 #define QMK_LED B0
 #define QMK_SPEAKER C6
 
@@ -55,7 +55,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #define BACKLIGHT_LEVELS 3
 
 /* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* serial.c configuration for split keyboard */
 #define SOFT_SERIAL_PIN D0
index 9745d5e3c1ae531d36c6904fb9a891987cabc819..18d1d655008a5934a0587bfc39b8e3c4a938c9a7 100644 (file)
@@ -8,7 +8,7 @@ F_USB = $(F_CPU)
 #     different sizes, comment this out, and the correct address will be loaded
 #     automatically (+60). See bootloader.mk for all options.
 ifeq ($(strip $(KEYBOARD)), iris/rev3)
-    BOOTLOADER = dfu
+    BOOTLOADER = qmk-dfu
 else
     BOOTLOADER = caterina
 endif
index 88c2361ad02a8d985e6e59e662ac4268fade0156..503b1f0fd8728d7c067aa042237a511393a5bffc 100644 (file)
@@ -4,8 +4,10 @@
 
 #ifdef KEYBOARD_keebio_levinson_rev1
     #include "rev1.h"
-#else
+#elif KEYBOARD_keebio_levinson_rev2
     #include "rev2.h"
+#elif KEYBOARD_keebio_levinson_rev3
+    #include "rev3.h"
 #endif
 
 // Used to create a keymap using only KC_ prefixed keys
diff --git a/keyboards/keebio/levinson/rev3/config.h b/keyboards/keebio/levinson/rev3/config.h
new file mode 100644 (file)
index 0000000..3e45b9d
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+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
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xCB10
+#define PRODUCT_ID      0x1146
+#define DEVICE_VER      0x0300
+#define MANUFACTURER    Keebio
+#define PRODUCT         Levinson
+#define DESCRIPTION     Split 40 percent ortholinear keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, E6, B4, B5 }
+#define MATRIX_COL_PINS { D3, F4, F7, B1, B3, B2 }
+#define MATRIX_ROW_PINS_RIGHT { D4, B2, B3, B1 }
+#define MATRIX_COL_PINS_RIGHT { F4, F7, D3, B5, B4, E6 }
+#define SPLIT_HAND_PIN D2
+
+/* 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 D7
+#define RGBLED_NUM 12    // Number of LEDs
+#define RGBLED_SPLIT { 6, 6 }
+
+/* Backlight LEDs */
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_LEVELS 7
diff --git a/keyboards/keebio/levinson/rev3/rev3.c b/keyboards/keebio/levinson/rev3/rev3.c
new file mode 100644 (file)
index 0000000..573fa78
--- /dev/null
@@ -0,0 +1,22 @@
+#include "levinson.h"
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+    // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+    led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+    // // green led on
+    // DDRD |= (1<<5);
+    // PORTD &= ~(1<<5);
+
+    // // orange led on
+    // DDRB |= (1<<0);
+    // PORTB &= ~(1<<0);
+
+       matrix_init_user();
+};
+
diff --git a/keyboards/keebio/levinson/rev3/rev3.h b/keyboards/keebio/levinson/rev3/rev3.h
new file mode 100644 (file)
index 0000000..a31bfd1
--- /dev/null
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "levinson.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+       #include <avr/io.h>
+       #include <avr/interrupt.h>
+#endif
+#endif
+
+#define LAYOUT( \
+       L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+       L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+       L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+       L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+       ) \
+       { \
+               { L00, L01, L02, L03, L04, L05 }, \
+               { L10, L11, L12, L13, L14, L15 }, \
+               { L20, L21, L22, L23, L24, L25 }, \
+               { L30, L31, L32, L33, L34, L35 }, \
+               { R05, R04, R03, R02, R01, R00 }, \
+               { R15, R14, R13, R12, R11, R10 }, \
+               { R25, R24, R23, R22, R21, R20 }, \
+               { R35, R34, R33, R32, R31, R30 } \
+       }
+
+#define LAYOUT_ortho_4x12 LAYOUT
diff --git a/keyboards/keebio/levinson/rev3/rules.mk b/keyboards/keebio/levinson/rev3/rules.mk
new file mode 100644 (file)
index 0000000..bd518d8
--- /dev/null
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
index 528cfd39ad17b94241dac6e66b38cb3ee8dea370..c9e836597a24d2dd5748b52defdbc8761e1c7688 100644 (file)
@@ -1,10 +1,18 @@
 #pragma once
 
-/* Use I2C rather than serial communicaiton to reduce latency. */
-#define USE_I2C
-
-/* Turn off RGB lighting when the host goes to sleep. */
-#define RGBLIGHT_SLEEP
+/*
+ * I2C seems to randomly drop keystrokes. Not sure why. It seems a bit like
+ * https://github.com/qmk/qmk_firmware/issues/5037, but that issue is closed,
+ * and our problems happen even with underglow disabled.
+ *
+ * This issue occurs with multiple TRRS cables of different lengths from
+ * different companies, so it's most likely not a cable issue.  It may be that
+ * we are running into issues with long I2C runs, in which case stronger
+ * pull-up resistors might help:
+ * https://hackaday.com/2017/02/08/taking-the-leap-off-board-an-introduction-to-i2c-over-long-wires/.
+ * For now, just don't use I2C.
+ */
+#define USE_SERIAL
 
 /* Use an extra LED on the right side since it's wider on the 65% PCB. */
 #undef RGBLED_NUM
 
 /* Set up RGB lighting so it works with either side as master. */
 #define RGBLED_SPLIT { 8, 9 }
-
-/* Make mouse operation smoother. */
-#define MOUSEKEY_DELAY 0
-#define MOUSEKEY_INTERVAL 16
-
-/* Lower mouse speed to adjust for reduced MOUSEKEY_INTERVAL. */
-#define MOUSEKEY_MAX_SPEED 7
-#define MOUSEKEY_TIME_TO_MAX 150
-#define MOUSEKEY_WHEEL_MAX_SPEED 4
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
index 80e934577008eaa86ee656ad228f766e5a10143a..fc66ff101358f55aef92ac7e312fb52e6ca98fd1 100644 (file)
@@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Function layer: http://www.keyboard-layout-editor.com/#/gists/59636898946da51f91fb290f8e078b4d */
     [LAYER_FUNCTION] = LAYOUT_65(
         _______,  KC_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,   RGB_HUI,
-        _______,  KC_MPLY,  KC_VOLU,  KC_MSTP,  _______,  _______,  EEP_RST,  _______,  KC_PSCR,  KC_SLCK,  KC_PAUS,  _______,  _______,  _______,  RGB_SAI,
+        _______,  KC_MPLY,  KC_VOLU,  KC_MSTP,  _______,  _______,  _______,  _______,  KC_PSCR,  KC_SLCK,  KC_PAUS,  _______,  _______,  _______,  RGB_SAI,
         KC_CAPS,  KC_MPRV,  KC_VOLD,  KC_MNXT,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  RGB_TOG,  RGB_SAD,
         _______,  _______,  KC_MUTE,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  RGB_VAI,  RGB_HUD,
         _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  RGB_RMOD, RGB_VAD,  RGB_MOD
index 51e5f259873f2e88c603000514b429d122cdf5f5..2e9e0f6d768cd6e20f5e8392f9b4f6b1a1301fae 100644 (file)
@@ -10,7 +10,7 @@ cluster, and mouse keys on their own layer centered around the arrow cluster.
 
 ## Function layer
 
-![Function layer layout](https://i.imgur.com/ISklbfF.png)
+![Function layer layout](https://i.imgur.com/4R1F72M.png)
 
 ## Mouse layer
 
index 274e217ca86c32eb8ecc2dc7ae2e4cabc73c36f5..c87b447c1e3d549b78efa44ca0a74c051d0d5168 100644 (file)
@@ -1,3 +1 @@
 BOOTLOADER = atmel-dfu  # Elite-C
-
-MOUSEKEY_ENABLE = yes
diff --git a/keyboards/keycapsss/o4l_5x12/info.json b/keyboards/keycapsss/o4l_5x12/info.json
new file mode 100644 (file)
index 0000000..7dba0da
--- /dev/null
@@ -0,0 +1,202 @@
+{
+    "keyboard_name": "O4L 5x12",
+    "keyboard_folder": "keycapsss/o4l_5x12",
+    "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/keycapsss/o4l_5x12",
+    "maintainer": "BenRoe",
+    "width": 12,
+    "height": 5,
+    "layouts": {
+        "LAYOUT_ortho_5x12": {
+            "key_count": 60,
+            "layout": [
+                {"w": 1, "x": 0, "y": 0},
+                {"w": 1, "x": 1, "y": 0},
+                {"w": 1, "x": 2, "y": 0},
+                {"w": 1, "x": 3, "y": 0},
+                {"w": 1, "x": 4, "y": 0},
+                {"w": 1, "x": 5, "y": 0},
+                {"w": 1, "x": 6, "y": 0},
+                {"w": 1, "x": 7, "y": 0},
+                {"w": 1, "x": 8, "y": 0},
+                {"w": 1, "x": 9, "y": 0},
+                {"w": 1, "x": 10, "y": 0},
+                {"w": 1, "x": 11, "y": 0},
+                {"w": 1, "x": 0, "y": 1},
+                {"w": 1, "x": 1, "y": 1},
+                {"w": 1, "x": 2, "y": 1},
+                {"w": 1, "x": 3, "y": 1},
+                {"w": 1, "x": 4, "y": 1},
+                {"w": 1, "x": 5, "y": 1},
+                {"w": 1, "x": 6, "y": 1},
+                {"w": 1, "x": 7, "y": 1},
+                {"w": 1, "x": 8, "y": 1},
+                {"w": 1, "x": 9, "y": 1},
+                {"w": 1, "x": 10, "y": 1},
+                {"w": 1, "x": 11, "y": 1},
+                {"w": 1, "x": 0, "y": 2},
+                {"w": 1, "x": 1, "y": 2},
+                {"w": 1, "x": 2, "y": 2},
+                {"w": 1, "x": 3, "y": 2},
+                {"w": 1, "x": 4, "y": 2},
+                {"w": 1, "x": 5, "y": 2},
+                {"w": 1, "x": 6, "y": 2},
+                {"w": 1, "x": 7, "y": 2},
+                {"w": 1, "x": 8, "y": 2},
+                {"w": 1, "x": 9, "y": 2},
+                {"w": 1, "x": 10, "y": 2},
+                {"w": 1, "x": 11, "y": 2},
+                {"w": 1, "x": 0, "y": 3},
+                {"w": 1, "x": 1, "y": 3},
+                {"w": 1, "x": 2, "y": 3},
+                {"w": 1, "x": 3, "y": 3},
+                {"w": 1, "x": 4, "y": 3},
+                {"w": 1, "x": 5, "y": 3},
+                {"w": 1, "x": 6, "y": 3},
+                {"w": 1, "x": 7, "y": 3},
+                {"w": 1, "x": 8, "y": 3},
+                {"w": 1, "x": 9, "y": 3},
+                {"w": 1, "x": 10, "y": 3},
+                {"w": 1, "x": 11, "y": 3},
+                {"w": 1, "x": 0, "y": 4},
+                {"w": 1, "x": 1, "y": 4},
+                {"w": 1, "x": 2, "y": 4},
+                {"w": 1, "x": 3, "y": 4},
+                {"w": 1, "x": 4, "y": 4},
+                {"w": 1, "x": 5, "y": 4},
+                {"w": 1, "x": 6, "y": 4},
+                {"w": 1, "x": 7, "y": 4},
+                {"w": 1, "x": 8, "y": 4},
+                {"w": 1, "x": 9, "y": 4},
+                {"w": 1, "x": 10, "y": 4},
+                {"w": 1, "x": 11, "y": 4}
+            ]
+        },
+        "LAYOUT_ortho_5x12_1x2uC": {
+            "key_count": 59,
+            "layout": [
+                {"w": 1, "x": 0, "y": 0},
+                {"w": 1, "x": 1, "y": 0},
+                {"w": 1, "x": 2, "y": 0},
+                {"w": 1, "x": 3, "y": 0},
+                {"w": 1, "x": 4, "y": 0},
+                {"w": 1, "x": 5, "y": 0},
+                {"w": 1, "x": 6, "y": 0},
+                {"w": 1, "x": 7, "y": 0},
+                {"w": 1, "x": 8, "y": 0},
+                {"w": 1, "x": 9, "y": 0},
+                {"w": 1, "x": 10, "y": 0},
+                {"w": 1, "x": 11, "y": 0},
+                {"w": 1, "x": 0, "y": 1},
+                {"w": 1, "x": 1, "y": 1},
+                {"w": 1, "x": 2, "y": 1},
+                {"w": 1, "x": 3, "y": 1},
+                {"w": 1, "x": 4, "y": 1},
+                {"w": 1, "x": 5, "y": 1},
+                {"w": 1, "x": 6, "y": 1},
+                {"w": 1, "x": 7, "y": 1},
+                {"w": 1, "x": 8, "y": 1},
+                {"w": 1, "x": 9, "y": 1},
+                {"w": 1, "x": 10, "y": 1},
+                {"w": 1, "x": 11, "y": 1},
+                {"w": 1, "x": 0, "y": 2},
+                {"w": 1, "x": 1, "y": 2},
+                {"w": 1, "x": 2, "y": 2},
+                {"w": 1, "x": 3, "y": 2},
+                {"w": 1, "x": 4, "y": 2},
+                {"w": 1, "x": 5, "y": 2},
+                {"w": 1, "x": 6, "y": 2},
+                {"w": 1, "x": 7, "y": 2},
+                {"w": 1, "x": 8, "y": 2},
+                {"w": 1, "x": 9, "y": 2},
+                {"w": 1, "x": 10, "y": 2},
+                {"w": 1, "x": 11, "y": 2},
+                {"w": 1, "x": 0, "y": 3},
+                {"w": 1, "x": 1, "y": 3},
+                {"w": 1, "x": 2, "y": 3},
+                {"w": 1, "x": 3, "y": 3},
+                {"w": 1, "x": 4, "y": 3},
+                {"w": 1, "x": 5, "y": 3},
+                {"w": 1, "x": 6, "y": 3},
+                {"w": 1, "x": 7, "y": 3},
+                {"w": 1, "x": 8, "y": 3},
+                {"w": 1, "x": 9, "y": 3},
+                {"w": 1, "x": 10, "y": 3},
+                {"w": 1, "x": 11, "y": 3},
+                {"w": 1, "x": 0, "y": 4},
+                {"w": 1, "x": 1, "y": 4},
+                {"w": 1, "x": 2, "y": 4},
+                {"w": 1, "x": 3, "y": 4},
+                {"w": 1, "x": 4, "y": 4},
+                {"w": 2, "x": 5, "y": 4},
+                {"w": 1, "x": 7, "y": 4},
+                {"w": 1, "x": 8, "y": 4},
+                {"w": 1, "x": 9, "y": 4},
+                {"w": 1, "x": 10, "y": 4},
+                {"w": 1, "x": 11, "y": 4}
+            ]
+        },
+        "LAYOUT_ortho_5x12_2x2u": {
+            "key_count": 58,
+            "layout": [
+                {"w": 1, "x": 0, "y": 0},
+                {"w": 1, "x": 1, "y": 0},
+                {"w": 1, "x": 2, "y": 0},
+                {"w": 1, "x": 3, "y": 0},
+                {"w": 1, "x": 4, "y": 0},
+                {"w": 1, "x": 5, "y": 0},
+                {"w": 1, "x": 6, "y": 0},
+                {"w": 1, "x": 7, "y": 0},
+                {"w": 1, "x": 8, "y": 0},
+                {"w": 1, "x": 9, "y": 0},
+                {"w": 1, "x": 10, "y": 0},
+                {"w": 1, "x": 11, "y": 0},
+                {"w": 1, "x": 0, "y": 1},
+                {"w": 1, "x": 1, "y": 1},
+                {"w": 1, "x": 2, "y": 1},
+                {"w": 1, "x": 3, "y": 1},
+                {"w": 1, "x": 4, "y": 1},
+                {"w": 1, "x": 5, "y": 1},
+                {"w": 1, "x": 6, "y": 1},
+                {"w": 1, "x": 7, "y": 1},
+                {"w": 1, "x": 8, "y": 1},
+                {"w": 1, "x": 9, "y": 1},
+                {"w": 1, "x": 10, "y": 1},
+                {"w": 1, "x": 11, "y": 1},
+                {"w": 1, "x": 0, "y": 2},
+                {"w": 1, "x": 1, "y": 2},
+                {"w": 1, "x": 2, "y": 2},
+                {"w": 1, "x": 3, "y": 2},
+                {"w": 1, "x": 4, "y": 2},
+                {"w": 1, "x": 5, "y": 2},
+                {"w": 1, "x": 6, "y": 2},
+                {"w": 1, "x": 7, "y": 2},
+                {"w": 1, "x": 8, "y": 2},
+                {"w": 1, "x": 9, "y": 2},
+                {"w": 1, "x": 10, "y": 2},
+                {"w": 1, "x": 11, "y": 2},
+                {"w": 1, "x": 0, "y": 3},
+                {"w": 1, "x": 1, "y": 3},
+                {"w": 1, "x": 2, "y": 3},
+                {"w": 1, "x": 3, "y": 3},
+                {"w": 1, "x": 4, "y": 3},
+                {"w": 1, "x": 5, "y": 3},
+                {"w": 1, "x": 6, "y": 3},
+                {"w": 1, "x": 7, "y": 3},
+                {"w": 1, "x": 8, "y": 3},
+                {"w": 1, "x": 9, "y": 3},
+                {"w": 1, "x": 10, "y": 3},
+                {"w": 1, "x": 11, "y": 3},
+                {"w": 1, "x": 0, "y": 4},
+                {"w": 1, "x": 1, "y": 4},
+                {"w": 1, "x": 2, "y": 4},
+                {"w": 1, "x": 3, "y": 4},
+                {"w": 2, "x": 4, "y": 4},
+                {"w": 2, "x": 6, "y": 4},
+                {"w": 1, "x": 8, "y": 4},
+                {"w": 1, "x": 9, "y": 4},
+                {"w": 1, "x": 10, "y": 4},
+                {"w": 1, "x": 11, "y": 4}
+            ]
+        }
+    }
+}
index 4c8fb153c577b495992dbe1dae5bf654c1884c83..783c188185d4fe1586c14f0b9f07347ca82122d8 100644 (file)
@@ -1,4 +1,6 @@
-# insertsnideremarks' Kinesis Keymap
+## I've changed my folder name to match my GitHub username.  Please see https://github.com/qmk/qmk_firmware/tree/master/keyboards/kinesis/keymaps/tuesdayjohn for my current keymap files.
+
+## insertsnideremarks' Kinesis Keymap
 
 These layouts are derived from what I was using on my Kinesis Contoured keyboards with Hasu's USB-USB TMK converters.  With the move to QMK via Stapelberg replacement controller, I've cleaned up the layouts a bit while adding more functions and layers.
 
diff --git a/keyboards/kinesis/keymaps/tuesdayjohn/config.h b/keyboards/kinesis/keymaps/tuesdayjohn/config.h
new file mode 100644 (file)
index 0000000..ebed17f
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+
+// place overrides here
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_TERM 175
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/kinesis/keymaps/tuesdayjohn/keymap.c b/keyboards/kinesis/keymaps/tuesdayjohn/keymap.c
new file mode 100644 (file)
index 0000000..0cdb7d5
--- /dev/null
@@ -0,0 +1,427 @@
+#include QMK_KEYBOARD_H 
+
+extern keymap_config_t keymap_config;
+
+enum kinesis_layers {
+  _COLEMAK,   // Colemak (default layer)
+  _QWERTY,    // QWERTY
+  _GAMING,    // Gaming/vanilla toggle layer (limited dual-role keys and layer access)
+  _NUMBERS,   // Numbers & Symbols
+  _NUMBERS2,  // Numbers & Symbols 2 (identical as _NUMBERS; basically used for tri-layer access to _ADJUST)
+  _FUNCTION,  // Function
+  _FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
+  _NUMPAD,    // Numpad
+  _ADJUST,    // Adjust layer (accessed via tri-layer feature)
+  _ADJUST2    // Second Adjust layer (accessed outside of tri-layer feature)
+};
+
+enum kinesis_keycodes {
+  COLEMAK = SAFE_RANGE,
+  QWERTY,
+  GAMING
+};
+    
+//Tap Dance Declarations
+enum {
+  ADJ = 0,
+  LBCB,
+  RBCB,
+  EQPL,
+  PLEQ,
+  MNUN,
+  SLAS,
+  GVTL,
+  PPEQ,
+  PMUN,
+  PSPA
+};
+
+void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 2) {
+     layer_on(_ADJUST2);
+     set_oneshot_layer(_ADJUST2, ONESHOT_START);
+  }
+}
+void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 2) {
+     layer_off(_ADJUST2);
+     clear_oneshot_layer_state(ONESHOT_PRESSED);
+  }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+[ADJ]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset),  //  Double-tap to activate Adjust layer via oneshot layer 
+[LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR),  // Left bracket on a single-tap, left brace on a double-tap
+[RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR),  // Right bracket on a single-tap, right brace on a double-tap
+[EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),   // Plus sign on a single-tap, equal sign on a double-tap
+[PLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL),   // Equal sign on a single-tap, plus sign on a double-tap
+[MNUN] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),  // Minus sign on a single-tap, underscore on a double-tap
+[SLAS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR),  // Slash in a single-tap, asterisk in a double-tap
+[GVTL] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD),   // Grave on a single-tap, tilde on a double-tap
+[PPEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL),   // Numpad plus sign on a single-tap, equal sign on a double-tap
+[PMUN] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS),  // Numpad minus sign on a single-tap, underscore on a double-tap
+[PSPA] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST)   // Numpad slash on a single-tap, numpad asterisk on a double-tap
+};
+
+//Aliases for longer keycodes
+#define NUMPAD  TG(_NUMPAD)
+#define ADJUST  MO(_ADJUST2)
+#define SPCFN   LT(_FUNCTION, KC_SPC)
+#define BSPCFN  LT(_FUNCTION2, KC_BSPC)
+#define ENTNS   LT(_NUMBERS, KC_ENT)
+#define DELNS   LT(_NUMBERS2, KC_DEL)
+#define CTLESC  CTL_T(KC_ESC)
+#define ALTAPP  ALT_T(KC_APP)
+#define CTL_A   LCTL(KC_A)
+#define CTL_C   LCTL(KC_C)
+#define CTL_V   LCTL(KC_V)
+#define CTL_X   LCTL(KC_X)
+#define CTL_Z   LCTL(KC_Z)
+#define CTL_Y   LCTL(KC_Y)
+#define CA_TAB  LCA(KC_TAB)
+#define HYPER   ALL_T(KC_NO)
+#define TD_ADJ  TD(ADJ)
+#define TD_LBCB TD(LBCB)
+#define TD_RBCB TD(RBCB)
+#define TD_EQPL TD(EQPL)
+#define TD_PLEQ TD(PLEQ)
+#define TD_MNUN TD(MNUN)
+#define TD_SLAS TD(SLAS)
+#define TD_GVTL TD(GVTL)
+#define TD_PPEQ TD(PPEQ)
+#define TD_PMUN TD(PMUN)
+#define TD_PSPA TD(PSPA)
+#define NKROTG  MAGIC_TOGGLE_NKRO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+Colemak
+(Default layer; keys separated by "/" tap for first, hold for second; uses Space Cadet Shifts)
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|  ESC |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |                                     |  F9  |  F10 |  F11 |  F12 |PrtScr|ScrLck| Pause|Numpad|Adjust|
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|    =    |    1   |    2   |    3   |    4   |    5   |                                                     |    6   |    7   |    8   |    9   |    0   |    -    |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|   Tab   |    Q   |    W   |    F   |    P   |    G   |                                                     |    J   |    L   |    U   |    Y   |    ;   |    \    |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+| ESC/Ctrl|    A   |    R   |    S   |    T   |    D   |                                                     |    H   |    N   |    E   |    I   |    O   |    '    |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+| SC Shift|    Z   |    X   |    C   |    V   |    B   |                                                     |    K   |    M   |    ,   |    .   |    /   | SC Shift|
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |   Ins  |    `   |    [   |    ]   |                                                                       |  Left  |  Down  |   Up   |  Right |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          | ESC/Ctl|  Hyper |                 |  RAlt  |  RCtl  |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |  Space |  Enter | App/Alt|                 |  RGUI  | Delete |  Bspc  |
+                                                 |    /   |    /   |--------|                 |--------|    /   |    /   |
+                                                 |   Fn   | Number |  Bspc  |                 |  Enter | Number2|   Fn2  |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_COLEMAK] = LAYOUT_pretty(
+  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, NUMPAD,  ADJUST,
+  KC_EQL,  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_F,    KC_P,    KC_G,                                                          KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSLS,
+  CTLESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,                                                          KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
+  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                                                          KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,
+           KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,                                                                         KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
+                                                        CTLESC,  HYPER,                     KC_RALT, KC_RCTL,
+                                                                 ALTAPP,                    KC_RGUI,
+                                               SPCFN,   ENTNS,   KC_BSPC,                   KC_ENT,  DELNS,   BSPCFN
+),
+
+/*
+QWERTY
+(Keys separated by "/" tap for first, hold for second; uses Space Cadet Shifts)
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|  ESC |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |                                     |  F9  |  F10 |  F11 |  F12 |PrtScr|ScrLck| Pause|Numpad|Adjust|
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|    =    |    1   |    2   |    3   |    4   |    5   |                                                     |    6   |    7   |    8   |    9   |    0   |    -    |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|   Tab   |    Q   |    W   |    E   |    R   |    T   |                                                     |    Y   |    U   |    I   |    O   |    P   |    \    |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+| ESC/Ctrl|    A   |    S   |    D   |    F   |    G   |                                                     |    H   |    J   |    K   |    L   |    ;   |    '    |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+| SC Shift|    Z   |    X   |    C   |    V   |    B   |                                                     |    N   |    M   |    ,   |    .   |    /   | SC Shift|
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |   Ins  |    `   |    [   |    ]   |                                                                       |  Left  |  Down  |   Up   |  Right |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          | ESC/Ctl|  Hyper |                 |  RAlt  |  RCtl  |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |  Space |  Enter | App/Alt|                 |  RGUI  | Delete |  Bspc  |
+                                                 |    /   |    /   |--------|                 |--------|    /   |    /   |
+                                                 |   Fn   | Number |  Bspc  |                 |  Enter | Number2|   Fn2  |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_QWERTY] = LAYOUT_pretty(
+  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, NUMPAD,  ADJUST,
+  KC_EQL,  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,
+  CTLESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                                                          KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                                                          KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,
+           KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,                                                                         KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
+                                                        CTLESC,  HYPER,                     KC_RALT, KC_RCTL,
+                                                                 ALTAPP,                    KC_RGUI,
+                                               SPCFN,   ENTNS,   KC_BSPC,                   KC_ENT,  DELNS,   BSPCFN
+),
+
+/* 
+Numbers/Symbols layer
+(Multiple characters: single-tap for first, double-tap for second)
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|      |      |      |      |      |      |      |      |      |                                     |      |      |      |      |      |      |      |      |      |
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|   F12   |   F1   |   F2   |   F3   |   F4   |   F5   |                                                     |   F6   |   F7   |   F8   |   F9   |   F10  |   F11   |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |    6   |    7   |    8   |    9   |    0   |                                                     |    ^   |    &   |    *   |    (   |    )   |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |    1   |    2   |    3   |    4   |    5   |                                                     |    !   |    @   |    #   |    $   |    %   |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |    .   |   / *  |   - _  |   + =  |                                                     |   ` ~  |   [ {  |   ] }  |        |        |         |
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |    (   |    )   |   [ {  |   ] }  |                                                                       |        |        |        |        |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          |        |        |                 |        |        |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |        |        |        |                 |        |        |        |
+                                                 |        |        |--------|                 |--------|        |        |
+                                                 |        |        |        |                 |        |        |        |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_NUMBERS] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  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_6,    KC_7,    KC_8,    KC_9,    KC_0,                                                          KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, 
+  _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                                                          KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, 
+  _______, _______, KC_DOT,  TD_SLAS, TD_MNUN, TD_PLEQ,                                                       TD_GVTL, TD_LBCB, TD_RBCB, _______, _______, _______,
+           KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB,                                                                         _______, _______, _______, _______, 
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+),
+
+[_NUMBERS2] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  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_6,    KC_7,    KC_8,    KC_9,    KC_0,                                                          KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, 
+  _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                                                          KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, 
+  _______, _______, KC_DOT,  TD_SLAS, TD_MNUN, TD_PLEQ,                                                       TD_GVTL, TD_LBCB, TD_RBCB, _______, _______, _______,
+           KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB,                                                                         _______, _______, _______, _______, 
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+),
+
+/*
+Function layer
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|      |      |      |      |      |      |      |      |      |                                     |      |      |      |      |      |      |      |      |      |
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|   F12   |   F1   |   F2   |   F3   |   F4   |   F5   |                                                     |   F6   |   F7   |   F8   |   F9   |   F10  |   F11   |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |        |   Up   |        |        |                                                     |        |        |   Up   | Ctrl+Y |        |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         | Ctrl+A |  Left  |  Down  |  Right | C+A+Tab|                                                     |  PgUp  |  Left  |  Down  |  Right |  Home  |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         | Ctrl+Z | Ctrl+X | Ctrl+C | Ctrl+V |  Bspc  |                                                     |  PgDn  |  Mute  |  Vol-  |  Vol+  |   End  |         |
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |        |        |        |        |                                                                       |  Prev  |  Play  |  Next  |  Stop  |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          |        |        |                 |        |        |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |        |        |        |                 |        |        |        |
+                                                 |        |        |--------|                 |--------|        |        |
+                                                 |        |        |        |                 |        |        |        |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_FUNCTION] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  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_UP,   _______, _______,                                                       _______, _______, KC_UP,   CTL_Y,   _______, _______,
+  _______, CTL_A,   KC_LEFT, KC_DOWN, KC_RGHT, CA_TAB,                                                        KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+  _______, CTL_Z,   CTL_X,   CTL_C,   CTL_V,   KC_BSPC,                                                       KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END,  _______,
+           _______, _______, _______, _______,                                                                         KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+),
+
+[_FUNCTION2] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  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_UP,   _______, _______,                                                       _______, _______, KC_UP,   CTL_Y,   _______, _______,
+  _______, CTL_A,   KC_LEFT, KC_DOWN, KC_RGHT, CA_TAB,                                                        KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+  _______, CTL_Z,   CTL_X,   CTL_C,   CTL_V,   KC_BSPC,                                                       KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END,  _______,
+           _______, _______, _______, _______,                                                                         KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+),
+
+/*
+Numpad layer
+(Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|      |      |      |      |      |      |      |      |      |                                     |      |      |      |      |      |      |      |      |      |
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|         | NumLock|        |        |        |        |                                                     |   Tab  | NumLock|  KP /  |  KP *  |  KP -  |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |  KP 6  |  KP 7  |  KP 8  |  KP 9  |  KP 0  |                                                     |        |  KP 7  |  KP 8  |  KP 9  |  KP +  |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |  KP 1  |  KP 2  |  KP 3  |  KP 4  |  KP 5  |                                                     |        |  KP 4  |  KP 5  |  KP 6  |   =    |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |  KP .  | KP/KP* |  KP- _ |  KP+ = |                                                     |        |  KP 1  |  KP 2  |  KP 3  | KP Ent |         |
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |    (   |    )   |   [ {  |   ] }  |                                                                       |        |  KP 0  |  KP .  | KP Ent |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          |        |        |                 |        |        |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |        |        |        |                 |        |        |        |
+                                                 |        |        |--------|                 |--------|        |        |
+                                                 |        |        |        |                 |        |        |        |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_NUMPAD] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, KC_NLCK, _______, _______, _______, _______,                                                       KC_TAB,  KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
+  _______, KC_P6,   KC_P7,   KC_P8,   KC_P9,   KC_P0,                                                         _______, KC_P7,   KC_P8,   KC_P9,   KC_PPLS, _______,
+  _______, KC_P1,   KC_P2,   KC_P3,   KC_P4,   KC_P5,                                                         _______, KC_P4,   KC_P5,   KC_P6,   KC_EQL,  _______,
+  _______, _______, KC_PDOT, TD_PSPA, TD_MNUN, TD_PPEQ,                                                       _______, KC_P1,   KC_P2,   KC_P3,   KC_PENT, _______,
+           KC_LPRN, KC_RPRN, TD_LBCB, TD_RBCB,                                                                         _______, KC_P0,   KC_PDOT, KC_PENT,
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+),
+
+/*
+Gaming
+(Toggle gaming layer with limited dual-role keys and layer access; NKRO turned on by default; Ent/NS + Delete/Numbers2 to access Adjust layer)
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|      |      |      |      |      |      |      |      |      |                                     |      |      |      |      |      |      |      |      |      |
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|         |        |        |        |        |        |                                                     |        |        |        |        |        |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |        |        |        |        |                                                     |        |        |        |        |        |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|  LCtrl  |        |        |        |        |        |                                                     |        |        |        |        |        |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|  Shift  |        |        |        |        |        |                                                     |        |        |        |        |        |  Shift  |
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |        |        |        |        |                                                                       |        |        |        |        |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          |   ESC  |xxxxxxxx|                 |  RAlt  |  RCtl  |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |        |        |  LAlt  |                 |  RGUI  | Delete |  Bspc  |
+                                                 |  Space |  Enter |--------|                 |--------|    /   |    /   |
+                                                 |        |        |  Bspc  |                 |Enter/NS| Number2|   Fn2  |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_GAMING] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+  KC_LCTL, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+  KC_LSFT, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, KC_RSFT,
+           _______, _______, _______, _______,                                                                         _______, _______, _______, _______,
+                                                        KC_ESC,  XXXXXXX,                   _______, _______,
+                                                                 KC_LALT,                   _______,
+                                               KC_SPC,  KC_ENT,  _______,                   ENTNS,   _______, _______
+),
+
+/*
+Adjust layer
+(Press and hold Adjust key on the function row or Enter/Number + Delete/Number2 to access; Numpad and NKRO are on toggle)
+,--------------------------------------------------------------.                                     ,--------------------------------------------------------------.
+|      |      |      |      |      |      |      |      |      |                                     |      |      |      |      |      |      |      |      |      |
+`--------------------------------------------------------------'                                     `--------------------------------------------------------------'
+,------------------------------------------------------.                                                     ,------------------------------------------------------.
+|         | Colemak| QWERTY |        | Gaming |        |                                                     | Numpad |        |        |        |        |  RESET  |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |        |        |        |        |                                                     |        |        |        |        |        |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |        |        |        |        |                                                     |        |  NKRO  |        |        |        |         |
+|---------+--------+--------+--------+--------+--------|                                                     |--------+--------+--------+--------+--------+---------|
+|         |        |        |        |        |        |                                                     |        |        |        |        |        |         |
+`---------+--------+--------+--------+--------+--------'                                                     `--------+--------+--------+--------+--------+---------'
+          |        |        |        |        |                                                                       |        |        |        |        |
+          `-----------------------------------'                                                                       `-----------------------------------'
+                                                          ,-----------------.                 ,-----------------.
+                                                          |        |        |                 |        |        |
+                                                 ,--------+--------+--------|                 |--------+--------+--------.
+                                                 |        |        |        |                 |        |        |        |
+                                                 |        |        |--------|                 |--------|        |        |
+                                                 |        |        |        |                 |        |        |        |
+                                                 `--------------------------'                 `--------------------------' 
+*/
+[_ADJUST] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, COLEMAK, QWERTY,  _______, GAMING,  _______,                                                       NUMPAD,  _______, _______, _______, _______, RESET,
+  _______, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______,                                                       _______, NKROTG,  _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+           _______, _______, _______, _______,                                                                         _______, _______, _______, _______, 
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+),
+
+[_ADJUST2] = LAYOUT_pretty(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, COLEMAK, QWERTY,  _______, GAMING,  _______,                                                       NUMPAD,  _______, _______, _______, _______, RESET,
+  _______, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______,                                                       _______, NKROTG,  _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______,                                                       _______, _______, _______, _______, _______, _______,
+           _______, _______, _______, _______,                                                                         _______, _______, _______, _______, 
+                                                        _______, _______,                   _______, _______,
+                                                                 _______,                   _______,
+                                               _______, _______, _______,                   _______, _______, _______
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+       case COLEMAK:
+      if (record->event.pressed) {
+//        persistent_default_layer_set(1UL << _COLEMAK);
+        default_layer_set(1UL << _COLEMAK);
+        layer_move (_COLEMAK);
+        keymap_config.nkro = 0;
+         }
+      return false;
+      break;
+    case QWERTY:
+      if (record->event.pressed) {
+//        persistent_default_layer_set(1UL << _QWERTY);
+        default_layer_set(1UL << _QWERTY);
+        layer_move (_QWERTY);
+        keymap_config.nkro = 0;
+      }
+      return false;
+      break;
+    case GAMING:
+      if (record->event.pressed) {
+        layer_invert (_GAMING);
+        layer_off (_NUMPAD);
+        keymap_config.nkro = 1;
+         }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/kinesis/keymaps/tuesdayjohn/readme.md b/keyboards/kinesis/keymaps/tuesdayjohn/readme.md
new file mode 100644 (file)
index 0000000..88af87e
--- /dev/null
@@ -0,0 +1,219 @@
+# TuesdayJohn's Kinesis Keymap
+
+These layouts are derived from what I was using on my Kinesis Contoured keyboards with Hasu's USB-USB TMK converters.  With the move to QMK via Stapelberg replacement controller, I've cleaned up the layouts a bit while adding more functions and layers.
+
+There are minor changes in the base keywell layout of non-alpha keys (e.g., CapsLock is ESC/Ctl, arrow clusters on one side), while the thumb clusters deviate more from the default layout.
+
+Changes to the thumb clusters include: 
+* The navigations keys moved to function layers.
+* The function of 2u keys have been reversed - I've always used space with my left thumb, and I find it more helpful to have quick and easy access to Space and Enter while using my mouse/trackball.
+* Backspace have been duplicated on both clusters.  As with Space and Backspace, I find it helpful to have quick and easy access to Backspace while using my mouse/trackball.
+* The 2u keys serve dual function as momentary layer switchers.
+
+I've largely left the function keys untouched, with the intension of not using them often.  They are neither easy to use nor reach due to their locations and size, and Kinesis used not-so-great rubber dome switches for them (Advantage model and earlier).  Kinesis have since replaced the keys with Cherry ML switches on Advantage2, but did not resolve the issues of size or location.  Additionally, leaving the function keys unused here makes it easier for me to adapt the keymaps to my other keyboards, most of which do not have physical function keys.
+
+I use Colemak as my default layout.  I've included QWERTY here as well.
+
+Additionally, there is a gaming layer on toggle.  This layer is turned top of either Colemak or QWERTY and have limited access to the Function or Numbers/Symbols layers.  Additionally, NKRO is turned on when the layer is turned on.
+
+Persistent default layer has been enabled for Colemak and QWERTY.  The gaming/vanilla Colemak and QWERTY can be set as default layer, but will not be persistent.
+
+## Future plans
+
+* Add status LEDs to the Stapelberg PCB (usually used for Caps Lock, Num Lock, and Scroll Lock) to use as layer indicators.
+* Add a speaker now that QMK supports additional pins for audio use.
+* Utilize the leftover spots on the key matrix, as well as unused pins on Teensy++ 2.0 to run macropad and/or foot pedals.
+
+
+## Layers
+
+### Function Keys on all layers
+- 'Numpd' toggles the Numpad layer
+- 'Adjst' is a momentary layer key to access the Adjust layer
+
+```
+,-----------------------------------------------------. ,----------------------------------------------------.
+| ESC |  F1 |  F2 |  F3 |  F4 |  F5 |  F6 |  F7 |  F8 | | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
+`-----------------------------------------------------' `----------------------------------------------------'
+```
+
+### Colemak
+- Default layer
+- Keys separated by "/" tap for first, hold for second
+- Uses [Space Cadet Shifts](https://beta.docs.qmk.fm/features/feature_space_cadet)
+
+```
+,------------------------------------------------. ,------------------------------------------------.
+|    =   |   1   |   2   |   3   |   4   |   5   | |   6   |   7   |   8   |   9   |   0   |    -   |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|   Tab  |   Q   |   W   |   F   |   P   |   G   | |   J   |   L   |   U   |   Y   |   ;   |    \   |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|ESC/Ctrl|   A   |   R   |   S   |   T   |   D   | |   H   |   N   |   E   |   I   |   O   |    '   |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|SC Shift|   Z   |   X   |   C   |   V   |   B   | |   K   |   M   |   ,   |   .   |   /   |SC Shift|
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |  Ins  |   `   |   [   |   ]   |                 |  Left |  Down |   Up  | Right |
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |ESC/Ctl| Hyper | |  RAlt |  RCtl |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         | Space | Enter |App/Alt| |  RGUI | Delete|  Bspc |
+                         |   /   |   /   |-------| |-------|   /   |   /   |
+                         |  Fn   | Number|  Bspc | | Enter |Number2|  Fn2  |
+                         `-----------------------' `-----------------------' 
+```    
+       
+### QWERTY
+- Keys separated by "/" tap for first, hold for second
+- Uses [Space Cadet Shifts](https://beta.docs.qmk.fm/features/feature_space_cadet)
+
+```
+,------------------------------------------------. ,------------------------------------------------.
+|    =   |   1   |   2   |   3   |   4   |   5   | |   6   |   7   |   8   |   9   |   0   |    -   |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|   Tab  |   Q   |   W   |   E   |   R   |   T   | |   Y   |   U   |   I   |   O   |   P   |    \   |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|ESC/Ctrl|   A   |   S   |   D   |   F   |   G   | |   H   |   J   |   K   |   L   |   ;   |    '   |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|SC Shift|   Z   |   X   |   C   |   V   |   B   | |   N   |   M   |   ,   |   .   |   /   |SC Shift|
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |  Ins  |   `   |   [   |   ]   |                 |  Left |  Down |   Up  | Right |
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |ESC/Ctl| Hyper | |  RAlt |  RCtl |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         | Space | Enter |App/Alt| |  RGUI | Delete|  Bspc |
+                         |   /   |   /   |-------| |-------|   /   |   /   |
+                         |  Fn   | Number|  Bspc | | Enter |Number2|  Fn2  |
+                         `-----------------------' `-----------------------' 
+```    
+
+### Numbers & Symbols layer
+- Momentary layer
+- Multiple characters: Single-tap for first, double-tap for second
+
+```
+,------------------------------------------------. ,------------------------------------------------.
+|   F12  |   F1  |   F2  |   F3  |   F4  |   F5  | |   F6  |   F7  |   F8  |   F9  |  F10  |   F11  |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |   6   |   7   |   8   |   9   |   0   | |   ^   |   &   |   *   |   (   |   )   |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |   1   |   2   |   3   |   4   |   5   | |   !   |   @   |   #   |   $   |   %   |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |   .   |  / *  |  - _  |  + =  | |  ` ~  |  [ {  |  ] }  |       |       |        |
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |   (   |   )   |  [ {  |  ] }  |                 |       |       |       |       |
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |       |       | |       |       |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         |       |       |       | |       |       |       |
+                         |       |       |-------| |-------|       |       |
+                         |       |       |       | |       |       |       |
+                         `-----------------------' `-----------------------' 
+```    
+
+### Function layer
+- Momentary layer
+       
+```
+,------------------------------------------------. ,------------------------------------------------.
+|   F12  |   F1  |   F2  |   F3  |   F4  |   F5  | |   F6  |   F7  |   F8  |   F9  |  F10  |   F11  |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |       |   Up  |       |       | |       |       |   Up  | Ctrl+Y|       |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        | Ctrl+A|  Left |  Down | Right | C+A+Tb| |  PgUp |  Left |  Down | Right |  Home |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        | Ctrl+Z| Ctrl+X| Ctrl+C| Ctrl+V|  Bspc | |  PgDn |  Mute |  Vol- |  Vol+ |   End |        |
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |       |       |       |       |                 |  Prev |  Play |  Next |  Stop |
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |       |       | |       |       |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         |       |       |       | |       |       |       |
+                         |       |       |-------| |-------|       |       |
+                         |       |       |       | |       |       |       |
+                         `-----------------------' `-----------------------' 
+```    
+
+### Numpad layer
+- Toggle layer
+- Left side duplicates layout from the Numbers layer, just with numpad output
+- Right side layout close to PC numpad layout
+- Multiple characters: Single-tap for first, double-tap for second
+
+```    
+,------------------------------------------------. ,------------------------------------------------.
+|        | NumLk |       |       |       |       | |  Tab  | NumLk |  KP / |  KP * |  KP - |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |  KP 6 |  KP 7 |  KP 8 |  KP 9 |  KP 0 | |       |  KP 7 |  KP 8 |  KP 9 |  KP + |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |  KP 1 |  KP 2 |  KP 3 |  KP 4 |  KP 5 | |       |  KP 4 |  KP 5 |  KP 6 |   =   |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |  KP . | KP/KP*| KP- _ | KP+ = | |       |  KP 1 |  KP 2 |  KP 3 | KP Ent|        |
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |   (   |   )   |  [ {  |  ] }  |                 |  KP 0 |   ,   |  KP . | KP Ent|
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |       |       | |       |       |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         |       |       |       | |       |       |       |
+                         |       |       |-------| |-------|       |       |
+                         |       |       |       | |       |       |       |
+                         `-----------------------' `-----------------------' 
+```    
+
+### Gaming
+- Toggle layer with limited access to Function or Numbers layers
+- Mainly used for gaming
+- NKRO turned on by default
+- Press and hold Ent/NS + Delete/Numbers2 to access Adjust layer
+
+```
+,------------------------------------------------. ,------------------------------------------------.
+|        |       |       |       |       |       | |       |       |       |       |       |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |       |       |       |       | |       |       |       |       |       |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|  LCtrl |       |       |       |       |       | |       |       |       |       |       |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|  Shift |       |       |       |       |       | |       |       |       |       |       |  Shift |
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |       |       |       |       |                 |       |       |       |       |
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |  ESC  |xxxxxxx| |  RAlt |  RCtl |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         |       |       |  LAlt | |  RGUI | Delete|  Bspc |
+                         | Space | Enter |-------| |-------|   /   |   /   |
+                         |       |       |  Bspc | | Ent/NS|Number2|  Fn2  |
+                         `-----------------------' `-----------------------' 
+```    
+       
+### Adjust layer
+- Momentary layer
+- Press and hold Adjust key on the function row or Enter/Number + Delete/Number2 to access
+- Gaming, Numpad, and NKRO are on toggle
+
+```
+,------------------------------------------------. ,------------------------------------------------.
+|        |Colemak| QWERTY|       | Gaming|       | | Numpad|       |       |       |       |  RESET |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |       |       |       |       | |       |       |       |       |       |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |       |       |       |       | |       |  NKRO |       |       |       |        |
+|--------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+--------|
+|        |       |       |       |       |       | |       |       |       |       |       |        |
+`--------+-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------+--------'
+         |       |       |       |       |                 |       |       |       |       |
+         `-------------------------------'                 `-------------------------------'
+                                 ,---------------. ,---------------.
+                                 |       |       | |       |       |
+                         ,-------+-------+-------| |-------+-------+-------.
+                         |       |       |       | |       |       |       |
+                         |       |       |-------| |-------|       |       |
+                         |       |       |       | |       |       |       |
+                         `-----------------------' `-----------------------' 
+ ```
diff --git a/keyboards/kinesis/keymaps/tuesdayjohn/rules.mk b/keyboards/kinesis/keymaps/tuesdayjohn/rules.mk
new file mode 100644 (file)
index 0000000..cf63c44
--- /dev/null
@@ -0,0 +1,19 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # 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 = yes        # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight. 
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes      # Enable Tap Dancing function
diff --git a/keyboards/lazydesigners/dimple/config.h b/keyboards/lazydesigners/dimple/config.h
new file mode 100644 (file)
index 0000000..0f7a879
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+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      0x0040
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    LazyDesigners
+#define PRODUCT         Dimple
+#define DESCRIPTION     A 40% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, D4, D6, D7, B4, B5, B6, C6, C7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* RBG underglow */
+#define RGB_DI_PIN B7
+#ifdef RGB_DI_PIN
+       #define RGBLIGHT_ANIMATIONS
+       #define RGBLIGHT_SLEEP
+       #define RGBLED_NUM 50
+       /* #define RGBLIGHT_HUE_STEP 8 */
+       /* #define RGBLIGHT_SAT_STEP 8 */
+       /* #define RGBLIGHT_VAL_STEP 8 */
+#endif
+
+/* CapsLock LED */
+#define BACKLIGHT_PIN E6
+#ifdef BACKLIGHT_PIN
+       #define BACKLIGHT_LEVELS 6
+#endif
diff --git a/keyboards/lazydesigners/dimple/dimple.c b/keyboards/lazydesigners/dimple/dimple.c
new file mode 100644 (file)
index 0000000..69fb225
--- /dev/null
@@ -0,0 +1,30 @@
+/* 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 "dimple.h"
+
+void dimple_led_on() {
+  writePinHigh(E6);
+}
+
+void dimple_led_off() {
+  writePinLow(E6);
+}
+
+void keyboard_pre_init_kb(void) {
+  // Initialize Caps Lock LED
+  setPinOutput(E6);
+  keyboard_pre_init_user();
+}
diff --git a/keyboards/lazydesigners/dimple/dimple.h b/keyboards/lazydesigners/dimple/dimple.h
new file mode 100644 (file)
index 0000000..ba8a413
--- /dev/null
@@ -0,0 +1,46 @@
+/* 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( \
+       K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210,       \
+       K300,       K302, K303, K304,       K306, K307, K308, K309  \
+) { \
+       { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011 }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  KC_NO }, \
+       { K300,  KC_NO, K302,  K303,  K304,  KC_NO, K306,  K307,  K308,  K309,  KC_NO, KC_NO }  \
+}
+
+
+void dimple_led_on(void);
+void dimple_led_off(void);
diff --git a/keyboards/lazydesigners/dimple/info.json b/keyboards/lazydesigners/dimple/info.json
new file mode 100644 (file)
index 0000000..db5137e
--- /dev/null
@@ -0,0 +1,56 @@
+{
+    "keyboard_name": "Dimple", 
+    "url": "http://lazydesigners.cn", 
+    "maintainer": "Erovia", 
+    "width": 12.5, 
+    "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":"Back<br>Space", "x":11, "y":0, "w":1.5},
+              {"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.25},
+              {"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":"Up", "x":9.75, "y":2},
+              {"label":".", "x":10.75, "y":2, "w":1.75},
+              {"label":"Ctrl", "x":0.75, "y":3},
+              {"label":"Gui", "x":1.75, "y":3},
+              {"label":"Alt", "x":2.75, "y":3},
+              {"label":"Space", "x":3.75, "y":3, "w":2.25},
+              {"label":"Space", "x":6, "y":3, "w":2.75},
+              {"label":"Left", "x":8.75, "y":3},
+              {"label":"Down", "x":9.75, "y":3},
+              {"label":"Right", "x":10.75, "y":3}
+           ]
+        }
+    }
+}
diff --git a/keyboards/lazydesigners/dimple/keymaps/default/keymap.c b/keyboards/lazydesigners/dimple/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..e5a9c84
--- /dev/null
@@ -0,0 +1,136 @@
+/* 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,
+       _LOWER,
+       _RAISE,
+       _ADJUST
+};
+
+// Act as Shift on hold and as CapsLock on tap
+#define SFT_CPS LSFT_T(KC_CAPS)
+// Left space on tap, LOWER on hold
+#define SPC_LOW LT(_LOWER, KC_SPC)
+// Left space on tap, UPPER on hold
+#define SPC_UPR LT(_RAISE, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*
+ * ,---------------------------------------------------------------.
+ * |Esc | Q  | W  | E  | R  | T  | Y  | U  | I  | O  | P  |  Bspc  |
+ * |---------------------------------------------------------------|
+ * | Tab  | A  | S  | D  | F  | G  | H  | J  | K  | L  | '  |Enter |
+ * |---------------------------------------------------------------|
+ * | Shift  | Z  | X  | C  | V  | B  | N  | M  | ,  | Up |    .    |
+ * |---------------------------------------------------------------|
+ *      |Ctrl|Gui |Alt | Spc/Lwr |   Spc/Rse   |Left|Down|Rght|
+ *      `-----------------------------------------------------'
+ */
+
+       [_QWERTY] = LAYOUT(
+               KC_GESC, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+               KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_QUOT, KC_ENT,
+               SFT_CPS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_UP,   KC_DOT,
+               KC_LCTL, KC_LGUI, KC_LALT, SPC_LOW,  SPC_UPR,  KC_LEFT, KC_DOWN, KC_RGHT
+       ),
+
+/*
+ * ,---------------------------------------------------------------.
+ * | ~  | !  | @  | #  | $  | %  | ^  | &  | *  | (  | )  |        |
+ * |---------------------------------------------------------------|
+ * | Del  | F1 | F2 | F3 | F4 | F5 | F6 | _  | +  | {  | }  |  |   |
+ * |---------------------------------------------------------------|
+ * |        | F7 | F8 | F9 |F10 |F11 |F12 |    | ;  |PgUp|   /     |
+ * |---------------------------------------------------------------|
+ *      |    |    |    |         |             |Home|PgDn|End |
+ *      `-----------------------------------------------------'
+ */
+
+       [_LOWER] = LAYOUT(
+               KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_NO,
+               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_NO,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_SCLN, KC_PGUP, KC_SLSH,
+               KC_NO,   KC_NO,   KC_NO,   KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+       ),
+
+/*
+ * ,---------------------------------------------------------------.
+ * | `  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 0  |        |
+ * |---------------------------------------------------------------|
+ * | Ins  | F1 | F2 | F3 | F4 | F5 | F6 | -  | =  | [  | ]  |  \   |
+ * |---------------------------------------------------------------|
+ * |        | F7 | F8 | F9 |F10 |F11 |F12  |    |    |   |         |
+ * |---------------------------------------------------------------|
+ *      |VolD|Mute|VolU|         |             |    |    |    |
+ *      `-----------------------------------------------------'
+ */
+
+       [_RAISE] = LAYOUT(
+               KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_NO,
+               KC_INS,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+               KC_NO,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,   KC_NO,   KC_NO,
+               KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_NO,   KC_NO,   KC_NO
+       ),
+
+/*
+ * ,---------------------------------------------------------------.
+ * |EEPR|RST |    |    |    |    |    |    |    |    |    |        |
+ * |---------------------------------------------------------------|
+ * |      |    |    |    |    |    |    |    |    |    |    |      |
+ * |---------------------------------------------------------------|
+ * |        |    |    |    |    |    |     |    |    |   |         |
+ * |---------------------------------------------------------------|
+ *      |RGB-|RGB |RGB+|         |             |    |    |    |
+ *      `-----------------------------------------------------'
+ */
+
+       [_ADJUST] = LAYOUT(
+               EEP_RST, RESET,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+               KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+               KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+               RGB_VAD, RGB_TOG, RGB_VAI, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO
+       ),
+};
+
+void led_set_user(uint8_t usb_led) {
+if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+       dimple_led_on();
+       } else {
+       dimple_led_off();
+       }
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+       state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+       switch (biton32(state)) {
+               case _LOWER:
+                       rgblight_sethsv_noeeprom(HSV_GREEN);
+                       break;
+               case _RAISE:
+                       rgblight_sethsv_noeeprom(HSV_GOLD);
+                       break;
+               case _ADJUST:
+                       rgblight_sethsv_noeeprom(HSV_RED);
+                       break;
+               default:
+                       rgblight_sethsv_noeeprom(HSV_WHITE);
+                       break;
+       }
+       return state;
+}
diff --git a/keyboards/lazydesigners/dimple/keymaps/default/readme.md b/keyboards/lazydesigners/dimple/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..c334b6c
--- /dev/null
@@ -0,0 +1,60 @@
+# The default keymap for Dimple
+
+**Features**
+
+* Shift acts as CapsLock when tapped  
+* Left space: space on tap, Lower layer on hold  
+* Right space: space on tap, Raise layer on hold  
+* Both space: Adjust layer on hold  
+
+## QWERTY (Normal) Layer
+```
+ ,---------------------------------------------------------------.
+ |Esc | Q  | W  | E  | R  | T  | Y  | U  | I  | O  | P  |  Bspc  |
+ |---------------------------------------------------------------|
+ | Tab  | A  | S  | D  | F  | G  | H  | J  | K  | L  | '  |Enter |
+ |---------------------------------------------------------------|
+ | Shift  | Z  | X  | C  | V  | B  | N  | M  | ,  | Up |    .    |
+ |---------------------------------------------------------------|
+      |Ctrl|Gui |Alt | Spc/Lwr |   Spc/Rse   |Left|Down|Rght|
+      `-----------------------------------------------------'
+```
+
+## Lower Layer
+```
+ ,---------------------------------------------------------------.
+ | ~  | !  | @  | #  | $  | %  | ^  | &  | *  | (  | )  |        |
+ |---------------------------------------------------------------|
+ | Del  | F1 | F2 | F3 | F4 | F5 | F6 | _  | +  | {  | }  |  |   |
+ |---------------------------------------------------------------|
+ |        | F7 | F8 | F9 |F10 |F11 |F12 |    | ;  |PgUp|   /     |
+ |---------------------------------------------------------------|
+      |    |    |    |         |             |Home|PgDn|End |
+      `-----------------------------------------------------'
+```
+
+## Raise Layer
+```
+ ,---------------------------------------------------------------.
+ | `  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 0  |        |
+ |---------------------------------------------------------------|
+ | Ins  | F1 | F2 | F3 | F4 | F5 | F6 | -  | =  | [  | ]  |  \   |
+ |---------------------------------------------------------------|
+ |        | F7 | F8 | F9 |F10 |F11 |F12  |    |    |   |         |
+ |---------------------------------------------------------------|
+      |VolD|Mute|VolU|         |             |    |    |    |
+      `-----------------------------------------------------'
+```
+
+## Adjust Layer
+```
+,---------------------------------------------------------------.
+ |EEPR|RST |    |    |    |    |    |    |    |    |    |        |
+ |---------------------------------------------------------------|
+ |      |    |    |    |    |    |    |    |    |    |    |      |
+ |---------------------------------------------------------------|
+ |        |    |    |    |    |    |     |    |    |   |         |
+ |---------------------------------------------------------------|
+      |RGB-|RGB |RGB+|         |             |    |    |    |
+      `-----------------------------------------------------'
+```
diff --git a/keyboards/lazydesigners/dimple/readme.md b/keyboards/lazydesigners/dimple/readme.md
new file mode 100644 (file)
index 0000000..04b4b43
--- /dev/null
@@ -0,0 +1,17 @@
+# Dimple
+
+![dimple](https://i.loli.net/2019/03/29/5c9daf903cad9.jpg)
+
+A 40% custom keyboard designed and produced by [LazyDesigners](http://lazydesigners.cn).
+
+Keyboard Maintainer: [Erovia](https://github.com/Erovia)  
+Hardware Supported: Dimple  
+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/dimple:default:dfu
+
+To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/dimple/rules.mk b/keyboards/lazydesigners/dimple/rules.mk
new file mode 100644 (file)
index 0000000..a818e87
--- /dev/null
@@ -0,0 +1,58 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   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)
+NKRO_ENABLE = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
diff --git a/keyboards/lets_split/keymaps/tylerwince/config.h b/keyboards/lets_split/keymaps/tylerwince/config.h
new file mode 100644 (file)
index 0000000..6fff547
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* 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 RGBLED_NUM 12
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
diff --git a/keyboards/lets_split/keymaps/tylerwince/keymap.c b/keyboards/lets_split/keymaps/tylerwince/keymap.c
new file mode 100644 (file)
index 0000000..c781513
--- /dev/null
@@ -0,0 +1,239 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum layer_names {
+  _QWERTY = 0,
+  _COLEMAK,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _ADJUST,
+};
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST,
+  SH_GOUP,
+};
+
+//Tap Dance Declarations
+enum {
+  TD_SEMI_COLON,
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+    [TD_SEMI_COLON] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,------------------------------------------   ------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   |   Y  |   U  |   I  |   O  |   P  | BSPC |
+ * |------+------+------+------+------+-------   -------+------+------+------+------+------|
+ * |CTL/Es|   A  |   S  |   D  |   F  |   G  |   |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|   |------+------+------+------+------+------|
+ * |Shift |   Z  |   X  |   C  |   V  |   B  |   |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+   +------+------+------+------+------+------|
+ * |Things|1PASS | alt  | CMD  |Lower |Space |   |Space |Raise | Next | Vol- | Vol+ | Play |
+ * `------------------------------------------   ------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12(
+   KC_TAB,        KC_Q,          KC_W,    KC_E,    KC_R,  KC_T,   KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,              KC_BSPC,
+   CTL_T(KC_ESC), KC_A,          KC_S,    KC_D,    KC_F,  KC_G,   KC_H,   KC_J,  KC_K,    KC_L,    TD(TD_SEMI_COLON), 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 ,
+   RALT(KC_SPC),  RGUI(KC_BSLS), KC_LALT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU,           KC_MPLY
+),
+
+/* Colemak
+ * ,------------------------------------------   ------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------   -------+------+------+------+------+------|
+ * |CTL/Es|   A  |   R  |   S  |   T  |   D  |   |   H  |   N  |   E  |   I  |   O  |  '   |
+ * |------+------+------+------+------+------|   |------+------+------+------+------+------|
+ * |Shift |   Z  |   X  |   C  |   V  |   B  |   |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+   +------+------+------+------+------+------|
+ * |Things|1PASS | alt  | CMD  |Lower |Space |   |Space |Raise | Next | Vol- | Vol+ | Play |
+ * `------------------------------------------   ------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12(
+  KC_TAB,        KC_Q,          KC_W,    KC_F,    KC_P,  KC_G,   KC_J,   KC_L,  KC_U,    KC_Y,    TD(TD_SEMI_COLON), KC_BSPC,
+  CTL_T(KC_ESC), KC_A,          KC_R,    KC_S,    KC_T,  KC_D,   KC_H,   KC_N,  KC_E,    KC_I,    KC_O,              KC_QUOT,
+  KC_LSFT,       KC_Z,          KC_X,    KC_C,    KC_V,  KC_B,   KC_K,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH,           KC_ENT ,
+  RALT(KC_SPC),  RGUI(KC_BSLS), KC_LALT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU,           KC_MPLY
+),
+
+/* Dvorak
+ * ,------------------------------------------   ------------------------------------------.
+ * | Tab  |   '  |   ,  |   .  |   P  |   Y  |   |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------   -------+------+------+------+------+------|
+ * |CTL/Es|   A  |   O  |   E  |   U  |   I  |   |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|   |------+------+------+------+------+------|
+ * |Shift |   ;  |   Q  |   J  |   K  |   X  |   |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+   +------+------+------+------+------+------|
+ * |Things|1PASS | alt  | CMD  |Lower |Space |   |Space |Raise | Next | Vol- | Vol+ | Play |
+ * `------------------------------------------   ------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12(
+  KC_TAB,        KC_QUOT,           KC_COMM, KC_DOT,  KC_P,  KC_Y,   KC_F,   KC_G,  KC_C,    KC_R,    KC_L,    KC_BSPC,
+  CTL_T(KC_ESC), KC_A,              KC_O,    KC_E,    KC_U,  KC_I,   KC_D,   KC_H,  KC_T,    KC_N,    KC_S,    KC_SLSH,
+  KC_LSFT,       TD(TD_SEMI_COLON), KC_Q,    KC_J,    KC_K,  KC_X,   KC_B,   KC_M,  KC_W,    KC_V,    KC_Z,    KC_ENT ,
+  RALT(KC_SPC),  RGUI(KC_BSLS),     KC_LALT, KC_LCMD, LOWER, KC_SPC, KC_SPC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Lower
+ * ,------------------------------------------   ------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   |   ^  |   &  |   *  |   (  |   )  | Del  |
+ * |------+------+------+------+------+-------   -------+------+------+------+------+------|
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   |      |   _  |   +  |   {  |   }  |  |   |
+ * +------+------+------+------+------|------+   |------+------+------+------+------+------|
+ * |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   |      |   -  |   =  |   [  |   ]  |      |
+ * |------+------+------+------+------+------+   +------+------+------+------+------+------|
+ * |Things|1PASS | alt  | CMD  |Lower |Space |   |Space |Raise | Next | Vol- | Vol+ | Play |
+ * `------------------------------------------   ------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12(
+  KC_TILD,      KC_EXLM,       KC_AT,   KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+  KC_F1,        KC_F2,         KC_F3,   KC_F4,   KC_F5,  KC_F6,   _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+  KC_F7,        KC_F8,         KC_F9,   KC_F10,  KC_F11, KC_F12,  _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______,
+  RALT(KC_SPC), RGUI(KC_BSLS), KC_LALT, KC_LCMD, LOWER,  KC_SPC,  KC_SPC,  RAISE,   KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,------------------------------------------   ------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   |   6  |   7  |   8  |   9  |   0  | Del  |
+ * |------+------+------+------+------+-------   -------+------+------+------+------+------|
+ * | Del  |      |      |      |      |      |   | LEFT | DOWN |  UP  |RIGHT |      |  \   |
+ * |------+------+------+------+------+------|   |------+------+------+------+------+------|
+ * |      |      |      |      |      |      |   |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+   +------+------+------+------+------+------|
+ * |Things|1PASS | alt  | CMD  |Lower |Space |   |Space |Raise | Next | Vol- | Vol+ | Play |
+ * `------------------------------------------   ------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12(
+  KC_GRV,       KC_1,          KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,     KC_0,    KC_DEL,
+  KC_DEL,       _______,       _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, _______, KC_BSLS,
+  _______,      _______,       _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______,
+  RALT(KC_SPC), RGUI(KC_BSLS), KC_LALT, KC_LCMD, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_MNXT, KC_VOLD, KC_VOLU,  KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,------------------------------------------   ------------------------------------------.
+ * |      | Reset|      |      |      |      |   |      |Qwerty|Colemk|Dvorak|WTLEFT|WTRGHT|
+ * |------+------+------+------+------+-------   -------+------+------+------+------+------|
+ * |      |      |Aud on|Audoff|AGnorm|AGswap|   |WLEFT |WDOWN | WUP  |WRGHT |WBLEFT|WBRGHT|
+ * |------+------+------+------+------+------|   |------+------+------+------+------+------|
+ * |      |      |      |      |      |      |   |      |RGBsUP|RGBsDN|RGBvUP|RGBvDN|WFULL |
+ * |------+------+------+------+------+------+   +------+------+------+------+------+------|
+ * |      |      |      |      |      |      |   |      |      |RGBwav|RGBfla|RGBtog|      |
+ * `------------------------------------------   ------------------------------------------'
+ */
+[_ADJUST] =  LAYOUT_ortho_4x12(
+  _______, RESET,   _______, _______, _______, _______, _______,   QWERTY,    COLEMAK,   DVORAK,    LCA(KC_7), LCA(KC_8),
+  _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, LCA(KC_H), LCA(KC_J), LCA(KC_K), LCA(KC_L), LCA(KC_U), LCA(KC_I),
+  _______, _______, _______, _______, _______, _______, _______,   RGB_SAI,   RGB_SAD,   RGB_VAI,   RGB_VAD,   LCA(KC_ENT),
+  _______, _______, _______, _______, _______, _______, _______,   _______,   RGB_M_K,   RGB_M_B,   RGB_TOG,   _______
+)
+
+
+};
+
+void keyboard_post_init_user(void) {
+  #ifdef RGBLIGHT_ENABLE
+  rgblight_enable_noeeprom();
+  layer_state_set_user(layer_state);
+  #endif
+}
+void set_qwerty(void){
+  rgblight_sethsv_noeeprom(255, 0, 160);
+}
+void set_lower(void){
+  rgblight_sethsv_master(255, 255, 255);
+  rgblight_sethsv_slave(255, 0, 160);
+}
+void set_raise(void){
+  rgblight_sethsv_slave(35, 255, 255);
+  rgblight_sethsv_master(255, 0, 160);
+}
+void set_adjust(void){
+  rgblight_sethsv_slave(35, 255, 255);
+  rgblight_sethsv_master(255, 255, 255);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          set_qwerty();
+        #endif
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_colemak);
+        #endif
+        set_single_persistent_default_layer(_COLEMAK);
+      }
+      return false;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_dvorak);
+        #endif
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+    case LOWER:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          set_lower();
+        #endif
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        #ifdef RGBLIGHT_ENABLE
+          set_qwerty();
+        #endif
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+    case RAISE:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          set_raise();
+        #endif
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        #ifdef RGBLIGHT_ENABLE
+          set_qwerty();
+        #endif
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+    case ADJUST:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          set_adjust();
+        #endif
+        layer_on(_ADJUST);
+      } else {
+        #ifdef RGBLIGHT_ENABLE
+          set_qwerty();
+        #endif
+        layer_off(_ADJUST);
+      }
+      return false;
+  }
+  return true;
+}
+
diff --git a/keyboards/lets_split/keymaps/tylerwince/rules.mk b/keyboards/lets_split/keymaps/tylerwince/rules.mk
new file mode 100644 (file)
index 0000000..3cfa539
--- /dev/null
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE=yes
+TAP_DANCE_ENABLE=yes
index 5f1c4520715c54a577d1a97d55fe61564aa68c27..448793cf5d9012ba9e5c98b27f8fe5aa27a5f84f 100644 (file)
@@ -39,31 +39,31 @@ led_config_t g_led_config = { {
     {   8,  59 }, {  23,  59 }, {  38,  59 }, {  83,  59 }, { 129,  59 }, { 144,  59 }, { 159,  59 }, { 174,  59 },
     { 193,  59 }, { 205,  59 }, { 217,  59 },
   // Underglow / Border
-    { 222,  64 }, { 204,  64 }, { 186,  64 }, { 167,  64 }, { 149,  64 }, { 130,  64 }, { 112,  64 }, {  94,  64 },
+    { 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 }, { 222,   1 }, { 224,  17 }, { 224,  32 }, { 224,  47 }
+    { 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
-    4, 4, 4, 4, 4, 4, 4, 4,
-    4, 4, 4, 4, 4, 4, 1, 4,
+    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, 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
-    4, 4, 4, 4, 4, 4, 4, 4,
-    4, 4, 4, 4, 4, 4, 4, 4,
-    4,
+    1, 4, 4, 4, 4, 4, 4, 4,
+    4, 4, 4, 4, 4, 4, 1, 1,
+    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, 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
-    4, 4, 4, 4, 4, 4, 4, 4,
-    4, 4, 4, 4, 4,
+    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
-    4, 4, 4, 4, 4, 4, 4, 4,
-    4, 4, 4,
+    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,
index 35fd446194ceb24540077a3ed52a7b25e3090661..4ee767cdd13128dbfb4cf2609fa4ffbd60ee92a2 100644 (file)
@@ -5,21 +5,35 @@
 #define PERMISSIVE_HOLD
 #define TAPPING_TERM 150
 
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// #define DISABLE_RGB_MATRIX_SOLID_COLOR
 // #define DISABLE_RGB_MATRIX_ALPHAS_MODS
-#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-#define DISABLE_RGB_MATRIX_BREATHING
+// #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define DISABLE_RGB_MATRIX_BREATHING
+#define DISABLE_RGB_MATRIX_BAND_SAT
+// #define DISABLE_RGB_MATRIX_BAND_VAL
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
 #define DISABLE_RGB_MATRIX_CYCLE_ALL
 #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
 #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
-// #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#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
 // #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
@@ -35,7 +49,6 @@
 
 // #define RGB_MATRIX_KEYRELEASES
 
-
 // some speed shit
 #define NO_ACTION_MACRO
 #define NO_ACTION_FUNCTION
diff --git a/keyboards/massdrop/ctrl/keymaps/matthewrobo/config_led.c b/keyboards/massdrop/ctrl/keymaps/matthewrobo/config_led.c
new file mode 100644 (file)
index 0000000..448793c
--- /dev/null
@@ -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
index 2823292e681d9197041a7479604a684b3803c120..112be66d6cc2122c3a19544112e1888bc6890f38 100644 (file)
@@ -80,14 +80,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        */
 };
 
-extern rgb_led g_rgb_leds[DRIVER_LED_TOTAL];
-void set_color_helper(int index, uint8_t red, uint8_t green, uint8_t blue)
-{
-       if (!HAS_ANY_FLAGS(g_rgb_leds[index].flags, rgb_matrix_get_flags()))
-       { return; }
-
-       rgb_matrix_set_color(index, red, green, blue);
-}
 
 void rgb_matrix_indicators_user(void)
 {
@@ -225,8 +217,9 @@ void rgb_matrix_indicators_user(void)
 void matrix_init_user(void)
 {
        autoshift_disable();
-       rgb_matrix_sethsv(192, 112, 255);
-       rgb_matrix_mode(4);
+       rgb_matrix_sethsv(128, 255, 255);
+       // rgb_matrix_sethsv(192, 112, 255);
+       // rgb_matrix_mode(4);
 };
 
 // Runs constantly in the background, in a loop.
index 4fb7826ce61b9a46a7c7af6dab8d371f69823463..063d135a06377a0c520b17a23c265038133be568 100644 (file)
@@ -1,2 +1,3 @@
 NKRO_ENABLE = yes           # USB Nkey Rollover
 AUTO_SHIFT_ENABLE = yes      # Auto Shift
+SRC += config_led.c
index 1e50b4a53c472fd60b715d6cb34214d2f7afbb15..8b45b53ecb5f7dc1400a5c6b15b9b59314704b16 100644 (file)
@@ -13,23 +13,35 @@ enum ctrl_keycodes {
 
 #define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
 
-keymap_config_t keymap_config;
+#define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__)
 
 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, \
+    [_QWERTY] = LAYOUT(
+        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,  TD_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,   TD_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_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    TD_COMM, TD_DOT,  KC_SLSH, KC_RSPC,                              KC_UP, \
+        KC_LCPO, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, LOWER,   KC_APP,  KC_RCPC,            KC_LEFT, KC_DOWN, KC_RGHT \
+    ),
+
+#ifndef GAMELAYER_DISABLE
+    [_GAME] = 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_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_LCPO, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, MO(1),   KC_APP,  KC_RCPC,            KC_LEFT, KC_DOWN, KC_RGHT \
+        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, LOWER,   KC_APP,  KC_RCTL,            KC_LEFT, KC_DOWN, KC_RGHT \
     ),
-    [1] = LAYOUT(
+#endif
+
+    [_LOWER] = LAYOUT(
         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            KC_MUTE, _______, _______, \
-        _______, RGB_RMOD, RGB_MOD,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   KC_MPLY, KC_MSTP, KC_VOLU, \
-        RGB_SPI, RGB_SAI, RGB_VAI, RGB_HUI, MD_BOOT, _______, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______,   KC_MPRV, KC_MNXT, KC_VOLD, \
-        RGB_SPD, RGB_SAD, RGB_VAD, RGB_HUD, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-        _______, RGB_TOG, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
+        _______, RGB_RMOD,RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   KC_MPLY, KC_MSTP, KC_VOLU, \
+        RGB_SPI, RGB_SAI, RGB_VAI, RGB_HUI, MD_BOOT, QWERTY,  _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______,   KC_MPRV, KC_MNXT, KC_VOLD, \
+        RGB_SPD, RGB_SAD, RGB_VAD, RGB_HUD, RGBRST,  GAME,    _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______,                              _______, \
         _______, _______, _______,                   _______,                            _______, _______, _______, _______,            _______, _______, _______ \
     ),
     /*
@@ -44,62 +56,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     */
 };
 
-// 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) {
-};
-
 #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) {
-    static uint32_t key_timer;
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record)
+{
+    static uint16_t reset_timer;
 
     switch (keycode) {
         case U_T_AUTO:
-            if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+            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) {
+            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) {
+            if (record->event.pressed)
                 TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
-            }
             return false;
         case DBG_MTRX:
-            if (record->event.pressed) {
+            if (record->event.pressed)
                 TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
-            }
             return false;
         case DBG_KBD:
-            if (record->event.pressed) {
+            if (record->event.pressed)
                 TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
-            }
             return false;
         case DBG_MOU:
-            if (record->event.pressed) {
+            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) {
+            if (record->event.pressed)
+                reset_timer = timer_read() + 500;
+            else if (timer_expired(reset_timer))
                     reset_keyboard();
-                }
-            }
             return false;
-        default:
-            return true; //Process all other keycodes normally
     }
+
+    return true;
 }
diff --git a/keyboards/melody96/keymaps/zunger/config.h b/keyboards/melody96/keymaps/zunger/config.h
new file mode 100644 (file)
index 0000000..cc06440
--- /dev/null
@@ -0,0 +1,22 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// Enable cmd-option-escape on mac.
+#define GRAVE_ESC_ALT_OVERRIDE
+
+// place overrides here
diff --git a/keyboards/melody96/keymaps/zunger/keymap.c b/keyboards/melody96/keymaps/zunger/keymap.c
new file mode 100644 (file)
index 0000000..9031447
--- /dev/null
@@ -0,0 +1,250 @@
+/* Copyright 2019 Yonatan Zunger
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+  // We provide special layer management keys:
+  //    GREEK triggers the Greek (aka "Front") layer, or the SHIFTGREEK layer when shift is held.
+  //          (Because we use Unicode, we need to implement shift-handling at the firmware level,
+  //          rather than the OS level like we do in the QWERTY layer)
+  //    CADET or GREEK+ALT triggers the Cadet (aka "Top") layer, or the SHIFTCADET layer when
+  //          shift is held.
+  //    LAYER_LOCK locks the "base" layer (i.e., QWERTY, GREEK, or CADET) to the value which is
+  //          pressed at the moment that it is being released. When a layer lock is set, the
+  //          analogous layer modifier key is reversed; e.g., if you lock the GREEK layer, then the
+  //          GREEK button bounces you back to QWERTY.
+  //
+  // We also parse the shift, alt, and caps lock keys to provide management of those which is
+  // compatible with these various layers.
+  KC_GREEK = SAFE_RANGE,
+  KC_CADET,
+  KC_LAYER_LOCK,
+};
+
+enum layers_keymap {
+  _QWERTY = 0,
+  _FUNCTION,
+
+  _GREEK,
+  _SHIFTGREEK,
+  _CADET,
+  _SHIFTCADET,
+};
+
+// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
+#define H(x) UC(0x##x)
+#define MO_FN MO(_FUNCTION)
+#define KC_LLCK KC_LAYER_LOCK
+
+// TODO: To generalize this, we want some #defines that let us specify how each key on the base
+// layer should map to the four special layers, and then use that plus the base layer definition to
+// autogenerate the keymaps for the other layers.
+// TODO: It would also be nice to be able to put the actual code points in here, rather than
+// numbers.
+// TODO: Also add checkmark and dengir.
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* The diagram below shows five rows for each key: from top to bottom, the QWERTY layer, the
+   * GREEK layer, the SHIFTGREEK layer, the CADET layer, and the SHIFTCADET layer. (The single
+   * diagram is to make it easier to see what goes where with this many layers!)
+   *
+   * ,----------------------------------------------------------------------------
+   * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK|  QWERTY
+   * | ` | ¹ | ² | ³ | ⁴ | ⁵ | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ⁻ | ⁺ | ⁽ | ⁾ |   |   |   |   |  GREEK
+   * | ` | ₁ | ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ₀ | ₋ | ₊ | ₍ | ₎ |   |   |   |   |  SHIFTGREEK
+   * | ¬ |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |  CADET
+   * | ∅ |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |  SHIFTCADET
+   * |---------------------------------------------------------------------------|
+   * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
+   * | ` |   |   |   |   |   |   |   |   |   |   | ∝ | ∼ | BKSPC |LCK| ⊘ | ⊙ | ⊖ |
+   * | ` |   |   |   |   |   |   |   |   |   |   |   | ≁ | BKSPC |LCK|   | ⊗ |   |
+   * |   |   |   |   |   |   |   |   |   |   |   |   | ± | BKSPC |LCK|   |   |   |
+   * |   |   |   |   |   |   |   |   |   |   |   |   | ∓ | BKSPC |LCK|   |   |   |
+   * |---------------------------------------------------------------------------|
+   * | TAB  | Q | W | E | R | T | Y | U | I | O | P | [ | ] |  \ | 7 | 8 | 9 |   |
+   * |      | θ | ω | ε | ρ | τ | ψ | υ | ι | ο | π |   |   |    |   |   |   |   |
+   * |      | Θ | Ω | Ε | Ρ | Τ | Ψ | Υ | Ι | Ο | Π |   |   |    |   |   |   |   |
+   * |      | ∧ | ∨ | ∩ | ∪ | ⊂ | ⊃ | ∀ | ∞ | ∃ | ∂ | ∈ |   |    | * | * | * |   | [1]
+   * |      | ℚ |   |   | ℝ | ⊆ | ⊇ |   | ℵ | ∄ |   | ∉ |   |    | * | * | * |   |
+   * |-----------------------------------------------------------------------| + |
+   * | CTRL   | A | S | D | F | G | H | J | K | L | ; | ' |  RET | 4 | 5 | 6 | ⊕ |
+   * | CTRL   | α | σ | δ | φ | γ | η | ϑ | κ | λ | ⋯ | ⋅ |  RET |   |   |   |   |
+   * | CTRL   | Α | Σ | Δ | Φ | Γ | Η |   | Κ | Λ | … | ∴ |  RET |   |   |   |   |
+   * | CTRL   | ⟘ | ⊤ | ⊢ | ⊣ | ↑ | ↓ | ← | → | ↔ |   |   |  RET | * | * | * |   | [1]
+   * | CTRL   | Å |   | ∇ |   | ⇑ | ⇓ | ⇐ | ⇒ | ⇔ |   |   |  RET | * | * | * |   |
+   * |-----------------------------------------------------------------------|---|
+   * | SHIFT   | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 |   |
+   * | SHIFT   | ζ | ξ | χ | ς | β | ν | μ | ≪ | ≫ | ∫ |SHFT |   |   |   |   |   |
+   * | SHIFT   | Ζ | Ξ | Χ | ✔ | Β | Ν | Μ | ≲ | ≳ |   |SHFT |   |   |   |   |   |
+   * | SHIFT   |   |   | ≠ | ≈ | ≡ | ≤ | ≥ |   |   | ÷ |SHFT |   | * | * | * |   | [1]
+   * | SHIFT   | ℤ |   | ℂ | ≉ | ≢ | ℕ |   |   |   |   |SHFT |   | * | * | * |   |
+   * |-----------------------------------------------------------------------|ENT|
+   * | CTL | ALT| CMD|         SPACE         | α | β | γ | ← | ↓ | → | 0 | . |   | [2]
+   * | CTL | ALT| CMD|         SPACE         | α | β | γ |   |   |   |   |   |   |
+   * | CTL | ALT| CMD|         SPACE         | α | β | γ |   |   |   |   |   |   |
+   * | CTL | ALT| CMD|         SPACE         | α | β | γ |   |   |   |   |   |   |
+   * | CTL | ALT| CMD|         SPACE         | α | β | γ |   |   |   |   |   |   |
+   * `---------------------------------------------------------------------------'
+   *
+   * [1] CADET + numpad moves the mouse. SHIFT+CADET+NUMPAD moves it more quickly. CADET+5
+   * clicks the mouse, and SHIFT+CADET+FIVE right-clicks.
+   * [2] The Greek letters in this row are the three modifier keys (GREEK, CADET, FN),
+   * not the Unicode Greek letters.
+  */
+  // NB: Using GESC for escape in the QWERTY layer as a temporary hack because I messed up the
+  // switch on the KC_GRV key; change back to KC_ESC once this is fixed.
+       [_QWERTY] = LAYOUT_hotswap(
+    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_HOME, KC_END,  KC_PGUP, KC_PGDN, KC_MPLY, KC_BRK,
+    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_LLCK, 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_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,                   KC_ENT,  KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+    KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   KC_P1,   KC_P2,   KC_P3,
+    KC_LCTL, KC_LALT, KC_LGUI,                            KC_SPC,                             KC_GREEK,KC_CADET,MO_FN,   KC_LEFT, KC_DOWN, KC_RGHT, KC_P0,   KC_PDOT, KC_PENT),
+       [_GREEK] = LAYOUT_hotswap(
+    KC_GRV,  H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(207a), H(207d), H(207e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
+    KC_GRV,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, H(221d), H(223c),          _______, _______, H(2298), H(2299), H(2296),
+    _______, H(03b8), H(03c9), H(03b5), H(03c1), H(03c4), H(03c8), H(03c5), H(03b9), H(03bf), H(03c0), KC_LBRC, KC_RBRC,          KC_BSLS, KC_P7,   KC_P8,   KC_P9,
+    _______, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), H(03d1), H(03ba), H(03bb), H(22ef), H(22c5),                   _______, KC_P4,   KC_P5,   KC_P6,   H(2295),
+    _______,          H(03b6), H(03be), H(03c7), H(03c2), H(03b2), H(03bd), H(03bc), H(226a), H(226b), H(222b), _______,          _______, KC_P1,   KC_P2,   KC_P3,
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PENT),
+       [_SHIFTGREEK] = LAYOUT_hotswap(
+    KC_GRV,  H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), H(208d), H(208e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
+    KC_GRV,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, H(2241),          _______, _______, XXXXXXX, H(2297), XXXXXXX,
+    _______, H(0398), H(03a9), H(0395), H(03a1), H(03a4), H(03a8), H(03a5), H(0399), H(039f), H(03a0), KC_LBRC, KC_RBRC,          KC_BSLS, KC_P7,   KC_P8,   KC_P9,
+    _______, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), XXXXXXX, H(039a), H(039b), H(2026), H(2234),                   _______, KC_P4,   KC_P5,   KC_P6,   H(2295),
+    _______,          H(0396), H(039e), H(03a7), H(2714), H(0392), H(039d), H(039c), H(2272), H(2273), XXXXXXX, _______,          _______, KC_P1,   KC_P2,   KC_P3,
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PENT),
+  // TODO: Add mouse keys to keypad.
+       [_CADET] = LAYOUT_hotswap(
+    H(00AC), KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+    KC_GRV,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(00b1),          _______, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+    _______, H(2227), H(2228), H(2229), H(222a), H(2282), H(2283), H(2200), H(221e), H(2203), H(2202), H(2208), XXXXXXX,          XXXXXXX, KC_P7,   KC_P8,   KC_P9,
+    _______, H(22a5), H(22a4), H(22a2), H(22a3), H(2191), H(2193), H(2190), H(2192), H(2194), XXXXXXX, XXXXXXX,                   _______, KC_P4,   KC_P5,   KC_P6,   XXXXXXX,
+    _______,          XXXXXXX, XXXXXXX, H(2260), H(2248), H(2261), H(2264), H(2265), XXXXXXX, XXXXXXX, H(00f7), _______,          _______, KC_P1,   KC_P2,   KC_P3,
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PENT),
+       [_SHIFTCADET] = LAYOUT_hotswap(
+    H(2205), KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+    KC_GRV,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(2213),          _______, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+    _______, H(211a), XXXXXXX, XXXXXXX, H(211d), H(2286), H(2287), XXXXXXX, H(2135), H(2204), XXXXXXX, H(2209), XXXXXXX,          XXXXXXX, KC_P7,   KC_P8,   KC_P9,
+    _______, H(212b), XXXXXXX, H(2207), XXXXXXX, H(21d1), H(21d3), H(21d0), H(21d2), H(21d4), XXXXXXX, XXXXXXX,                   _______, KC_P4,   KC_P5,   KC_P6,   XXXXXXX,
+    _______,          H(2124), XXXXXXX, H(2102), H(2249), H(2262), H(2115), XXXXXXX, XXXXXXX, XXXXXXX, H(00f7), _______,          _______, KC_P1,   KC_P2,   KC_P3,
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PENT),
+
+  // Function layer is mostly for keyboard meta-control operations. Lots of this is just from the
+  // default layout; TODO make it nicer, add Unicode mode switchers.
+       [_FUNCTION] = LAYOUT_hotswap(
+    RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______, _______, _______,
+    _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______,          _______, _______, _______, _______,
+    BL_TOGG, _______, _______, UC_M_OS, UC_M_LN, UC_M_WI, UC_M_BS, UC_M_WC, _______, _______, _______, _______,                   _______, _______, _______, _______, _______,
+    _______,          _______, _______, BL_DEC,  BL_TOGG, BL_INC,  _______, _______, _______, _______, _______, _______,          _______, _______, _______, _______,
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+// Layer bitfields.
+#define GREEK_LAYER (1UL << _GREEK)
+#define SHIFTGREEK_LAYER (1UL << _SHIFTGREEK)
+#define CADET_LAYER (1UL << _CADET)
+#define SHIFTCADET_LAYER (1UL << _SHIFTCADET)
+// The layers we don't touch.
+#define LAYER_MASK ~(GREEK_LAYER|SHIFTGREEK_LAYER|CADET_LAYER|SHIFTCADET_LAYER)
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  // We track these persistent globals and manage them on our own, rather than trying to rely on
+  // get_mods or the like, because this function is called *before* that's updated!
+  static bool shift_held = false;
+  static bool alt_held = false;
+  static bool greek_held = false;
+  static bool cadet_held = false;
+
+  // These are where we remember the values of lock states.
+  static bool shift_lock = false;
+  static int layer_lock = _QWERTY;
+
+  // Process any modifier key presses.
+  if (keycode == KC_LSHIFT || keycode == KC_RSHIFT) {
+    shift_held = record->event.pressed;
+  } else if (keycode == KC_LALT || keycode == KC_RALT) {
+    alt_held = record->event.pressed;
+  } else if (keycode == KC_GREEK) {
+    greek_held = record->event.pressed;
+  } else if (keycode == KC_CADET) {
+    cadet_held = record->event.pressed;
+  }
+
+  // Now let's transform these into the "cadet request" and "greek request."
+  const bool greek_request = (greek_held && !alt_held);
+  const bool cadet_request = (cadet_held || (greek_held && alt_held));
+
+  // Now, handle the lock keys. We store next_layer_lock in a local variable so that we can
+  // determine the layer to pick right now before we update layer_lock.
+  int next_layer_lock = layer_lock;
+  if (keycode == KC_CAPS) {
+    // If we're in QWERTY mode, caps lock is already going to be managed by the host OS, but by
+    // tracking it ourselves we can also usefully apply it to the GREEK and CADET layers.
+    if (record->event.pressed) {
+      shift_lock = !shift_lock;
+    }
+  } else if (keycode == KC_LAYER_LOCK) {
+    if (record->event.pressed) {
+      if (cadet_request) {
+        next_layer_lock = _CADET;
+      } else if (greek_request) {
+        next_layer_lock = _GREEK;
+      } else {
+        next_layer_lock = _QWERTY;
+      }
+    }
+  }
+
+  // OK! Now we know which buttons are being held, and the current and upcoming states of the locks.
+  // We can compute our new base layer. Remember that the CADET and GREEK keys act as their own
+  // antonyms if they match the layer lock -- e.g., if you have CADET locked, then CADET+X generates
+  // QWERTY-X.
+  int base_layer;
+  if (cadet_request) {
+    base_layer = (layer_lock == _CADET ? _QWERTY : _CADET);
+  } else if (greek_request) {
+    base_layer = (layer_lock == _GREEK ? _QWERTY : _GREEK);
+  } else {
+    base_layer = layer_lock;
+  }
+
+  const bool shifted = (shift_held != shift_lock);
+  int actual_layer;
+  if (base_layer == _CADET) {
+    actual_layer = (shifted ? _SHIFTCADET : _CADET);
+  } else if (base_layer == _GREEK) {
+    actual_layer = (shifted ? _SHIFTGREEK : _GREEK);
+  } else {
+    // We don't do shifting for the QWERTY layer, since for that we emit USB HID codes and shifting
+    // is managed by the host OS.
+    actual_layer = _QWERTY;
+  }
+
+  // And now we can update the layer lock and the actual firmware layer selector.
+  layer_lock = next_layer_lock;
+  layer_state_t new_layer_state = (layer_state & LAYER_MASK) | (1UL << actual_layer);
+  if (new_layer_state != layer_state) {
+    layer_state_set(new_layer_state);
+  }
+
+  // TODO: We can update LED states based on shift_lock (caps), layer_lock (layer lock), and
+  // base_layer (base layer).
+
+  return true;
+}
diff --git a/keyboards/melody96/keymaps/zunger/readme.md b/keyboards/melody96/keymaps/zunger/readme.md
new file mode 100644 (file)
index 0000000..3eb64a2
--- /dev/null
@@ -0,0 +1,78 @@
+* The "Cadet-Style" keymap for the melody96.
+* Author: Yonatan Zunger (zunger@gmail.com)
+
+This is an experimental keymap being used both for practical reasons (as my daily driver) and to
+work out the ideas of a "space-cadet-style" keyboard which can type text and mathematical symbols
+with equal ease. It's designed for anyone who frequently needs to do this outside of a LaTeX
+environment, or for anyone who loves the old "Space Cadet" keyboard! And it works at its best when
+you have actual Cadet keycaps (like SA Symbolics) installed, because those keycaps will actually
+show what you get.
+
+The core idea of this keyboard is that, in addition to a QWERTY base layer and a function layer, it
+supports two additional base layers -- the GREEK layer (the analogue of the Space Cadet "Greek," or
+"Front," keys) and the CADET layer (the analogue of the Space Cadet "Top" keys). These layers use
+Unicode to generate all of the mathematical symbols you can find on a traditional Space Cadet
+layout, plus a bunch of extras.
+
+Because Unicode can't be encoded using the traditional USB HID protocol, QMK does some clever but
+horrifying things to fool your OS. One consequence of this is that the shift key needs to be handled
+by the keyboard firmware, not the host OS. To handle this, we have two additional layers --
+SHIFTGREEK and SHIFTCADET -- and handle the flipping between all of these layers here in the
+firmware.
+
+*The simple bit: Using this layout on a Melody96*
+
+At the core of this layout are three special modifier keys and two special lock keys:
+
+* The GREEK key, to the right of the spacebar, activates the GREEK layer. GREEK+SHIFT activates
+  SHIFTGREEK. These keys generate Greek letters on the letter keys (thus the name), and a few
+  mathematical symbols on other keys. They correspond to the notations on the front of traditional
+  Space Cadet keys; if your capset doesn't include those (alas, most don't), they're the "pretty
+  obvious" mappings.
+* The CADET key, to the right of GREEK, activates the CADET layer. These are the symbols above the
+  letters on a Space Cadet layout. CADET+SHIFT activates the SHIFTCADET layer, with even more
+  symbols.
+* The FUNCTION key, to the right of CADET, activates the function layer. This is where you have a
+  reset mechanism, a selector for which Unicode input type you want, and so on.
+
+Additionally, GREEK+ALT is equivalent to CADET. This is handy for other keyboards where you don't
+have room for this many modifiers.
+
+The lock keys are:
+
+* Caps lock, if you use it, will also act as a "shift lock" for the Greek and Cadet layers. Shift
+  lock is slightly different, in that while it is engaged shift will _dis_engage it; that's actually
+  pretty useful when typing math.
+* An additional "layer lock" key, by default where "num lock" usually goes, will lock the choice of
+  base layer. To use it, hold down any invocation of the GREEK or CADET layers, or none at all, and
+  hit lock; it will then put you in that layer. The corresponding modifier key will then toggle you
+  back to the QWERTY layer. (So for example, if you hit GREEK+LAYER_LOCK and release them, you're
+  now typing in Greek; the GREEK modifier would cause you to type QWERTY momentarily. To go back to
+  ordinary QWERTY mode, you'd just hit LAYER_LOCK again with no modifiers held)
+
+To see the full layout, check out the big comment in keymap.c.
+
+*A less-simple bit: Adapting this to other keyboards*
+
+This is really a canary for generic Cadet implementations. Before this can be made generic, a few
+things will have to happen:
+
+(1) Instead of a fixed keymap, this has to be refactored into some kind of array showing the
+mappings of QWERTY-layer keys onto the appropriate code points in the GREEK and CADET layers, and
+some preprocessor magic needs to auto-transform this plus a traditional keymap for the QWERTY layer
+into keymaps for all five of the core layers. (Function layers would presumably be handled on a
+per-keyboard basis)
+
+(2) The standard mapping of those should have some #define's to control things like whether there
+are physical F-keys (you would probably want to move superscript and subscripts onto the numbers if
+there weren't, and figure out what to do with the non-numeric super/sub keys), whether you actually
+want to enable GREEK+ALT=CADET, and so on;
+
+(3) There should be support for controlling indicator LEDs based on the base layer selection,
+caps/shift lock state, and layer lock state, as well as for triggering audio on transitions;
+
+(4) All the core fancy logic in process_record_user which implements the layer handling should be
+factored out into its own function, so that keyboards can easily reuse that, too.
+
+This is a lovely TODO for future work, and could be particularly fun to go along with new releases
+of SA Symbolics and the like. Anyone interested in such things, ping me!
diff --git a/keyboards/melody96/keymaps/zunger/rules.mk b/keyboards/melody96/keymaps/zunger/rules.mk
new file mode 100644 (file)
index 0000000..a61cfa3
--- /dev/null
@@ -0,0 +1,2 @@
+# You need Unicode for this map.
+UNICODE_ENABLE = yes        # Unicode
index f60f054caee96974e317fea0585db0737f90d691..d846fa28da132a840021887153e30ed2f5ccf2bd 100644 (file)
        { K110,  K111,  K112,  K113,  K114,  K115,  K116,  K117,  K118 }  \
 }
 
+/*
+ * The layout macro for the layout of hotswap keyboards, with illustrative grid of a typical
+ * assignment.
+ * ,---------------------------------------------------------------------------
+ * |ESC|F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|PSC|HOM|END|PGU|PGD|DEL|
+ * ,--------------------------------------------------------------------------|
+ * | ` |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |NLK| / | * | - |
+ * |--------------------------------------------------------------------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] |  \ | 7 | 8 | 9 |   |
+ * |----------------------------------------------------------------------| + |
+ * | CTRL  | A | S | D | F | G | H | J | K | L | ; | ' |  RET | 4 | 5 | 6 |   |
+ * |----------------------------------------------------------------------|---|
+ * | LSHIFT | Z | X | C | V | B | N | M | , | . | / |RSHFT| ↑ | 1 | 2 | 3 |   |
+ * |----------------------------------------------------------------------|ENT|
+ * |LCTL|LWIN|LALT|         SPACE         |CTL|ALT|FN | ← | ↓ | → | 0 | . |   |
+ * `---------------------------------------------------------------------------
+ */
+#define LAYOUT_hotswap( \
+  K050, K051, K052, K053, K054, K055, K056, K057, K058, K118, K117, K115, K114, K113, K116, K112, K111, K110, K063, \
+  K040, K041, K042, K043, K044, K045, K046, K047, K048, K108, K107, K105, K104,       K106, K102, K101, K100, K064, \
+  K030, K031, K032, K033, K034, K035, K036, K037, K038, K098, K097, K095, K094,       K093, K096, K092, K091,       \
+  K020, K021, K022, K023, K024, K025, K026, K027, K028, K088, K087, K085,             K084, K086, K082, K081, K080, \
+  K010,       K012, K013, K014, K015, K016, K017, K018, K078, K077, K075, K074,       K073, K076, K072, K071,       \
+  K000, K001, K002,                   K006,                   K008, K007, K005, K004, K003, K066, K062, K061, K060  \
+) { \
+       { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008 }, \
+       { K010,  KC_NO, K012,  K013,  K014,  K015,  K016,  K017,  K018 }, \
+       { K020,  K021,  K022,  K023,  K024,  K025,  K026,  K027,  K028 }, \
+       { K030,  K031,  K032,  K033,  K034,  K035,  K036,  K037,  K038 }, \
+       { K040,  K041,  K042,  K043,  K044,  K045,  K046,  K047,  K048 }, \
+       { K050,  K051,  K052,  K053,  K054,  K055,  K056,  K057,  K058 }, \
+       { K060,  K061,  K062,  K063,  K064,  KC_NO, K066,  KC_NO, KC_NO }, \
+       { KC_NO, K071,  K072,  K073,  K074,  K075,  K076,  K077,  K078 }, \
+       { K080,  K081,  K082,  KC_NO, K084,  K085,  K086,  K087,  K088 }, \
+       { KC_NO, K091,  K092,  K093,  K094,  K095,  K096,  K097,  K098 }, \
+       { K100,  K101,  K102,  KC_NO, K104,  K105,  K106,  K107,  K108 }, \
+       { K110,  K111,  K112,  K113,  K114,  K115,  K116,  K117,  K118 }  \
+}
+
 #endif
diff --git a/keyboards/moon/config.h b/keyboards/moon/config.h
new file mode 100644 (file)
index 0000000..a02cfdb
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+Copyright 2019 Mathias Andersson <wraul@dbox.se>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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      0xFCB8
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    EVE
+#define PRODUCT         Moon
+#define DESCRIPTION     A tenkeyless keyboard with astonishing curves
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 11
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Backlight */
+#define BACKLIGHT_PIN C6
+#define BACKLIGHT_LEVELS 3
+
+/* 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/moon/info.json b/keyboards/moon/info.json
new file mode 100644 (file)
index 0000000..d7182ee
--- /dev/null
@@ -0,0 +1,467 @@
+{
+    "keyboard_name": "Moon",
+    "url": "https://geekhack.org/index.php?topic=90379.0",
+    "maintainer": "qmk",
+    "width": 18.25,
+    "height": 6.5,
+    "layouts": {
+        "LAYOUT_all": {
+            "key_count": 88,
+            "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":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":"Up", "x":16.25, "y":4.5}, 
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, 
+                {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, 
+                {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, 
+                {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, 
+                {"label":"Alt", "x":10, "y":5.5, "w":1.25}, 
+                {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, 
+                {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, 
+                {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, 
+                {"label":"Left", "x":15.25, "y":5.5}, 
+                {"label":"Down", "x":16.25, "y":5.5}, 
+                {"label":"Right", "x":17.25, "y":5.5}
+            ]
+        },
+        "LAYOUT_tkl_ansi": {
+            "key_count": 87,
+            "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":"Up", "x":16.25, "y":4.5}, 
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, 
+                {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, 
+                {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, 
+                {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, 
+                {"label":"Alt", "x":10, "y":5.5, "w":1.25}, 
+                {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, 
+                {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, 
+                {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, 
+                {"label":"Left", "x":15.25, "y":5.5}, 
+                {"label":"Down", "x":16.25, "y":5.5}, 
+                {"label":"Right", "x":17.25, "y":5.5}
+            ]
+        },
+        "LAYOUT_tkl_ansi_wkl": {
+            "key_count": 84,
+            "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":"Up", "x":16.25, "y":4.5}, 
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, 
+                {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, 
+                {"label":"Space", "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":"Left", "x":15.25, "y":5.5}, 
+                {"label":"Down", "x":16.25, "y":5.5}, 
+                {"label":"Right", "x":17.25, "y":5.5}
+            ]
+        },
+        "LAYOUT_tkl_iso": {
+            "key_count": 88,
+            "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":"Up", "x":16.25, "y":4.5}, 
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, 
+                {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, 
+                {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, 
+                {"label":"Space", "x":3.75, "y":5.5, "w":6.25}, 
+                {"label":"AltGr", "x":10, "y":5.5, "w":1.25}, 
+                {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, 
+                {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, 
+                {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, 
+                {"label":"Left", "x":15.25, "y":5.5}, 
+                {"label":"Down", "x":16.25, "y":5.5}, 
+                {"label":"Right", "x":17.25, "y":5.5}
+            ]
+        },
+        "LAYOUT_tkl_iso_wkl": {
+            "key_count": 85,
+            "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":"Up", "x":16.25, "y":4.5}, 
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, 
+                {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, 
+                {"label":"Space", "x":4, "y":5.5, "w":7}, 
+                {"label":"AltGr", "x":11, "y":5.5, "w":1.5}, 
+                {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, 
+                {"label":"Left", "x":15.25, "y":5.5}, 
+                {"label":"Down", "x":16.25, "y":5.5}, 
+                {"label":"Right", "x":17.25, "y":5.5}
+            ]
+        }
+    }
+}
+
diff --git a/keyboards/moon/keymaps/default/config.h b/keyboards/moon/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..271f48d
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/moon/keymaps/default/keymap.c b/keyboards/moon/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..7ab5a25
--- /dev/null
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_all(
+        KC_ESC,           KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS,
+        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END,  KC_PGDN,
+        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,
+        KC_LSFT, KC_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, KC_RGUI, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/moon/keymaps/default/readme.md b/keyboards/moon/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..3a1a937
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for the Moon
diff --git a/keyboards/moon/keymaps/default_tkl_ansi/config.h b/keyboards/moon/keymaps/default_tkl_ansi/config.h
new file mode 100644 (file)
index 0000000..271f48d
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/moon/keymaps/default_tkl_ansi/keymap.c b/keyboards/moon/keymaps/default_tkl_ansi/keymap.c
new file mode 100644 (file)
index 0000000..2eb006f
--- /dev/null
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+// clang-format off
+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)
+};
+// clang-format on
diff --git a/keyboards/moon/keymaps/default_tkl_ansi/readme.md b/keyboards/moon/keymaps/default_tkl_ansi/readme.md
new file mode 100644 (file)
index 0000000..bf1e2ac
--- /dev/null
@@ -0,0 +1 @@
+# The default ANSI keymap for the Moon
diff --git a/keyboards/moon/keymaps/default_tkl_ansi_wkl/config.h b/keyboards/moon/keymaps/default_tkl_ansi_wkl/config.h
new file mode 100644 (file)
index 0000000..271f48d
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/moon/keymaps/default_tkl_ansi_wkl/keymap.c b/keyboards/moon/keymaps/default_tkl_ansi_wkl/keymap.c
new file mode 100644 (file)
index 0000000..ce3bcd7
--- /dev/null
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_tkl_ansi_wkl(
+        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_LALT,                            KC_SPC,                             KC_RALT,                   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/moon/keymaps/default_tkl_ansi_wkl/readme.md b/keyboards/moon/keymaps/default_tkl_ansi_wkl/readme.md
new file mode 100644 (file)
index 0000000..f284c1b
--- /dev/null
@@ -0,0 +1 @@
+# The default winkeyless ANSI keymap for the Moon
diff --git a/keyboards/moon/keymaps/default_tkl_iso/config.h b/keyboards/moon/keymaps/default_tkl_iso/config.h
new file mode 100644 (file)
index 0000000..271f48d
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/moon/keymaps/default_tkl_iso/keymap.c b/keyboards/moon/keymaps/default_tkl_iso/keymap.c
new file mode 100644 (file)
index 0000000..868f68b
--- /dev/null
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+// clang-format off
+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_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_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RGUI, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/moon/keymaps/default_tkl_iso/readme.md b/keyboards/moon/keymaps/default_tkl_iso/readme.md
new file mode 100644 (file)
index 0000000..9dd1e2c
--- /dev/null
@@ -0,0 +1 @@
+# The default ISO keymap for the Moon
diff --git a/keyboards/moon/keymaps/default_tkl_iso_wkl/config.h b/keyboards/moon/keymaps/default_tkl_iso_wkl/config.h
new file mode 100644 (file)
index 0000000..271f48d
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/moon/keymaps/default_tkl_iso_wkl/keymap.c b/keyboards/moon/keymaps/default_tkl_iso_wkl/keymap.c
new file mode 100644 (file)
index 0000000..6e1e1d5
--- /dev/null
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_tkl_iso_wkl(
+        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_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_LCTL,          KC_LALT,                            KC_SPC,                             KC_RALT,                   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/moon/keymaps/default_tkl_iso_wkl/readme.md b/keyboards/moon/keymaps/default_tkl_iso_wkl/readme.md
new file mode 100644 (file)
index 0000000..fabba45
--- /dev/null
@@ -0,0 +1 @@
+# The default winkeyless ISO keymap for the Moon
diff --git a/keyboards/moon/matrix.c b/keyboards/moon/matrix.c
new file mode 100644 (file)
index 0000000..c74c70f
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+Copyright 2012-2019 Jun Wako, Jack Humbert, Yiancar, Mathias Andersson <wraul@dbox.se>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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"
+#include "pca9555.h"
+
+/*
+ *       IC1 (PCA9555)                  IC2 (PCA9555)
+ *       ,----------.                   ,----------.
+ * SDA --| SDA  P00 |-- P1        SDA --| SDA  P00 |-- P17
+ * SCL --| SCL  P01 |-- P2        SCL --| SCL  P01 |-- P18
+ * INT --| INT  P02 |-- P3        INT --| INT  P02 |-- P19
+ *       |      P03 |-- P4              |      P03 |-- P20
+ * GND --| A0   P04 |-- P5        VCC --| A0   P04 |-- P21
+ * SJ1 --| A1   P05 |-- P6        SJ1 --| A1   P05 |-- P22
+ * GND --| A2   P06 |-- P7        GND --| A2   P06 |-- P23
+ *       |      P07 |-- P8              |      P07 |-- P24
+ *       |          |                   |          |
+ *       |      P10 |-- P9              |      P10 |-- P25
+ *       |      P11 |-- P10             |      P11 |-- P26
+ *       |      P12 |-- P11             |      P12 |-- P27
+ *       |      P13 |-- P12             |      P13 |-- P28
+ *       |      P14 |-- P13             |      P14 |-- P29
+ *       |      P15 |-- P14             |      P15 |-- P30
+ *       |      P16 |-- P15             |      P16 |-- P31
+ *       |      P17 |-- P16             |      P17 |-- P32
+ *       `----------'                   `----------'
+ */
+
+/*
+ * | Row | Pin |   | Col | Pin |
+ * | --- | --- |   | --- | --- |
+ * | 0   | P1  |   | 0   | P25 |
+ * | 1   | P2  |   | 1   | P26 |
+ * | 2   | P3  |   | 2   | P27 |
+ * | 3   | P4  |   | 3   | P28 |
+ * | 4   | P5  |   | 4   | P29 |
+ * | 5   | P6  |   | 5   | P30 |
+ * | 6   | P7  |   | 6   | P20 |
+ * | 7   | P8  |   | 7   | P21 |
+ *                 | 8   | P22 |
+ *                 | 9   | P23 |
+ *                 | A   | P24 |
+ */
+
+// PCA9555 slave addresses
+#define IC1 0x20
+#define IC2 0x21
+
+// PCA9555 column pin masks
+#define PORT0_COLS_MASK 0b11111000
+#define PORT1_COLS_MASK 0b00111111
+#define COLS_MASK 0b0000011111111111
+
+#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
+
+/* 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; }
+
+inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
+
+inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
+
+void matrix_print(void) {
+  print_matrix_header();
+
+  for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+    phex(row);
+    print(": ");
+    print_matrix_row(row);
+    print("\n");
+  }
+}
+
+uint8_t matrix_key_count(void) {
+  uint8_t count = 0;
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    count += matrix_bitpop(i);
+  }
+  return count;
+}
+
+static void init_i2c(void) {
+  pca9555_init(IC1);
+  pca9555_init(IC2);
+}
+
+static void init_pins(void) {
+  // init cols - IC2 port0 & IC2 port1 input
+  pca9555_set_config(IC2, PCA9555_PORT0, ALL_INPUT);
+  pca9555_set_config(IC2, PCA9555_PORT1, ALL_INPUT);
+
+  // init rows - IC1 port0 output
+  pca9555_set_config(IC1, PCA9555_PORT0, ALL_OUTPUT);
+  pca9555_set_output(IC1, PCA9555_PORT0, ALL_HIGH);
+}
+
+static void select_row(uint8_t row) {
+  // All rows are on the same IC and port
+  uint8_t mask = 1 << row;
+
+  // set active row low  : 0
+  // set other rows hi-Z : 1
+  pca9555_set_output(IC1, PCA9555_PORT0, ALL_HIGH & (~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);
+
+  uint16_t state = ((state_1 & PORT0_COLS_MASK) << 3) | ((state_2 & PORT1_COLS_MASK));
+
+  // A low pin indicates an active column
+  return (~state) & COLS_MASK;
+}
+
+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);
+
+  current_matrix[current_row] |= read_cols();
+
+  // No need to unselect as `select_row` sets all the pins.
+
+  return (last_row_value != current_matrix[current_row]);
+}
+
+void matrix_init(void) {
+  // initialize i2c
+  init_i2c();
+
+  // 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;
+
+  for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+    changed |= read_cols_on_row(raw_matrix, current_row);
+  }
+
+  debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+  matrix_scan_quantum();
+
+  return (uint8_t)changed;
+}
diff --git a/keyboards/moon/moon.c b/keyboards/moon/moon.c
new file mode 100644 (file)
index 0000000..c218bf5
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright 2019 Mathias Andersson <wraul@dbox.se>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "moon.h"
+
+#define CAPS_PIN B5
+#define SCROLL_PIN B6
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+void matrix_init_kb(void) {
+  // put your keyboard start-up code here
+  // runs once when the firmware starts up
+
+  setPinOutput(CAPS_PIN);
+  setPinOutput(SCROLL_PIN);
+
+  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
+
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinHigh(CAPS_PIN);
+  } else {
+    writePinLow(CAPS_PIN);
+  }
+
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinHigh(SCROLL_PIN);
+  } else {
+    writePinLow(SCROLL_PIN);
+  }
+
+  led_set_user(usb_led);
+}
diff --git a/keyboards/moon/moon.h b/keyboards/moon/moon.h
new file mode 100644 (file)
index 0000000..8599ade
--- /dev/null
@@ -0,0 +1,121 @@
+/* Copyright 2019 Mathias Andersson <wraul@dbox.se>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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( \
+    k06,      k07, k08, k09, k0A,      k00, k01, k02, k03,      k04, k05, k66, k67,      k68, k69, k6A, \
+    k16, k17, k18, k19, k1A, k10, k11, k12, k13, k14, k15, k60, k61,           k62,      k63, k64, k65, \
+    k26,      k27, k28, k29, k2A, k20, k21, k22, k23, k24, k25, k76, k77,      k78,      k79, k7A, k70, \
+    k36,      k37, k38, k39, k3A, k30, k31, k32, k33, k34, k35, k71,           k72,                     \
+    k46, k47, k48, k49, k4A, k40, k41, k42, k43, k44, k45, k73,                k75,           k74,      \
+    k56, k57, k58,                     k59,                     k5A, k50, k51, k52,      k53, k54, k55  \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A }, \
+    { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A }, \
+    { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A }, \
+    { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5A }, \
+    { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A }, \
+    { k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7A }, \
+}
+
+#define LAYOUT_tkl_ansi( \
+    k06,      k07, k08, k09, k0A,      k00, k01, k02, k03,      k04, k05, k66, k67,      k68, k69, k6A, \
+    k16, k17, k18, k19, k1A, k10, k11, k12, k13, k14, k15, k60, k61,           k62,      k63, k64, k65, \
+    k26,      k27, k28, k29, k2A, k20, k21, k22, k23, k24, k25, k76, k77,      k78,      k79, k7A, k70, \
+    k36,      k37, k38, k39, k3A, k30, k31, k32, k33, k34, k35, k71,           k72,                     \
+    k46,      k48, k49, k4A, k40, k41, k42, k43, k44, k45, k73,                k75,           k74,      \
+    k56, k57, k58,                     k59,                     k5A, k50, k51, k52,      k53, k54, k55  \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05, k06, k07,   k08, k09, k0A }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17,   k18, k19, k1A }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27,   k28, k29, k2A }, \
+    { k30, k31, k32, k33, k34, k35, k36, k37,   k38, k39, k3A }, \
+    { k40, k41, k42, k43, k44, k45, k46, KC_NO, k48, k49, k4A }, \
+    { k50, k51, k52, k53, k54, k55, k56, k57,   k58, k59, k5A }, \
+    { k60, k61, k62, k63, k64, k65, k66, k67,   k68, k69, k6A }, \
+    { k70, k71, k72, k73, k74, k75, k76, k77,   k78, k79, k7A }, \
+}
+
+#define LAYOUT_tkl_ansi_wkl( \
+    k06,      k07, k08, k09, k0A,      k00, k01, k02, k03,      k04, k05, k66, k67,      k68, k69, k6A, \
+    k16, k17, k18, k19, k1A, k10, k11, k12, k13, k14, k15, k60, k61,           k62,      k63, k64, k65, \
+    k26,      k27, k28, k29, k2A, k20, k21, k22, k23, k24, k25, k76, k77,      k78,      k79, k7A, k70, \
+    k36,      k37, k38, k39, k3A, k30, k31, k32, k33, k34, k35, k71,           k72,                     \
+    k46,      k48, k49, k4A, k40, k41, k42, k43, k44, k45, k73,                k75,           k74,      \
+    k56,      k58,                     k59,                          k50,      k52,      k53, k54, k55  \
+) \
+{ \
+    { k00, k01,   k02, k03, k04, k05, k06, k07,   k08, k09, k0A   }, \
+    { k10, k11,   k12, k13, k14, k15, k16, k17,   k18, k19, k1A   }, \
+    { k20, k21,   k22, k23, k24, k25, k26, k27,   k28, k29, k2A   }, \
+    { k30, k31,   k32, k33, k34, k35, k36, k37,   k38, k39, k3A   }, \
+    { k40, k41,   k42, k43, k44, k45, k46, KC_NO, k48, k49, k4A   }, \
+    { k50, KC_NO, k52, k53, k54, k55, k56, KC_NO, k58, k59, KC_NO }, \
+    { k60, k61,   k62, k63, k64, k65, k66, k67,   k68, k69, k6A   }, \
+    { k70, k71,   k72, k73, k74, k75, k76, k77,   k78, k79, k7A   }, \
+}
+
+#define LAYOUT_tkl_iso( \
+    k06,      k07, k08, k09, k0A,      k00, k01, k02, k03,      k04, k05, k66, k67,      k68, k69, k6A, \
+    k16, k17, k18, k19, k1A, k10, k11, k12, k13, k14, k15, k60, k61,           k62,      k63, k64, k65, \
+    k26,      k27, k28, k29, k2A, k20, k21, k22, k23, k24, k25, k76, k77,                k79, k7A, k70, \
+    k36,      k37, k38, k39, k3A, k30, k31, k32, k33, k34, k35, k71, k78,      k72,                     \
+    k46, k47, k48, k49, k4A, k40, k41, k42, k43, k44, k45, k73,                k75,           k74,      \
+    k56, k57, k58,                     k59,                     k5A, k50, k51, k52,      k53, k54, k55  \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A }, \
+    { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A }, \
+    { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A }, \
+    { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5A }, \
+    { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A }, \
+    { k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7A }, \
+}
+
+#define LAYOUT_tkl_iso_wkl( \
+    k06,      k07, k08, k09, k0A,      k00, k01, k02, k03,      k04, k05, k66, k67,      k68, k69, k6A, \
+    k16, k17, k18, k19, k1A, k10, k11, k12, k13, k14, k15, k60, k61,           k62,      k63, k64, k65, \
+    k26,      k27, k28, k29, k2A, k20, k21, k22, k23, k24, k25, k76, k77,                k79, k7A, k70, \
+    k36,      k37, k38, k39, k3A, k30, k31, k32, k33, k34, k35, k71, k78,      k72,                     \
+    k46, k47, k48, k49, k4A, k40, k41, k42, k43, k44, k45, k73,                k75,           k74,      \
+    k56,      k58,                     k59,                          k50,      k52,      k53, k54, k55  \
+) \
+{ \
+    { k00, k01,   k02, k03, k04, k05, k06, k07,   k08, k09, k0A   }, \
+    { k10, k11,   k12, k13, k14, k15, k16, k17,   k18, k19, k1A   }, \
+    { k20, k21,   k22, k23, k24, k25, k26, k27,   k28, k29, k2A   }, \
+    { k30, k31,   k32, k33, k34, k35, k36, k37,   k38, k39, k3A   }, \
+    { k40, k41,   k42, k43, k44, k45, k46, k47,   k48, k49, k4A   }, \
+    { k50, KC_NO, k52, k53, k54, k55, k56, KC_NO, k58, k59, KC_NO }, \
+    { k60, k61,   k62, k63, k64, k65, k66, k67,   k68, k69, k6A   }, \
+    { k70, k71,   k72, k73, k74, k75, k76, k77,   k78, k79, k7A   }, \
+}
diff --git a/keyboards/moon/pca9555.c b/keyboards/moon/pca9555.c
new file mode 100644 (file)
index 0000000..b0e542d
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright 2019
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "i2c_master.h"
+#include "pca9555.h"
+
+#include "debug.h"
+
+#define SLAVE_TO_ADDR(n) (n << 1)
+#define TIMEOUT 100
+
+enum {
+  CMD_INPUT_0 = 0,
+  CMD_INPUT_1,
+  CMD_OUTPUT_0,
+  CMD_OUTPUT_1,
+  CMD_INVERSION_0,
+  CMD_INVERSION_1,
+  CMD_CONFIG_0,
+  CMD_CONFIG_1,
+};
+
+void pca9555_init(uint8_t slave_addr) {
+  static uint8_t s_init = 0;
+  if (!s_init) {
+    i2c_init();
+
+    s_init = 1;
+  }
+
+  // TODO: could check device connected
+  // i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE);
+  // i2c_stop();
+}
+
+void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+  uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+  uint8_t cmd  = port ? CMD_CONFIG_1 : CMD_CONFIG_0;
+
+  i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
+  if (ret != I2C_STATUS_SUCCESS) {
+    print("pca9555_set_config::FAILED\n");
+  }
+}
+
+void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+  uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+  uint8_t cmd  = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0;
+
+  i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
+  if (ret != I2C_STATUS_SUCCESS) {
+    print("pca9555_set_output::FAILED\n");
+  }
+}
+
+uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) {
+  uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+  uint8_t cmd  = port ? CMD_INPUT_1 : CMD_INPUT_0;
+
+  uint8_t      data = 0;
+  i2c_status_t ret  = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT);
+  if (ret != I2C_STATUS_SUCCESS) {
+    print("pca9555_readPins::FAILED\n");
+  }
+  return data;
+}
diff --git a/keyboards/moon/pca9555.h b/keyboards/moon/pca9555.h
new file mode 100644 (file)
index 0000000..ebb97e2
--- /dev/null
@@ -0,0 +1,55 @@
+/* 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
+
+/*
+            PCA9555
+         ,----------.
+   SDA --| SDA  P00 |-- P00
+   SCL --| SCL  P01 |-- P01
+   INT --| INT  P02 |-- P02
+         |      P03 |-- P03
+   A0  --| A0   P04 |-- P04
+   A1  --| A1   P05 |-- P05
+   A2  --| A2   P06 |-- P06
+         |      P07 |-- P07
+         |          |
+         |      P10 |-- P10
+         |      P11 |-- P11
+         |      P12 |-- P12
+         |      P13 |-- P13
+         |      P14 |-- P14
+         |      P15 |-- P15
+         |      P16 |-- P16
+         |      P17 |-- P17
+         `----------'
+*/
+
+#define PCA9555_PORT0 0
+#define PCA9555_PORT1 1
+
+#define ALL_OUTPUT 0
+#define ALL_INPUT 0xFF
+#define ALL_LOW 0
+#define ALL_HIGH 0xFF
+
+void pca9555_init(uint8_t slave_addr);
+
+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);
diff --git a/keyboards/moon/readme.md b/keyboards/moon/readme.md
new file mode 100644 (file)
index 0000000..6ba3882
--- /dev/null
@@ -0,0 +1,17 @@
+# Moon
+
+![moon](https://i.imgur.com/hQeOBMs.jpg)
+
+A tenkeyless keyboard with astonishing curves. Designed and manufactured by EVE.
+
+The PCB uses the [Kimera core](https://github.com/kairyu/kimera) controller.
+
+Keyboard Maintainer: [Mathias Andersson](https://github.com/wraul)  
+Hardware Supported: Moon (only the initial black PCB with Kimera core).  
+Hardware Availability: https://geekhack.org/index.php?topic=90379.0
+
+Make example for this keyboard (after setting up your build environment):
+
+    make moon: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/moon/rules.mk b/keyboards/moon/rules.mk
new file mode 100644 (file)
index 0000000..699fc33
--- /dev/null
@@ -0,0 +1,77 @@
+# Project specific files
+SRC += i2c_master.c pca9555.c matrix.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# Supported layouts
+LAYOUTS = tkl_ansi tkl_iso
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no         # Enable support for HD44780 based LCDs (+400)
+CUSTOM_MATRIX = yes
index ea227f71d9064608795db808416cab3bdda75689..4edb13e8c02de46904552b10514ed90cdc60d916 100755 (executable)
@@ -5,7 +5,7 @@
     "width": 16, 
     "height": 5, 
     "layouts": {
-        "LAYOUT": {
+        "LAYOUT_65_ansi": {
             "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Page Up", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Page Down", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
         }
     }
diff --git a/keyboards/ok60/keymaps/ptillemans/keymap.c b/keyboards/ok60/keymaps/ptillemans/keymap.c
new file mode 100644 (file)
index 0000000..ff77784
--- /dev/null
@@ -0,0 +1,20 @@
+#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_BSLS, KC_ENT,
+        KC_LSFT, KC_GRAVE, KC_Z,    KC_X,    KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT,  KC_SLSH, MT(MOD_RSFT,KC_UP),
+        KC_LCTL, KC_LGUI, KC_LALT,               KC_SPC,                        MO(1),   MT(MOD_RALT,KC_LEFT), MT(MOD_RGUI,KC_DOWN), MT(MOD_RCTL,KC_RGHT)
+    ),
+
+    [1] = 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,
+        _______, RGB_TOG, KC_UP,   RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_PSCR, _______, _______,
+        _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, BL_DEC,  BL_TOGG, BL_INC,  _______, AG_NORM, AG_SWAP, _______, _______, _______, _______,
+        _______, _______, _______,                   _______,                            _______, _______, _______, _______
+    ),
+};
diff --git a/keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.c b/keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.c
new file mode 100644 (file)
index 0000000..19adfb9
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+    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_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/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.h b/keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.h
new file mode 100644 (file)
index 0000000..ee9d31e
--- /dev/null
@@ -0,0 +1,896 @@
+/*
+    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 STMicroelectronics STM32 Nucleo32-F042K6 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F042X6
+#define BOARD_NAME                  "Generic STM32F042 PCB"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ * NOTE: HSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK                0U
+#endif
+
+#define STM32_LSEDRV                (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK                0U
+#endif
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F042x6
+
+/*
+ * 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_PIN11                11U
+#define GPIOA_PIN12                12U
+#define GPIOA_PIN13                 13U
+#define GPIOA_PIN14                 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_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
+
+/*
+ * IO lines assignments.
+ */
+
+#define LINE_BOOT0                  PAL_LINE(GPIOB, 8U)
+#define LINE_SWCLK                  PAL_LINE(GPIOA, 14U)
+#define LINE_SWDIO                  PAL_LINE(GPIOA, 13U)
+
+/*
+ * 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  - COL5
+ * PA1  - COL4
+ * PA2  - COL3
+ * PA3  - COL2
+ * PA4  - COL1
+ * PA5  - COL0
+ * PA6  - ROW4
+ * PA7  - ROW3
+ * PA8  - NC
+ * PA9  - ROW1
+ * PA10 - ROW0
+ * PA11 - USB_DM
+ * PA12 - USB_DP
+ * PA13 - COL15/SWDIO (for now, COL15)
+ * PA14 - COL14/SWCLK (for now, COL14)
+ * PA15 - COL13
+ */
+#define VAL_GPIOA_MODER             (PIN_MODE_INPUT(GPIOA_PIN0) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN2) |     \
+                                     PIN_MODE_INPUT(GPIOA_PIN3) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN4) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN5) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN6) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN7) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN8) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN9) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN10) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN11) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN12) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN13) |      \
+                                     PIN_MODE_INPUT(GPIOA_PIN14) |      \
+                                     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_PIN11) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN12) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOA_PIN0) |          \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN1) |          \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN2) |         \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN3) |         \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN4) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN5) |         \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN6) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN7) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN8) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN9) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN10) |        \
+                                     PIN_OSPEED_HIGH(GPIOA_PIN11) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN12) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN13) |         \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN14) |         \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR             (PIN_PUPDR_PULLUP(GPIOA_PIN0) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN2) |     \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN3) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN4) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN5) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN6) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN7) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN8) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN9) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN10) |       \
+                                     PIN_PUPDR_FLOATING(GPIOA_PIN11) |       \
+                                     PIN_PUPDR_FLOATING(GPIOA_PIN12) |       \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN14) |      \
+                                     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_PIN11) |           \
+                                     PIN_ODR_HIGH(GPIOA_PIN12) |           \
+                                     PIN_ODR_HIGH(GPIOA_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOA_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL              (PIN_AFIO_AF(GPIOA_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN2, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN3, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN4, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN5, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN6, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN7, 0U))
+#define VAL_GPIOA_AFRH              (PIN_AFIO_AF(GPIOA_PIN8, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN9, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN10, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN11, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN12, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOA_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOA_PIN15, 0U))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0  - ROW2
+ * PB1  - RGB_D
+ * PB2  - PIN2                      (input pullup).
+ * PB3  - COL12
+ * PB4  - COL11
+ * PB5  - COL10
+ * PB6  - COL9
+ * PB7  - COL8
+ * PB8  - BOOT0 (set as output for STM32F042)
+ * 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_OUTPUT(GPIOB_PIN1) |         \
+                                     PIN_MODE_INPUT(GPIOB_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN3) |       \
+                                     PIN_MODE_INPUT(GPIOB_PIN4) |        \
+                                     PIN_MODE_INPUT(GPIOB_PIN5) |        \
+                                     PIN_MODE_INPUT(GPIOB_PIN6) |         \
+                                     PIN_MODE_INPUT(GPIOB_PIN7) |         \
+                                     PIN_MODE_OUTPUT(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_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_HIGH(GPIOB_PIN1) |        \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN2) |          \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN3) |       \
+                                     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_HIGH(GPIOB_PIN9) |          \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN10) |         \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN11) |         \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN12) |         \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN13) |         \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN14) |         \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_PUPDR             (PIN_PUPDR_PULLUP(GPIOB_PIN0) |       \
+                                     PIN_PUPDR_FLOATING(GPIOB_PIN1) |       \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN3) |    \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN4) |      \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN5) |      \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN6) |       \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN7) |       \
+                                     PIN_PUPDR_PULLDOWN(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_HIGH(GPIOB_PIN7) |           \
+                                     PIN_ODR_HIGH(GPIOB_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_AFRL              (PIN_AFIO_AF(GPIOB_PIN0, 0U) |        \
+                                     PIN_AFIO_AF(GPIOB_PIN1, 0U) |        \
+                                     PIN_AFIO_AF(GPIOB_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN3, 0U) |       \
+                                     PIN_AFIO_AF(GPIOB_PIN4, 0U) |       \
+                                     PIN_AFIO_AF(GPIOB_PIN5, 0U) |       \
+                                     PIN_AFIO_AF(GPIOB_PIN6, 0U) |        \
+                                     PIN_AFIO_AF(GPIOB_PIN7, 0U))
+#define VAL_GPIOB_AFRH              (PIN_AFIO_AF(GPIOB_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOB_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOB_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOB_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 pullup).
+ * PC15 - PIN15                     (input pullup).
+ */
+#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_HIGH(GPIOC_PIN0) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN1) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN2) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN3) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN4) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN5) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN6) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN7) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN8) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN9) |          \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN10) |         \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN11) |         \
+                                     PIN_OSPEED_HIGH(GPIOC_PIN12) |         \
+                                     PIN_OSPEED_HIGH(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_PULLUP(GPIOC_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN15))
+#define VAL_GPIOC_ODR               (PIN_ODR_HIGH(GPIOC_PIN0) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_AFRL              (PIN_AFIO_AF(GPIOC_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN7, 0U))
+#define VAL_GPIOC_AFRH              (PIN_AFIO_AF(GPIOC_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN15, 0U))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0  - PIN0                      (input pullup).
+ * PD1  - PIN1                      (input pullup).
+ * PD2  - PIN2                      (input pullup).
+ * PD3  - PIN3                      (input pullup).
+ * PD4  - PIN4                      (input pullup).
+ * PD5  - PIN5                      (input pullup).
+ * PD6  - PIN6                      (input pullup).
+ * PD7  - PIN7                      (input pullup).
+ * PD8  - PIN8                      (input pullup).
+ * PD9  - PIN9                      (input pullup).
+ * PD10 - PIN10                     (input pullup).
+ * PD11 - PIN11                     (input pullup).
+ * PD12 - PIN12                     (input pullup).
+ * PD13 - PIN13                     (input pullup).
+ * PD14 - PIN14                     (input pullup).
+ * PD15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOD_MODER             (PIN_MODE_INPUT(GPIOD_PIN0) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR           (PIN_OSPEED_HIGH(GPIOD_PIN0) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN1) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN2) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN3) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN4) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN5) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN6) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN7) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN8) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN9) |          \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN10) |         \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN11) |         \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN12) |         \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN13) |         \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN14) |         \
+                                     PIN_OSPEED_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR             (PIN_PUPDR_PULLUP(GPIOD_PIN0) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR               (PIN_ODR_HIGH(GPIOD_PIN0) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL              (PIN_AFIO_AF(GPIOD_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN7, 0U))
+#define VAL_GPIOD_AFRH              (PIN_AFIO_AF(GPIOD_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN15, 0U))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0  - PIN0                      (input pullup).
+ * PE1  - PIN1                      (input pullup).
+ * PE2  - PIN2                      (input pullup).
+ * PE3  - PIN3                      (input pullup).
+ * PE4  - PIN4                      (input pullup).
+ * PE5  - PIN5                      (input pullup).
+ * PE6  - PIN6                      (input pullup).
+ * PE7  - PIN7                      (input pullup).
+ * PE8  - PIN8                      (input pullup).
+ * PE9  - PIN9                      (input pullup).
+ * PE10 - PIN10                     (input pullup).
+ * PE11 - PIN11                     (input pullup).
+ * PE12 - PIN12                     (input pullup).
+ * PE13 - PIN13                     (input pullup).
+ * PE14 - PIN14                     (input pullup).
+ * PE15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOE_MODER             (PIN_MODE_INPUT(GPIOE_PIN0) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR           (PIN_OSPEED_HIGH(GPIOE_PIN0) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN1) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN2) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN3) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN4) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN5) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN6) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN7) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN8) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN9) |          \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN10) |         \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN11) |         \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN12) |         \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN13) |         \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN14) |         \
+                                     PIN_OSPEED_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR             (PIN_PUPDR_PULLUP(GPIOE_PIN0) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN15))
+#define VAL_GPIOE_ODR               (PIN_ODR_HIGH(GPIOE_PIN0) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL              (PIN_AFIO_AF(GPIOE_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN7, 0U))
+#define VAL_GPIOE_AFRH              (PIN_AFIO_AF(GPIOE_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN15, 0U))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0  - COL7
+ * PF1  - COL6
+ * PF2  - PIN2                      (input pullup).
+ * PF3  - PIN3                      (input pullup).
+ * PF4  - PIN4                      (input pullup).
+ * PF5  - PIN5                      (input pullup).
+ * PF6  - PIN6                      (input pullup).
+ * PF7  - PIN7                      (input pullup).
+ * PF8  - PIN8                      (input pullup).
+ * PF9  - PIN9                      (input pullup).
+ * PF10 - PIN10                     (input pullup).
+ * PF11 - PIN11                     (input pullup).
+ * PF12 - PIN12                     (input pullup).
+ * PF13 - PIN13                     (input pullup).
+ * PF14 - PIN14                     (input pullup).
+ * PF15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOF_MODER             (PIN_MODE_INPUT(GPIOF_PIN0) |         \
+                                     PIN_MODE_INPUT(GPIOF_PIN1) |         \
+                                     PIN_MODE_INPUT(GPIOF_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOF_PIN0) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN1) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOF_PIN0) |        \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN1) |        \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN2) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN3) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN4) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN5) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN6) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN7) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN8) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN9) |          \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN10) |         \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN11) |         \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN12) |         \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN13) |         \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN14) |         \
+                                     PIN_OSPEED_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR             (PIN_PUPDR_PULLUP(GPIOF_PIN0) |       \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN1) |       \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR               (PIN_ODR_HIGH(GPIOF_PIN0) |           \
+                                     PIN_ODR_HIGH(GPIOF_PIN1) |           \
+                                     PIN_ODR_HIGH(GPIOF_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL              (PIN_AFIO_AF(GPIOF_PIN0, 0U) |        \
+                                     PIN_AFIO_AF(GPIOF_PIN1, 0U) |        \
+                                     PIN_AFIO_AF(GPIOF_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN7, 0U))
+#define VAL_GPIOF_AFRH              (PIN_AFIO_AF(GPIOF_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN15, 0U))
+
+#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/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.mk b/keyboards/peiorisboards/ixora/boards/GENERIC_STM32_F042X6/board.mk
new file mode 100644 (file)
index 0000000..bbeb5bb
--- /dev/null
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F042X6/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F042X6
diff --git a/keyboards/peiorisboards/ixora/bootloader_defs.h b/keyboards/peiorisboards/ixora/bootloader_defs.h
new file mode 100644 (file)
index 0000000..4994be9
--- /dev/null
@@ -0,0 +1,7 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ *  <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFC400
\ No newline at end of file
diff --git a/keyboards/peiorisboards/ixora/chconf.h b/keyboards/peiorisboards/ixora/chconf.h
new file mode 100644 (file)
index 0000000..b836a3b
--- /dev/null
@@ -0,0 +1,521 @@
+/*
+    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               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                       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         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.*/                                              \
+}
+
+/**
+ * @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 */
+
+/** @} */
\ No newline at end of file
diff --git a/keyboards/peiorisboards/ixora/config.h b/keyboards/peiorisboards/ixora/config.h
new file mode 100644 (file)
index 0000000..bf74b13
--- /dev/null
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0C61
+#define DEVICE_VER      0x00C6
+#define MANUFACTURER    PeiorisBoards
+#define PRODUCT         Ixora Rev1
+#define DESCRIPTION     6key Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 6
+
+#define MATRIX_ROW_PINS { A0 }
+#define MATRIX_COL_PINS { B4, A15, B3, A1, B6, B5 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 0
diff --git a/keyboards/peiorisboards/ixora/halconf.h b/keyboards/peiorisboards/ixora/halconf.h
new file mode 100644 (file)
index 0000000..bc2b66f
--- /dev/null
@@ -0,0 +1,350 @@
+/*
+    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          TRUE
+#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                FALSE
+#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    FALSE
+#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     256
+#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                FALSE
+#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
+
+/*===========================================================================*/
+/* 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_ */
+
+/** @} */
\ No newline at end of file
diff --git a/keyboards/peiorisboards/ixora/info.json b/keyboards/peiorisboards/ixora/info.json
new file mode 100644 (file)
index 0000000..a181863
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "keyboard_name": "Ixora",
+    "url": "",
+    "maintainer": "Peioris",
+    "width": 3,
+    "height": 2,
+    "layouts": {
+        "LAYOUT_full": {
+            "layout": [{"label":"1", "x":0, "y":0}, {"label":"2", "x":1, "y":0}, {"label":"3", "x":2, "y":0}, {"label":"Caps Lock", "x":0, "y":1}, {"label":"Num Lock", "x":1, "y":1}, {"label":"Scroll Lock", "x":2, "y":1}]
+        },
+        "LAYOUT_blocker_right": {
+            "layout": [{"label":"1", "x":0, "y":0}, {"label":"2", "x":1, "y":0}, {"label":"Caps Lock", "x":0, "y":1}, {"label":"Num Lock", "x":1, "y":1}, {"label":"Scroll Lock", "x":2, "y":1}]
+        },
+        "LAYOUT_blocker_left": {
+            "layout": [{"label":"2", "x":1, "y":0}, {"label":"3", "x":2, "y":0}, {"label":"Caps Lock", "x":0, "y":1}, {"label":"Num Lock", "x":1, "y":1}, {"label":"Scroll Lock", "x":2, "y":1}]
+        },
+        "LAYOUT_arrows": {
+            "layout": [{"label":"\u2191", "x":1, "y":0}, {"label":"\u2190", "x":0, "y":1}, {"label":"\u2193", "x":1, "y":1}, {"label":"\u2192", "x":2, "y":1}]
+        }
+    }
+  }
diff --git a/keyboards/peiorisboards/ixora/ixora.c b/keyboards/peiorisboards/ixora/ixora.c
new file mode 100644 (file)
index 0000000..7996db6
--- /dev/null
@@ -0,0 +1,43 @@
+#include "ixora.h"
+
+void matrix_init_kb(void) {
+    // put your keyboard start-up code here
+    // runs once when the firmware starts up
+    setPinOutput(A8);
+    setPinOutput(A9);
+    setPinOutput(A10);
+    writePinLow(A8);
+    writePinLow(A9);
+    writePinLow(A10);
+
+    matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+
+    matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+
+    return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinHigh(A10);
+    } else {
+        writePinLow(A10);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinHigh(A9);
+    } else {
+        writePinLow(A9);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinHigh(A8);
+    } else {
+        writePinLow(A8);
+    }
+    led_set_user(usb_led);
+}
diff --git a/keyboards/peiorisboards/ixora/ixora.h b/keyboards/peiorisboards/ixora/ixora.h
new file mode 100644 (file)
index 0000000..92cf658
--- /dev/null
@@ -0,0 +1,40 @@
+#pragma once
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+
+#define LAYOUT_full( \
+    K00, K01, K02, \
+    K03, K04, K05  \
+) \
+{ \
+    { K00, K01, K02, K03, K04, K05 } \
+}
+
+#define LAYOUT_blocker_right( \
+    K00, K01,      \
+    K03, K04, K05  \
+) \
+{ \
+    { K00, K01, XXX, K03, K04, K05 } \
+}
+
+#define LAYOUT_blocker_left( \
+         K01, K02, \
+    K03, K04, K05  \
+) \
+{ \
+    { XXX, K01, K02, K03, K04, K05 } \
+}
+
+#define LAYOUT_arrows( \
+         K01,      \
+    K03, K04, K05  \
+) \
+{ \
+    { XXX, K01, XXX, K03, K04, K05 } \
+}
+
diff --git a/keyboards/peiorisboards/ixora/keymaps/default/keymap.c b/keyboards/peiorisboards/ixora/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..85a6468
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright 2018 Peioris
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-----------------.
+   * |RESET|  2  |  3  |
+   * |-----------------|
+   * |Caps |NmLk |ScLk |
+   * `-----------------'
+   */
+[0] = LAYOUT_full(
+  RESET,    KC_2,    KC_3,
+  KC_CAPS, KC_NLCK, KC_SLCK)
+};
+
+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/peiorisboards/ixora/keymaps/wntrmln/keymap.c b/keyboards/peiorisboards/ixora/keymaps/wntrmln/keymap.c
new file mode 100644 (file)
index 0000000..3e08c78
--- /dev/null
@@ -0,0 +1,26 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-----------------.
+   * |RESET|  2  |  3  |
+   * |-----------------|
+   * |Caps |NmLk |ScLk |
+   * `-----------------'
+   */
+[0] = LAYOUT_full(
+  KC_PSCR, KC_MUTE, LGUI(KC_1),
+  KC_MPRV, KC_MPLY, KC_MNXT)
+};
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
diff --git a/keyboards/peiorisboards/ixora/mcuconf.h b/keyboards/peiorisboards/ixora/mcuconf.h
new file mode 100644 (file)
index 0000000..4643e9f
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+    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_ */
\ No newline at end of file
diff --git a/keyboards/peiorisboards/ixora/readme.md b/keyboards/peiorisboards/ixora/readme.md
new file mode 100644 (file)
index 0000000..1a011ba
--- /dev/null
@@ -0,0 +1,22 @@
+Ixora
+=========
+
+[Ixora](https://i.imgur.com/GqDk3XY.png)
+
+
+Ixora is an ARM-powered 6-key macropad with a USB connector, hotswap sockets, and indicator LEDs.
+
+Keyboard Maintainer: [Peioris](https://github.com/coarse)  
+Hardware Supported: Ixora PCB  
+Hardware Availability: [Peioris](https://github.com/coarse)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make peiorisboards/ixora:default:dfu-util
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+#### Developer's Note
+
+STM32F042xx chips does not allow jumping to bootloader without BOOT0 being set to high, therefore it is impossible to enter the bootloader from sending a `RESET` keycode nor using bootmagic or bootmagic lite.  
+The only way to enter bootloader is to hold the BOOT0 button while the keyboard is powering up or after a power reset (done by pressing the reset switch or sending a `RESET` keycode).
diff --git a/keyboards/peiorisboards/ixora/rules.mk b/keyboards/peiorisboards/ixora/rules.mk
new file mode 100644 (file)
index 0000000..9d89d96
--- /dev/null
@@ -0,0 +1,47 @@
+# project specific files
+
+## chip/board settings
+# - the next two should match the directories in
+#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F0xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F042x6
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f0xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F042X6
+
+# Cortex version
+MCU  = cortex-m0
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 6
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+#OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no
+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
+NKRO_ENABLE = yes                                      # USB Nkey Rollover
+NO_USB_STARTUP_CHECK = no              # Disable initialization only when usb is plugged in
index 311cc110bfbd24c1ddc594601640387420b1b640..90ad2bc596320e6705ea6633e9a143743fcb7ab2 100644 (file)
@@ -43,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------|------+------+------+------+------+------|
  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Alt  | GUI  |Lower |    Space    | Bksp |Raise | Left | Down |  Up  |Right |
+ * | Ctrl | AltGr|  Alt | GUI  |Lower |Space | Bksp |Raise | Left | Down |  Up  |Right |
  * `-----------------------------------------------------------------------------------'
  */
 [_DVORAK] = LAYOUT_planck_grid(
     KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH,
     KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINUS,
-    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_LALT, KC_LGUI, LOWER,   KC_SPC, KC_SPC,  KC_BSPC, RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+    KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_SFTENT,
+    KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_BSPC, RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
 ),
 
 /* Lower
@@ -61,15 +61,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------|------+------+------+------+------+------|
  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      | AltGr|      |      |             | Del  |      | Play | Vol- | Vol+ | Next |
+ * |      |      |      |      |      |      | Del  |      | Play | Vol- | Vol+ | Next |
  * `-----------------------------------------------------------------------------------'
- *          ^-- sticky
  */
 [_LOWER] = LAYOUT_planck_grid(
-    KC_TILD, KC_EXLM,       KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC,
-    KC_DEL,  KC_F1,         KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE,
-    _______, KC_F7,         KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS),    KC_HOME, KC_END,  KC_ENT,
-    _______, OSM(MOD_RALT), _______, _______, _______, _______, KC_DEL,  _______,    KC_MPLY,    KC_VOLD, KC_VOLU, KC_MNXT
+    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_DEL,  _______,    KC_MPLY,    KC_VOLD, KC_VOLU, KC_MNXT
 ),
 
 /* Raise
@@ -80,15 +79,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------|------+------+------+------+------+------|
  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      | AltGr|      |      |             | Del  |      | Play | Vol- | Vol+ | Next |
+ * |      |      |      |      |      |      | Del  |      | Play | Vol- | Vol+ | Next |
  * `-----------------------------------------------------------------------------------'
- *          ^-- sticky
  */
 [_RAISE] = LAYOUT_planck_grid(
-    KC_GRV,  KC_1,          KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
-    KC_DEL,  KC_F1,         KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
-    _______, KC_F7,         KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, KC_ENT,
-    _______, OSM(MOD_RALT), _______, _______, _______, _______, KC_DEL,  _______, KC_MPLY, KC_VOLD, KC_VOLU, KC_MNXT
+    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_DEL,  _______,    KC_MPLY,    KC_VOLD, KC_VOLU, KC_MNXT
 ),
 
 /* Adjust (Lower + Raise)
@@ -103,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 [_ADJUST] = LAYOUT_planck_grid(
-    _______, RESET,   DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD,  RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, 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, _______, _______,  _______, _______, _______,
     _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______
diff --git a/keyboards/planck/keymaps/ptillemans/config.h b/keyboards/planck/keymaps/ptillemans/config.h
new file mode 100644 (file)
index 0000000..d9be4c0
--- /dev/null
@@ -0,0 +1,43 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+    #define STARTUP_SONG SONG(PLANCK_SOUND)
+    // #define STARTUP_SONG SONG(NO_SOUND)
+
+    #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+                                  SONG(COLEMAK_SOUND), \
+                                  SONG(DVORAK_SOUND) \
+                                }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
+
+// setup double tapping to lock layers
+#define TAPPING_TERM 175
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/planck/keymaps/ptillemans/keymap.c b/keyboards/planck/keymaps/ptillemans/keymap.c
new file mode 100644 (file)
index 0000000..c1f847e
--- /dev/null
@@ -0,0 +1,322 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _PLOVER,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  DVORAK,
+  PLOVER,
+  BACKLIT,
+  EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+#define MY_SHEN MT(MOD_LSFT, KC_ENT)
+#define MY_CTES MT(MOD_LCTL, KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * |   Q  |   W  |   E  |   R  |   T  | PgUp |  Up  |   Y  |   U  |   I  |   O  |   P  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   A  |   S  |   D  |   F  |   G  | PgDn | Down |   H  |   J  |   K  |   L  |   ;  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |   Z  |   X  |   C  |   V  |   B  | Home |  End |   N  |   M  |   ,  |   .  |   /  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Raise| Tab  | super| Alt  |  BS  |   Ctrl/Esc |Spc/Alt| Lower|   '  |   \  |Sh/Ent|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T, KC_PGUP,   KC_UP,    KC_Y,    KC_U,   KC_I,     KC_O,    KC_P,
+    KC_A,    KC_S,    KC_D,    KC_F,    KC_G, KC_PGDN, KC_DOWN,    KC_H,    KC_J,   KC_K,     KC_L, KC_SCLN,
+    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B, KC_HOME,  KC_END,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,
+    LOWER, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, MY_CTES, MY_CTES,  KC_SPC,   RAISE, KC_QUOT,KC_MINUS, MY_SHEN
+),
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+    KC_TAB , KC_QUOT, KC_COMM,  KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L, KC_BSPC,
+    MY_CTES,    KC_A,    KC_O,    KC_E,  KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S, KC_SLSH,
+    KC_LSFT, KC_SCLN, KC_Q,       KC_J,  KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z, MY_SHEN ,
+    BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,  KC_SPC,  KC_SPC,   RAISE, KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Ins  | Home |  Up  | End  | PgUp |      |      |      |  F7  |  F8  |  F9  |  F10 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  | Left | Down |Right | PgDn |      |      |      |  F4  |  F5  |  F6  |  F11 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | Vol+ |      |      |      |      |      |      |  F1  |  F2  |  F3  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Vol- |      |      | Next |             |      |      |PrtScr| Lock | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+    KC_INS, KC_HOME,    KC_UP,  KC_END, KC_PGUP, KC_PERC, KC_CIRC, KC_AMPR,   KC_F7,   KC_F8,   KC_F9,  KC_F10,
+    KC_DEL, KC_LEFT,  KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______,   KC_F4,   KC_F5,   KC_F6,  KC_F11,
+    _______, KC_VOLU, _______, _______, _______, _______, _______, KC_TILD,   KC_F1,   KC_F2,   KC_F3,  KC_F12,
+    _______, KC_VOLD, _______, _______, KC_MNXT, _______, _______, _______,  TO(_QWERTY), KC_PSCR, KC_SLCK, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   !  |   @  |  Up  |   _  |   +  |      |      | PgUp |   7  |   8  |   9  |   *  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   #  | Left | Down |Right |   $  |      |      | PgDn |   4  |   5  |   6  |   +
+|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |   [  |   ]  |   (  |   )  |   &  |      |      |   `  |   1  |   2  |   3  |   \  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |   .  |   0  |   =  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+    KC_EXLM,   KC_AT,   KC_UP, KC_UNDS, KC_PLUS, _______, _______,  KC_PGUP,    KC_7,    KC_8,    KC_9, KC_ASTR,
+    KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT,  KC_DLR, _______, _______,  KC_PGDN,    KC_4,    KC_5,    KC_6, KC_PLUS,
+    KC_MINS,  KC_EQL, KC_LPRN, KC_RPRN, KC_AMPR, _______, _______,   KC_GRV,    KC_1,    KC_2,    KC_3, KC_BSLS,
+    _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY),  KC_DOT,     KC_0,  KC_RBRC
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PLOVER] = LAYOUT_planck_grid(
+    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   ,
+    XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
+    XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|      |Qwerty|Dvorak|Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+    _______, RESET,   DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD,  RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______,  QWERTY,  DVORAK,  PLOVER,  _______,
+    BACKLIT, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______
+)
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+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 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 DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+        #ifdef KEYBOARD_planck_rev5
+          PORTE &= ~(1<<6);
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+        #ifdef KEYBOARD_planck_rev5
+          PORTE |= (1<<6);
+        #endif
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_SONG(plover_song);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+  if (muse_mode) {
+    if (IS_LAYER_ON(_RAISE)) {
+      if (clockwise) {
+        muse_offset++;
+      } else {
+        muse_offset--;
+      }
+    } else {
+      if (clockwise) {
+        muse_tempo+=1;
+      } else {
+        muse_tempo-=1;
+      }
+    }
+  } else {
+    if (clockwise) {
+      #ifdef MOUSEKEY_ENABLE
+        register_code(KC_MS_WH_DOWN);
+        unregister_code(KC_MS_WH_DOWN);
+      #else
+        register_code(KC_PGDN);
+        unregister_code(KC_PGDN);
+      #endif
+    } else {
+      #ifdef MOUSEKEY_ENABLE
+        register_code(KC_MS_WH_UP);
+        unregister_code(KC_MS_WH_UP);
+      #else
+        register_code(KC_PGUP);
+        unregister_code(KC_PGUP);
+      #endif
+    }
+  }
+}
+
+void dip_update(uint8_t index, bool active) {
+  switch (index) {
+    case 0:
+      if (active) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_song);
+        #endif
+        layer_on(_ADJUST);
+      } else {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_ADJUST);
+      }
+      break;
+    case 1:
+      if (active) {
+        muse_mode = true;
+      } else {
+        muse_mode = false;
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+        #endif
+      }
+   }
+}
+
+void matrix_scan_user(void) {
+  #ifdef AUDIO_ENABLE
+    if (muse_mode) {
+      if (muse_counter == 0) {
+        uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+        if (muse_note != last_muse_note) {
+          stop_note(compute_freq_for_midi_note(last_muse_note));
+          play_note(compute_freq_for_midi_note(muse_note), 0xF);
+          last_muse_note = muse_note;
+        }
+      }
+      muse_counter = (muse_counter + 1) % muse_tempo;
+    }
+  #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+  switch (keycode) {
+    case RAISE:
+    case LOWER:
+      return false;
+    default:
+      return true;
+  }
+}
diff --git a/keyboards/planck/keymaps/ptillemans/readme.md b/keyboards/planck/keymaps/ptillemans/readme.md
new file mode 100644 (file)
index 0000000..de9680b
--- /dev/null
@@ -0,0 +1,2 @@
+# The Default Planck Layout
+
diff --git a/keyboards/planck/keymaps/ptillemans/rules.mk b/keyboards/planck/keymaps/ptillemans/rules.mk
new file mode 100644 (file)
index 0000000..c329d16
--- /dev/null
@@ -0,0 +1,2 @@
+SRC += muse.c
+BACKLIGHT_ENABLE = yes
index bae774211a48ba9e6bd06df321c781a891817e78..ba0ed525e03783360f1b6fc759f9c13bff0125cc 100644 (file)
@@ -3,9 +3,6 @@
 
 #include "config_common.h"
 
-#define NO_AUTO_SHIFT_SPECIAL
-#define NO_AUTO_SHIFT_ALPHA
-
 #ifdef AUDIO_ENABLE
     #define STARTUP_SONG SONG(PREONIC_SOUND)
     // #define STARTUP_SONG SONG(NO_SOUND)
index 5a7fa40e56d4f1c2cbbd45fef5537d5a7a1b78c7..907360d0cfa16c7eb74ab326e8c29ec0fcae4002 100644 (file)
 enum preonic_layers {
   _QWERTY,
   _GAME,
-  _GAME_MOD,
   _LOWER,
   _RAISE,
   _ADJUST,
 };
 
 enum preonic_keycodes {
-  QWERTY = SAFE_RANGE,
+  QWERTY = USER_SAFE_RANGE,
   GAME,
-  GAME_MOD,
   LOWER,
   RAISE,
-
-  END_OF_LINE,
 };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -42,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * ,-----------------------------------------------------------------------------------.
  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  \   |
+ * | Tab/M|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  \   |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
  * | Esc/C|   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  '   |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
@@ -53,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [_QWERTY] = LAYOUT_preonic_grid_wrapper( \
   KC_GRV,  _________________NUMBER_L1_________________, _________________NUMBER_R1_________________, KC_BSPC, \
-  KC_TAB,  _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, \
+  KT_MTAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, \
   KT_CESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, \
   KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT,  \
   KC_LEAD, GAME, KC_LALT, KC_LGUI, LOWER,       KC_SPC, KC_SPC,      RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT  \
@@ -61,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Game
  *
- * Mostly transparent, but wanted to disable gui key, and give different raise / lower layers ( game_mod ).
+ * Mostly transparent, but wanted to disable gui key.
  * Also give a key to get back to qwerty layout.
  *
  * ,-----------------------------------------------------------------------------------.
@@ -73,104 +69,83 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------|------+------+------+------+------+------|
  * |      |      |      |      |      |      |      |      |      |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |Qwerty|      |  Spc |Game+ |             |Game+ |      |      |      |      |
+ * |      |Qwerty|      |  Spc |      |             |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
 [_GAME] = LAYOUT_preonic_grid_wrapper( \
-  _______, _______, _______, _______, _______,  _______, _______, _______,  _______, _______, _______, _______, \
-  _______, _______, _______, _______, _______,  _______, _______, _______,  _______, _______, _______, _______, \
-  _______, _______, _______, _______, _______,  _______, _______, _______,  _______, _______, _______, _______, \
-  _______, _______, _______, _______, _______,  _______, _______, _______,  _______, _______, _______, _______, \
-  _______, QWERTY,  _______, KC_SPC,  GAME_MOD, _______, _______, GAME_MOD, _______, _______, _______, _______  \
-),
-
-/* Game Modifiers
- * ,-----------------------------------------------------------------------------------.
- * |      |      |      |      |      |      |      |      |      |      |      |      |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |  F9  |  F10 |  F11 |  F12 |  `   |      |  7   |  8   |  9   |      |      |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |  F5  |  F6  |  F7  |  F8  |  ~   |      |  4   |  5   |  6   |      |      |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |Shift |  F1  |  F2  |  F3  |  F4  |      |      |  1   |  2   |  3   |      |      |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |      |      |      |             |      |  0   |  0   |      |      |
- * `-----------------------------------------------------------------------------------'
- */
-[_GAME_MOD] = LAYOUT_preonic_grid_wrapper( \
   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-  _______, ____________FUNCTION_3____________, KC_GRV,  _______, KC_7,    KC_8,    KC_9,    _______, _______, \
-  _______, ____________FUNCTION_2____________, KC_TILD, _______, KC_4,    KC_5,    KC_6,    _______, _______, \
-  KC_LSFT, ____________FUNCTION_1____________, _______, _______, KC_1,    KC_2,    KC_3,    _______, _______, \
-  _______, _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______, _______  \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, QWERTY,  _______, KC_SPC,  _______, _______, _______, _______, _______, _______, _______, _______  \
 ),
 
 /* Lower
  * ,-----------------------------------------------------------------------------------.
- * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      |
+ * | E`~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |      |      |  Up  |      |   `  |      |   {  |   }  |  _   |      |  |   |
+ * |      |      |      |  Up  |      |   `  |   <  |   {  |   }  |  _   |      |  |   |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
  * |      | Del  | Left | Down | Right|   ~  |   =  |   (  |   )  |  +   |  :   |  "   |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      | Vol- | Prev | Play | Next | Vol+ |   -  |   [  |   ]  |      |  ?   |      |
+ * |      | Vol- | Prev | Play | Next | Vol+ |   -  |   [  |   ]  |  >   |  ?   |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      | Mute |      |      |      |             |      | Home | PgUp | PgDwn| End  |
+ * |      | Mute |      |      |      |             |      | Home | PgDn | PgUp | End  |
  * `-----------------------------------------------------------------------------------'
  */
 [_LOWER] = LAYOUT_preonic_grid_wrapper( \
-  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,   KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
-  _______, _______, _______, KC_UP,   _______,  KC_GRV,  _______, KC_LCBR, KC_RCBR, KC_UNDS, _______, KC_PIPE, \
-  _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RIGHT, KC_TILD, KC_EQL,  KC_LPRN, KC_RPRN, KC_PLUS, KC_COLN, KC_DQT , \
-  _______, KC_VOLD, KC_MRWD, KC_MPLY, KC_MFFD,  KC_VOLU, KC_MINS, KC_LBRC, KC_RBRC, _______, KC_QUES, _______, \
-  _______, KC_MUTE, _______, _______, _______,  _______, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END   \
+  KC_GESC, _________________SYMBOL_L1_________________,  _________________SYMBOL_R1_________________, _______, \
+  _______, _______, _______, KC_UP,   _______,  KC_GRV,  _______, ____CRBRACES____, KC_UNDS, _______, KC_PIPE, \
+  _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RIGHT, KC_TILD, KC_EQL,  _____PARENS_____, KC_PLUS, KC_COLN, KC_DQT , \
+  _______, KC_VOLD, KC_MRWD, KC_MPLY, KC_MFFD,  KC_VOLU, KC_MINS, ___SQBRACKETS___, _______, KC_QUES, _______, \
+  _______, KC_MUTE, _______, _______, _______,  _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END   \
 ),
 
 /* Raise
  * ,-----------------------------------------------------------------------------------.
- * | E`~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |  F9  |  F10 |  F11 |  F12 |      |      |   {  |   }  |      |      | Bksp |
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |  F5  |  F6  |  F7  |  F8  |      |      |   (  |   )  |   <  |   >  |      |
+ * |      |  F9  |  F10 |  F11 |  F12 |      |  *   |  7   |  8   |  9   |  0   |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  F5  |  F6  |  F7  |  F8  |      |  =   |  4   |  5   |  6   |  +   |      |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |  F1  |  F2  |  F3  |  F4  |      |      |   [  |   ]  |      |      |      |
+ * |      |  F1  |  F2  |  F3  |  F4  |      |  -   |  1   |  2   |  3   |  /   |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |      |      |      |    Enter    |      | Home | PgUp | PgDwn| End  |
+ * |      |      |      |      |      |             |      |  0   |  0   |      |      |
  * `-----------------------------------------------------------------------------------'
  */
 [_RAISE] = LAYOUT_preonic_grid_wrapper( \
-  KC_GESC, KC_EXLM, KC_AT, KC_HASH,    KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
-  _______, ____________FUNCTION_3____________, _______, _______, KC_LCBR, KC_RCBR, _______, _______, KC_BSPC, \
-  _______, ____________FUNCTION_2____________, _______, _______, KC_LPRN, KC_RPRN, KC_LT,   KC_GT,   _______, \
-  _______, ____________FUNCTION_1____________, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, \
-  _______, _______, _______, _______, _______, KC_ENT,  KC_ENT,  _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END   \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, \
+  _______, ____________FUNCTION_3____________, _______, KC_ASTR, KC_7,    KC_8,    KC_9,    KC_0,     _______, \
+  _______, ____________FUNCTION_2____________, _______, KC_EQL,  KC_4,    KC_5,    KC_6,    KC_PLUS,  _______, \
+  _______, ____________FUNCTION_1____________, _______, KC_MINS, KC_1,    KC_2,    KC_3,    KC_SLASH, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______,  _______  \
 ),
 
 /* Adjust (Lower + Raise)
  * ,-----------------------------------------------------------------------------------.
  * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      | Reset| Debug|      |      |      |      |      |      |      |      |  Del |
+ * |      | MAKE | FLSH |      |      |      |      |      |      |      |      |  Del |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |      |      |      |      |Aud on|AudOff|      |      |      |      |      |
+ * |      | RESET| DEBUG|      |      |Aud on|AudOff|      |      |      |      |      |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |      |      |      |MusMod|Mus on|MusOff|      |      |      |      |      |
+ * |      | VRSN |      |      |MusMod|Mus on|MusOff|      |      |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      |      |      |      |      |             |      |Qwerty| Game |      |      |
  * `-----------------------------------------------------------------------------------'
  */
 [_ADJUST] = LAYOUT_preonic_grid_wrapper( \
   ____________FUNCTION_1____________, ____________FUNCTION_2____________, ____________FUNCTION_3____________, \
-  _______, RESET,   DEBUG,   _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,  \
-  _______, _______, _______, _______, _______, AU_ON,   AU_OFF,  _______, _______, _______, _______, _______, \
-  _______, _______, _______, _______, MU_MOD,  MU_ON,   MU_OFF,  _______, _______, _______, _______, _______, \
+  _______, KB_MAKE, KB_FLSH, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,  \
+  _______, RESET,   DEBUG,   _______, _______, AU_ON,   AU_OFF,  _______, _______, _______, _______, _______, \
+  _______, KB_VRSN, _______, _______, MU_MOD,  MU_ON,   MU_OFF,  _______, _______, _______, _______, _______, \
   _______, _______, _______, _______, _______, _______, _______, _______, QWERTY,  GAME,    _______, _______  \
 ),
 
 };
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
   switch (keycode) {
     case QWERTY:
       if (record->event.pressed) {
@@ -186,15 +161,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
       return false;
       break;
 
-    case GAME_MOD:
-      if (record->event.pressed) {
-        layer_on(_GAME_MOD);
-      } else {
-        layer_off(_GAME_MOD);
-      }
-      return false;
-      break;
-
     case LOWER:
       if (record->event.pressed) {
         layer_on(_LOWER);
index 4aacc70513ce702b83adfcffbdfbde3f695cf094..9369f99a9e9b3738802c2e9f013d82fa9dc2235c 100644 (file)
@@ -1,3 +1,2 @@
 BACKLIGHT_ENABLE  = no
 LEADER_ENABLE = yes
-AUTO_SHIFT_ENABLE = yes
index 93b2e70e7cfcb03e86b3a9d29737563e175b9e18..c981a2f2614b12a88686ed1c9f449427d633dea5 100644 (file)
@@ -63,7 +63,7 @@ BOOTLOADER = atmel-dfu
 #
 BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
 CONSOLE_ENABLE = no        # Console for debug(+400)
 COMMAND_ENABLE = no        # Commands for debug and configuration
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
index 313bf3b3ecaac7cda54602674cf4213482419621..579ddd11eb18162a93537ab76453422f2d9ae9b1 100644 (file)
@@ -63,7 +63,7 @@ BOOTLOADER = atmel-dfu
 #
 BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
 CONSOLE_ENABLE = no        # Console for debug(+400)
 COMMAND_ENABLE = no        # Commands for debug and configuration
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/redox/keymaps/ptillemans/config.h b/keyboards/redox/keymaps/ptillemans/config.h
new file mode 100644 (file)
index 0000000..a3ef209
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+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
diff --git a/keyboards/redox/keymaps/ptillemans/keymap.c b/keyboards/redox/keymaps/ptillemans/keymap.c
new file mode 100644 (file)
index 0000000..3d9b90b
--- /dev/null
@@ -0,0 +1,97 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _SYMB 1
+#define _NAV 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  SYMB,
+  NAV,
+  ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define KC_BKSL KC_BSLASH
+#define SYM_L   MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTES LCTL_T(KC_ESC)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+#define KC_LBRS LT(_SYMB, KC_LBRC)
+#define KC_RBRS LT(_SYMB, KC_RBRC)
+#define KC_RSEN RSFT_T(KC_ENT)
+#define KC_RCQU RCTL_T(KC_QUOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     KC_NAGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_NAMI ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_TAB  ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,KC_PSCR ,                          KC_EQL  ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_BKSL ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_CTES ,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_RCQU ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_LSFT ,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_RSEN ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     KC_LGUI ,KC_PPLS ,KC_PMNS ,KC_ALAS ,     KC_LGUI ,    KC_BSPC , KC_SPC ,        KC_SPC  ,KC_ENT  ,    KC_RALT ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+                     ),
+
+  [_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 ,_______ ,                          _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_HASH ,KC_DLR  ,KC_LBRC ,KC_RBRC ,KC_GRV  ,_______ ,                          _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ ,        _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    KC_KP_0 ,     KC_KP_0 ,KC_PDOT ,XXXXXXX ,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 ,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/redox/keymaps/ptillemans/readme.md b/keyboards/redox/keymaps/ptillemans/readme.md
new file mode 100644 (file)
index 0000000..8fa8ddf
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for Redox
diff --git a/keyboards/redox/keymaps/ptillemans/rules.mk b/keyboards/redox/keymaps/ptillemans/rules.mk
new file mode 100644 (file)
index 0000000..a81250c
--- /dev/null
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+
index 5c560abad89aeb5ac3835e8d6f72f9bd525cbbe6..09c27428ecd4e879b7e72fa847ae34bccb2a1368 100644 (file)
@@ -6,10 +6,6 @@
 #include "split_util.h"
 #endif
 
-#ifdef OLED_DRIVER_ENABLE
-  #include "oled_driver.h"
-#endif
-
 #define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__)
 
 // Define your non-alpha grouping in this define's LAYOUT, and all your BASE_LAYERS will share the same mod/macro columns
@@ -36,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _________________QWERTY_L3_________________,  KC_GRV,   KC_QUOT,  _________________QWERTY_R3_________________, \
     _________________QWERTY_L4_________________,  RGB_TOG,  RGBRST,   _________________QWERTY_R4_________________, \
     _________________QWERTY_L5_________________,  RGB_RMOD, RGB_MOD,  _________________QWERTY_R5_________________, \
-                                         KC_SPC,  KC_DEL,   KC_ENT,   KC_SPC \
+                                         KC_SPC,  TD_DEL,   KC_ENT,   KC_SPC \
   ),
 
 #ifndef GAMELAYER_DISABLE
@@ -79,90 +75,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   ),
 #endif
 };
-
-//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
-#ifdef OLED_DRIVER_ENABLE
-
-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};
-
-  oled_write_P(sol_logo, false);
-}
-
-
-static void render_status(void) {
-  // Render to mode icon
-  static const char PROGMEM mode_logo[2][3] = {
-    {0x97,0x98,0},
-    {0xb7,0xb8,0} };
-
-    oled_write_P(mode_logo[0], false);
-
-#if defined(RGB_MATRIX_ENABLE)
-    static char buffer[20] = {0};
-    snprintf(buffer, sizeof(buffer), "    h%3d s%3d v%3d\n", rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val);
-    oled_write(buffer, false);
-#endif
-
-    oled_write_P(mode_logo[1], false);
-
-#if defined(RGB_MATRIX_ENABLE)
-    snprintf(buffer, sizeof(buffer), "         s%3d m%3d\n", rgb_matrix_config.speed, rgb_matrix_config.mode);
-    oled_write(buffer, false);
-#endif
-
-  // 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
-  oled_write_P(PSTR("Layer: "), false);
-  switch (biton32(layer_state)) {
-    case _QWERTY:
-#ifndef GAMELAYER_DISABLE
-      switch (biton32(default_layer_state)) {
-        case _QWERTY:
-          oled_write_P(PSTR("Default\n"), false);
-          break;
-        case _GAME:
-          oled_write_P(PSTR("Game\n"), false);
-          break;
-        default:
-          oled_write_P(PSTR("Undefined\n"), false);
-          break;
-      }
-#else
-      oled_write_P(PSTR("Default\n"), false);
-#endif
-      break;
-    case _LOWER:
-      oled_write_P(PSTR("Lower\n"), false);
-      break;
-    case _RAISE:
-      oled_write_P(PSTR("Raise\n"), false);
-      break;
-#ifdef TRILAYER_ENABLED
-    case _ADJUST:
-      oled_write_P(PSTR("Adjust\n"), false);
-      break;
-#endif
-    default:
-      oled_write_P(PSTR("Undefined\n"), false);
-  }
-
-  // Host Keyboard LED Status
-  uint8_t led_usb_state = host_keyboard_leds();
-  oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR("       "), false);
-  oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR("       "), false);
-  oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR("       "), false);
-}
-
-void oled_task_user(void) {
-  if (is_keyboard_master()) {
-    render_status();
-  } else {
-    render_logo();
-    oled_scroll_left();
-  }
-}
-
-#endif
index 3dd7698039058060532a1d87a7a3fa78172855b3..53756344fd93549e2135f27245e83cbbf786902c 100644 (file)
@@ -3,12 +3,6 @@
 
 extern keymap_config_t keymap_config;
 
-enum custom_macros {
-    DLEFT,
-    DRIGHT,
-    PSCREEN_APP
-};
-
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Qwerty
@@ -46,11 +40,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `------------------------------------------------- -------------------------------------------------'
  */
 [SYMB] = LAYOUT( \
-    KC_CAPS,        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                      KC_F6, KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11, \
-    _______,        KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PIPE,                    KC_7,  KC_8,   KC_9,   KC_ASTR, KC_RPRN, KC_F12, \
-    _______,        KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_GRV,                     KC_4,  KC_5,   KC_6,   KC_PLUS, KC_RCBR, KC_PIPE, \
-    M(PSCREEN_APP), KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD,                    KC_1,  KC_2,   KC_3,   KC_BSLS, KC_VOLD, KC_VOLU, \
-    KC_PSCR,        _______, RESET,   _______, _______, TO(GAME), _______, _______, KC_0,  KC_DOT, KC_EQL, KC_MPRV, KC_MNXT, KC_MPLY \
+    KC_CAPS,     KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                      KC_F6, KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11, \
+    _______,     KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PIPE,                    KC_7,  KC_8,   KC_9,   KC_ASTR, KC_RPRN, KC_F12, \
+    _______,     KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_GRV,                     KC_4,  KC_5,   KC_6,   KC_PLUS, KC_RCBR, KC_PIPE, \
+    PSCREEN_APP, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD,                    KC_1,  KC_2,   KC_3,   KC_BSLS, KC_VOLD, KC_VOLU, \
+    KC_PSCR,     _______, RESET,   _______, _______, TO(GAME), _______, _______, KC_0,  KC_DOT, KC_EQL, KC_MPRV, KC_MNXT, KC_MPLY \
 ),
 
 /* Vim Movement
@@ -67,11 +61,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `------------------------------------------------..------------------------------------------------'
  */
 [VIM] =  LAYOUT( \
-    _______, _______,  _______,   _______, _______, _______,                   _______, _______, _______, _______, RESET,   _______, \
-    _______, RGB_SAI,  RGB_VAI,   RGB_SAD, KC_LSFT, _______,                   _______, _______, _______, _______, _______, _______, \
-    _______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______,                   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, \
-    _______, RGB_HUD,  RGB_VAD,   RGB_HUI, _______, _______,                   _______, _______, _______, _______, _______, _______, \
-    _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+    _______, _______, _______, _______, _______, _______,                   _______, _______, _______, _______, RESET,   _______, \
+    _______, RGB_SAI, RGB_VAI, RGB_SAD, KC_LSFT, _______,                   _______, _______, _______, _______, _______, _______, \
+    _______, DLEFT,   DRIGHT,  KC_LCTL, KC_LGUI, _______,                   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, \
+    _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______,                   _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
 ),
 
 /* Gaming mode (Raise)
@@ -123,28 +117,7 @@ void persistant_default_layer_set(uint16_t default_layer) {
   default_layer_set(default_layer);
 }
 
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-    switch(id) {
-        case DLEFT:
-            if (record->event.pressed) { // Windows move desktop left
-                return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
-            }
-            break;
-        case DRIGHT:
-            if (record->event.pressed) { // Windows move desktop right
-                return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
-            }
-            break;
-        case PSCREEN_APP:
-            if (record->event.pressed) {
-                return MACRO(D(LALT), T(PSCR), U(LALT), END);
-            }
-            break;
-    }
-    return MACRO_NONE;
-}
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-    tap_dance_process_record(keycode);
+    tap_dance_process_keycode(keycode);
     return true;
 }
diff --git a/keyboards/rgbkb/zygomorph/keymaps/xulkal/config.h b/keyboards/rgbkb/zygomorph/keymaps/xulkal/config.h
deleted file mode 100644 (file)
index 452cdda..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-
-// place overrides here
-
index f886cb4543442b7e1b0b138dc96d17e2f6364421..70155e1cdcae53703519a2671be4975eabbbf268 100644 (file)
@@ -67,21 +67,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   ),
 #endif
 };
-
-#ifdef ENCODER_ENABLE
-void encoder_update_user(uint8_t index, bool clockwise) {
-  if (index == 0) { /* First encoder */
-    if (clockwise) {
-      tap_code(KC_PGDN);
-    } else {
-      tap_code(KC_PGUP);
-    }
-  } else if (index == 1) { /* Second encoder from slave */
-    if (clockwise) {
-      tap_code(KC_UP);
-    } else {
-      tap_code(KC_DOWN);
-    }
-  }
-}
-#endif
diff --git a/keyboards/romac/keymaps/stanrc85/config.h b/keyboards/romac/keymaps/stanrc85/config.h
new file mode 100644 (file)
index 0000000..722fd7e
--- /dev/null
@@ -0,0 +1,11 @@
+#undef RGBLED_NUM
+#define RGBLED_NUM 16
+
+#define RGB_DI_PIN F4
+#ifdef RGB_DI_PIN
+  #define RGBLIGHT_HUE_STEP 8
+  #define RGBLIGHT_SAT_STEP 8
+  #define RGBLIGHT_VAL_STEP 8
+  #define RGBLIGHT_ANIMATIONS
+#endif
+
diff --git a/keyboards/romac/keymaps/stanrc85/keymap.c b/keyboards/romac/keymaps/stanrc85/keymap.c
new file mode 100644 (file)
index 0000000..ecca61c
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright 2019 Stanrc85
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "stanrc85.h"
+
+enum keys {
+  U_LAYR = SAFE_RANGE,
+  D_LAYR
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_NUMPAD] = LAYOUT(
+       KC_7,   KC_8, KC_9,
+       KC_4,   KC_5, KC_6,
+       KC_1,   KC_2, KC_3,
+       U_LAYR, KC_0, KC_ENT),
+
+  [_NAVKEY] = LAYOUT(
+       KC_HOME, KC_INS,  KC_PGUP,
+       KC_END,  KC_UP,   KC_PGDN,
+       KC_LEFT, KC_DOWN, KC_RGHT,
+       U_LAYR,  TD_TWIN, D_LAYR),
+
+  [_MEDIA] = LAYOUT(
+       KC_MUTE, KC_VOLD, KC_VOLU,
+       CA_QUOT, KC_MPLY, CA_SCLN,
+       CA_COPY, CA_PSTE, KC_NO,
+       U_LAYR,  KC_NO,   D_LAYR),
+
+  [_RGB] = LAYOUT(
+       RGB_SAI, RGB_VAI, RGB_HUI,
+       RGB_SAD, RGB_VAD, RGB_HUD,
+       RGB_TOG, RGB_MOD, KC_NO,
+       U_LAYR,  KC_NO,   D_LAYR),
+
+  [_FN1PAD] = LAYOUT(
+       KC_NO, KC_NO,   KC_NO,
+       KC_NO, KC_NO,   RESET,
+       KC_NO, KC_NO,   KC_MAKE,
+       KC_NO, KC_LSFT, D_LAYR)
+};
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+  keypos_t key;
+  uint8_t current_layer;
+  uint8_t next_layer;
+  switch (keycode) {
+  case U_LAYR: //cycles up the layers
+    if (!record->event.pressed) {
+      current_layer = layer_switch_get_layer(key);
+      next_layer = current_layer+1;
+      layer_move(next_layer);
+    }
+    break;
+  case D_LAYR: //cycles down the layers
+    if (!record->event.pressed) {
+      current_layer = layer_switch_get_layer(key);
+      next_layer = current_layer-1;
+      layer_move(next_layer);
+    }
+    break;
+  }
+  return true;
+};
diff --git a/keyboards/romac/keymaps/stanrc85/rules.mk b/keyboards/romac/keymaps/stanrc85/rules.mk
new file mode 100644 (file)
index 0000000..1e3cebb
--- /dev/null
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/snampad/config.h b/keyboards/snampad/config.h
new file mode 100644 (file)
index 0000000..a2dc3c6
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 Peter Tillemans
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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    Snamellit
+#define PRODUCT         snampad
+#define DESCRIPTION     A custom numerical keypad handwired in a 3D printed case.
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3  }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#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
+// #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/snampad/info.json b/keyboards/snampad/info.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/snampad/keymaps/default/config.h b/keyboards/snampad/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..d97bb38
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Peter Tillemans
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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/snampad/keymaps/default/keymap.c b/keyboards/snampad/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..6e887e5
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2019 Peter Tillemans
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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_numpad_6x4( /* Base */
+               KC_F1   , KC_F2  ,  KC_F3, KC_F4,
+               KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK , KC_KP_MINUS,
+               KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
+               KC_KP_4, KC_KP_5, KC_KP_6,
+               KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
+                    KC_KP_0, KC_KP_DOT
+
+  ),
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/snampad/keymaps/default/readme.md b/keyboards/snampad/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..05eef58
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for snampad
\ No newline at end of file
diff --git a/keyboards/snampad/readme.md b/keyboards/snampad/readme.md
new file mode 100644 (file)
index 0000000..dd9d9b0
--- /dev/null
@@ -0,0 +1,23 @@
+# snampad
+
+![snampad](https://imgur.com/gallery/tPDHeB9?s=fbm)
+
+A small weekend project to create a numeric keypad for the few times I need such a thing.
+I created the schematics in Kicad, 3D printed the case, handwired the prototype, used some
+spare Zealios, Box Royals and SA keycaps.
+
+When I get some time I'd like to make a PCB for it.
+
+It uses a promicro controller and the reset button has been made availabe through a hole in the backplate.
+
+
+Keyboard Maintainer: [Peter Tillemans](https://github.com/ptillemans)
+Hardware Supported: Promicros are ubiquitous.
+Hardware Availability: This uses essentially spares from other projects
+
+
+Make example for this keyboard (after setting up your build environment):
+
+    make snampad: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/snampad/rules.mk b/keyboards/snampad/rules.mk
new file mode 100644 (file)
index 0000000..ec3208f
--- /dev/null
@@ -0,0 +1,82 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+
+LAYOUTS = numpad_6x4
diff --git a/keyboards/snampad/snampad.c b/keyboards/snampad/snampad.c
new file mode 100644 (file)
index 0000000..c7a9424
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Peter Tillemans
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 "snampad.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/snampad/snampad.h b/keyboards/snampad/snampad.h
new file mode 100644 (file)
index 0000000..ec7a779
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Peter Tillemans
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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_numpad_6x4( \
+               k00, k01, k02, k03,      \
+               k10, k11, k12, k13,      \
+               k20, k21, k22,           \
+               k30, k31, k32, k23,      \
+               k40, k41, k42,           \
+                 k51,    k52, k43       \
+) \
+{ \
+  { KC_NO, k51,   k52 , KC_NO},  \
+  { k40, k41,   k42 , k43},  \
+  { k30, k31,   k32 , KC_NO},  \
+  { k20, k21,   k22 , k23},  \
+  { k10, k11,   k12 , k13},  \
+  { k00, k01,   k02 , k03} \
+}
diff --git a/keyboards/spacetime/config.h b/keyboards/spacetime/config.h
new file mode 100644 (file)
index 0000000..26eb8dd
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 Kyle Terry
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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      0x0A0C
+#define DEVICE_VER      0x4A1F
+#define MANUFACTURER    Kyle Terry
+#define PRODUCT         spacetime
+#define DESCRIPTION     A split ortho keyboard with a 30 degree thumb cluster and support for oled
+
+/* key matrix size */
+#define MATRIX_ROWS 4*2
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+#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 USE_SERIAL
+
+// #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/spacetime/info.json b/keyboards/spacetime/info.json
new file mode 100644 (file)
index 0000000..3cb4414
--- /dev/null
@@ -0,0 +1,68 @@
+{
+  "keyboard_name": "spacetime",
+  "url": "https://github.com/kyleterry/spacetime-keyboard",
+  "maintainer": "qmk",
+  "width": 14,
+  "height": 4,
+  "layouts": {
+    "LAYOUT": {
+      "key_count": 50,
+      "layout": [
+          {"label":"L00", "x":0, "y":0},
+          {"label":"L01", "x":1, "y":0},
+          {"label":"L02", "x":2, "y":0},
+          {"label":"L03", "x":3, "y":0},
+          {"label":"L04", "x":4, "y":0},
+          {"label":"L05", "x":5, "y":0},
+          {"label":"L06", "x":6, "y":0},
+          {"label":"R00", "x":7, "y":0},
+          {"label":"R01", "x":8, "y":0},
+          {"label":"R02", "x":9, "y":0},
+          {"label":"R03", "x":10, "y":0},
+          {"label":"R04", "x":11, "y":0},
+          {"label":"R05", "x":12, "y":0},
+          {"label":"R06", "x":13, "y":0},
+
+          {"label":"L10", "x":0, "y":1},
+          {"label":"L11", "x":1, "y":1},
+          {"label":"L12", "x":2, "y":1},
+          {"label":"L13", "x":3, "y":1},
+          {"label":"L14", "x":4, "y":1},
+          {"label":"L15", "x":5, "y":1},
+          {"label":"L16", "x":6, "y":1},
+          {"label":"R10", "x":7, "y":1},
+          {"label":"R11", "x":8, "y":1},
+          {"label":"R12", "x":9, "y":1},
+          {"label":"R13", "x":10, "y":1},
+          {"label":"R14", "x":11, "y":1},
+          {"label":"R15", "x":12, "y":1},
+          {"label":"R16", "x":13, "y":1},
+
+          {"label":"L20", "x":0, "y":2},
+          {"label":"L21", "x":1, "y":2},
+          {"label":"L22", "x":2, "y":2},
+          {"label":"L23", "x":3, "y":2},
+          {"label":"L24", "x":4, "y":2},
+          {"label":"L25", "x":5, "y":2},
+          {"label":"L26", "x":6, "y":2},
+          {"label":"R20", "x":7, "y":2},
+          {"label":"R21", "x":8, "y":2},
+          {"label":"R22", "x":9, "y":2},
+          {"label":"R23", "x":10, "y":2},
+          {"label":"R24", "x":11, "y":2},
+          {"label":"R25", "x":12, "y":2},
+          {"label":"R26", "x":13, "y":2},
+          {"label":"L30", "x":0, "y":3, "w":1},
+          {"label":"L34", "x":4, "y":3, "w":1},
+          {"label":"L35", "x":5, "y":3, "w":2},
+          {"label":"L36", "x":6, "y":3, "w":2},
+          {"label":"R30", "x":7, "y":3, "w":2},
+          {"label":"R31", "x":8, "y":3, "w":2},
+          {"label":"R32", "x":9, "y":3, "w":1},
+          {"label":"R36", "x":13, "y":3, "w":1}
+      ]
+    }
+  }
+}
+  
diff --git a/keyboards/spacetime/keymaps/default/config.h b/keyboards/spacetime/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..26a9600
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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/spacetime/keymaps/default/keymap.c b/keyboards/spacetime/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..ac2f509
--- /dev/null
@@ -0,0 +1,85 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+enum layers {
+  _QWERTY,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+/*  layer template:
+ *  [_LAYER] = LAYOUT(
+ *    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______, \
+ *    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______, \
+ *    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______, \
+ *        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+ *  ),
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = LAYOUT(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_LCTL,    KC_RCTL, 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_LALT,    KC_RALT, 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_LGUI,    KC_APP,  KC_N,    KC_M,   KC_COMM, KC_DOT,   KC_SLSH, KC_ENT,
+        KC_LCTL,                        KC_LGUI, KC_SPC, LOWER,      RAISE,   KC_SPC,  KC_RGUI,                        KC_RCTL
+  ),
+
+  [_LOWER] = LAYOUT(
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______,   _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+  ),
+
+  [_RAISE] = LAYOUT(
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,   _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_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_VOLD, KC_VOLU,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+  ),
+
+  [_ADJUST] = LAYOUT(
+    _______, _______, KC_PGUP, _______, _______, _______, _______,   _______, _______, _______, KC_INS,  _______, KC_PSCR, _______,
+    _______, KC_HOME, KC_PGDN, KC_END,  _______, _______, _______,   _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+  )
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/spacetime/keymaps/default/readme.md b/keyboards/spacetime/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..bcc95f4
--- /dev/null
@@ -0,0 +1 @@
+# Spacetime Default Keymap
diff --git a/keyboards/spacetime/keymaps/kyleterry/keymap.c b/keyboards/spacetime/keymaps/kyleterry/keymap.c
new file mode 100644 (file)
index 0000000..32fbab5
--- /dev/null
@@ -0,0 +1,151 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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 LOWER       MO(_LOWER)
+#define RAISE       MO(_RAISE)
+#define NUM         MO(_NUM)
+#define CTL_ESC     CTL_T(KC_ESC)
+#define OS_LGUI     OSM (MOD_LGUI)
+#define SGAME       TO(_GAMING)
+#define SQWER       TO(_QWERTY)
+
+enum layers {
+  _QWERTY,
+  _GAMING,
+  _LOWER,
+  _RAISE,
+  _ADJUST,
+  _NUM
+};
+
+enum {
+  /* tap dance for raise and lower layer switching */
+  TD_RL = 0,
+  /* tap dance for common cording */
+  TD_C  = 1,
+  /* tap dance for media keys */
+  TD_MD = 2,
+};
+
+/*  layer template:
+ *  [_LAYER] = LAYOUT(
+ *    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______,
+ *    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______,
+ *    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______,
+ *        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+ *  ),
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = LAYOUT(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_LCTL,    TD(TD_C),KC_Y,    KC_U,   KC_I,    KC_O,     KC_P,    KC_BSPC,
+    CTL_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_LALT,    KC_ENT,  KC_H,    KC_J,   KC_K,    KC_L,     KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   NUM,        OS_LGUI, KC_N,    KC_M,   KC_COMM, KC_DOT,   KC_SLSH, KC_RSFT,
+        KC_LCTL,                        OS_LGUI, KC_SPC, LOWER,      RAISE,   KC_SPC,  OS_LGUI,                        KC_RALT
+  ),
+
+  [_GAMING] = LAYOUT(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_LCTL,    TD(TD_C),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_ESC,     KC_ENT,  KC_H,    KC_J,   KC_K,    KC_L,     KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   NUM,        OS_LGUI, KC_N,    KC_M,   KC_COMM, KC_DOT,   KC_SLSH, KC_RSFT,
+        KC_LALT,                        KC_V,    KC_SPC, LOWER,      RAISE,   KC_SPC,  OS_LGUI,                        KC_RALT
+  ),
+
+  [_LOWER] = LAYOUT(
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_LPRN,   KC_RPRN, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+    _______, _______, _______, _______, _______, _______, KC_LBRC,   KC_RBRC, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, _______, _______, _______, _______, _______, KC_LCBR,   KC_RCBR, _______, _______, _______, _______, TD(TD_MD), KC_MNXT,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+  ),
+
+  [_RAISE] = LAYOUT(
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,   _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_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_VOLD, KC_VOLU,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+  ),
+
+  [_ADJUST] = LAYOUT(
+    _______, _______, KC_PGUP, _______, _______, _______, SQWER,     _______, _______, _______, KC_INS,  _______, KC_PSCR, _______,
+    _______, KC_HOME, KC_PGDN, KC_END,  _______, _______, SGAME,     _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______, _______,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        _______
+  ),
+
+  [_NUM] = LAYOUT(
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, KC_7,    KC_8,    KC_9,    KC_ASTR,
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, _______, KC_4,    KC_5,    KC_6,    KC_MINS,
+    _______, _______, _______, _______, _______, _______, _______,   _______, _______, KC_DOT,  KC_1,    KC_2,    KC_3,    KC_PLUS,
+        _______,                        _______, _______, _______,   _______, _______, _______,                        KC_0
+  )
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+void td_common(qk_tap_dance_state_t *state, void *user_data) {
+  switch (state->count) {
+    case 1:
+      /* this case handles ctrl+o which is my tmux prefix
+       */
+      tap_code16(C(KC_O));
+      reset_tap_dance(state);
+      break;
+    case 2:
+      /* this case handles shift+insert which is a common way
+       * for me to paste text in linux
+       */
+      tap_code16(S(KC_INS));
+      reset_tap_dance(state);
+      break;
+  }
+}
+
+void td_media(qk_tap_dance_state_t *state, void *user_data) {
+  switch (state->count) {
+    case 1:
+      tap_code16(KC_MPLY);
+      reset_tap_dance(state);
+      break;
+    case 2:
+      tap_code16(KC_MUTE);
+      reset_tap_dance(state);
+      break;
+  }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_C]  = ACTION_TAP_DANCE_FN(td_common),
+  [TD_MD] = ACTION_TAP_DANCE_FN(td_media),
+};
diff --git a/keyboards/spacetime/keymaps/kyleterry/rules.mk b/keyboards/spacetime/keymaps/kyleterry/rules.mk
new file mode 100644 (file)
index 0000000..31e0fcf
--- /dev/null
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE=yes
diff --git a/keyboards/spacetime/readme.md b/keyboards/spacetime/readme.md
new file mode 100644 (file)
index 0000000..94108ba
--- /dev/null
@@ -0,0 +1,6 @@
+# Spacetime Keyboard
+
+A small split-design ortholinear board with a 30 degree thumb cluster and
+a breakaway palm key on each side.
+
+PCB can be found on [GitHub](https://github.com/kyleterry/spacetime-keyboard)
diff --git a/keyboards/spacetime/rev1/rev1.c b/keyboards/spacetime/rev1/rev1.c
new file mode 100644 (file)
index 0000000..6fde622
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+  return process_record_user(keycode, record);
+}
+
+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();
+}
+
+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/spacetime/rev1/rev1.h b/keyboards/spacetime/rev1/rev1.h
new file mode 100644 (file)
index 0000000..dd54204
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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( \
+    L00, L01, L02, L03, L04, L05, L06,     R00, R01, R02, R03, R04, R05, R06, \
+    L10, L11, L12, L13, L14, L15, L16,     R10, R11, R12, R13, R14, R15, R16, \
+    L20, L21, L22, L23, L24, L25, L26,     R20, R21, R22, R23, R24, R25, R26, \
+    L30,                L34, L35, L36,     R30, R31, R32,                R36  \
+) { \
+    { L00, L01, L02, L03, L04, L05, L06 }, \
+    { L10, L11, L12, L13, L14, L15, L16 }, \
+    { L20, L21, L22, L23, L24, L25, L26 }, \
+    { L30, ___, ___, ___, L34, L35, L36 }, \
+\
+    { R06, R05, R04, R03, R02, R01, R00 }, \
+    { R16, R15, R14, R13, R12, R11, R10 }, \
+    { R26, R25, R24, R23, R22, R21, R20 }, \
+    { R36, ___, ___, ___, R32, R31, R30 }  \
+}
+
+#ifdef USE_I2C
+  #error "I2C not Supported"
+#endif
diff --git a/keyboards/spacetime/rev1/rules.mk b/keyboards/spacetime/rev1/rules.mk
new file mode 100644 (file)
index 0000000..b595964
--- /dev/null
@@ -0,0 +1 @@
+OLED_DRIVER_ENABLE = no
diff --git a/keyboards/spacetime/rev2/rev2.c b/keyboards/spacetime/rev2/rev2.c
new file mode 100644 (file)
index 0000000..6b62c07
--- /dev/null
@@ -0,0 +1,44 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+#ifdef SSD1306OLED
+  return process_record_gfx(keycode,record) && process_record_user(keycode, record);
+#else
+  return process_record_user(keycode, record);
+#endif
+}
+
+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();
+}
+
+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/spacetime/rev2/rev2.h b/keyboards/spacetime/rev2/rev2.h
new file mode 100644 (file)
index 0000000..dd54204
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright 2019 Kyle Terry
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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( \
+    L00, L01, L02, L03, L04, L05, L06,     R00, R01, R02, R03, R04, R05, R06, \
+    L10, L11, L12, L13, L14, L15, L16,     R10, R11, R12, R13, R14, R15, R16, \
+    L20, L21, L22, L23, L24, L25, L26,     R20, R21, R22, R23, R24, R25, R26, \
+    L30,                L34, L35, L36,     R30, R31, R32,                R36  \
+) { \
+    { L00, L01, L02, L03, L04, L05, L06 }, \
+    { L10, L11, L12, L13, L14, L15, L16 }, \
+    { L20, L21, L22, L23, L24, L25, L26 }, \
+    { L30, ___, ___, ___, L34, L35, L36 }, \
+\
+    { R06, R05, R04, R03, R02, R01, R00 }, \
+    { R16, R15, R14, R13, R12, R11, R10 }, \
+    { R26, R25, R24, R23, R22, R21, R20 }, \
+    { R36, ___, ___, ___, R32, R31, R30 }  \
+}
+
+#ifdef USE_I2C
+  #error "I2C not Supported"
+#endif
diff --git a/keyboards/spacetime/rev2/rules.mk b/keyboards/spacetime/rev2/rules.mk
new file mode 100644 (file)
index 0000000..c582662
--- /dev/null
@@ -0,0 +1 @@
+OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/spacetime/rules.mk b/keyboards/spacetime/rules.mk
new file mode 100644 (file)
index 0000000..62e8f99
--- /dev/null
@@ -0,0 +1,86 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+OLED_DRIVER_ENABLE = no
+
+# Enable generic behavior for split boards
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = spacetime/rev1
diff --git a/keyboards/spacetime/spacetime.c b/keyboards/spacetime/spacetime.c
new file mode 100644 (file)
index 0000000..7db11f1
--- /dev/null
@@ -0,0 +1 @@
+#include "spacetime.h"
diff --git a/keyboards/spacetime/spacetime.h b/keyboards/spacetime/spacetime.h
new file mode 100644 (file)
index 0000000..0235c2b
--- /dev/null
@@ -0,0 +1,11 @@
+#pragma once
+
+#ifdef KEYBOARD_spacetime_rev1
+    #include "rev1.h"
+#endif
+
+#ifdef KEYBOARD_spacetime_rev2
+    #include "rev2.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/tada68/keymaps/hhkb68/keymap.c b/keyboards/tada68/keymaps/hhkb68/keymap.c
new file mode 100644 (file)
index 0000000..abde68f
--- /dev/null
@@ -0,0 +1,6 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = LAYOUT_ansi(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_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_DEL, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_PGDN, MO(1), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
+       [1] = LAYOUT_ansi(KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_END, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/tada68/keymaps/hhkb68/layers.json b/keyboards/tada68/keymaps/hhkb68/layers.json
new file mode 100644 (file)
index 0000000..9553c33
--- /dev/null
@@ -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_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_DEL", "KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_ENT", "KC_PGUP", "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "MO(1)", "KC_PGDN", "MO(1)", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT"], ["KC_TRNS", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_TRNS", "KC_INS", "KC_CAPS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PSCR", "KC_TRNS", "KC_TRNS", "KC_UP", "KC_TRNS", "KC_DEL", "KC_HOME", "KC_TRNS", "KC_VOLD", "KC_VOLU", "KC_MUTE", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_HOME", "KC_PGUP", "KC_LEFT", "KC_RGHT", "KC_TRNS", "KC_END", "KC_TRNS", "BL_DEC", "BL_TOGG", "BL_INC", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_END", "KC_PGDN", "KC_DOWN", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"]]
\ No newline at end of file
diff --git a/keyboards/tada68/keymaps/hhkb68/readme.md b/keyboards/tada68/keymaps/hhkb68/readme.md
new file mode 100644 (file)
index 0000000..013b812
--- /dev/null
@@ -0,0 +1,2 @@
+# HHKB68
+Layout to closely match the primary and function layers of the HHKB.
index d8813acff066c4ba7162763d256a1e74213630ba..ae0fccccc82b16564870b011782dce483a6101ef 100644 (file)
@@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * |----------------------------------------------------------------|
    * |Shif| <>|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  -| Shift| Up|PgDn|
    * |----------------------------------------------------------------|
-   * |Ctrl|Alt |Cmd |        Space          |Alt| FN|Ctrl|Lef|Dow|Rig |
+   * |Ctrl|Win |Alt |        Space          |Alt| FN|Ctrl|Lef|Dow|Rig |
    * `----------------------------------------------------------------'
    */
   [_BL] = LAYOUT_iso(
index f683ca82ff0d145df5bb09f4a3ee0f080873d22e..1e300f9425006dcfe32e3d062d1a9967547be350 100644 (file)
@@ -3,61 +3,61 @@
 #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, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,           \
+    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, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,           \
     k40, k41, k42, k46, k49, k4a, k4c, k4d                                \
 ) \
 { \
-       { k00, k01,   k02, k03,   k04,   k05,   k06, k07,   k08,   k09, k0a, k0b,   k0c,   k0d,   KC_NO }, \
-       { 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,   KC_NO, KC_NO }, \
+    { k00, k01,   k02, k03,   k04,   k05,   k06, k07,   k08,   k09, k0a, k0b,   k0c,   k0d,   KC_NO }, \
+    { 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,   KC_NO, KC_NO }, \
     { k40, k41,   k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, k49, k4a, KC_NO, k4c,   k4d,   KC_NO }  \
 }
 
 #define LAYOUT_60_hhkb( \
-       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,           \
-       k41, k42, k46, 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,      \
+    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,           \
+    k41, k42, k46, 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 }, \
-    { KC_NO, k41,   k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, k49, k4a, KC_NO, KC_NO,  KC_NO, C_NO  }  \
+    { 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 }, \
+    { KC_NO, k41,   k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, k49, k4a, KC_NO, KC_NO,  KC_NO, KC_NO }  \
 }
 
 #define LAYOUT_60_ansi_split_bs_rshift( \
-       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,           \
+    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,           \
     k40, k41, k42, k46, k49, k4a, 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,   KC_NO }, \
+    { 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, KC_NO, KC_NO, k46, KC_NO, KC_NO, k49, k4a, KC_NO, k4c,   k4d,   KC_NO }  \
 }
 
 #define LAYOUT_all( \
-       k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
-       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, 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,      \
+    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, k44, k46, k48, k49, k4a, 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,   k2c, k2d, KC_NO }, \
-       { k30, k31, k32, k33,   k34, k35,   k36, k37,   k38, k39, k3a, k3b,   k3c, k3d, KC_NO }, \
+    { 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,   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, k44, KC_NO, k46, KC_NO, k48, k49, k4a, KC_NO, k4c, k4d        }  \
 }
index ab139aeafb388f41cb78c107e1f8d74e3b06f9e1..ddf4e9d5a81cc9ec90278fc58574e6aff25a654a 100644 (file)
@@ -4,9 +4,204 @@
   "height": 5,
   "layouts": {
     "LAYOUT_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}, {"label":"~", "x":14, "y":0}, {"label":"Num Lock", "x":15.5, "y":0}, {"label":"/", "x":16.5, "y":0}, {"label":"*", "x":17.5, "y":0}, {"label":"-", "x":18.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":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.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":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"=", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Up", "x":14.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4}, {"label":"Alt", "x":2.25, "y":4, "w":1.25}, {"label":"Space", "x":3.5, "y":4, "w":6}, {"label":"Alt", "x":9.5, "y":4, "w":1.25}, {"label":"Win", "x":10.75, "y":4}, {"label":"Ctrl", "x":11.75, "y":4, "w":1.25}, {"label":"Left", "x":13.25, "y":4.25}, {"label":"Down", "x":14.25, "y":4.25}, {"label":"Right", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}, {"label":"Backspace", "x":18.5, "y":4}]    },
+      "layout": [
+        {"label":"~","x":0,"y":0},
+        {"label":"!","x":1,"y":0},
+        {"label":"@","x":2,"y":0},
+        {"label":"#","x":3,"y":0},
+        {"label":"$","x":4,"y":0},
+        {"label":"%","x":5,"y":0},
+        {"label":"^","x":6,"y":0},
+        {"label":"&","x":7,"y":0},
+        {"label":"*","x":8,"y":0},
+        {"label":"(","x":9,"y":0},
+        {"label":")","x":10,"y":0},
+        {"label":"_","x":11,"y":0},
+        {"label":"+","x":12,"y":0},
+        {"label":"Backspace","x":13,"y":0},
+        {"label":"~","x":14,"y":0},
+
+        {"label":"Num Lock","x":15.5,"y":0},
+        {"label":"/","x":16.5,"y":0},
+        {"label":"*","x":17.5,"y":0},
+        {"label":"-","x":18.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":"7","x":15.5,"y":1},
+        {"label":"8","x":16.5,"y":1},
+        {"label":"9","x":17.5,"y":1},
+        {"label":"+","x":18.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":"4","x":15.5,"y":2},
+        {"label":"5","x":16.5,"y":2},
+        {"label":"6","x":17.5,"y":2},
+        {"label":"=","x":18.5,"y":2},
+
+        {"label":"Shift","x":0,"y":3,"w":2.25},
+        {"label":"Z","x":2.25,"y":3},
+        {"label":"X","x":3.25,"y":3},
+        {"label":"C","x":4.25,"y":3},
+        {"label":"V","x":5.25,"y":3},
+        {"label":"B","x":6.25,"y":3},
+        {"label":"N","x":7.25,"y":3},
+        {"label":"M","x":8.25,"y":3},
+        {"label":"<","x":9.25,"y":3},
+        {"label":">","x":10.25,"y":3},
+        {"label":"?","x":11.25,"y":3},
+        {"label":"Shift","x":12.25,"y":3,"w":1.75},
+
+        {"label":"Up","x":14.25,"y":3.25},
+
+        {"label":"1","x":15.5,"y":3},
+        {"label":"2","x":16.5,"y":3},
+        {"label":"3","x":17.5,"y":3},
+        {"label":"Enter","x":18.5,"y":3},
+
+        {"label":"Ctrl","x":0,"y":4,"w":1.25},
+        {"label":"Win","x":1.25,"y":4},
+        {"label":"Alt","x":2.25,"y":4,"w":1.25},
+        {"label":"Space","x":3.5,"y":4,"w":6},
+        {"label":"Alt","x":9.5,"y":4,"w":1.25},
+        {"label":"Win","x":10.75,"y":4},
+        {"label":"Ctrl","x":11.75,"y":4,"w":1.25},
+
+        {"label":"Left","x":13.25,"y":4.25},
+        {"label":"Down","x":14.25,"y":4.25},
+        {"label":"Right","x":15.25,"y":4.25},
+
+        {"label":"0","x":16.5,"y":4},
+        {"label":".","x":17.5,"y":4},
+        {"label":"Backspace","x":18.5,"y":4}
+      ]
+    },
 
     "LAYOUT_iso": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Num Lock", "x":15.5, "y":0}, {"label":"/", "x":16.5, "y":0}, {"label":"*", "x":17.5, "y":0}, {"label":"-", "x":18.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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.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":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"=", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Up", "x":14.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4}, {"label":"Alt", "x":2.25, "y":4, "w":1.25}, {"label":"Space", "x":3.5, "y":4, "w":6}, {"label":"Alt", "x":9.5, "y":4, "w":1.25}, {"label":"Win", "x":10.75, "y":4}, {"label":"Ctrl", "x":11.75, "y":4, "w":1.25}, {"label":"Left", "x":13.25, "y":4.25}, {"label":"Down", "x":14.25, "y":4.25}, {"label":"Right", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}, {"label":"Backspace", "x":18.5, "y":4}]    }
+      "layout": [
+        {"label":"~","x":0,"y":0},
+        {"label":"!","x":1,"y":0},
+        {"label":"@","x":2,"y":0},
+        {"label":"#","x":3,"y":0},
+        {"label":"$","x":4,"y":0},
+        {"label":"%","x":5,"y":0},
+        {"label":"^","x":6,"y":0},
+        {"label":"&","x":7,"y":0},
+        {"label":"*","x":8,"y":0},
+        {"label":"(","x":9,"y":0},
+        {"label":")","x":10,"y":0},
+        {"label":"_","x":11,"y":0},
+        {"label":"+","x":12,"y":0},
+        {"label":"Backspace","x":13,"y":0},
+        {"label":"~","x":14,"y":0},
+
+        {"label":"Num Lock","x":15.5,"y":0},
+        {"label":"/","x":16.5,"y":0},
+        {"label":"*","x":17.5,"y":0},
+        {"label":"-","x":18.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":"7","x":15.5,"y":1},
+        {"label":"8","x":16.5,"y":1},
+        {"label":"9","x":17.5,"y":1},
+        {"label":"+","x":18.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":"4","x":15.5,"y":2},
+        {"label":"5","x":16.5,"y":2},
+        {"label":"6","x":17.5,"y":2},
+        {"label":"=","x":18.5,"y":2},
+
+        {"label":"Shift","x":0,"y":3,"w":1.25},
+        {"label":"|","x":1.25,"y":3},
+        {"label":"Z","x":2.25,"y":3},
+        {"label":"X","x":3.25,"y":3},
+        {"label":"C","x":4.25,"y":3},
+        {"label":"V","x":5.25,"y":3},
+        {"label":"B","x":6.25,"y":3},
+        {"label":"N","x":7.25,"y":3},
+        {"label":"M","x":8.25,"y":3},
+        {"label":"<","x":9.25,"y":3},
+        {"label":">","x":10.25,"y":3},
+        {"label":"?","x":11.25,"y":3},
+        {"label":"Shift","x":12.25,"y":3,"w":1.75},
+
+        {"label":"Up","x":14.25,"y":3.25},
+
+        {"label":"1","x":15.5,"y":3},
+        {"label":"2","x":16.5,"y":3},
+        {"label":"3","x":17.5,"y":3},
+        {"label":"Enter","x":18.5,"y":3},
+
+        {"label":"Ctrl","x":0,"y":4,"w":1.25},
+        {"label":"Win","x":1.25,"y":4},
+        {"label":"Alt","x":2.25,"y":4,"w":1.25},
+        {"label":"Space","x":3.5,"y":4,"w":6},
+        {"label":"Alt","x":9.5,"y":4,"w":1.25},
+        {"label":"Win","x":10.75,"y":4},
+        {"label":"Ctrl","x":11.75,"y":4,"w":1.25},
+
+        {"label":"Left","x":13.25,"y":4.25},
+        {"label":"Down","x":14.25,"y":4.25},
+        {"label":"Right","x":15.25,"y":4.25},
+
+        {"label":"0","x":16.5,"y":4},
+        {"label":".","x":17.5,"y":4},
+        {"label":"Backspace","x":18.5,"y":4}
+      ]
+    }
   }
 }
index 405685093e4510e32393d54459a1ebb5196b6690..f492074e3faafecee5130bf0a391930f01a35479 100644 (file)
@@ -52,7 +52,7 @@
 // #define BACKLIGHT_LEVELS 3
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
index bf9da9ada14037ca124b9d7434a480113a27483e..91cc5c8cef8afbe93fce001421a761a571db9c16 100644 (file)
@@ -1,11 +1,11 @@
-# WILBA.TECH WT60-A
+# wilba.tech WT60-A
 
-![WILBA.TECH WT60-A](https://cdn.shopify.com/s/files/1/0015/5084/3975/products/no.160_PCB_1_of_1_2d7414ed-7cc5-46a5-b245-6fb7a197232d_720x.jpg?v=1546475122)
+![wilba.tech WT60-A](https://cdn.shopify.com/s/files/1/0015/5084/3975/products/no.160_PCB_1_of_1_2d7414ed-7cc5-46a5-b245-6fb7a197232d_720x.jpg?v=1546475122)
 
 WT60-A is a keyboard PCB supporting 60% layout. [More info at wilba.tech](https://wilba.tech/)
 
 Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
-Hardware Supported: WILBA.TECH WT65-A  
+Hardware Supported: wilba.tech WT65-A  
 Hardware Availability: Custom keyboard group buys
 
 Make example for this keyboard (after setting up your build environment):
index a9da35eaa599d5a55ff29d93753f34775ac443da..ec488fb50cb0960834d9f2e362ddba5caa4574a4 100644 (file)
@@ -52,7 +52,7 @@
 // #define BACKLIGHT_LEVELS 3
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
index 9e0c630c0e06db5efa44e1feb38d9b88d322b40c..964b6a097fb13ac1e6a4822324a43baaa97c4536 100644 (file)
@@ -1,11 +1,11 @@
-# WILBA.TECH WT65-A
+# wilba.tech WT65-A
 
-![WILBA.TECH WT65-A](https://cdn.shopify.com/s/files/1/0015/5084/3975/products/no.165_PCB_1_of_1_a85e9af1-174f-497a-aadb-bb53ce74ef8c_720x.jpg?v=1546475185)
+![wilba.tech WT65-A](https://cdn.shopify.com/s/files/1/0015/5084/3975/products/no.165_PCB_1_of_1_a85e9af1-174f-497a-aadb-bb53ce74ef8c_720x.jpg?v=1546475185)
 
 WT65-A is a keyboard PCB supporting 65% layout with 0.5U blocker. [More info at wilba.tech](https://wilba.tech/)
 
 Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
-Hardware Supported: WILBA.TECH WT65-A  
+Hardware Supported: wilba.tech WT65-A  
 Hardware Availability: Custom keyboard group buys
 
 Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/wilba_tech/wt65_b/config.h b/keyboards/wilba_tech/wt65_b/config.h
new file mode 100644 (file)
index 0000000..0861689
--- /dev/null
@@ -0,0 +1,202 @@
+/* Copyright 2019 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x6582 // wilba.tech
+#define PRODUCT_ID      0x065B // 65-B
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    wilba.tech
+#define PRODUCT         wilba.tech WT65-B
+#define DESCRIPTION     wilba.tech WT65-B
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define 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
+
+#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 635
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 389
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt65_b/info.json b/keyboards/wilba_tech/wt65_b/info.json
new file mode 100644 (file)
index 0000000..dd6fe1a
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "keyboard_name": "wilba.tech WT65-B", 
+    "url": "https://wilba.tech", 
+    "maintainer": "Wilba", 
+    "bootloader": "atmel-dfu", 
+    "width": 16, 
+    "height": 5, 
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"End", "x":15, "y":1}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgUp", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Up", "x":14, "y":3}, {"label":"PgDn", "x":15, "y":3}, {"label":"Win", "x":0, "y":4, "w":1.5}, {"label":"Alt", "x":2.25, "y":4, "w":1.5}, {"x":3.75, "y":4, "w":7}, {"label":"Fn", "x":10.75, "y":4, "w":1.5}, {"label":"Left", "x":13, "y":4}, {"label":"Down", "x":14, "y":4}, {"label":"Right", "x":15, "y":4}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_b/keymaps/default/keymap.c b/keyboards/wilba_tech/wt65_b/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..41e5cb8
--- /dev/null
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+       // Default layer
+       [0] = LAYOUT_all(
+               KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS, KC_DEL,  KC_HOME,
+               KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,          KC_PGUP,
+               KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_PGDN,
+               KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   KC_UP,   KC_END,
+               KC_LGUI,          KC_LALT,                            KC_SPC,                                      MO(1),            KC_LEFT, KC_DOWN, KC_RGHT),
+
+       // Fn1 Layer
+       [1] = LAYOUT_all(
+               KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS,  KC_DEL,  KC_TRNS,
+               KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS,          KC_TRNS,                            KC_TRNS,                                     KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn2 Layer
+       [2] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS,          KC_TRNS,                            KC_TRNS,                                     KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn3 Layer
+       [3] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS,          KC_TRNS,                            KC_TRNS,                                     KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/wilba_tech/wt65_b/keymaps/via/keymap.c b/keyboards/wilba_tech/wt65_b/keymaps/via/keymap.c
new file mode 100644 (file)
index 0000000..41e5cb8
--- /dev/null
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+       // Default layer
+       [0] = LAYOUT_all(
+               KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS, KC_DEL,  KC_HOME,
+               KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,          KC_PGUP,
+               KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_PGDN,
+               KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   KC_UP,   KC_END,
+               KC_LGUI,          KC_LALT,                            KC_SPC,                                      MO(1),            KC_LEFT, KC_DOWN, KC_RGHT),
+
+       // Fn1 Layer
+       [1] = LAYOUT_all(
+               KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS,  KC_DEL,  KC_TRNS,
+               KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS,          KC_TRNS,                            KC_TRNS,                                     KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn2 Layer
+       [2] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS,          KC_TRNS,                            KC_TRNS,                                     KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn3 Layer
+       [3] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS,          KC_TRNS,                            KC_TRNS,                                     KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk b/keyboards/wilba_tech/wt65_b/keymaps/via/rules.mk
new file mode 100644 (file)
index 0000000..76a07d7
--- /dev/null
@@ -0,0 +1,71 @@
+# project specific files
+SRC =  drivers/issi/is31fl3736.c \
+               drivers/avr/i2c_master.c \
+               keyboards/wilba_tech/wt_mono_backlight.c \
+               keyboards/wilba_tech/wt_main.c
+               
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_b/readme.md b/keyboards/wilba_tech/wt65_b/readme.md
new file mode 100644 (file)
index 0000000..e90b447
--- /dev/null
@@ -0,0 +1,13 @@
+# wilba.tech WT65-B
+
+WT65-B is a keyboard PCB supporting 65% layout with two bottom row blockers, designed for the Dixie Mech Bauer. [More info at wilba.tech](https://wilba.tech/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
+Hardware Supported: wilba.tech WT65-B  
+Hardware Availability: Dixie Mech
+
+Make example for this keyboard (after setting up your build environment):
+
+    make wilba_tech/wt65_b: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/wilba_tech/wt65_b/rules.mk b/keyboards/wilba_tech/wt65_b/rules.mk
new file mode 100644 (file)
index 0000000..e41f218
--- /dev/null
@@ -0,0 +1,68 @@
+# project specific files
+SRC =  drivers/issi/is31fl3736.c \
+               drivers/avr/i2c_master.c \
+               keyboards/wilba_tech/wt_mono_backlight.c \
+               keyboards/wilba_tech/wt_main.c
+               
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
diff --git a/keyboards/wilba_tech/wt65_b/wt65_b.c b/keyboards/wilba_tech/wt65_b/wt65_b.c
new file mode 100644 (file)
index 0000000..365f2e8
--- /dev/null
@@ -0,0 +1,17 @@
+/* Copyright 2019 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt65_b/wt65_b.h b/keyboards/wilba_tech/wt65_b/wt65_b.h
new file mode 100644 (file)
index 0000000..daad7e9
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright 2019 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+// Right switch of split backspace is at 2,13 and is the only switch
+// whose physical position doesn't match switch matrix position :-(
+// However, it also makes no sense to view the physical as 16 columns,
+// so the numbering goes 00 to 14. Deal with it.
+
+#define LAYOUT_all( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, K014, \
+    K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K114, \
+    K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,             K214, \
+    K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,             K313, K314, \
+    K400,       K402,                   K406,                         K411,       K412, K413, K414  \
+) { \
+    { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+    { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+    { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+    { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+    { K400, ____, K402, ____, ____, ____, K406, ____, ____, ____, ____, K411, K412, K413, K414 }  \
+}
+
index 69425e8e4cb1a756e8ed354c24b18ffc0d2596fd..653e90d47b7d5a94ff09076933b00fb7de84ed76 100644 (file)
@@ -52,7 +52,7 @@
 // #define BACKLIGHT_LEVELS 3
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
index 03ab90d0984b7c45036c19d0f0cf2e5276941953..90afa253316baa824ffb08624c9b1411d97c007a 100644 (file)
@@ -1,11 +1,11 @@
-# WILBA.TECH WT69-A
+# wilba.tech WT69-A
 
-![WILBA.TECH WT69-A](https://images.squarespace-cdn.com/content/5b267e429772ae4372e3b65f/1556352502542-AKHBF9R6CP5HVHOZYJHM/i69_g.png?content-type=image%2Fpng)
+![wilba.tech WT69-A](https://images.squarespace-cdn.com/content/5b267e429772ae4372e3b65f/1556352502542-AKHBF9R6CP5HVHOZYJHM/i69_g.png?content-type=image%2Fpng)
 
 WT69-A is a keyboard PCB supporting 65% layout with 0.5U blocker and left side function keys. [More info at wilba.tech](https://wilba.tech/)
 
 Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
-Hardware Supported: WILBA.TECH WT69-A  
+Hardware Supported: wilba.tech WT69-A  
 Hardware Availability: Custom keyboard group buys
 
 Make example for this keyboard (after setting up your build environment):
index 8400447f0d6c1b8d1640add27770c8af3dbe4414..8d7025a60d09d0fe723ee7f4921166a13d8c240b 100644 (file)
@@ -52,7 +52,7 @@
 // #define BACKLIGHT_LEVELS 3
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
 
 // Dynamic keymap starts after EEPROM version
 #define DYNAMIC_KEYMAP_EEPROM_ADDR 35
-// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 635
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 389
+// Dynamic macro starts after dynamic keymaps (35+(4*6*15*2)) = (35+720)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 755
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 269
 #define DYNAMIC_KEYMAP_MACRO_COUNT 16
index 027081360d8b8f4321777038e03705a6a36adee0..73589fefc8c64d9797c741133044fe147e1216d5 100644 (file)
@@ -1,11 +1,9 @@
-# WILBA.TECH WT75-A
-
-![WILBA.TECH WT75-A](https://wilba.tech)
+# wilba.tech WT75-A
 
 WT75-A is a keyboard PCB supporting 75% layout with 0.25U blocker. [More info at wilba.tech](https://wilba.tech/)
 
 Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
-Hardware Supported: WILBA.TECH WT75-A  
+Hardware Supported: wilba.tech WT75-A  
 Hardware Availability: Custom keyboard group buys
 
 Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/wilba_tech/wt75_b/config.h b/keyboards/wilba_tech/wt75_b/config.h
new file mode 100644 (file)
index 0000000..c9b3775
--- /dev/null
@@ -0,0 +1,202 @@
+/* Copyright 2019 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x6582 // wilba.tech
+#define PRODUCT_ID      0x075B // 75-B
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    wilba.tech
+#define PRODUCT         wilba.tech WT75-B
+#define DESCRIPTION     wilba.tech WT75-B
+
+/* 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 { F1, F0, E6, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B7, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, B2, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define 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
+
+#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*6*16*2)) = (35+768)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 803
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 221
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt75_b/info.json b/keyboards/wilba_tech/wt75_b/info.json
new file mode 100644 (file)
index 0000000..92947cf
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "keyboard_name": "wilba.tech WT75-B", 
+    "url": "https://wilba.tech", 
+    "maintainer": "Wilba", 
+    "bootloader": "atmel-dfu", 
+    "width": 16, 
+    "height": 6, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"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":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, "w":1.25}, {"x":11.25, "y":5, "w":1.25}, {"x":13, "y":5}, {"x":14, "y":5}, {"x":15, "y":5}]
+        }
+    }
+}
+
diff --git a/keyboards/wilba_tech/wt75_b/keymaps/default/keymap.c b/keyboards/wilba_tech/wt75_b/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..41d3734
--- /dev/null
@@ -0,0 +1,41 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+       // Default layer
+       [0] = LAYOUT_all(
+               KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_PAUS, KC_DEL,
+               KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC, KC_HOME,
+               KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGUP,
+               KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_PGDN,
+               KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   KC_UP,   KC_END,
+               KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),            KC_LEFT, KC_DOWN, KC_RGHT),
+
+       // Fn1 Layer
+       [1] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn2 Layer
+       [2] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn3 Layer
+       [3] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/wilba_tech/wt75_b/keymaps/via/keymap.c b/keyboards/wilba_tech/wt75_b/keymaps/via/keymap.c
new file mode 100644 (file)
index 0000000..41d3734
--- /dev/null
@@ -0,0 +1,41 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+       // Default layer
+       [0] = LAYOUT_all(
+               KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_PAUS, KC_DEL,
+               KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC, KC_HOME,
+               KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGUP,
+               KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_PGDN,
+               KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   KC_UP,   KC_END,
+               KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1),            KC_LEFT, KC_DOWN, KC_RGHT),
+
+       // Fn1 Layer
+       [1] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn2 Layer
+       [2] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+
+       // Fn3 Layer
+       [3] = LAYOUT_all(
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk b/keyboards/wilba_tech/wt75_b/keymaps/via/rules.mk
new file mode 100644 (file)
index 0000000..76a07d7
--- /dev/null
@@ -0,0 +1,71 @@
+# project specific files
+SRC =  drivers/issi/is31fl3736.c \
+               drivers/avr/i2c_master.c \
+               keyboards/wilba_tech/wt_mono_backlight.c \
+               keyboards/wilba_tech/wt_main.c
+               
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wilba_tech/wt75_b/readme.md b/keyboards/wilba_tech/wt75_b/readme.md
new file mode 100644 (file)
index 0000000..bfaadbc
--- /dev/null
@@ -0,0 +1,13 @@
+# wilba.tech WT75-B
+
+WT75-B is a keyboard PCB supporting 75% layout with 0.25U blocker, designed for the Singa R3. [More info at wilba.tech](https://wilba.tech/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
+Hardware Supported: wilba.tech WT75-B  
+Hardware Availability: Singa Keyboards
+
+Make example for this keyboard (after setting up your build environment):
+
+    make wilba_tech/wt75_b: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/wilba_tech/wt75_b/rules.mk b/keyboards/wilba_tech/wt75_b/rules.mk
new file mode 100644 (file)
index 0000000..e41f218
--- /dev/null
@@ -0,0 +1,68 @@
+# project specific files
+SRC =  drivers/issi/is31fl3736.c \
+               drivers/avr/i2c_master.c \
+               keyboards/wilba_tech/wt_mono_backlight.c \
+               keyboards/wilba_tech/wt_main.c
+               
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
diff --git a/keyboards/wilba_tech/wt75_b/wt75_b.c b/keyboards/wilba_tech/wt75_b/wt75_b.c
new file mode 100644 (file)
index 0000000..ccff6d6
--- /dev/null
@@ -0,0 +1,17 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt75_b/wt75_b.h b/keyboards/wilba_tech/wt75_b/wt75_b.h
new file mode 100644 (file)
index 0000000..bdac6bc
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+#define LAYOUT_all( \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+    K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+    K200, 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, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,             K413, K415, \
+    K500, K501, K502,                   K506,                   K510, K511,       K512, K513, K515  \
+) { \
+    { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+    { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+    { K200, 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, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415 }, \
+    { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, ____, K515 }  \
+}
index 7bdcf7f7049ff34c5f7be01e715ead5e281871d8..5a825c3f755da4be126cbcdb04610c2e59c3c735 100644 (file)
@@ -52,7 +52,7 @@
 // #define BACKLIGHT_LEVELS 3
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
index 011805748f69d254346bb0cec8d9ee94f63a1fc0..8bddecadee345ed6dac6eec6349dab7916e290fe 100644 (file)
@@ -1,11 +1,9 @@
-# WILBA.TECH WT80-A
-
-![WILBA.TECH WT80-A](https://wilba./tech)
+# wilba.tech WT80-A
 
 WT80-A is a keyboard PCB supporting TKL layout with 0.25U gaps. [More info at wilba.tech](https://wilba.tech/)
 
 Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
-Hardware Supported: WILBA.TECH WT80-A  
+Hardware Supported: wilba.tech WT80-A  
 Hardware Availability: Custom keyboard group buys
 
 Make example for this keyboard (after setting up your build environment):
index c4d18918330c4a1e22c2c4e62d719fe8acc84e49..43f692e0fbf814cce9fd9a47d0379218ef2d4875 100644 (file)
@@ -53,7 +53,7 @@
 
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
index ab3cfdc55b03eb6e3e762c272fcd9a672b3f9ea8..4998e91293eb9b358d22a5e4513412b7fb32d971 100644 (file)
@@ -1,11 +1,9 @@
-# WILBA.TECH WT8-A
-
-![WILBA.TECH WT8-A](https://wilba.tech)
+# wilba.tech WT8-A
 
 WT8-A is an 8-key macropad PCB, designed for the Singa Ocelot. [More info at wilba.tech](https://wilba.tech/)
 
 Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)  
-Hardware Supported: WILBA.TECH WT8-A  
+Hardware Supported: wilba.tech WT8-A  
 Hardware Availability: Singa Keyboards
 
 Make example for this keyboard (after setting up your build environment):
index 7a63ab5b74e628e762ecda01a4302b9ff3f11cc9..f8056839a7b2a3adcafb74838cc579622c3eac88 100644 (file)
@@ -213,8 +213,8 @@ void bootmagic_lite(void)
 
        // We need multiple scans because debouncing can't be turned off.
        matrix_scan();
-       wait_ms(DEBOUNCING_DELAY);
-       wait_ms(DEBOUNCING_DELAY);
+       wait_ms(DEBOUNCE);
+       wait_ms(DEBOUNCE);
        matrix_scan();
 
        // If the Esc (matrix 0,0) is held down on power up,
index 71c72514a14305bc470c70c824d689d222a55ba8..e51a26544cb8969845dfcb2e805a6d35b9880253 100644 (file)
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_DV] = { /* DVORAK */
   { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS, KC_GRV,  KC_EQL,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC  },
   { KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_LBRC, KC_UP,   KC_RBRC, KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH  },
-  { KC_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_LEFT, KC_DOWN, KC_RGHT, KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_ENT   },
+  { LCTL_T(KC_CAPS), KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_LEFT, KC_DOWN, KC_RGHT, KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_ENT   },
   { KC_LSPO, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_PGDN,  KC_UP,  KC_PGUP, KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSPC  },
   { KC_LCTL, KC_DEL,  KC_LALT, KC_LGUI, MO(_FN1),KC_SPC,  KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC,  MO(_FN2),KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT },
  },
diff --git a/keyboards/xw60/config.h b/keyboards/xw60/config.h
new file mode 100644 (file)
index 0000000..95404ff
--- /dev/null
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Drclick
+#define PRODUCT         XW60
+#define DESCRIPTION     qmk keyboard firmware for XW60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#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 }
+#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
+
+/* 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 SOLENOID_PIN F6
+#define SOLENOID_ACTIVE true
+#define SOLENOID_DEFAULT_DWELL 75
diff --git a/keyboards/xw60/info.json b/keyboards/xw60/info.json
new file mode 100644 (file)
index 0000000..9a44f55
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "keyboard_name": "XW60",
+    "url": "",
+    "maintainer": "qmk",
+    "width": 15,
+    "height": 5,
+    "layouts": {
+      "LAYOUT": {
+        "layout": [{"label":"K00", "x":0, "y":0}, {"label":"K01", "x":1, "y":0}, {"label":"K02", "x":2, "y":0}, {"label":"K03", "x":3, "y":0}, {"label":"K04", "x":4, "y":0}, {"label":"K05", "x":5, "y":0}, {"label":"K06", "x":6, "y":0}, {"label":"K07", "x":7, "y":0}, {"label":"K08", "x":8, "y":0}, {"label":"K09", "x":9, "y":0}, {"label":"K0A", "x":10, "y":0}, {"label":"K0B", "x":11, "y":0}, {"label":"K0C", "x":12, "y":0}, {"label":"K0D", "x":13, "y":0}, {"label":"K49", "x":14, "y":0}, {"label":"K10", "x":0, "y":1, "w":1.5}, {"label":"K11", "x":1.5, "y":1}, {"label":"K12", "x":2.5, "y":1}, {"label":"K13", "x":3.5, "y":1}, {"label":"K14", "x":4.5, "y":1}, {"label":"K15", "x":5.5, "y":1}, {"label":"K16", "x":6.5, "y":1}, {"label":"K17", "x":7.5, "y":1}, {"label":"K18", "x":8.5, "y":1}, {"label":"K19", "x":9.5, "y":1}, {"label":"K1A", "x":10.5, "y":1}, {"label":"K1B", "x":11.5, "y":1}, {"label":"K1C", "x":12.5, "y":1}, {"label":"K1D", "x":13.5, "y":1, "w":1.5}, {"label":"K20", "x":0, "y":2, "w":1.75}, {"label":"K21", "x":1.75, "y":2}, {"label":"K22", "x":2.75, "y":2}, {"label":"K23", "x":3.75, "y":2}, {"label":"K24", "x":4.75, "y":2}, {"label":"K25", "x":5.75, "y":2}, {"label":"K26", "x":6.75, "y":2}, {"label":"K27", "x":7.75, "y":2}, {"label":"K28", "x":8.75, "y":2}, {"label":"K29", "x":9.75, "y":2}, {"label":"K2A", "x":10.75, "y":2}, {"label":"K2B", "x":11.75, "y":2}, {"label":"K2C", "x":12.75, "y":2}, {"label":"K2D", "x":13.75, "y":2, "w":1.25}, {"label":"K30", "x":0, "y":3, "w":1.25}, {"label":"K31", "x":1.25, "y":3}, {"label":"K32", "x":2.25, "y":3}, {"label":"K33", "x":3.25, "y":3}, {"label":"K34", "x":4.25, "y":3}, {"label":"K35", "x":5.25, "y":3}, {"label":"K36", "x":6.25, "y":3}, {"label":"K37", "x":7.25, "y":3}, {"label":"K38", "x":8.25, "y":3}, {"label":"K39", "x":9.25, "y":3}, {"label":"K3A", "x":10.25, "y":3}, {"label":"K3B", "x":11.25, "y":3}, {"label":"K3D", "x":12.25, "y":3, "w":1.75}, {"label":"K3C", "x":14, "y":3}, {"label":"K40", "x":0, "y":4, "w":1.25}, {"label":"K41", "x":1.25, "y":4, "w":1.25}, {"label":"K42", "x":2.5, "y":4, "w":1.25}, {"label":"K44", "x":3.75, "y":4, "w":2}, {"label":"K45", "x":5.75, "y":4, "w":2.25}, {"label":"K46", "x":8, "y":4, "w":2}, {"label":"K4A", "x":10, "y":4, "w":1.25}, {"label":"K4B", "x":11.25, "y":4, "w":1.25}, {"label":"K4C", "x":12.5, "y":4, "w":1.25}, {"label":"K4D", "x":13.75, "y":4, "w":1.25}]
+      },
+      "LAYOUT_pingjunior": {
+        "layout": [{"label":"K00", "x":0, "y":0}, {"label":"K01", "x":1, "y":0}, {"label":"K02", "x":2, "y":0}, {"label":"K03", "x":3, "y":0}, {"label":"K04", "x":4, "y":0}, {"label":"K05", "x":5, "y":0}, {"label":"K06", "x":6, "y":0}, {"label":"K07", "x":7, "y":0}, {"label":"K08", "x":8, "y":0}, {"label":"K09", "x":9, "y":0}, {"label":"K0A", "x":10, "y":0}, {"label":"K0B", "x":11, "y":0}, {"label":"K0C", "x":12, "y":0}, {"label":"K0D", "x":13, "y":0}, {"label":"K49", "x":14, "y":0}, {"label":"K10", "x":0, "y":1, "w":1.5}, {"label":"K11", "x":1.5, "y":1}, {"label":"K12", "x":2.5, "y":1}, {"label":"K13", "x":3.5, "y":1}, {"label":"K14", "x":4.5, "y":1}, {"label":"K15", "x":5.5, "y":1}, {"label":"K16", "x":6.5, "y":1}, {"label":"K17", "x":7.5, "y":1}, {"label":"K18", "x":8.5, "y":1}, {"label":"K19", "x":9.5, "y":1}, {"label":"K1A", "x":10.5, "y":1}, {"label":"K1B", "x":11.5, "y":1}, {"label":"K1C", "x":12.5, "y":1}, {"label":"K1D", "x":13.5, "y":1, "w":1.5}, {"label":"K20", "x":0, "y":2, "w":1.75}, {"label":"K21", "x":1.75, "y":2}, {"label":"K22", "x":2.75, "y":2}, {"label":"K23", "x":3.75, "y":2}, {"label":"K24", "x":4.75, "y":2}, {"label":"K25", "x":5.75, "y":2}, {"label":"K26", "x":6.75, "y":2}, {"label":"K27", "x":7.75, "y":2}, {"label":"K28", "x":8.75, "y":2}, {"label":"K29", "x":9.75, "y":2}, {"label":"K2A", "x":10.75, "y":2}, {"label":"K2B", "x":11.75, "y":2}, {"label":"K2C", "x":12.75, "y":2}, {"label":"K2D", "x":13.75, "y":2, "w":1.25}, {"label":"K31", "x":0, "y":3, "w":2.25}, {"label":"K32", "x":2.25, "y":3}, {"label":"K33", "x":3.25, "y":3}, {"label":"K34", "x":4.25, "y":3}, {"label":"K35", "x":5.25, "y":3}, {"label":"K36", "x":6.25, "y":3}, {"label":"K37", "x":7.25, "y":3}, {"label":"K38", "x":8.25, "y":3}, {"label":"K39", "x":9.25, "y":3}, {"label":"K3A", "x":10.25, "y":3}, {"label":"K3B", "x":11.25, "y":3}, {"label":"K3D", "x":12.25, "y":3, "w":1.75}, {"label":"K3C", "x":14, "y":3}, {"label":"K40", "x":0, "y":4, "w":1.5}, {"label":"K41", "x":1.5, "y":4}, {"label":"K42", "x":2.5, "y":4, "w":1.5}, {"label":"K45", "x":4, "y":4, "w":7}, {"label":"K4B", "x":11, "y":4, "w":1.5}, {"label":"K4C", "x":12.5, "y":4}, {"label":"K4D", "x":13.5, "y":4, "w":1.5}]
+      }
+    }
+  }
+
+
+
diff --git a/keyboards/xw60/keymaps/default/keymap.c b/keyboards/xw60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..1a4d7fb
--- /dev/null
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  /* 0: defuault */
+  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_NO,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
+    KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_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(3),    
+    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,  KC_SPC,  KC_SPC,                    KC_RALT, KC_RGUI, KC_APP,  KC_RCTL
+  ),
+  /* 1: winkeyless */
+  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_NO,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
+    KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_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(3),    
+    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,  KC_SPC,  KC_SPC,                    KC_NO,   KC_RALT, KC_RGUI,  KC_RCTL
+  ),
+  /* 2: hhkb */
+  LAYOUT(
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS, KC_GRV,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,
+    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(3),    
+    KC_NO,   KC_LGUI, KC_LALT,                   KC_SPC,  KC_SPC,  KC_SPC,                    KC_NO,   KC_RALT, KC_RGUI,  KC_NO
+  ),
+  /* 3: 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_INS,  KC_DEL,
+    KC_CAPS, _______, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, KC_DEL,
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, _______,
+    _______, _______, _______, _______, _______, _______, HPT_TOG,HPT_DWLI,HPT_DWLD, _______, _______, KC_DOWN, _______, _______,
+    _______, _______, _______,                   _______, _______, _______,                   _______, _______, _______, _______
+  ),
+
+};
diff --git a/keyboards/xw60/keymaps/default/readme.md b/keyboards/xw60/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..0e14671
--- /dev/null
@@ -0,0 +1,58 @@
+# The default keymap for xw60
+
+ ### layer 0 - default
+  ```
+  .--------------------------------------------------------------------------.
+  | esc|  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = |   bksp  |
+  |--------------------------------------------------------------------------|
+  | tab   |  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P |  [ |  ] |   \  |
+  |--------------------------------------------------------------------------|
+  | caps   |  A |  S |  D |  F |  G |  H |  J |  K |  L |  ; |  ' |  \ |enter|
+  |--------------------------------------------------------------------------|
+  | sft | nubs|  Z |  X |  C |  V |  B |  N |  M |  , |  . |  / | shift | fn |
+  |--------------------------------------------------------------------------|
+  | ctrl| gui | alt |   space  /   space  /   space  | alt | gui | app | ctrl|
+  '--------------------------------------------------------------------------'
+  ```
+ ### layer 1 - winkeyless
+  ```
+  .--------------------------------------------------------------------------.
+  | esc|  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = |   bksp  |
+  |--------------------------------------------------------------------------|
+  | tab   |  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P |  [ |  ] |   \  |
+  |--------------------------------------------------------------------------|
+  | caps   |  A |  S |  D |  F |  G |  H |  J |  K |  L |  ; |  ' |  \ |enter|
+  |--------------------------------------------------------------------------|
+  | sft | nubs|  Z |  X |  C |  V |  B |  N |  M |  , |  . |  / | shift | fn |
+  |--------------------------------------------------------------------------|
+  | ctrl | gui| alt  |               space                | alt  | gui| ctrl |
+  '--------------------------------------------------------------------------'
+  ```
+ ### layer 2 - hhkb
+  ```
+  .--------------------------------------------------------------------------.
+  | esc|  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = |  \ |  ` |
+  |--------------------------------------------------------------------------|
+  | tab   |  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P |  [ |  ] | bksp |
+  |--------------------------------------------------------------------------|
+  | ctrl   |  A |  S |  D |  F |  G |  H |  J |  K |  L |  ; |  ' |pent|enter|
+  |--------------------------------------------------------------------------|
+  | shift    |  Z |  X |  C |  V |  B |  N |  M |  , |  . |  / | rshift | fn |
+  '--------------------------------------------------------------------------'
+         | alt| gui  |               space                | gui  | alt|
+         '------------------------------------------------------------'
+  ```
+ ### layer 3 - fn
+  ```
+  ,--------------------------------------------------------------------------.
+  |    | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10| f11| f12| ins| del|
+  |--------------------------------------------------------------------------|
+  | caps |    | up |    |    |    |    |    |    |    |    | up |    |  del  |
+  |--------------------------------------------------------------------------|
+  |       |left|down|rght|    |    |    |    |    |    |left|rght|    |      |
+  |--------------------------------------------------------------------------|
+  |          |    |    |    |    |buzz| +  | -  |    |    |down|        |    |
+  |--------------------------------------------------------------------------|
+  |      |    |      |                                    |      |    |      |
+  '--------------------------------------------------------------------------'
+  ``` 
\ No newline at end of file
diff --git a/keyboards/xw60/keymaps/pingjunior/keymap.c b/keyboards/xw60/keymaps/pingjunior/keymap.c
new file mode 100644 (file)
index 0000000..51767b5
--- /dev/null
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  /* 0: default */
+  LAYOUT_pingjunior(
+    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_PENT, KC_ENT,
+             KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, MO(2),    
+    KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                      KC_RALT, KC_RGUI, KC_RCTL
+  ),
+  /* 1: hhkb */
+  LAYOUT_pingjunior(
+    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_PENT, 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_NO,   KC_LALT, KC_LGUI,                            KC_SPC,                                      KC_RGUI, KC_RALT, KC_NO
+  ),
+  /* 2: fn */
+  LAYOUT_pingjunior(
+    _______, KC_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_UP,   _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, KC_DEL,
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, _______,
+             _______, _______, _______, _______, _______, HPT_TOG,HPT_DWLI,HPT_DWLD, _______, _______, KC_DOWN, _______, _______,
+    _______, _______, _______,                            _______,                                     _______, _______, _______
+  ),
+
+};
diff --git a/keyboards/xw60/keymaps/pingjunior/readme.md b/keyboards/xw60/keymaps/pingjunior/readme.md
new file mode 100644 (file)
index 0000000..0943a88
--- /dev/null
@@ -0,0 +1,44 @@
+# The default keymap for pingjunior
+
+ ### layer 0 - default
+  ```
+  .--------------------------------------------------------------------------.
+  | esc|  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = |  ` |bksp|
+  |--------------------------------------------------------------------------|
+  | tab   |  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P |  [ |  ] |   \  |
+  |--------------------------------------------------------------------------|
+  | caps   |  A |  S |  D |  F |  G |  H |  J |  K |  L |  ; |  ' |pent|enter|
+  |--------------------------------------------------------------------------|
+  | shift    |  Z |  X |  C |  V |  B |  N |  M |  , |  . |  / |  shift | fn |
+  |--------------------------------------------------------------------------|
+  | ctrl | gui| alt  |               space                | alt  | gui/ ctrl |
+  '--------------------------------------------------------------------------'
+  ```
+ ### layer 1 - hhkb
+  ```
+  .--------------------------------------------------------------------------.
+  | esc|  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = |  \ |  ` |
+  |--------------------------------------------------------------------------|
+  | tab   |  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P |  [ |  ] | bksp |
+  |--------------------------------------------------------------------------|
+  | ctrl   |  A |  S |  D |  F |  G |  H |  J |  K |  L |  ; |  ' |pent|enter|
+  |--------------------------------------------------------------------------|
+  | shift    |  Z |  X |  C |  V |  B |  N |  M |  , |  . |  / |  shift | fn |
+  '--------------------------------------------------------------------------'
+         | alt| gui  |               space                | gui  | alt|
+         '------------------------------------------------------------'
+  ```
+ ### layer 2 - fn
+  ```
+  ,--------------------------------------------------------------------------.
+  |    | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10| f11| f12| ins| del|
+  |--------------------------------------------------------------------------|
+  | caps |    | up |    |    |    |    |    |    |    |    | up |    |  del  |
+  |--------------------------------------------------------------------------|
+  |       |left|down|rght|    |    |    |    |    |    |left|rght|    |      |
+  |--------------------------------------------------------------------------|
+  |          |    |    |    |    |buzz| +  | -  |    |    |down|        |    |
+  |--------------------------------------------------------------------------|
+  |      |    |      |                                    |      |    |      |
+  '--------------------------------------------------------------------------'
+  ``` 
\ No newline at end of file
diff --git a/keyboards/xw60/readme.md b/keyboards/xw60/readme.md
new file mode 100644 (file)
index 0000000..c2e0ce0
--- /dev/null
@@ -0,0 +1,29 @@
+# XW60
+
+A 60% custom PCB for non-MX switches.
+
+![XW60V1 PCB](https://i.imgur.com/1KVSEZ0.jpg)
+
+### Supported Switches:
+
+##### XW60 V1
+
+ - ALPS SKCM/SKCL
+ - ALPS SKCP (IBM 5576 version)
+ - SMK SECOND GENERATION
+
+##### XW60 V2
+
+ - ALPS SKCM/SKCL
+ - ALPS SKCC
+ - Omron B3G-S
+Keyboard Maintainer: [Drclick](https://github.com/itsdrdick)  
+Hardware Supported: XW60 V1 & V2  
+Hardware Availability: https://shop159471890.taobao.com
+
+Make example for this keyboard (after setting up your build environment):
+
+    make xw60: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/xw60/rules.mk b/keyboards/xw60/rules.mk
new file mode 100644 (file)
index 0000000..01435ee
--- /dev/null
@@ -0,0 +1,67 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   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 = full     # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no        # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+HAPTIC_ENABLE += SOLENOID
+# 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/xw60/xw60.c b/keyboards/xw60/xw60.c
new file mode 100644 (file)
index 0000000..98ae6a7
--- /dev/null
@@ -0,0 +1 @@
+#include "xw60.h"
\ No newline at end of file
diff --git a/keyboards/xw60/xw60.h b/keyboards/xw60/xw60.h
new file mode 100644 (file)
index 0000000..52be452
--- /dev/null
@@ -0,0 +1,60 @@
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+/*
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K49 |
+ * |-----------------------------------------------------------------------------------------+
+ * |  K10   | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C |  K1D   |
+ * |-----------------------------------------------------------------------------------------+
+ * |   K20   | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C |  K2D  |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30 | K31 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B |    K3D    | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * |  K40  |  K41  |  K42  | |   K44   |   K45   |   K46   | |  K4A  |  K4B  |  K4C  |  K4D  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+#define LAYOUT( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+    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, K3C, \
+    K40, K41, K42,           K44, K45, K46,           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, XXX, K44, K45, K46, XXX, XXX, K49, K4A, K4B, K4C, K4D }  \
+}
+
+/*
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K49 |
+ * |-----------------------------------------------------------------------------------------+
+ * |  K10   | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C |  K1D   |
+ * |-----------------------------------------------------------------------------------------+
+ * |   K20   | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C |  K2D  |
+ * |-----------------------------------------------------------------------------------------+
+ * |    K31    | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B |    K3D    | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * |  K40  |  K41  |  K42  |                   K45                   |  K4B  |  K4C  |  K4D  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+#define LAYOUT_pingjunior( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+    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, \
+         K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+    K40, K41, K42,                K45,                     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 }, \
+    { XXX, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, XXX, K4B, K4C, K4D }  \
+}
+
diff --git a/keyboards/ymd96/README.md b/keyboards/ymd96/README.md
deleted file mode 100644 (file)
index 9cb3760..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-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. 
-
-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.  
-
-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!  
-
-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.
-
-A very big thanks to @krusli for making the RGB underglow, Backlight, CapsLock and NumLock LEDs working correctly.
-
-## Finding your specific matrix
-
-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:  
-
-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.
diff --git a/keyboards/ymd96/keymaps/JJ50/keymap.c b/keyboards/ymd96/keymaps/JJ50/keymap.c
deleted file mode 100644 (file)
index b70433e..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-Modified 2017 Andrew Novak <ndrw.nvk@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 LicensezZZ
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "ymd96.h"
-#include "action_layer.h"
-#include "rgblight.h"
-
-#define ______ KC_TRNS
-#define _DEFLT 0
-#define _RAISE 1
-#define _LOWER 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-       
-    /* Qwerty
-     * ,-----------------------------------------------------------------------------------.
-     * |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   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 | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
-     * `-----------------------------------------------------------------------------------'
-     */
-    [_DEFLT] = LAYOUT_jj50( \
-        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, 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_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, SFT_T(KC_ENT),\
-        _______, KC_LCTL, KC_LALT, KC_LGUI, MO(_LOWER), KC_SPC,KC_SPC, MO(_RAISE),KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT     \
-    ),
-    
-    
-    /* Raise
-     * ,-----------------------------------------------------------------------------------.
-     * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |      |      |      |      |      |      |      |      |      |   [  |   ]  |  \   |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |      |      |      |      |      |      |      |ISO # |ISO / |  PUP |  PDN |      |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
-     * `-----------------------------------------------------------------------------------'
-     */
-    [_RAISE] = LAYOUT_jj50( \
-       KC_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_DEL,  \
-       _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS, \
-       _______, _______, _______, _______, _______, _______, _______, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
-       _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  \
-    ),
-    
-    
-    /* Lower
-     * ,-----------------------------------------------------------------------------------.
-     * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |      |      |      |      |      |      |      |      |      |   {  |   }  |  |   |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |      |      |      |      |      |      |      |ISO ~ |ISO | |  HOM |  END |      |
-     * |------+------+------+------+------+------+------+------+------+------+------+------|
-     * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
-     * `-----------------------------------------------------------------------------------'
-     */
-    [_LOWER] = LAYOUT_jj50( \
-        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,    \
-        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_LCBR, KC_RCBR, KC_PIPE,   \
-        _______, _______, _______, _______, _______, _______, _______,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
-        _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY    \
-    )
-    
-};
index c540972f10a8eeb532a12fbe8dd446a51a7b327e..0b8b98157d5dd35f96f81956e999d3c34727e915 100644 (file)
@@ -18,45 +18,45 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include QMK_KEYBOARD_H
 
-#define ______ KC_TRNS
-#define _DEFLT 0
-#define _RAISE 1
-
-#define KEYMAP LAYOUT_default
+enum layer_names {
+    _DEFAULT,
+    _RAISE,
+};
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-       /* Layer 0, default layer
-       *  | Esc  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |Print | Home | End  |Insert|Delete| PgUp | 19 keys
-       *  |  ~`  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |    0 |    - |    = |    BkSpc    |NumLck|   /  |   *  | PgDn | 18 keys
-       *  |   Tab   |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |    P |    { |    } |     \    |  7   |   8  |   9  |   -  | 18 keys
-       *  |   Caps   |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |    ; |   '  |     Return     |  4   |   5  |   6  |   +  | 17 keys
-       *  |    LShft     |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |       RShft       |  1   |   2  |   3  |  En  | 16 keys
-       *  | Ctrl  |  Win  |  Alt  |                  Space                      |  Fn  |  Win | Left | Down |  Up  | Right|   0  |   .  |      | 12 keys
-       */
-
-    [_DEFLT] = KEYMAP(
-                       KC_ESC,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11,       KC_F12,      KC_PSCR, KC_HOME,    KC_END,     KC_INSERT,   KC_DELETE,      KC_PGUP, \
-                       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_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_PGDN, \
-                       KC_TAB,  KC_Q,   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_RSFT,         KC_P1,      KC_P2,       KC_P3,          KC_PENT, \
-                       KC_LCTL, KC_LGUI,KC_LALT,                              KC_SPC,                        MO(_RAISE),      KC_RGUI,     KC_LEFT, KC_DOWN,    KC_UP,      KC_RGHT,     KC_P0,          KC_PDOT  \
-       ),
-       /* Layer 1, raise layer
-       *  |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
-       *  |      |      |      |      |      |      |      |      |      |      |      |      |      |             |      |      |      |      |
-       *  |         |      |rgb_up|rgb_dn|rgb_mo|      |      |      |      |      |  F22 |  F23  |  F24 |         |      |      |      |      |
-       *  |          |      |      |      |      |      |      |      |      |      |      |      |                |      |      |      |      |
-       *  |              |      |      |      |      |      |      |      | VolDn| VolUp| Mute |     Play/Pause    |      |      |      |      |
-       *  |       |       |       |                                             |      |      |MPrev |      |      | MNext|      |      |      |
-       */
-       [_RAISE] = KEYMAP(
-                       ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______, \
-                       ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,           ______,  ______,  ______,  ______, \
-                       ______,  ______, RGB_VAI, RGB_VAD, RGB_MOD,  ______,  ______,  ______,  ______,  ______,  KC_F22,  KC_F23,  KC_F24,  ______,           ______,  ______,  ______,  ______, \
-                       ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,           ______,           ______,  ______,  ______,  ______, \
-                       ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  KC_VOLD,KC_VOLU, KC_MUTE,                   KC_MPLY,           ______,  ______,  ______,  ______, \
-                   ______,  ______,  ______,                                  ______,                                 ______,  ______, KC_MPRV,  ______,  ______, KC_MNXT,  ______,  ______  \
-       )
+    /* Layer 0, default layer
+    *  | Esc  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |Print | Home | End  |Insert|Delete| PgUp | 19 keys
+    *  |  ~`  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |    0 |    - |    = |    BkSpc    |NumLck|   /  |   *  | PgDn | 18 keys
+    *  |   Tab   |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |    P |    { |    } |     \    |  7   |   8  |   9  |   -  | 18 keys
+    *  |   Caps   |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |    ; |   '  |     Return     |  4   |   5  |   6  |   +  | 17 keys
+    *  |    LShft     |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |       RShft       |  1   |   2  |   3  |  En  | 16 keys
+    *  | Ctrl  |  Win  |  Alt  |                  Space                      |  Fn  |  Win | Left | Down |  Up  | Right|   0  |   .  |      | 12 keys
+    */
+    [_DEFAULT] = LAYOUT_default(
+        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_HOME, KC_END,  KC_INS,  KC_DEL,  KC_PGUP,
+        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_PGDN,
+        KC_TAB,  KC_Q,    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_RSFT, KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             MO(1),   KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_P0,   KC_PDOT
+    ),
+
+    /* Layer 1, raise layer
+    *  |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
+    *  |      |      |      |      |      |      |      |      |      |      |      |      |      |             |      |      |      |      |
+    *  |         |      |rgb_up|rgb_dn|rgb_mo|      |      |      |      |      |  F22 |  F23  |  F24 |         |      |      |      |      |
+    *  |          |      |      |      |      |      |      |      |      |      |      |      |                |      |      |      |      |
+    *  |              |      |      |      |      |      |      |      | VolDn| VolUp| Mute |     Play/Pause    |      |      |      |      |
+    *  |       |       |       |                                             |      |      |MPrev |      |      | MNext|      |      |      |
+    */
+    [_RAISE] = LAYOUT_default(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______, _______, _______,
+        _______, _______, RGB_VAI, RGB_VAD, RGB_MOD, _______, _______, _______, _______, _______, KC_F22,  KC_F23,  KC_F24,           _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE,                            KC_MPLY, _______, _______, _______, _______,
+        _______, _______, _______,                            _______,                            _______, _______, KC_MPRV, _______, _______, KC_MNXT, _______, _______
+    )
+
 };
diff --git a/keyboards/ymd96/readme.md b/keyboards/ymd96/readme.md
new file mode 100644 (file)
index 0000000..9cb3760
--- /dev/null
@@ -0,0 +1,63 @@
+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. 
+
+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.  
+
+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!  
+
+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.
+
+A very big thanks to @krusli for making the RGB underglow, Backlight, CapsLock and NumLock LEDs working correctly.
+
+## Finding your specific matrix
+
+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:  
+
+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.
index ebf01b1d6127bbd5bf267190a60e950915525203..a516297c19805d431af2bde68582cee6f1df600c 100644 (file)
@@ -16,82 +16,62 @@ 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 KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
+#pragma once
 
 #include "quantum.h"
-#include "quantum_keycodes.h"
-#include "keycode.h"
-#include "action.h"
 
 void matrix_init_user(void);  // TODO port this to other PS2AVRGB boards
 
 #define LAYOUT_default( \
-       K500, K502, K503, K504, K505, K600, K610, K710, K700, K511, K512, K513, K514, K113, K214, K013, K706, K709, K708, \
-       K400, K401, K402, K403, K404, K405, K601, K611, K711, K701, K410, K411, K412,       K414, K406, K407, K408, K409, \
-    K300,   K301, K302, K303, K304, K305, K602, K612, K712, K702, K310, K311, K312,     K313, K306, K307, K308, K309, \
-       K200,    K201, K202, K203, K204, K205, K603, K613, K713, K703, K210, K211,          K213, K206, K207, K208, K209, \
-       K100,      K101, K102, K103, K104, K105, K604, K614, K714, K704, K110,              K111, K106, K107, K108, K009, \
-       K000,   K001,   K002,                    K605,                    K705, K010, K011, K606, K607, K609, K006, K008  \
+    K50, K52, K53, K54, K55, K60, K6A, K7A, K70, K5B, K5C, K5D, K5E, K1D, K2E,   K0D, K76, K79, K78, \
+    K40, K41, K42, K43, K44, K45, K61, K6B, K7B, K71, K4A, K4B, K4C,      K4E,   K46, K47, K48, K49, \
+    K30,   K31, K32, K33, K34, K35, K62, K6C, K7C, K72, K3A, K3B, K3C,    K3D,   K36, K37, K38, K39, \
+    K20,    K21, K22, K23, K24, K25, K63, K6D, K7D, K73, K2A, K2B,        K2D,   K26, K27, K28, K29, \
+    K10,      K11, K12, K13, K14, K15, K64, K6E, K7E, K74, K1A,           K1B,   K16, K17, K18, K09, \
+    K00,  K01,  K02,               K65,               K75, K0A, K0B, K66, K67,   K69, K06, K08       \
 ) { \
-       {      K000,       K001,       K002,       KC_NO,      KC_NO,      KC_NO,      K006,       KC_NO,      K008,       K009,       K010,       K011,       KC_NO,      K013,      KC_NO, }, \
-       {      K100,       K101,       K102,       K103,       K104,       K105,       K106,       K107,       K108,       KC_NO,      K110,       K111,       KC_NO,      K113,      KC_NO, }, \
-       {      K200,       K201,       K202,       K203,       K204,       K205,       K206,       K207,       K208,       K209,       K210,       K211,       KC_NO,      K213,      K214, }, \
-       {      K300,       K301,       K302,       K303,       K304,       K305,       K306,       K307,       K308,       K309,       K310,       K311,       K312,       K313,      KC_NO, }, \
-       {      K400,       K401,       K402,       K403,       K404,       K405,       K406,       K407,       K408,       K409,       K410,       K411,       K412,       KC_NO,     K414, }, \
-       {      K500,       KC_NO,      K502,       K503,       K504,       K505,       KC_NO,      KC_NO,      KC_NO,      KC_NO,      KC_NO,      K511,       K512,       K513,      K514, }, \
-       {      K600,       K601,       K602,       K603,       K604,       K605,       K606,       K607,       KC_NO,      K609,       K610,       K611,       K612,       K613,      K614, }, \
-       {      K700,       K701,       K702,       K703,       K704,       K705,       K706,       KC_NO,      K708,       K709,       K710,       K711,       K712,       K713,      K714  } \
+    {  K00,  K01,    K02,  KC_NO,  KC_NO,  KC_NO,  K06,    KC_NO,  K08,    K09,    K0A,    K0B,  KC_NO,  K0D,    KC_NO  }, \
+    {  K10,  K11,    K12,  K13,    K14,    K15,    K16,    K17,    K18,    KC_NO,  K1A,    K1B,  KC_NO,  K1D,    KC_NO  }, \
+    {  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,  K41,    K42,  K43,    K44,    K45,    K46,    K47,    K48,    K49,    K4A,    K4B,  K4C,    KC_NO,  K4E    }, \
+    {  K50,  KC_NO,  K52,  K53,    K54,    K55,    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  K5B,  K5C,    K5D,    K5E    }, \
+    {  K60,  K61,    K62,  K63,    K64,    K65,    K66,    K67,    KC_NO,  K69,    K6A,    K6B,  K6C,    K6D,    K6E    }, \
+    {  K70,  K71,    K72,  K73,    K74,    K75,    K76,    KC_NO,  K78,    K79,    K7A,    K7B,  K7C,    K7D,    K7E    }  \
 }
 
 #define LAYOUT_custom( \
-       K500, K502, K503, K504, K505, K600, K610, K710, K700, K511, K512, K513, K514, K113, K214, K013, K706, K709, K708, \
-       K400, K401, K402, K403, K404, K405, K601, K611, K711, K701, K410, K411, K412,       K414, K406, K407, K408, K409, \
-    K300,   K301, K302, K303, K304, K305, K602, K612, K712, K702, K310, K311, K312,     K313, K306, K307, K308, K309, \
-       K200,    K201, K202, K203, K204, K205, K603, K613, K713, K703, K210, K211,          K213, K206, K207, K208, K209, \
-       K100,      K101, K102, K103, K104, K105, K604, K614, K714, K704, K110,              K111, K608,K106, K107, K108, K009, \
-       K000,   K001,   K002,                    K605,                    K705, K010, K011, K606, K607,  K006, K008  \
+    K50, K52, K53, K54, K55, K60, K6A, K7A, K70, K5B, K5C, K5D, K5E, K1D, K2E,   K0D, K76, K79, K78, \
+    K40, K41, K42, K43, K44, K45, K61, K6B, K7B, K71, K4A, K4B, K4C,      K4E,   K46, K47, K48, K49, \
+    K30,   K31, K32, K33, K34, K35, K62, K6C, K7C, K72, K3A, K3B, K3C,    K3D,   K36, K37, K38, K39, \
+    K20,    K21, K22, K23, K24, K25, K63, K6D, K7D, K73, K2A, K2B,        K2D,   K26, K27, K28, K29, \
+    K10,      K11, K12, K13, K14, K15, K64, K6E, K7E, K74, K1A,      K1B, K68,   K16, K17, K18, K09, \
+    K00,  K01,  K02,               K65,               K75, K0A, K0B, K66, K67,   K06,      K08       \
 ) { \
-       {      K000,       K001,       K002,       KC_NO,      KC_NO,      KC_NO,      K006,       KC_NO,      K008,       K009,       K010,       K011,       KC_NO,      K013,      KC_NO, }, \
-       {      K100,       K101,       K102,       K103,       K104,       K105,       K106,       K107,       K108,       KC_NO,      K110,       K111,       KC_NO,      K113,      KC_NO, }, \
-       {      K200,       K201,       K202,       K203,       K204,       K205,       K206,       K207,       K208,       K209,       K210,       K211,       KC_NO,      K213,      K214, }, \
-       {      K300,       K301,       K302,       K303,       K304,       K305,       K306,       K307,       K308,       K309,       K310,       K311,       K312,       K313,      KC_NO, }, \
-       {      K400,       K401,       K402,       K403,       K404,       K405,       K406,       K407,       K408,       K409,       K410,       K411,       K412,       KC_NO,     K414, }, \
-       {      K500,       KC_NO,      K502,       K503,       K504,       K505,       KC_NO,      KC_NO,      KC_NO,      KC_NO,      KC_NO,      K511,       K512,       K513,      K514, }, \
-       {      K600,       K601,       K602,       K603,       K604,       K605,       K606,       K607, K608,      KC_NO,       K610,       K611,       K612,       K613,      K614, }, \
-       {      K700,       K701,       K702,       K703,       K704,       K705,       K706,       KC_NO,      K708,       K709,       K710,       K711,       K712,       K713,      K714  } \
-}
-
-#define LAYOUT_jj50( \
-K011, K010, K009, K008, K004, K005, K006, K007, K003, K002, K201, K000, \
-K111, K110, K109, K108, K104, K105, K106, K107, K103, K102, K001, K100, \
-K211, K210, K209, K208, K204, K205, K206, K207, K203, K202, K101, K200, \
-K311, K310, K309, K308, K304, K305, K306, K307, K303, K302, K301, K300, \
-K411, K410, K409, K408, K404, K405, K406, K407, K403, K402, K401, K400  \
-) { \
-{      K100,       K001,       K102,       K103,       K104,       K105,       K106,       K107,       K108,       K109,       K110,       K111, }, \
-{      K200,       K101,       K202,       K203,       K204,       K205,       K206,       K207,       K208,       K209,       K210,       K211, }, \
-{      K000,       K201,       K002,       K003,       K004,       K005,       K006,       K007,       K008,       K009,       K010,       K011, }, \
-{      K300,       K301,       K302,       K303,       K304,       K305,       K306,       K307,       K308,       K309,       K310,       K311, }, \
-{      K400,       K401,       K402,       K403,       K404,       K405,       K406,       K407,       K408,       K409,       K410,       K411 },  \
+    {  K00,  K01,    K02,  KC_NO,  KC_NO,  KC_NO,  K06,    KC_NO,  K08,    K09,    K0A,    K0B,  KC_NO,  K0D,    KC_NO  }, \
+    {  K10,  K11,    K12,  K13,    K14,    K15,    K16,    K17,    K18,    KC_NO,  K1A,    K1B,  KC_NO,  K1D,    KC_NO  }, \
+    {  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,  K41,    K42,  K43,    K44,    K45,    K46,    K47,    K48,    K49,    K4A,    K4B,  K4C,    KC_NO,  K4E    }, \
+    {  K50,  KC_NO,  K52,  K53,    K54,    K55,    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  K5B,  K5C,    K5D,    K5E    }, \
+    {  K60,  K61,    K62,  K63,    K64,    K65,    K66,    K67,    K68,    KC_NO,  K6A,    K6B,  K6C,    K6D,    K6E    }, \
+    {  K70,  K71,    K72,  K73,    K74,    K75,    K76,    KC_NO,  K78,    K79,    K7A,    K7B,  K7C,    K7D,    K7E    }  \
 }
 
 #define LAYOUT_iso( \
-       K0500, K0502, K0503, K0504, K0505, K0600, K0610, K0710, K0700, K0511, K0512, K0513, K0514, K0113, K0214, K0013, K0706, K0709, K0708, \
-       K0400, K0401, K0402, K0403, K0404, K0405, K0601, K0611, K0711, K0701, K0410, K0411, K0412,     K0414,    K0406, K0407, K0408, K0409, \
-         K0300,  K0301, K0302, K0303, K0304, K0305, K0602, K0612, K0712, K0702, K0310, K0311, K0312,   K0213,   K0306, K0307, K0308, K0309, \
-           K0200,   K0201, K0202, K0203, K0204, K0205, K0603, K0613, K0713, K0703, K0210, K0211, K0212,         K0206, K0207, K0208, K0209, \
-         K0100,  K0003, K0101, K0102, K0103, K0104, K0105, K0604, K0614, K0714, K0704, K0110,   K0111,   K0608, K0106, K0107, K0108, K0009, \
-         K0000,  K0001,  K0002,                 K0605,                          K0705,   K0011,   K0606, K0607, K0609, K0006, K0008         \
+    K50, K52, K53, K54, K55, K60, K6A, K7A, K70, K5B, K5C, K5D, K5E, K1D, K2E,   K0D, K76, K79, K78, \
+    K40, K41, K42, K43, K44, K45, K61, K6B, K7B, K71, K4A, K4B, K4C,      K4E,   K46, K47, K48, K49, \
+    K30,   K31, K32, K33, K34, K35, K62, K6C, K7C, K72, K3A, K3B, K3C,    K2D,   K36, K37, K38, K39, \
+    K20,    K21, K22, K23, K24, K25, K63, K6D, K7D, K73, K2A, K2B, K2C,          K26, K27, K28, K29, \
+    K10, K03, K11, K12, K13, K14, K15, K64, K6E, K7E, K74, K1A,      K1B, K68,   K16, K17, K18, K09, \
+    K00,  K01,  K02,               K65,                K75,   K0B,   K66, K67, K69,   K06, K08       \
 ) { \
-       { K0000, K0001, K0002, K0003, KC_NO, KC_NO, K0006, KC_NO, K0008, K0009, KC_NO, K0011, KC_NO, K0013, KC_NO, }, \
-       { K0100, K0101, K0102, K0103, K0104, K0105, K0106, K0107, K0108, KC_NO, K0110, K0111, KC_NO, K0113, KC_NO, }, \
-       { K0200, K0201, K0202, K0203, K0204, K0205, K0206, K0207, K0208, K0209, K0210, K0211, K0212, K0213, K0214, }, \
-       { K0300, K0301, K0302, K0303, K0304, K0305, K0306, K0307, K0308, K0309, K0310, K0311, K0312, KC_NO, KC_NO, }, \
-       { K0400, K0401, K0402, K0403, K0404, K0405, K0406, K0407, K0408, K0409, K0410, K0411, K0412, KC_NO, K0414, }, \
-       { K0500, KC_NO, K0502, K0503, K0504, K0505, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0511, K0512, K0513, K0514, }, \
-       { K0600, K0601, K0602, K0603, K0604, K0605, K0606, K0607, K0608, K0609, K0610, K0611, K0612, K0613, K0614, }, \
-       { K0700, K0701, K0702, K0703, K0704, K0705, K0706, KC_NO, K0708, K0709, K0710, K0711, K0712, K0713, K0714  }  \
+    {  K00,  K01,    K02,  K03,  KC_NO,  KC_NO,  K06,    KC_NO,  K08,    K09,    KC_NO,  K0B,  KC_NO,  K0D,    KC_NO  }, \
+    {  K10,  K11,    K12,  K13,  K14,    K15,    K16,    K17,    K18,    KC_NO,  K1A,    K1B,  KC_NO,  K1D,    KC_NO  }, \
+    {  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,    KC_NO,  KC_NO  }, \
+    {  K40,  K41,    K42,  K43,  K44,    K45,    K46,    K47,    K48,    K49,    K4A,    K4B,  K4C,    KC_NO,  K4E    }, \
+    {  K50,  KC_NO,  K52,  K53,  K54,    K55,    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  K5B,  K5C,    K5D,    K5E    }, \
+    {  K60,  K61,    K62,  K63,  K64,    K65,    K66,    K67,    K68,    K69,    K6A,    K6B,  K6C,    K6D,    K6E    }, \
+    {  K70,  K71,    K72,  K73,  K74,    K75,    K76,    KC_NO,  K78,    K79,    K7A,    K7B,  K7C,    K7D,    K7E    }  \
 }
-
-#endif
index d820171d4dc8197efeb97440a0b84909c3992aa0..f478398901e37f0a79345a779fedf880d03e696b 100644 (file)
 #include "stanrc85.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [0] = LAYOUT_60_ansi(
+  [_QWERTY] = LAYOUT_60_ansi(
     TD_TESC, KC_1,    KC_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_CTLE, KC_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,          LT_SPCF,          KC_RALT, TD_TWIN, MO(3),   TD_TCTL),
+       KC_LCTL, KC_LGUI, KC_LALT,          LT_SPCF,          KC_RALT, TD_TWIN, MO(_FN2_60),   TD_TCTL),
 
-  [1] = LAYOUT_60_ansi(
+  [_DEFAULT] = LAYOUT_60_ansi(
        KC_GESC, KC_1,    KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8,    KC_9,   KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
        KC_TAB,  KC_Q,    KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I,    KC_O,   KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
        KC_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(2),  MO(3),   KC_RCTL),
+       KC_LCTL, KC_LGUI, KC_LALT,          KC_SPC,           KC_RALT, MO(_FN1_60), MO(_FN2_60), KC_RCTL),
 
-  [2] = LAYOUT_60_ansi(
+  [_FN1_60] = LAYOUT_60_ansi(
        KC_TILD, KC_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,
        _______, _______, CA_QUOT, KC_VOLU, CA_SCLN, _______, _______, KC_HOME, KC_UP,   KC_END,  KC_PSCR, _______, _______, KC_INS,
        KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_MPLY, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
        _______, KC_RDP,  _______, _______, _______, _______, _______, _______, KC_WBAK, KC_WFWD, _______, _______,
        _______, _______, _______,                   _______,                   _______, _______, _______, _______),
 
-  [3] = LAYOUT_60_ansi(
+  [_FN2_60] = LAYOUT_60_ansi(
        _______, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, RGB_SAI, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MAKE,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-       _______, _______, _______,                   _______,                   _______, _______, _______, TG(1))
+       _______, _______, _______,                   _______,                   _______, _______, _______, TG(_DEFAULT))
 };
 
 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
index c649e88dcacdfb39b0f01e047d96b241429bebac..1345927660ac772738fe3e10a559afb351840066 100644 (file)
@@ -4,28 +4,6 @@
 #include "version.h"
 #include "333fred.h"
 
-enum custom_keycodes {
-  PLACEHOLDER = SAFE_RANGE, // can always be here
-  EPRM,
-  VRSN,
-};
-
-enum custom_macros {
-  // Windows macros
-  DLEFT,
-  DRIGHT,
-  PSCREEN_APP,
-  LSFT_TAB,
-
-  // KeePass macros
-  KEEPASS_OPEN,
-  KEEPASS_TYPE,
-
-  // Terminal Copy/Paste
-  TERM_CP,
-  TERM_PT
-};
-
 // NOTE: Cells marked with ACCESS must remain transparent, they're the keys that actually get to that layer
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -85,26 +63,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
 // Otherwise, it needs KC_*
-[CODEFLOW] = LAYOUT_ergodox(  // layer 1 : code
+[CODEFLOW] = LAYOUT_ergodox_pretty(  // layer 1 : code
         // left hand
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                                                             KC_TRNS, KC_TRNS,
-                                                                                      KC_TRNS,
-                                                                    KC_TRNS, KC_TRNS, KC_TRNS,
-        // right han
-
-            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                              KC_F7,   KC_F8,   KC_TRNS, KC_TRNS, KC_TRNS,
-             KC_TRNS, KC_TRNS,
-             KC_TRNS,
-             KC_TRNS, KC_TRNS, KC_TRNS
+        _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______,                    _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______,                                      KC_F7,   KC_F8,   _______, _______, _______,
+                                                     _______, _______,  _______, _______,
+                                                              _______,  _______,
+                                            _______, _______, _______,  _______, _______, _______
     ),
 /* Keymap 3: Symbol Layer
  *
@@ -129,14 +97,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [SYMB] = LAYOUT_ergodox_pretty(
        // left hand
-       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,                              KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS,                              KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-       KC_TRNS, KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_GRV,                                                 KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,                              KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                                                                  KC_0,   KC_0,    KC_DOT,  KC_EQL,  KC_TRNS,
-                                                             KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
-                                                                      M(PSCREEN_APP),     KC_TRNS,
-                                                    KC_TRNS, KC_TRNS, KC_PSCR,            KC_TRNS, KC_TRNS, KC_TRNS
+       _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   _______,                              _______, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       _______, KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PIPE, _______,                              _______, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+       _______, KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_GRV,                                                 KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, _______,
+       _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, _______,                              _______, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, _______,
+       _______, _______, _______, _______, _______,                                                                  KC_0,   KC_0,    KC_DOT,  KC_EQL,  _______,
+                                                             _______, _______,            _______, _______,
+                                                                      PSCREEN_APP,     _______,
+                                                    _______, _______, KC_PSCR,            _______, _______, _______
 ),
 /* Keymap 3: Media and mouse keys
  *
@@ -160,14 +128,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  *                                 `--------------------'       `--------------------'
  */
 [MDIA] = LAYOUT_ergodox_pretty(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                       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_TRNS,                       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,                                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,                                                           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                                             BL_INC,  BL_DEC,      KC_VOLU, KC_TRNS,
+       _______, _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______, _______,
+       _______, _______, _______, KC_MS_U, _______, _______, _______,                       _______, _______, _______, _______, _______, _______, _______,
+       _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,                                         _______, _______, _______, _______, _______, _______,
+       _______, _______, _______, _______, _______, _______, _______,                       _______, _______, _______, _______, _______, _______, _______,
+       _______, _______, _______, KC_BTN1, KC_BTN2,                                                           _______, _______, _______, _______, _______,
+                                                             BL_INC,  BL_DEC,      KC_VOLU, _______,
                                                                       BL_TOGG,     KC_VOLD,
-                                                    KC_TRNS, KC_TRNS, KC_TRNS,     KC_MPRV, KC_MPLY, KC_MNXT
+                                                    _______, _______, _______,     KC_MPRV, KC_MPLY, KC_MNXT
 ),
 /* Keymap 4: Movement
  *
@@ -192,14 +160,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 // MEDIA AND MOUSE
 [VIM] = LAYOUT_ergodox_pretty(
-       KC_TRNS, KC_TRNS,         KC_TRNS,         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                       KC_TRNS,  KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,
-       KC_TRNS, M(KEEPASS_OPEN), M(KEEPASS_TYPE), TERM_CP, TERM_PT, KC_TRNS, KC_TRNS,                       KC_TRNS,  LCTL(KC_C), KC_TRNS, KC_TRNS, KC_TRNS,  LCTL(KC_V), KC_TRNS,
-       KC_TRNS, M(DLEFT),        M(DRIGHT),       KC_LCTL, KC_LGUI, KC_TRNS,                                          KC_LEFT,    KC_DOWN, KC_UP,   KC_RIGHT, KC_TRNS,    KC_TRNS,
-       KC_TRNS, M(LSFT_TAB),     KC_TAB,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                       KC_TRNS,  KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,
-       KC_TRNS, 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_END,
-                                                                                      KC_TRNS,     KC_TRNS,
-                                                                    KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS, KC_TRNS, KC_TRNS
+       _______, _______, _______, _______, _______, _______, _______,     _______,  _______, _______, _______, _______,  _______, _______,
+       _______, _______, _______, _______, _______, _______, _______,     _______,  _______, _______, _______, _______,  _______, _______,
+       _______, DLEFT,   DRIGHT,  KC_LCTL, KC_LGUI, _______,                        KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, _______, _______,
+       _______, _______, KC_TAB,  _______, _______, _______, _______,     _______,  _______, _______, _______, _______,  _______, _______,
+       _______, _______, _______, _______, _______,                                          _______, _______, _______,  _______, _______,
+                                                    _______, _______,     KC_HOME, KC_END,
+                                                             _______,     _______,
+                                           _______, _______, _______,     _______, _______, _______
 ),
 /* Keymap 1: Game Layer
  *
@@ -226,14 +194,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // Otherwise, it needs KC_*
 [GAME] = LAYOUT_ergodox_pretty(  // layer 1 : code
         // left hand
-        KC_ESC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                                              KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_LSFT, KC_Z,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_ENT,  KC_TRNS, KC_TRNS, KC_LOCK, KC_BSPC,                                                                KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_ESC,  _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+        KC_LCTL, _______, _______, _______, _______, _______,                                              _______, _______, _______, _______, _______, _______,
+        KC_LSFT, KC_Z,    _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+        KC_ENT,  _______, _______, KC_LOCK, KC_BSPC,                                                                _______, _______, _______, _______, _______,
                                                               KC_F5,   KC_F6,         LCTL(KC_C), LCTL(KC_V),
-                                                                       KC_TRNS,       KC_UP,
-                                                     KC_LALT, KC_SPC,  OSM(SYMB),     KC_DOWN,    KC_TRNS, KC_TRNS
+                                                                       _______,       KC_UP,
+                                                     KC_LALT, KC_SPC,  OSM(SYMB),     KC_DOWN,    _______, _______
     ),
 /* Keymap 1: Game Arrow Layer
  *
@@ -260,71 +228,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // Otherwise, it needs KC_*
 [GAME_ARROW] = LAYOUT_ergodox_pretty(  // layer 1 : code
         // left hand
-        KC_ESC,  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS,                                              KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_LSFT, KC_Z,    KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_ENT,  KC_TRNS, KC_TRNS, KC_LOCK,  KC_BSPC,                                                                KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_ESC,  _______, _______, _______,  _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, KC_UP,   _______,  _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+        KC_LCTL, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,                                              _______, _______, _______, _______, _______, _______,
+        KC_LSFT, KC_Z,    _______, _______,  _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
+        KC_ENT,  _______, _______, KC_LOCK,  KC_BSPC,                                                                _______, _______, _______, _______, _______,
                                                                KC_F5,   KC_F6,         LCTL(KC_C), LCTL(KC_V),
-                                                                        KC_TRNS,       KC_UP,
-                                                      KC_LALT, KC_SPC,  OSM(SYMB),     KC_DOWN,    KC_TRNS, KC_TRNS
+                                                                        _______,       KC_UP,
+                                                      KC_LALT, KC_SPC,  OSM(SYMB),     KC_DOWN,    _______, _______
     )
 };
 
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case DLEFT:
-          if (record->event.pressed) { // Windows move desktop left
-            return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
-          }
-          break;
-        case DRIGHT:
-          if (record->event.pressed) { // Windows move desktop right
-            return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
-          }
-          break;
-        case PSCREEN_APP:
-          if (record->event.pressed) {
-            return MACRO(D(LALT), T(PSCR), U(LALT), END);
-          }
-          break;
-        case LSFT_TAB:
-          if (record->event.pressed) {
-            return MACRO(D(LSFT), T(TAB), U(LSFT), END);
-          }
-        case KEEPASS_OPEN:
-          if (record->event.pressed) { // Keepass open application
-            return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END);
-          }
-          break;
-        case KEEPASS_TYPE:
-          if (record->event.pressed) { // Keepass autotype
-            return MACRO(D(LCTL), D(LALT), T(A), U(LALT), U(LCTL), END);
-          }
-          break;
-        case TERM_CP:
-          if (record->event.pressed) { // Terminal Copy
-            return MACRO(D(LCTL), T(INSERT), U(LCTL), END);
-          }
-          break;
-        case TERM_PT:
-          if (record->event.pressed) { // Terminal Paste
-            return MACRO(D(LSFT), T(INSERT), U(LSFT), END);
-          }
-          break;
-      }
-    return MACRO_NONE;
-};
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  tap_dance_process_record(keycode);
+  tap_dance_process_keycode(keycode);
   return true;
 }
 
 // Runs constantly in the background, in a loop.
-void matrix_scan_user_keyboard(void) {
+void matrix_scan_user(void) {
     ergodox_board_led_on();
     ergodox_led_all_on();
 }
index cdc202d5f5989c74e665e67b1f3ef782921b3cd5..9ec4fd1a94810d57925e665fc9acc0cd0008edd1 100644 (file)
@@ -1 +1 @@
-#define UNICODE_SELECTED_MODES UC_LNX
+#define TAPPING_TOGGLE 2
index 16120e7d8edd3fae41d827fd886fad6ec1cf503f..b513272d3bf8dfb421278f6c4e50fc8fa8a642df 100644 (file)
 
 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.
-
 enum layers {
     _QWERTY,
     _LOWER,
     _RAISE,
-    _UNICODE,
     _ADJUST,
 };
 
-#define LOWER   MO(_LOWER)
-#define RAISE   MO(_RAISE)
-#define UNICODE MO(_UNICODE)
-
-enum unicode_names {
-    AACUTE,
-    AACUTE_M,
-    EACUTE,
-    EACUTE_M,
-    IACUTE,
-    IACUTE_M,
-    OACUTE,
-    OACUTE_M,
-    UACUTE,
-    UACUTE_M,
-    UDIER,
-    UDIER_M,
-    NTILDE,
-    NTILDE_M,
-    POUN,
-    COPY,
-    ORDF,
-    ORDM,
-    QUAD,
-    CUBE,
-    DEGR,
-    QUAR,
-    HALF,
-    NOT,
-    LDQU,
-    RDQU,
-    QUES,
-    EXCL,
-    ARRL,
-    ARRU,
-    ARRR,
-    ARRD,
-    EURO,
-    SMIL,
-    NEUT,
-    SMIH,
-    ANGR,
-    WORR,
-    DIZY,
-    TONG,
-    DISS,
-    SCRE,
-};
+#define LOWER   TT(_LOWER)
+#define RAISE   TT(_RAISE)
+#define TAB_ADJ LT(_ADJUST, KC_TAB)
 
-const uint32_t PROGMEM unicode_map[] = {
-    [AACUTE]    = 0xe1, // á
-    [AACUTE_M]  = 0xc1, // Á
-    [EACUTE]    = 0xe9, // é
-    [EACUTE_M]  = 0xc9, // É
-    [IACUTE]    = 0xed, // í
-    [IACUTE_M]  = 0xcd, // Í
-    [OACUTE]    = 0xf3, // ó
-    [OACUTE_M]  = 0xd3, // Ó
-    [UACUTE]    = 0xfa, // ú
-    [UACUTE_M]  = 0xda, // Ú
-    [UDIER]     = 0xfc, // ü
-    [UDIER_M]   = 0xdc, // Ü
-    [NTILDE]    = 0xf1, // ñ
-    [NTILDE_M]  = 0xd1, // Ñ
-    [POUN]      = 0xa3, // £
-    [COPY]      = 0xa9, // ©
-    [ORDF]      = 0xaa, // ª
-    [ORDM]      = 0xba, // º
-    [QUAD]      = 0xb2, // ²
-    [CUBE]      = 0xb3, // ³
-    [DEGR]      = 0xb0, // °
-    [QUAR]      = 0xbc, // ¼
-    [HALF]      = 0xbd, // ½
-    [NOT]       = 0xac, // ¬
-    [LDQU]      = 0xab, // «
-    [RDQU]      = 0xbb, // »
-    [QUES]      = 0xbf, // ¿
-    [EXCL]      = 0xa1, // ¡
-    [ARRL]      = 0x2190, // ←
-    [ARRU]      = 0x2191, // ↑
-    [ARRR]      = 0x2192, // →
-    [ARRD]      = 0x2193, // ↓
-    [EURO]      = 0x20ac, // €
-    [SMIL]      = 0x1f603, // 😃
-    [NEUT]      = 0x1f610, // 😐 
-    [SMIH]      = 0x1f608, // 😈
-    [ANGR]      = 0x1f620, // 😠
-    [WORR]      = 0x1f61f, // 😟
-    [DIZY]      = 0x1f635, // 😵
-    [TONG]      = 0x1f61d, // 😝
-    [DISS]      = 0x1f61e, // 😝
-    [SCRE]      = 0x1f631, // 😱
-};
-
-#define A_UNIC XP(AACUTE, AACUTE_M)
-#define E_UNIC XP(EACUTE, EACUTE_M)
-#define I_UNIC XP(IACUTE, IACUTE_M)
-#define O_UNIC XP(OACUTE, OACUTE_M)
-#define U_UNIC XP(UACUTE, UACUTE_M)
-#define Y_UNIC XP(UDIER,  UDIER_M )
-#define N_UNIC XP(NTILDE, NTILDE_M)
-#define ORD_UN XP(ORDF,   ORDM)
+#define FN_LAYER 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_CAPS, KC_VOLD, KC_MUTE, KC_VOLU, KC_HOME, KC_PGUP, KC_LBRC, KC_RBRC, KC_BSLS, KC_QUOT, _______, _______,\
+    _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_END,  KC_PGDN, KC_MINS, KC_EQL,  _______, _______, _______, _______,\
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
+),
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
@@ -124,81 +26,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * |   esc  |    Q   |    W   |    E   |    R   |    T   |    Y   |    U   |    I   |    O   |    P   |  bksp  |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |   tab  |    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |    ;   |   del  |
+ * |tab/adj |    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |    ;   |  enter |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | lshift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   |  enter |
+ * | lshift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |   up   |    /   |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |  lctrl |  lalt  |  lower |  unic  |  lgui  |  space |  space |  raise |  left  |  down  |   up   |  right | 
+ * |  lctrl |  lgui  |  lalt  |  ralt  |  lower |  space |  space |  raise |   del  |  right |  down  |  right | 
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  */
 [_QWERTY] = LAYOUT_ortho_4x12 ( 
     KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
-    KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_DEL,
-    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, LOWER,   UNICODE, KC_LGUI, KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
-),
-
-/* Lower
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F1   |   F2   |   F3   |   F4   |        |        |    7   |    8   |    9   |    -   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F5   |   F6   |   F7   |   F8   |        |        |    4   |    5   |    6   |    +   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F9   |   F10  |   F11  |   F12  |        |  nlck  |    1   |    2   |    3   |    /   |  pent  |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |        |        |        |    0   |    .   |    *   |    ;   |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
-[_LOWER] = LAYOUT_ortho_4x12 (
-    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   _______, _______, KC_P7,   KC_P8,   KC_P9,   KC_PMNS, _______,
-    _______, KC_F5,   KC_F6,   KC_F7,   KC_F8,   _______, _______, KC_P4,   KC_P5,   KC_P6,   KC_PPLS, _______,
-    _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_NLCK, KC_P1,   KC_P2,   KC_P3,   KC_PSLS, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PAST, KC_SCLN
+    TAB_ADJ, 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_UP,   KC_SLSH,
+    KC_LCTL, KC_LGUI, KC_LALT, KC_RALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT
 ),
 
-/* Raise
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |  caps  |        |        |        |        |        |    \   |    -   |    =   |    [   |    ]   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |        |    `   |        |        |        |        |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |        |        |        |  home  |  pgdn  |  pgup  |   end  |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
-[_RAISE] = LAYOUT_ortho_4x12 (
-    _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,
-    KC_CAPS, _______, _______, _______, _______, _______, KC_BSLS, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______,
-    _______, _______, _______, _______, _______, _______, KC_GRV,  KC_QUOT, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
+[_LOWER] = FN_LAYER
 
-/* 
- * unicode
- */
-[_UNICODE] = LAYOUT_ortho_4x12 ( 
-    _______, X(EXCL), X(WORR), E_UNIC,  X(EURO), X(TONG), Y_UNIC,  U_UNIC,  I_UNIC,  O_UNIC,  X(POUN), _______,
-    _______, A_UNIC,  X(SMIL), X(DISS), X(SCRE), X(DEGR), X(SMIH), X(NOT),  X(QUAR), X(HALF), ORD_UN,  _______,
-    _______, X(DIZY), X(ANGR), X(COPY), X(QUAD), X(CUBE), N_UNIC,  X(NEUT), X(LDQU), X(RDQU), X(QUES), _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, X(ARRU), X(ARRL), X(ARRD), X(ARRR)
-),
+[_RAISE] = FN_LAYER
 
 /* 
  * Adjust 
  */
 [_ADJUST] = LAYOUT_ortho_4x12 (
-    _______, RESET,   _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
+    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   _______, _______, _______, _______, _______, _______, RESET,
+    _______, KC_F5,   KC_F6,   KC_F7,   KC_F8,   _______, _______, _______, _______, _______, _______, _______,
+    _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),    
+),     
 };
 
 uint32_t layer_state_set_user(uint32_t state) {
-  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+
+  #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 _ADJUST:
+    writePinHigh(JOTANCK_LED1);
+    writePinHigh(JOTANCK_LED2);
+    break; 
+  default:
+    writePinLow(JOTANCK_LED1);
+    writePinLow(JOTANCK_LED2);
+    break; 
+  };
+  #endif
+  return state;
 }
 
 void matrix_init_user(void) {
 }
-
diff --git a/layouts/community/ortho_4x12/jotix/rules.mk b/layouts/community/ortho_4x12/jotix/rules.mk
deleted file mode 100644 (file)
index 502b2de..0000000
+++ /dev/null
@@ -1 +0,0 @@
-UNICODEMAP_ENABLE = yes
index cc699dfc5438f8fb4d092cfd3499c21746e83613..a228a49d4e82be440f1a39f8276f09f1869516ee 100644 (file)
@@ -3,11 +3,9 @@
 
 extern keymap_config_t keymap_config;
 
-enum custom_macros {
-    DLEFT,
-    DRIGHT,
-    PSCREEN_APP
-};
+#if (!defined(LAYOUT) && defined(KEYMAP))
+#   define LAYOUT KEYMAP
+#endif
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
@@ -46,11 +44,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 [SYMB] = LAYOUT_ortho_5x12( \
-    KC_CAPS,        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,    KC_F6, KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11, \
-    _______,        KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PIPE,  KC_7,  KC_8,   KC_9,   KC_ASTR, KC_RPRN, KC_F12, \
-    _______,        KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_GRV,   KC_4,  KC_5,   KC_6,   KC_PLUS, KC_RCBR, KC_PIPE, \
-    M(PSCREEN_APP), KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD,  KC_1,  KC_2,   KC_3,   KC_BSLS, KC_VOLD, KC_VOLU, \
-    KC_PSCR,        _______, _______, _______, _______, TG(GAME), KC_0,  KC_DOT, KC_EQL, KC_MPRV, KC_MNXT, KC_MPLY \
+    KC_CAPS,     KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,    KC_F6, KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11, \
+    _______,     KC_EXLM, KC_AT,   KC_LPRN, KC_RPRN, KC_PIPE,  KC_7,  KC_8,   KC_9,   KC_ASTR, KC_RPRN, KC_F12, \
+    _______,     KC_HASH, KC_DLR,  KC_LCBR, KC_RCBR, KC_GRV,   KC_4,  KC_5,   KC_6,   KC_PLUS, KC_RCBR, KC_PIPE, \
+    PSCREEN_APP, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD,  KC_1,  KC_2,   KC_3,   KC_BSLS, KC_VOLD, KC_VOLU, \
+    KC_PSCR,     _______, _______, _______, _______, TG(GAME), KC_0,  KC_DOT, KC_EQL, KC_MPRV, KC_MNXT, KC_MPLY \
 ),
 
 /* Vim Movement (Hold down F)
@@ -67,11 +65,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 [VIM] = LAYOUT_ortho_5x12( \
-    _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______,  _______,   KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, \
-    _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______,  _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, \
+    _______, DLEFT,   DRIGHT,  KC_LCTL, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
 ),
 
 /* Gaming mode (Raise)
@@ -102,28 +100,7 @@ void persistent_default_layer_set(uint16_t default_layer) {
     default_layer_set(default_layer);
 }
 
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-    switch(id) {
-        case DLEFT:
-            if (record->event.pressed) { // Windows move desktop left
-                return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
-            }
-            break;
-        case DRIGHT:
-            if (record->event.pressed) { // Windows move desktop right
-                return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
-            }
-            break;
-        case PSCREEN_APP:
-            if (record->event.pressed) {
-                return MACRO(D(LALT), T(PSCR), U(LALT), END);
-            }
-            break;
-    }
-    return MACRO_NONE;
-}
-
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-    tap_dance_process_record(keycode);
+    tap_dance_process_keycode(keycode);
     return true;
 }
index c489e14073037c73883a26d5f8a52e3f8d5040f5..bc4d9ec1af1a03a9f4d079cf0c6a8abaae93fb8e 100644 (file)
     #define B13 PAL_LINE(GPIOB, 13)
     #define B14 PAL_LINE(GPIOB, 14)
     #define B15 PAL_LINE(GPIOB, 15)
+    #define B16 PAL_LINE(GPIOB, 16)
+    #define B17 PAL_LINE(GPIOB, 17)
     #define C0  PAL_LINE(GPIOC, 0)
     #define C1  PAL_LINE(GPIOC, 1)
     #define C2  PAL_LINE(GPIOC, 2)
diff --git a/quantum/keymap_extras/sendstring_belgian.h b/quantum/keymap_extras/sendstring_belgian.h
new file mode 100644 (file)
index 0000000..77531a1
--- /dev/null
@@ -0,0 +1,94 @@
+/* Copyright 2019 kimat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/* Sendstring definitions for the belgian layout */
+#ifndef SENDSTRING_BELGIAN
+#define SENDSTRING_BELGIAN
+
+#include "keymap_belgian.h"
+
+const bool ascii_to_shift_lut[0x80] PROGMEM = {
+    0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 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, 0, 0,
+    0, 0, 1, 1, 0, 0, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 0, 0, 0, 0, 1, 1,
+    0, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 0, 0, 0, 0, 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
+};
+const bool ascii_to_altgr_lut[0x80] PROGMEM = {
+    0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 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, 0, 0, 0, 0,
+    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, 0, 0, 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, 1, 1, 0,
+    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, 1, 1, 1, 1, 0
+};
+
+// NOTE that you have to send the dead keys twice: tilda, circ
+// SEND_STRING(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^^``_abcdefghijklmnopqrstuvwxyz{|}~~");
+const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = {
+    0, 0, 0, 0, 0, 0, 0, 0,
+    KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, KC_ESC, 0, 0, 0, 0,
+ /* SPACE  !     "      #        $     %     &      '                 */
+    KC_SPC, BE_EXLM, BE_QUOT, BE_QUOT, BE_DLR,BE_UGRV,BE_AMP, BE_APOS ,
+  /*  (      )     *      +        ,        -        .       /        */
+    BE_LPRN, BE_RPRN, BE_DLR,BE_EQL, BE_COMM, BE_MINS, BE_SCLN, BE_COLN,
+  /*   0     1     2     3     4     5    6     7                     */
+    BE_AGRV, BE_AMP, BE_EACU, BE_QUOT, BE_APOS, BE_LPRN, BE_PARA, BE_EGRV,
+  /*   8     9      :       ;         <        =       >       ?      */
+    BE_EXLM, BE_CCED, BE_COLN, BE_SCLN, BE_LESS,    BE_EQL, BE_LESS, BE_COMM,
+  /*   @     A     B     C     D     E     F     G                    */
+    BE_EACU, BE_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
+  /*   H     I     J     K     L     M     N     O                    */
+    KC_H, KC_I, KC_J, KC_K, KC_L, BE_M, KC_N, KC_O,
+  /*   P     Q     R     S     T     U     V     W                    */
+    KC_P, BE_Q, KC_R, KC_S, KC_T, KC_U, KC_V, BE_W,
+  /*   X     Y     Z      [         \       ]       ^      _          */
+    KC_X, KC_Y, BE_Z, BE_CIRC, BE_LESS, BE_DLR, BE_PARA, BE_MINS,
+  /*   `       a     b     c     d     e     f     g                  */
+    BE_MU, BE_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
+  /*   h     i     j     k     l     m     n     o                    */
+    KC_H, KC_I, KC_J, KC_K, KC_L, BE_M, KC_N, KC_O,
+  /*    p    q     r     s     t     u     v     w                    */
+    KC_P, BE_Q, KC_R, KC_S, KC_T, KC_U, KC_V, BE_W,
+  /*    x    y     z      {        |        }        ~    DELETE      */
+    KC_X, KC_Y, BE_Z, BE_CCED, BE_AMP, BE_AGRV, BE_EQL, KC_DEL
+};
+
+#endif
index ca63f50f24799126a3887eab960121b2e11dffb5..e222a30976e513e1b1d71d56b53301797e77fed6 100644 (file)
@@ -326,5 +326,5 @@ uint8_t matrix_scan(void)
   debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
 
   matrix_scan_quantum();
-  return 1;
+  return (uint8_t)changed;
 }
index a3539576f5103046230dd810080a28047fc7b37f..b32d48eb88c7946a5289ddbca66a5228f74adfbb 100644 (file)
@@ -74,7 +74,7 @@ bool transport_master(matrix_row_t matrix[]) {
 #  endif
 
 #  ifdef ENCODER_ENABLE
-  i2c_readReg(SLAVE_I2C_ADDRESS, I2C_ENCODER_START, (void *)i2c_buffer->encoder_state, sizeof(I2C_slave_buffer_t.encoder_state), TIMEOUT);
+  i2c_readReg(SLAVE_I2C_ADDRESS, I2C_ENCODER_START, (void *)i2c_buffer->encoder_state, sizeof(i2c_buffer->encoder_state), TIMEOUT);
   encoder_update_raw(i2c_buffer->encoder_state);
 #  endif
 
index 48d7afb1492ab401a91124139aeae8fb2535b5e9..c13784ba153763d6f5acca51f394384e65762cd5 100644 (file)
@@ -86,7 +86,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #endif
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 /* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
index 8d9a993cf1f49e535b1571ddf810504f0fbd747a..d954fec961042865471980a5e7e7d58b0286f6a5 100644 (file)
@@ -37,7 +37,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define UNUSED_PINS     {}
 
 #define DIODE_DIRECTION COL2ROW
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
 
 #define NO_BACKLIGHT_CLOCK
 #define BACKLIGHT_LEVELS 1
index 44c00bdd151b1e5c97667aa6fd98ccf803aa45e1..11715cf3468ae0a63efda5c5ae1a3b9a4530780f 100644 (file)
@@ -260,6 +260,19 @@ dfu-util-wait: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
 st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
        $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
 
+
+# Autodetect teensy loader
+ifndef TEENSY_LOADER_CLI
+    ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
+        TEENSY_LOADER_CLI ?= teensy-loader-cli
+    else
+        TEENSY_LOADER_CLI ?= teensy_loader_cli
+    endif
+endif
+
+teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
+       $(TEENSY_LOADER_CLI) -mmcu=$(MCU_LDSCRIPT) -w -v $(BUILD_DIR)/$(TARGET).hex
+
 bin: $(BUILD_DIR)/$(TARGET).bin sizeafter
        if [ ! -z "$(DFU_SUFFIX_ARGS)" ]; then \
                $(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null ;\
index 3991a8a9ef8e2d8cf64c3bdde4d96209ae74da0f..6a560229a694b6fc848cbca961e77578e332e3ec 100644 (file)
@@ -412,7 +412,7 @@ void process_action(keyrecord_t *record, action_t action)
                         case OP_BIT_AND: default_layer_and(bits | mask); break;
                         case OP_BIT_OR:  default_layer_or(bits | mask);  break;
                         case OP_BIT_XOR: default_layer_xor(bits | mask); break;
-                        case OP_BIT_SET: default_layer_and(mask); default_layer_or(bits); break;
+                        case OP_BIT_SET: default_layer_set(bits | mask); break;
                     }
                 }
             } else {
@@ -426,7 +426,7 @@ void process_action(keyrecord_t *record, action_t action)
                         case OP_BIT_AND: layer_and(bits | mask); break;
                         case OP_BIT_OR:  layer_or(bits | mask);  break;
                         case OP_BIT_XOR: layer_xor(bits | mask); break;
-                        case OP_BIT_SET: layer_and(mask); layer_or(bits); break;
+                        case OP_BIT_SET: layer_state_set(bits | mask); break;
                     }
                 }
             }
index 956145c3132267c28606f67db4ebb42ed63f3dbe..6b80ef49221e17c15a6379341fc295c8e4f6cce8 100644 (file)
@@ -11,7 +11,7 @@ extern uint32_t _erom;
 //WARNING: These are only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support
 extern uint32_t _eram;
 #define BOOTLOADER_MAGIC 0x3B9ACA00
-#define MAGIC_ADDR (uint32_t *)(&_eram - 4)
+#define MAGIC_ADDR (uint32_t *)((intptr_t)(&_eram) - 4)
 #endif
 
 #ifdef MD_BOOTLOADER
@@ -22,4 +22,3 @@ extern uint32_t _eram;
 #endif //MD_BOOTLOADER
 
 #endif //_MD_BOOTLOADER_H_
-
index 3b2b36d020e4c0f2916001fd94f99e0ea5f0412b..79df8c4dea1cc500cde24339461185db9a8cf4c5 100644 (file)
@@ -86,31 +86,37 @@ qk_tap_dance_action_t tap_dance_actions[] = {
     [TD_COPY_PASTE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_copy_paste_finished, NULL)
 };
 
-void tap_dance_process_record(uint16_t keycode) {
+void tap_dance_process_keycode(uint16_t keycode) {
     if (tap_dance_state == SINGLE_TAP && keycode != TD(TD_SYM_VIM)) {
         tap_dance_active = false;
     }
 }
 
-__attribute__ ((weak))
-void matrix_init_rgb(void) {}
-
 __attribute__ ((weak))
 void layer_state_set_rgb(uint32_t state) {}
 
-__attribute__ ((weak))
-void matrix_scan_user_keyboard(void) {}
-
-void matrix_scan_user() {
-  static bool first_run = true;
-  if (first_run) {
-    first_run = false;
-    matrix_init_rgb();
-  }
-  matrix_scan_user_keyboard();
-}
-
 uint32_t layer_state_set_user(uint32_t state) {
   layer_state_set_rgb(state);
   return state;
 }
+
+bool try_handle_macro(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode)
+    {
+        case DLEFT:
+            if (record->event.pressed)
+                SEND_STRING(SS_LGUI(SS_LALT(SS_TAP(X_LEFT))));
+            return true;
+        case DRIGHT:
+            if (record->event.pressed)
+                SEND_STRING(SS_LGUI(SS_LALT(SS_TAP(X_RIGHT))));
+            return true;
+        case PSCREEN_APP:
+            if (record->event.pressed)
+                SEND_STRING(SS_LALT(SS_TAP(X_PSCREEN)));
+            return true;
+
+        default:
+            return false;
+    }
+}
index 0e6c6a196f9aa6acc6372d04f8a2b6606a2f0e04..17f3779b7423d6d7805a95af75c4e2346175f927 100644 (file)
@@ -17,6 +17,13 @@ enum tap_dance_declarations {
     TD_COPY_PASTE,
 };
 
+enum custom_keys {
+    DLEFT = SAFE_RANGE,
+    DRIGHT,
+    PSCREEN_APP
+};
+
 void tap_dance_sym_vim_finished(qk_tap_dance_state_t*, void*);
 void tap_dance_sym_vim_reset(qk_tap_dance_state_t*, void*);
-void tap_dance_process_record(uint16_t);
+void tap_dance_process_keycode(uint16_t);
+bool try_handle_macro(uint16_t keycode, keyrecord_t *record);
index b158e2d5a26aaa24a30d3eb98735a4a772f39e2f..c099072fc7f20426979b922f17cae65fac97dd9a 100644 (file)
@@ -1,3 +1,4 @@
 #pragma once
 
 #define PERMISSIVE_HOLD
+#define NO_ACTION_MACRO
index a3dfd905ccea883e3c1a18c9784e5a534bb4d37b..5a6d74b5ac60568ec9aaef547879c99dfa287fe7 100644 (file)
@@ -1,16 +1,11 @@
 #include "quantum.h"
 #include "333fred.h"
 
-void matrix_init_rgb(void) {
-  rgblight_enable_noeeprom();
-  rgblight_sethsv_noeeprom(270, 255, 20);
-}
-
 void layer_state_set_rgb(uint32_t state) {
   switch (biton32(state)) {
     case BASE:
       // purple
-      rgblight_sethsv_noeeprom(270, 255, 20);
+      rgblight_sethsv_noeeprom(255, 255, 20);
       break;
     case SYMB:
       // blue
@@ -26,3 +21,8 @@ void layer_state_set_rgb(uint32_t state) {
       break;
   }
 }
+
+void keyboard_post_init_user(void) {
+  rgblight_enable_noeeprom();
+  layer_state_set_rgb(1); // Set layer 0 (bit 1) on
+}
diff --git a/users/bcat/config.h b/users/bcat/config.h
new file mode 100644 (file)
index 0000000..a29aded
--- /dev/null
@@ -0,0 +1,31 @@
+/* Turn off RGB lighting when the host goes to sleep. */
+#define RGBLIGHT_SLEEP
+
+/* Keep backlight and RGB level increments consistent across keyboards. */
+#undef BACKLIGHT_LEVELS
+#undef RGBLIGHT_HUE_STEP
+#undef RGBLIGHT_SAT_STEP
+#undef RGBLIGHT_VAL_STEP
+
+#define BACKLIGHT_LEVELS 7
+#define RGVLIGHT_HUE_STEP 8
+#define RGVLIGHT_SAT_STEP 17
+#define RGVLIGHT_VAL_STEP 17
+
+/* Make mouse operation smoother. */
+#undef MOUSEKEY_DELAY
+#undef MOUSEKEY_INTERVAL
+
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 16
+
+/* Lower mouse speed to adjust for reduced MOUSEKEY_INTERVAL. */
+#undef MOUSEKEY_MAX_SPEED
+#undef MOUSEKEY_TIME_TO_MAX
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_TIME_TO_MAX 150
+#define MOUSEKEY_WHEEL_MAX_SPEED 3
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
diff --git a/users/bcat/rules.mk b/users/bcat/rules.mk
new file mode 100644 (file)
index 0000000..59f8270
--- /dev/null
@@ -0,0 +1,11 @@
+# Enable Bootmagic Lite to consistently reset to bootloader and clear EEPROM.
+BOOTMAGIC_ENABLE = lite
+
+# Enable mouse and media keys on all keyboards.
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+
+# Disable some unwanted features on all keyboards.
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+NKRO_ENABLE = no
index a18713626ec1108b09b8d2d960e892db7dfbbf8a..f935e83c74454d6fd66fc4f87b0b002e0bda35f8 100644 (file)
@@ -1,35 +1,62 @@
 #include "kuatsure.h"
+#include "version.h"
 
-void tmux_prefix(void) {
-  register_code(KC_LCTL);
-  register_code(KC_SPC);
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LT),
+  [TD_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_GT)
+};
 
-  unregister_code(KC_LCTL);
-  unregister_code(KC_SPC);
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  return true;
 }
 
-void tmux_pane_zoom(void) {
-  tmux_prefix();
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case KB_MAKE:
+      if (!record->event.pressed) {
+        SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER));
+      }
+      return false;
+      break;
+
+    case KB_VRSN:
+      if (!record->event.pressed) {
+        SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+      }
+      return false;
+      break;
+
+    case KB_FLSH:
+      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 "
+          #elif defined(BOOTLOADER_CATERINA)
+            ":avrdude "
+          #endif
+          SS_TAP(X_ENTER)
+        );
+
+        reset_keyboard();
+      }
+      return false;
+      break;
+  }
 
-  register_code(KC_Z);
-  unregister_code(KC_Z);
+  return process_record_keymap(keycode, record);
 }
 
-void tmux_pane_switch(uint16_t keycode) {
-  tmux_prefix();
-
-  register_code(KC_Q);
-  unregister_code(KC_Q);
-
-  register_code(keycode);
-  unregister_code(keycode);
+void tmux_prefix(void) {
+  tap_code16(LCTL(KC_SPC));
 }
 
-void tmux_window_switch(uint16_t keycode) {
+void tmux_pane_zoom(void) {
   tmux_prefix();
 
-  register_code(keycode);
-  unregister_code(keycode);
+  SEND_STRING("z");
 }
 
 LEADER_EXTERNS();
@@ -43,69 +70,70 @@ void matrix_scan_user(void) {
     // anything you can do in a macro https://docs.qmk.fm/macros.html
     // https://docs.qmk.fm/feature_leader_key.html
 
+    // Stop music and lock computer via alfred
+    SEQ_ONE_KEY(KC_H) {
+      SEND_STRING(SS_LGUI(" ") SS_TAP(X_LGUI) "afk" SS_TAP(X_ENTER));
+    }
+
+    // Stop music and lock computer via alfred
+    SEQ_TWO_KEYS(KC_H, KC_H) {
+      SEND_STRING(SS_LGUI(" ") SS_TAP(X_LGUI) "afk" SS_TAP(X_ENTER) SS_TAP(X_MEDIA_PLAY_PAUSE));
+    }
+
     // Whole Screen Shot
     SEQ_ONE_KEY(KC_A) {
-      register_code(KC_LGUI);
-      register_code(KC_LSFT);
-      register_code(KC_3);
-
-      unregister_code(KC_3);
-      unregister_code(KC_LSFT);
-      unregister_code(KC_LGUI);
+      SEND_STRING(SS_LGUI(SS_LSFT("3")));
     }
 
     // Selective Screen Shot
     SEQ_ONE_KEY(KC_S) {
-      register_code(KC_LGUI);
-      register_code(KC_LSFT);
-      register_code(KC_4);
-
-      unregister_code(KC_4);
-      unregister_code(KC_LSFT);
-      unregister_code(KC_LGUI);
+      SEND_STRING(SS_LGUI(SS_LSFT("4")));
     }
 
     // TMUX - shift to pane 1 and zoom
     SEQ_ONE_KEY(KC_J) {
-      tmux_pane_switch(KC_1);
+      tmux_prefix();
+      SEND_STRING("q1");
       tmux_pane_zoom();
     }
 
+    // TMUX - shift to first window
+    SEQ_TWO_KEYS(KC_J, KC_J) {
+      tmux_prefix();
+      SEND_STRING("1");
+    }
+
     // TMUX - shift to pane 2 and zoom
     SEQ_ONE_KEY(KC_K) {
-      tmux_pane_switch(KC_2);
+      tmux_prefix();
+      SEND_STRING("q2");
       tmux_pane_zoom();
     }
 
+    // TMUX - shift to second window
+    SEQ_TWO_KEYS(KC_K, KC_K) {
+      tmux_prefix();
+      SEND_STRING("2");
+    }
+
     // TMUX - shift to pane 3 and zoom
     SEQ_ONE_KEY(KC_L) {
-      tmux_pane_switch(KC_3);
+      tmux_prefix();
+      SEND_STRING("q3");
       tmux_pane_zoom();
     }
 
+    // TMUX - shift to third window
+    SEQ_TWO_KEYS(KC_L, KC_L) {
+      tmux_prefix();
+      SEND_STRING("3");
+    }
+
     // TMUX - shift to last pane and zoom
     SEQ_ONE_KEY(KC_SCOLON) {
       tmux_prefix();
-
-      register_code(KC_SCOLON);
-      unregister_code(KC_SCOLON);
-
+      SEND_STRING(";");
       tmux_pane_zoom();
     }
-
-    // TMUX - shift to first window
-    SEQ_ONE_KEY(KC_U) {
-      tmux_window_switch(KC_1);
-    }
-
-    // TMUX - shift to second window
-    SEQ_ONE_KEY(KC_I) {
-      tmux_window_switch(KC_2);
-    }
-
-    // TMUX - shift to third window
-    SEQ_ONE_KEY(KC_O) {
-      tmux_window_switch(KC_3);
-    }
   }
 }
index 23d3c617cbcd27e7d6e79e2246e698f98db7ea66..8961d562130611bf874bd23901979cad4128af3b 100644 (file)
@@ -3,12 +3,32 @@
 
 #include "quantum.h"
 
+enum kuatsure_keycodes {
+  KB_MAKE = SAFE_RANGE,
+  KB_FLSH,
+  KB_VRSN,
+
+  USER_SAFE_RANGE,
+};
+
+enum {
+  TD_LBRC = 0,
+  TD_RBRC,
+};
+
+#define KT_LBRC TD(TD_LBRC)
+#define KT_RBRC TD(TD_RBRC)
+
+#define TAPPING_TERM 200
+
+#define LEADER_TIMEOUT 250
+#define LEADER_PER_KEY_TIMING
+
 void tmux_prefix(void);
 void tmux_pane_zoom(void);
-void tmux_pane_switch(uint16_t keycode);
-void tmux_window_switch(uint16_t keycode);
 
 #define KT_CESC CTL_T(KC_ESC)
+#define KT_MTAB MEH_T(KC_TAB)
 
 #undef LEADER_TIMEOUT
 #define LEADER_TIMEOUT 300
@@ -18,6 +38,9 @@ void tmux_window_switch(uint16_t keycode);
 #define _________________NUMBER_L1_________________        KC_1,    KC_2,    KC_3,    KC_4,    KC_5
 #define _________________NUMBER_R1_________________        KC_6,    KC_7,    KC_8,    KC_9,    KC_0
 
+#define _________________SYMBOL_L1_________________        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
+#define _________________SYMBOL_R1_________________        KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
+
 #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
@@ -30,4 +53,9 @@ void tmux_window_switch(uint16_t keycode);
 #define ____________FUNCTION_2____________                 KC_F5,   KC_F6,   KC_F7,   KC_F8
 #define ____________FUNCTION_3____________                 KC_F9,   KC_F10,  KC_F11,  KC_F12
 
+#define ___SQBRACKETS___                                   KT_LBRC, KT_RBRC
+#define _____PARENS_____                                   KC_LPRN, KC_RPRN
+#define ____CRBRACES____                                   KC_LCBR, KC_RCBR
+#define ___ANBRACKETS___                                   KC_LT,   KC_GT
+
 #endif
index f0d295aad05ab7defc435d856f0dc2f8080a07d8..ed7e92905468997c6002ac57ad74d96356a207dd 100644 (file)
@@ -1,3 +1,4 @@
 CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
 
 SRC += kuatsure.c
index 23eeb3b083f33c4ece2b12d69f2bb2bc038c3044..58f17489a125c07d6308da1b42590fea6b9ddc91 100644 (file)
@@ -1,26 +1,29 @@
 #include "stanrc85.h"
 
 void matrix_init_user(void) {
-  rgblight_setrgb(0xFF,  0x00, 0x00);
+  rgblight_setrgb(0xFF, 0x00, 0x00);
 };
 
 uint32_t layer_state_set_user(uint32_t state) {
   switch (biton32(state)) {
     case 0:
-        rgblight_setrgb (0xFF,  0x00, 0x00);
-        break;
+      rgblight_setrgb (0xFF, 0x00, 0x00);
+      break;
     case 1:
-        rgblight_setrgb (0x00,  0xFF, 0x00);
-        break;
+      rgblight_setrgb (0x00, 0xFF, 0x00);
+      break;
     case 2:
-        rgblight_setrgb (0x00,  0x00, 0xFF);
-        break;
+      rgblight_setrgb (0x00, 0x00, 0xFF);
+      break;
     case 3:
-        rgblight_setrgb (0xFF,  0xFF, 0xFF);
-        break;
+      rgblight_setrgb (0xFF, 0xFF, 0xFF);
+      break;
+    case 4:
+      rgblight_setrgb (0xFF, 0x00, 0xFF);
+      break;
     default: //  for any other layers, or the default layer
-        rgblight_setrgb (0xFF,  0x00, 0x00);
-        break;
+      rgblight_setrgb (0xFF, 0x00, 0x00);
+      break;
     }
   return state;
 }
index b3d413fa1dffd2894310a92634690daa237e5754..ceb7167e10308b564eaf7738f6e59bbd3fd7f866 100644 (file)
@@ -3,10 +3,17 @@
 #include "quantum.h"
 #include "version.h"
 
-#define DEFAULT 0  //Custom ANSI
-#define LAYER1 1   //Default ANSI (enable with Fn2+CAPS)
-#define LAYER2 2   //Function keys, arrows, custom shortcuts, volume control
-#define LAYER3 3   //RGB Underglow controls and RESET
+enum my_layers {
+  _NUMPAD = 0,  //Macropad numpad
+  _NAVKEY,      //Macropad nav keys
+  _MEDIA,       //Macropad media controls
+  _RGB,         //Macropad RGB controls
+  _FN1PAD,      //Macropad reset and make commands
+  _QWERTY = 0,  //Qwerty with custom shortcuts and functions
+  _DEFAULT,     //Default ANSI for gaming, enable with FN2+RCtl
+  _FN1_60,      //Function keys, arrows, custom shortcuts, volume control
+  _FN2_60       //RGB Underglow controls and RESET
+};
 
 //Aliases for longer keycodes
 #define KC_CAD LALT(LCTL(KC_DEL))
 #define CA_QUOT LCA(KC_QUOT)
 #define CA_SCLN LCA(KC_SCLN)
 #define KC_CTLE LCTL_T(KC_ESC)
-#define LT_SPCF LT(2, KC_SPC)
+#define LT_SPCF LT(_FN1_60, KC_SPC)
 #define TD_TESC TD(TD_ESC)
 #define TD_TWIN TD(TD_WIN)
 #define TD_TCTL TD(TD_RCTL)
+#define CA_COPY LCTL(KC_C)
+#define CA_PSTE LCTL(KC_V)
 
 enum cust_keys {
   KC_MAKE = SAFE_RANGE,
diff --git a/users/xulkal/custom_encoder.c b/users/xulkal/custom_encoder.c
new file mode 100644 (file)
index 0000000..09f1cda
--- /dev/null
@@ -0,0 +1,13 @@
+#include "custom_encoder.h"
+
+#ifdef ENCODER_ENABLE
+const uint16_t PROGMEM encoders[][2] = {
+    { KC_PGUP, KC_PGDN },
+    { KC_DOWN, KC_UP }
+}
+
+void encoder_update_user(uint8_t index, bool clockwise)
+{
+    tap_code16(pgm_read_word(&encoders[index][clockwise]));
+}
+#endif
diff --git a/users/xulkal/custom_encoder.h b/users/xulkal/custom_encoder.h
new file mode 100644 (file)
index 0000000..010d4b1
--- /dev/null
@@ -0,0 +1,2 @@
+#pragma once
+#include "quantum.h"
diff --git a/users/xulkal/custom_keycodes.h b/users/xulkal/custom_keycodes.h
new file mode 100644 (file)
index 0000000..d4ae0bd
--- /dev/null
@@ -0,0 +1,28 @@
+#pragma once
+
+enum custom_keycodes {
+  RGBRST = SAFE_RANGE,
+#ifndef TAP_DANCE_ENABLE
+  TD_MIN,
+  TD_COMM = TD_MIN,
+  TD_BSPC,
+  TD_DEL,
+  TD_DOT,
+  TD_MAX,
+#endif
+  KEYMAP_SAFE_RANGE
+};
+
+#define RIS_ESC  LT(_RAISE, KC_ESC)
+#define RIS_CAPS LT(_RAISE, KC_CAPS)
+
+#define QWERTY DF(_QWERTY)
+
+#ifndef GAMELAYER_DISABLE
+#define GAME DF(_GAME)
+#else
+#define GAME KC_TRANSPARENT
+#endif
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
diff --git a/users/xulkal/custom_oled.c b/users/xulkal/custom_oled.c
new file mode 100644 (file)
index 0000000..77e580b
--- /dev/null
@@ -0,0 +1,96 @@
+#include "custom_oled.h"
+#include "process_records.h"
+
+#include <stdio.h>
+
+#ifdef OLED_DRIVER_ENABLE
+
+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};
+    oled_write_P(sol_logo, false);
+}
+
+static void render_status(void)
+{
+    // Render to mode icon
+    static const char PROGMEM mode_logo[2][3] = {
+        {0x97,0x98,0},
+        {0xb7,0xb8,0}
+    };
+
+    oled_write_P(mode_logo[0], false);
+
+#if defined(RGB_MATRIX_ENABLE)
+    static char buffer[20] = {0};
+    snprintf(buffer, sizeof(buffer), "    h%3d s%3d v%3d\n", rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val);
+    oled_write(buffer, false);
+#endif
+
+    oled_write_P(mode_logo[1], false);
+
+#if defined(RGB_MATRIX_ENABLE)
+    snprintf(buffer, sizeof(buffer), "         s%3d m%3d\n", rgb_matrix_config.speed, rgb_matrix_config.mode);
+    oled_write(buffer, false);
+#endif
+
+    // 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
+    oled_write_P(PSTR("Layer: "), false);
+    switch (biton32(layer_state))
+    {
+        case _QWERTY:
+#ifndef GAMELAYER_DISABLE
+            switch (biton32(default_layer_state))
+            {
+                case _QWERTY:
+                    oled_write_P(PSTR("Default\n"), false);
+                    break;
+                case _GAME:
+                    oled_write_P(PSTR("Game\n"), false);
+                    break;
+                default:
+                    oled_write_P(PSTR("Undefined\n"), false);
+                    break;
+            }
+#else
+            oled_write_P(PSTR("Default\n"), false);
+#endif
+            break;
+        case _LOWER:
+            oled_write_P(PSTR("Lower\n"), false);
+            break;
+        case _RAISE:
+            oled_write_P(PSTR("Raise\n"), false);
+            break;
+#ifdef TRILAYER_ENABLED
+        case _ADJUST:
+            oled_write_P(PSTR("Adjust\n"), false);
+            break;
+#endif
+        default:
+            oled_write_P(PSTR("Undefined\n"), false);
+            break;
+  }
+
+  // Host Keyboard LED Status
+    uint8_t led_usb_state = host_keyboard_leds();
+    oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR("       "), false);
+    oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR("       "), false);
+    oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR("       "), false);
+}
+
+void oled_task_user(void)
+{
+    if (is_keyboard_master())
+        render_status();
+    else
+    {
+        render_logo();
+        oled_scroll_left();
+    }
+}
+
+#endif
diff --git a/users/xulkal/custom_oled.h b/users/xulkal/custom_oled.h
new file mode 100644 (file)
index 0000000..010d4b1
--- /dev/null
@@ -0,0 +1,2 @@
+#pragma once
+#include "quantum.h"
diff --git a/users/xulkal/custom_tap_dance.c b/users/xulkal/custom_tap_dance.c
new file mode 100644 (file)
index 0000000..a1c644e
--- /dev/null
@@ -0,0 +1,61 @@
+#include "custom_tap_dance.h"
+#include "custom_keycodes.h"
+#include "timer_utils.h"
+
+#ifdef TAP_DANCE_ENABLE
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [COMM_QUOT]  = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_QUOT),
+  [BACKSPACE] = ACTION_TAP_DANCE_DOUBLE (KC_BSPACE, LCTL(KC_BSPACE)),
+  [DELETE] = ACTION_TAP_DANCE_DOUBLE (KC_DELETE, LCTL(KC_DELETE))
+};
+
+#else
+
+static uint16_t td_keycode;
+static uint16_t td_timer;
+
+const uint16_t PROGMEM td_keymaps[TD_MAX - TD_MIN][2] = {
+    [TD_COMM - TD_MIN]  = { KC_COMM, KC_QUOT },
+    [TD_BSPC - TD_MIN]  = { KC_BSPACE, LCTL(KC_BSPACE) },
+    [TD_DEL - TD_MIN]  = { KC_DELETE, LCTL(KC_DELETE) },
+    [TD_DOT - TD_MIN]  = { KC_DOT, KC_GRAVE }
+};
+
+void run_tap_dance_double(uint8_t i)
+{
+    tap_code16(pgm_read_word(&td_keymaps[td_keycode - TD_MIN][i]));
+    td_keycode = KC_TRANSPARENT;
+    td_timer = timer_read() + TAPPING_TERM;
+}
+
+bool process_tap_dance_double(uint16_t keycode, keyrecord_t *record)
+{
+    if (TD_MIN <= keycode && keycode < TD_MAX)
+    {
+        if (record->event.pressed)
+        {
+            if (td_keycode != keycode || timer_expired(td_timer))
+            {
+                td_keycode = keycode;
+                td_timer = timer_read() + TAPPING_TERM;
+            }
+            else
+                run_tap_dance_double(1);
+        }
+        return false;
+    }
+
+    if (td_keycode != KC_TRANSPARENT)
+        run_tap_dance_double(0);
+    return true;
+}
+
+void matrix_scan_user(void)
+{
+    if (td_keycode != KC_TRANSPARENT && timer_expired(td_timer))
+        run_tap_dance_double(0);
+}
+
+#endif
diff --git a/users/xulkal/custom_tap_dance.h b/users/xulkal/custom_tap_dance.h
new file mode 100644 (file)
index 0000000..3339880
--- /dev/null
@@ -0,0 +1,26 @@
+#pragma once
+#include "quantum.h"
+
+#ifdef TAP_DANCE_ENABLE
+
+#include "process_tap_dance.h"
+
+//Tap Dance Declarations
+enum {
+  COMM_QUOT = 0,
+  BACKSPACE,
+  DELETE,
+  DOT
+};
+
+#define TD_COMM TD(COMM_QUOT)
+#define TD_BSPC TD(BACKSPACE)
+#define TD_DEL TD(DELETE)
+#define TD_DOT TD(DOT)
+
+#else
+
+void run_tap_dance_double(uint8_t i);
+bool process_tap_dance_double(uint16_t keycode, keyrecord_t *record);
+
+#endif
index 5180992a884211e662cf1e468d25d0bfafd426bf..65dad8c63c94c6cebaa7ddc3b04a2241434ff761 100644 (file)
@@ -15,7 +15,7 @@
   */
 
 #define _________________QWERTY_L1_________________ KC_GESC,  KC_1,     KC_2,     KC_3,     KC_4,     KC_5
-#define _________________QWERTY_L2_________________ TD_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T
+#define _________________QWERTY_L2_________________ KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T
 #define _________________QWERTY_L3_________________ RIS_CAPS, KC_A,     KC_S,     KC_D,     KC_F,     KC_G
 #define _________________QWERTY_L4_________________ KC_LSPO,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B
 #define _________________QWERTY_L5_________________ KC_LCPO,  KC_LGUI,  LOWER,    RAISE,    KC_LALT,  KC_SPC
@@ -23,7 +23,7 @@
 #define _________________QWERTY_R1_________________           KC_6,    KC_7,      KC_8,     KC_9,     KC_0,     TD_BSPC
 #define _________________QWERTY_R2_________________           KC_Y,    KC_U,      KC_I,     KC_O,     KC_P,     KC_BSLS
 #define _________________QWERTY_R3_________________           KC_H,    KC_J,      KC_K,     KC_L,     KC_SCLN,  KC_ENT
-#define _________________QWERTY_R4_________________           KC_N,    KC_M,      TD_COMM,  KC_DOT,   KC_SLASH, KC_RSPC
+#define _________________QWERTY_R4_________________           KC_N,    KC_M,      TD_COMM,  TD_DOT,   KC_SLASH, KC_RSPC
 #define _________________QWERTY_R5_________________           KC_SPC,  KC_LEFT,   KC_UP,    KC_DOWN,  KC_RIGHT, KC_RCPC
 
 
index 5ba59965fb88b714983456147924bf8805979f40..115623caa44a7dbf6631f90010cf0264b024148e 100644 (file)
@@ -1,56 +1,58 @@
 #include "process_records.h"
-
-#ifdef TAP_DANCE_ENABLE
-//Tap Dance Definitions
-qk_tap_dance_action_t tap_dance_actions[] = {
-  [COMM_QUOT]  = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_QUOT),
-  [BACKSPACE] = ACTION_TAP_DANCE_DOUBLE (KC_BSPACE, LCTL(KC_BSPACE)),
-  [TAP_TAB] = ACTION_TAP_DANCE_DOUBLE (KC_TAB, LSFT(KC_TAB)),
-  [CTRL_MINUS] = ACTION_TAP_DANCE_DOUBLE (KC_LCTL, KC_MINS),
-  [CTRL_PLUS] = ACTION_TAP_DANCE_DOUBLE (KC_RCTL, KC_EQL)
-};
-#endif
+#include "custom_keycodes.h"
+#include "timer_utils.h"
 
 #if defined(RGB_MATRIX_ENABLE)
 extern void eeconfig_update_rgb_matrix_default(void);
 #endif
 
 #ifdef TRILAYER_ENABLED
-uint32_t layer_state_set_user(uint32_t state) {
-  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+uint32_t layer_state_set_user(uint32_t state)
+{
+    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 }
 #endif
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  static uint16_t reset_timer;
-  switch (keycode) {
-    case RGBRST:
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+    static uint16_t reset_timer;
+
+#ifndef TAP_DANCE_ENABLE
+    if (!process_tap_dance_double(keycode, record))
+        return false;
+#endif
+
+    switch (keycode)
+    {
+        case RGBRST:
+            {
 #if defined(RGBLIGHT_ENABLE)
-        if (record->event.pressed) {
-          eeconfig_update_rgblight_default();
-          rgblight_enable();
-        }
+                if (record->event.pressed)
+                {
+                    eeconfig_update_rgblight_default();
+                    rgblight_enable();
+                }
 #elif defined(RGB_MATRIX_ENABLE)
-        if (record->event.pressed) {
-          eeconfig_update_rgb_matrix_default();
-        }
+                if (record->event.pressed)
+                    eeconfig_update_rgb_matrix_default();
 #endif
-      return false;
-    case RESET:
-      if (record->event.pressed) {
-          reset_timer = timer_read();
-      } else {
-          if (timer_elapsed(reset_timer) >= 500) {
-              reset_keyboard();
-          }
-      }
-      return false;
+            }
+            return false;
+        case RESET:
+            {
+                if (record->event.pressed)
+                    reset_timer = timer_read() + 500;
+                else if (timer_expired(reset_timer))
+                    reset_keyboard();
+            }
+            return false;
   }
 
   return process_record_keymap(keycode, record);
 }
 
 __attribute__ ((weak))
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-  return true;
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record)
+{
+    return true;
 }
index 8a195df5cd3b5310f706e0c429635aaa6f45286f..701ef7e74f306fd2a37d47f8b936925ad9e105e6 100644 (file)
@@ -1,44 +1,6 @@
 #pragma once
 #include "quantum.h"
-
-#define RIS_ESC  LT(_RAISE, KC_ESC)
-#define RIS_CAPS LT(_RAISE, KC_CAPS)
-
-#define QWERTY DF(_QWERTY)
-
-#ifndef GAMELAYER_DISABLE
-#define GAME DF(_GAME)
-#else
-#define GAME KC_TRANSPARENT
-#endif
-
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-
-#ifdef TAP_DANCE_ENABLE
-#include "process_tap_dance.h"
-
-//Tap Dance Declarations
-enum {
-  COMM_QUOT = 0,
-  BACKSPACE,
-  TAP_TAB,
-  CTRL_MINUS,
-  CTRL_PLUS
-};
-
-#define TD_COMM TD(COMM_QUOT)
-#define TD_BSPC TD(BACKSPACE)
-#define TD_TAB TD(TAP_TAB)
-#define TD_LCTL TD(CTRL_MINUS)
-#define TD_RCTL TD(CTRL_PLUS)
-#else
-#define TD_COMM KC_COMM
-#define TD_BSPC KC_BSPACE
-#define TD_TAB KC_TAB
-#define TD_LCTL KC_LCTL
-#define TD_RCTL KC_RCTL
-#endif
+#include "custom_tap_dance.h"
 
 enum layer_number {
     _QWERTY = 0,
@@ -52,8 +14,4 @@ enum layer_number {
 #endif
 };
 
-enum custom_keycodes {
-  RGBRST = SAFE_RANGE
-};
-
 bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
index 6758f52f5ff767f27f34838b1e75ff4271db819e..50dc75d6158e7a23bcc1ee3d60e6692ed17ef186 100644 (file)
@@ -1,10 +1,13 @@
 SRC += xulkal.c \
-       process_records.c
+    process_records.c \
+    custom_tap_dance.c \
+    custom_encoder.c \
+    custom_oled.c \
+    timer_utils.c
 
 # Some usual defaults
 MOUSEKEY_ENABLE         = no    # Mouse keys (+4700)
 EXTRAKEY_ENABLE         = yes   # Audio control and System control (+450)
-TAP_DANCE_ENABLE        = yes   # Enable the tap dance feature. (+1100)
 
 ifneq ($(strip $(DISABLE_LTO)), yes)
   EXTRAFLAGS += -flto
diff --git a/users/xulkal/timer_utils.c b/users/xulkal/timer_utils.c
new file mode 100644 (file)
index 0000000..5f5d9a1
--- /dev/null
@@ -0,0 +1,12 @@
+#include "timer_utils.h"
+
+bool timer_expired(uint16_t last)
+{
+    return timer_read() - last < 0x8000;
+}
+
+bool timer_expired32(uint32_t last)
+{
+    return timer_read32() - last < 0x80000000;
+}
+
diff --git a/users/xulkal/timer_utils.h b/users/xulkal/timer_utils.h
new file mode 100644 (file)
index 0000000..7e2a0b7
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+#include "timer.h"
+#include <stdbool.h>
+
+bool timer_expired(uint16_t last);
+bool timer_expired32(uint32_t last);
index ae73599239b1dd3eba274cdc241fd217c8709a2e..9bc83b7de75aa56c9629b662a3b5b09f052f919f 100644 (file)
@@ -2,3 +2,6 @@
 
 #include "process_records.h"
 #include "layouts.h"
+#include "timer_utils.h"
+#include "custom_keycodes.h"
+#include "custom_tap_dance.h"
index df7039e09a059af511b82fe66718aee2e7a064f6..3df7c0b2ae71d22465bd8af1e17388ef176d4358 100755 (executable)
@@ -6,6 +6,8 @@ GENTOO_WARNING="This script will make a USE change in order to ensure that that
 
 SLACKWARE_WARNING="You will need the following packages from slackbuilds.org:\n\tarm-binutils\n\tarm-gcc\n\tavr-binutils\n\tavr-gcc\n\tavr-libc\n\tavrdude\n\tdfu-programmer\n\tdfu-util\n\tnewlib\nThese packages will be installed with sudo and sboinstall, so ensure that your user is added to sudoers and that sboinstall is configured."
 
+SOLUS_INFO="Your tools are now installed. To start using them, open new terminal or source these scripts:\n\t/usr/share/defaults/etc/profile.d/50-arm-toolchain-path.sh\n\t/usr/share/defaults/etc/profile.d/50-avr-toolchain-path.sh"
+
 if grep ID /etc/os-release | grep -qE "fedora"; then
        sudo dnf install \
                arm-none-eabi-binutils-cs \
@@ -155,6 +157,26 @@ elif grep ID /etc/os-release | grep -q slackware; then
                echo "Quitting..."
        fi
 
+elif grep ID /etc/os-release | grep -q solus; then
+       sudo eopkg ur
+       sudo eopkg it \
+               -c system.devel \
+               arm-none-eabi-gcc \
+               arm-none-eabi-binutils \
+               arm-none-eabi-newlib \
+               avr-libc \
+               avr-binutils \
+               avr-gcc \
+               avrdude \
+               dfu-util \
+               dfu-programmer \
+               python3 \
+               git \
+               wget \
+               zip \
+               unzip
+       printf "\n$SOLUS_INFO\n"
+
 else
        echo "Sorry, we don't recognize your OS. Help us by contributing support!"
        echo
index 2c6c62931fec1522335ecf5b63d58d8e88b4346e..554ec8b689656b86b2b7066ec99d7678cdfd6e23 100755 (executable)
@@ -1,5 +1,12 @@
 #!/bin/bash
 
+# if docker is installed - call make 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/qmk_firmware make "$@"
+  }
+fi
+
 # test force push
 #TRAVIS_COMMIT_RANGE="c287f1bfc5c8...81f62atc4c1d"
 
index d76030f8310fb7cd890699bcda53cb2be618ec15..25ed83fb0317a78889b4048551d8aa4d7ac42c6c 100755 (executable)
@@ -55,8 +55,29 @@ if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip build]"* ]] ; then
        # rm -f compiled/*.hex
 
        # ignore errors here
-  # In theory, this is more flexible, and will allow for additional expansion of additional types of files and other names
-  mv ../qmk_firmware/*_default.*[hb][ei][xn] ./compiled/ || true
+       # In theory, this is more flexible, and will allow for additional expansion of additional types of files and other names
+       mv ../qmk_firmware/*_default.*{hex,bin} ./compiled/ || true
+
+       # get the list of keyboards
+       readarray -t keyboards < .keyboards
+
+       # replace / with _
+       keyboards=("${keyboards[@]//[\/]/_}")
+
+       # remove all binaries that don't belong to a keyboard in .keyboards
+       for file in "./compiled"/* ; do
+               match=0
+               for keyboard in "${keyboards[@]}" ; do
+                       if [[ ${file##*/} = "${keyboard}_default.bin" ]] || [[ ${file##*/} = "${keyboard}_default.hex" ]]; then
+                               match=1
+                               break
+                       fi
+               done
+               if [[ $match = 0 ]]; then
+                       echo "Removing deprecated binary: $file"
+                       rm "$file"
+               fi
+       done
 
        bash _util/generate_keyboard_page.sh
        git add -A
index 6c48f898ce5a2295bd9e452b08e20ef38facce55..3be4afff7a4ae81b40c427b6fb666c476e30f6e6 100644 (file)
@@ -19,4 +19,11 @@ if [ "$BRANCH" != "master" ] && [ "$NUM_IMPACTING_CHANGES" == "0" ]; then
     exit 0
 fi
 
+# if docker is installed - call make 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/qmk_firmware make "$@"
+  }
+fi
+
 make test:all